单元測试中 Right-BICEP 和 CORRECT
My Blog:http://www.outflush.com/
在单元測试中,有6个总结出的值得測试的方面,这6个方面统称为 Right-BICEP。通过这6个方面的指导。能够较全然的測试出代码中的bug。本文就是简单的介绍 Right-BICEP 究竟指的哪6个方面,以及当中边界測试中的 CORRECT 助记短语。
- Right – Are the results right? 结果是否正确?
- B – are all the boundary conditions correct? 全部边界条件都是正确的么?
- I – can you check the inverse relationships? 能否检查一下反向关联?
- C – can you cross-check results using other means? 能够使用其它手段交叉检查一下结果?
- E – can you force error conditions to happen? 能否够强制错误条件产生?
- P – are performance characteristics within bounds?
是否满足性能要求?
Right Result
对于測试而言,最首要的任务就是查看所期望的结果是否正确。
Boundary Conditions 边界条件
代码中的bug大多出如今边界条件附近。
一些须要考虑的边界条件:
- 全然伪造或者不一致的输入数据
- 格式错误的数据
- 空值或不完整的值
- 一些与意料中的合理值相去甚远的值
- 要求一个无反复值的序列,可是传入一个有反复值的序列
- 要求一个有序许刘。可是传入一个无需序列
- 事件到达的次序是错误的。或碰巧和期望的次序不一致
边界条件助记短语 CORRECT:
- Conformance(一致性):值是否和预期一致。能够理解为当输入并非预期的标准数据时,被測试方法能否够正确输出预期结果(或抛出异常)。
- Ordering(顺序性):值是否像应该的那样是无序或有序的。
- Range(区间性):值是否位于合理的最小值和最大值之间。
- Reference(依赖性):代码是否引用了一些不在代码本身控制范围之内的外部资源,当这些外部资源存在或不存在、满足或不满足时,代码能否够产生对应的预期结果。
- Existence(存在性):值是否存在(是否为null、0、在一个集合中)。測试方法能否够处理值不存在的情况。
- Cardinatity(基数性):是否恰好有足够的值。这里的基数指的是计数。測试方法能否够正确计数,并检查最后的计数值。
- Time(相对或绝对时间性):全部事情的发生是否是有序的、是否在正确的时刻、是否恰好及时。与时间相关问题有:相对时间(时间上的顺序)、绝对时间(消耗的时间和钟表上的时间)、并发问题。
比如:方法调用的时间顺序、代码超时、不同的本地时间、多线程同步等。
- 注意:在考虑边界条件时,须要同一时候考虑方法的传入參数以及其内部数据。
Inverse Relationships 检查反向关联
即使用反向的逻辑关系验证某些方法。
比方检查一个计算平方根的函数。能够通过对其结果进行平方来检查。可是要注意的是,应该使用不同与被測试方法的原理来编写反向測试,由于假设原理错误可能会使得測试与被測试方法都包括bug。
Cross-Check 使用其它手段交叉检查结果
通过其它经过验证的途径来測试当前被測试方法的结果是否正确
比如被測试方法存在多个备用算法,这时选择被測试方法没有使用的,而且已经经过验证的算法在測试方法中使用。最后比較測试算法和被測试方法的结果是否一致。
另外也能够通过一些数据从側面验证被測试方法结果是否正确。比如图书馆中借出的书籍数和在库的书籍数的总和是不变的,这时便能够使用交叉检查,即使用一种数量检查还有一种数量。
Force Error 强制产生错误
通过强制引发一些现实中的错误来測试代码是怎样处理这些错误,这些现实错误可能是:内存耗光、硬盘用满、时钟错误、断网等。
Performance 性能特性
即測试在数据量逐渐添加的时候。性能曲线能否达到预期(稳定)。
參考资料:《单元測试之道Java版:使用JUnit》
单元測试中 Right-BICEP 和 CORRECT的更多相关文章
- android中单元測试中的断言assert的使用与扩展
首先看一组对照,比方说我们要測试的结果是一个Linearlaout AssertJ Android: assertThat(layout).isVisible() .isVertical() .has ...
- 聊聊单元測试(一)——EasyMock
一.单元測试是保证软件质量的重要方法. 单元測试是对系统中某个模块功能的验证,但我们总会遇到这样那样的问题,导致測试代码非常难编写.最直接的一个原因便是强耦合关系,被測试者依赖一些不easy构造,比較 ...
- 在Eclipse中使用JUnit4进行单元測试(0基础篇)
本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...
- OpenStack中给wsgi程序写单元測试的方法
在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...
- maven多module项目中千万不要引入其它模块的单元測试代码
本文出处:http://blog.csdn.net/chaijunkun/article/details/35796335,转载请注明. 因为本人不定期会整理相关博文,会对对应内容作出完好. 因此强烈 ...
- Android studio及eclipse中的junit单元測试
转载请标明出处:http://blog.csdn.net/nmyangmo/article/details/51179106 前一段时间有人问我单元測试的相关内容,我稍作总结做日志例如以下: 由于我接 ...
- 利用Continuous Testing实现Eclipse环境自己主动单元測试
当你Eclipse环境中改动项目中的某个方法时,你可能因为各种原因没有执行单元測试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
随机推荐
- cocos3.x新建项目
cocos new -p FishRunMan com.game.simple -l cpp
- Exception:System.Threading.SemaphoreFullException
ylbtech-Error-Exception-C#: System.Threading.SemaphoreFullException 1.A,异常类型返回顶部 1,异常名称System.Thr ...
- Codis连接异常问题处理
报错信息可以看出:由于没有正常的关闭连接,导致连接异常 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Unex ...
- 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(一) table、entity、service、dao
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第二十一章 授予身份与切换身份(一) 1.使用场景 某个领导因为某 ...
- 几种Tab的实现方法
转载请注明出处,谢谢! 学了这久Android,今天来总结一下几种Tab的实现方法 实现方法一: ViewPage来实现 首先创建一个top.xml布局和一个bottom.xml布局,然后在主界面中通 ...
- JAVA Eclipse如何安装Swing
查看自己的Eclipse版本 打开WINDOWBUILDER的下载页面,找到自己对应版本的下载地址,注意只是一个下载地址,不是要下载东西 http://www.eclipse.org/window ...
- CSS环绕球体的旋转文字-3D效果
代码地址如下:http://www.demodashi.com/demo/12482.html 项目文件结构截图 只需要一个html文件既可: 项目截图: 代码实现原理: 该示例的实现过程很简单,主要 ...
- java 接口回调
学习自:http://blog.csdn.net/xiaanming/article/details/8703708/ http://hellosure.iteye.com/blog/1130176 ...
- Redis(九):使用RedisTemplate访问Redis数据结构API大全
RedisTemplate介绍 spring封装了RedisTemplate对象来进行对redis的各种操作,它支持所有的 redis 原生的api. RedisTemplate在spring代码中的 ...
- 数据结构(Java语言)——Stack简单实现
栈是限制插入和删除仅仅能在一个位置上进行的表.该位置是表的末端,叫做栈的顶top.对栈的基本操作有进栈push和出栈pop,前者相当于插入.后者这是删除最后插入的元素. 栈有时又叫先进先出FIFO表. ...