码迷,mamicode.com
首页 > 其他好文 > 详细

单元测试之道学习感受

时间:2020-10-18 17:08:49      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:程序   div   nali   耦合   null   速度   并发   区间   单元   

《单元测试之道java》这本书翻阅后,对编程又有了进一步了解。

      单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大大减少你花在调试上面的时间。单元测试其实也是一种工具,通过单元测试可以更加快捷的找到出bug的地方,对于代码量大的工程能起到很大的作用。在代码的调试、修改的工程中能为我们提供非常大的帮助。除了代码之外,还有很多东西需要被测试:凌乱的类名,程序库的位置,还要确认代码能通过编译。其实在调试一个复杂测试的同时,就不需调试这些复杂的集成问题了。所有的代码,测试的和产品的,都应该是简洁和清晰的。尤其是测试代码,更应该具有很好的可读性,哪怕性能差一些或者形式啰嗦一些。

书中介绍了6个值得测试的具体部位,统称为Right-BICEP。分别为:Right:结果是否正确;B:是否所有的边界条件都是正确的;I:能查一下反向关联吗;C:能用其他手段交叉检查一下结果吗;E:是否可以强制错误条件发生;P:是否满足性能要求。

1.边界条件(详见下文CORRECT边界条件):找边界条件是单元测试中最有意义的工作之一,因为bug普遍出现在边界上。

2.反向关联:同时编写原方法和反向测试时,一些bug可能会被两个函数中都出现的错误所掩盖。在可能的情况下,应该使用不同的原理来编写反向测试。

3.交叉检查:通常计算一个量会有一种以上的算法。程序员机遇运行效率或其他的特性来选择算法。在测试中,可以使用剩下的一个来交叉测试结果。当确实存在一种经过验证并能完成任务的算法,只是由于速度太慢或者灵活性差没有在产品代码中使用,这种交叉检查的技术非常有效。

CORRECT边界条件:

1.一致性(conformance):当期望的或产生的数据必须符合某种特定的格式;

2.有序性(ordering):考虑数据的顺序或者在一个很大的数据集合中某一数据的位置。

3.区间性(range):一个变量所属的类型的取值范围比正常需要或者想要的更加宽广。在一个好的面向对象设计中,通常不会使用一个原生类型(如int和Integer)来存储一个具有边界的值。

4.引用/耦合性(reference):对于类的状态、其他对象的状态等需要做一些假设,程序员就需要对代码进行测试,保证在假设未满足的情况下运行良好。

5.存在性(existence):面对一些不存在的数据,Java库的许多方法会抛出某种异常,但是要调试一个隐藏在库深处的运行期异常很困难。常见的陷阱在—null、0、空字符串和其他存在性相关问题。

6.基数性(cardinality):这里的基数主要强调的是计数,偶发性的计数错误会非常严重。所以必须要检查测试函数是否能正确计数,并且检查最后的计数值。

7.时间性(time):要充分考虑与时间相关的问题——相对时间(时间上的顺序)、绝对时间(消耗的时间和钟表上的时间)、并发问题。其中,相对时间还包括代码中的超时问题。但是最棘手的是并发访问和同步访问问题。书中明确指出:编写的大多数代码,将运行在多线程的环境中。

通过学习这本书,我对单元测试有了更深的理解和认识。单元测试是一个充满挑战和能够提升个人能力的任务和工作,里面的知识也是很多而且复杂的。但是同时单元测试在项目中非常重要。让我进一步认识单元测试的作用,和底层的工作原理,我会认真学习,不断提升自己的个人能力,强化学习测试技术,为以后的学习和工作打好基础。



单元测试之道学习感受

标签:程序   div   nali   耦合   null   速度   并发   区间   单元   

原文地址:https://www.cnblogs.com/shengnan555/p/13835159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!