2.1 为什么一般不推荐在单元测试中使用随机数增加测试的真实性?
原文出自《构建之法》第 2 章 2.1.2 —— 好的单元测试标准
问:如果用随机数以增加测试的真实性,好么?
答:一般情况下不好,如果某个随机数导致程序出错,但是下一次运行又不能重复这一错误,则于事无补。我们还是要用随机数等办法「增加测试的真实性」,但不是在单元测试中。单元测试不能解决所有问题,不必期望它会发现所有的缺陷。
在结对编程中,我和队友使用了包含随机数的单元测试用例。正如我在学期开始分析的那样,随机数是由随机数种子seed生成的,我们可以在每次单元测试开始时,记录生成随机数的种子seed。当某个数据导致程序出错时,我们只需要通过追踪seed即可复原完整的输入。
此外,在学期开始时我还有如下观点:
我认为随机最大的问题不在于不可复现,而在于其输出也是随机的。对于预先给定的几个单元测试输入,我们可以根据模块的功能定义,分别手工构造其相应的输出。但对于随机的输入数据,我们只能通过另一个程序来模拟运行的情况并给出理论上正确的输出。但这样一来,如何确保模拟程序本身是绝对正确的呢?我认为这才是在单元测试中使用随机数的最大问题。
在结对编程中,我的待测试程序本身使用了状压DP、剪枝等多种优化。因此我另外实现了一个朴素的DP方法,来保证对拍测试的正确性。
————————————————
版权声明:本文为CSDN博主「wangxiaoge2001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangxiaoge2001/article/details/131262974
相关推荐
程序员为什么不写单元测试?[1]
程序员为什么不写单元测试?[1]单元测试工具赛门铁克误杀门事件在一片争议声中落下了帷幕,但是它身后隐蔽的问题还远未结束,诺顿误杀彰显测试价值的回归,同时也向广大的程序员们敲响了警钟,不做单元测试的程序员在未来发展中绝对无路可走,以下是笔者的 程序员为什么不写单元测试?[1] 单元测试工具 赛门铁克误杀门事件在一片争议声中落下了帷幕,但是它身后隐蔽的问题还远未结束,诺顿误杀彰显测试价值的回归,同时也向广大的程序员们敲响了警钟,不做单元测试的程序员在未来发展中绝对无路可走,以下是笔者的一些分析。 一、为了单元测试而写单元测试 最近笔者曾经做过一次“程序员在项目开发中编写单元测试的情况”的
软件工程领域单元测试的测试代码游戏开发测试要点
本文旨在为游戏开发者和软件工程师提供全面的游戏单元测试指南,涵盖从基础概念到高级实践的完整知识体系。我们将重点讨论游戏开发中特有的测试挑战和解决方案。本文首先介绍游戏单元测试的基本概念,然后深入探讨技术细节,最后提供实战案例和工具推荐。文章采用循序渐进的方式,帮助读者建立完整的知识体系。单元测试:对软件中最小的可测试单元进行检查和验证测试驱动开发(TDD):先写测试再实现功能的开发方法模拟对象(Mock):用于替代真实对象的测试替身测试覆盖率:代码被测试覆盖的程度指标AI辅助测试自动生成测试用例。
深入分析mysql为什么不推荐使用uuid或者雪花id作为主键
主要介绍了深入分析mysql为什么不推荐使用uuid或者雪花id作为主键,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
不使用Math.random方法生成随机数(随机数生成器)
不调用Math.random方法产生自己的随机数,现代计算机运行速度很快,在主线程等待一定毫秒数时,其他线程就会执行run方法中的while循环,一般会执行数十万次
Python编程实现生成特定范围内不重复多个随机数的2种方法
主要介绍了Python编程实现生成特定范围内不重复多个随机数的2种方法,涉及Python基于random生成随机数的常见操作技巧,需要的朋友可以参考下


