Beej's Bit Bucketa day agohttp://beej.us/blog/data/fuzz-testing/模糊测试涉及向代码输入随机数据以发现漏洞,尤其是边界情况。它通过在不同条件下验证软件的正确性来让人安心。对于循环队列,模糊测试会在多轮中随机化入队和出队操作。测试独立跟踪队列状态,以验证队列的内部逻辑(满/空计数、出队值)。模糊测试能够捕获像循环回绕这样的边界情况,而无需显式编写代码处理它们。作者提供了一个带有断言和汇总统计的循环队列模糊测试的C语言实现。建议记录日志以便复现崩溃。
<antirez>a day agohttp://antirez.com/news/168利用AI进行自动编程可以加速软件开发,但通常生成的代码在结构质量上不如最佳手写代码,不过它可以达到或超越普通人编写的代码水平。质量和开发速度之间存在权衡;使用AI可以将项目时间从数月缩短到数周,但质量可能会受到影响。在软件质量保证和测试中,大语言模型实现了一种新的自动化形式,这种形式不会损害质量,并且克服了传统测试的局限性,例如覆盖缺口和集成复杂性。作者描述了一种方法,其中通过Markdown文件指示AI代理对新发布进行手动质量检查,包括检查提交、运行特定测试以及识别受影响的区域。这种方法可以从用户角度评估软件,捕捉到令人惊讶、未记录或草率的功能,这些功能否则需要人工检查才能发现。自动质量保证有潜力提高新发布的质量标准,并弥补通过自动编程高速生成的低质量代码的不足。
Ten ways a check passes while the thing it checks is broken7 days agohttps://phronesis.world/papers/ways-of-checking/从未失败的检查是不可靠的——故意破坏它,以确认它确实会失败。在后果发生的层面进行检查(例如,渲染后的页面,而非仅源代码),因为简单的检查会遗漏失败。可靠性不等于有效性:测量结果可能一致,但测量的内容有误;测试在不相关变换下的不变性。测试数据若已知假设则缺乏说服力;应使用早于问题产生的材料,以避免确认偏误。设计实验以区分效应与其模仿物,而不仅仅是检测效应。沉默含义模糊:没有错误并不代表成功;需要明确的成功信号(例如,状态码201、存储记录)。依据主张进行断言(例如,文档中的句子),而非依据行为,因为行为可能正确而主张已偏离。验证不可变产物(部署URL、提交记录),而非可能指向缓存或旧版本的友好别名。让工具拒绝静默成功:偏好能在未匹配模式时报错的编辑器,并对批量更改断言匹配计数。保持人工参与——唯一没有固定语言形式的工具能发现自动化检查遗漏的问题。
TDD is dead. Long live testing. (2014)13 days agohttps://dhh.dk/2014/tdd-is-dead-long-live-testing.html测试优先原教旨主义最初是一种改善软件实践的邀请,但后来逐渐演变成僵化有害的教条。作者在尝试严格遵守测试优先原则的过程中,经历了一段由骄傲到绝望的循环,并常常在公开场合掩饰未遵守原则的行为。TDD让作者认识到自动化回归测试的重要性,但如今作者已超越其设计教条,不再践行测试优先原则。作者建议重新平衡测试重点,从单元测试转向系统测试,因为过度的单元测试可能导致架构过于复杂。Rails有助于向系统测试过渡,比如使用Capybara等工具,但要社区从TDD的认同中解脱出来还需要时间。作者警告不要陷入另一种测试宗教,主张在继承TDD贡献的同时,以更平衡的方式继续前行。
My quest to see all of Tetrisa month agohttps://antithesis.com/blog/2026/tetris-quest/Antithesis团队的目标是通过达到“重生”(关卡计数器从255翻转为0)来“击败”俄罗斯方块,这一目标受到那些已超越传统人类极限的青少年玩家的启发。他们采用了随机输入、游戏状态快照以及目标函数的模糊测试方法,来引导探索进程,并进化出模拟人类策略(如为四行消除做好准备)的战术。行数计算中的一个关键错误(误解了BCD编码)导致进程在160级停滞,通过修正代码,他们得以实现重生并达到人类纪录水平。在此过程中,他们在深层次遇到了各种故障,如调色板问题、游戏卡顿以及像“FBFBFB”分数故障这样的奇特错误,这凸显了软件中不可预测的边角情况。该项目展示了自动化测试(如Antithesis)如何探索软件的边缘情况,利用适者生存的策略来发现错误并实现复杂目标。