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》

转载于:https://www.cnblogs.com/ldxsuanfa/p/10579519.html

单元測试中 Right-BICEP 和 CORRECT相关推荐

  1. 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...

  2. atitit.jndi的架构与原理以及资源配置and单元測试实践

    atitit.jndi的架构与原理以及资源配置and单元測试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin  <database> ...

  3. 太白---落燕纷飞第一重 Android单元測试Instrumentation和irobotium

    PS:叫太白---落燕纷飞纯粹好玩(天涯明月游戏画面感,打击感,碰撞尽管做的不尽人意,可是太白这个职业还是不错,用作开头,,做个旁白而已). 这里的单元測试不管是instrumentation还是ir ...

  4. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  5. 使用maven运行单元測试总结

    maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...

  6. 【Android进阶】Junit单元測试环境搭建以及简单有用

    单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...

  7. 利用Continuous Testing实现Eclipse环境自己主动单元測试

    当你Eclipse环境中改动项目中的某个方法时,你可能因为各种原因没有执行单元測试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...

  8. Android 进行单元測试难在哪-part3

    原文链接 : HOW TO MAKE OUR ANDROID APPS UNIT TESTABLE (PT. 1) 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.de ...

  9. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试

    Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...

最新文章

  1. 机器学习系列22:异常检测
  2. KSQL和Flink SQL的比较
  3. sql 实现两行数据作差
  4. JavaWeb JDBC初步连接和JDBC连接规范化
  5. windows + Linux 自定义模板配置 怎么使用自定义规范管理器
  6. python编程(数据库操作)
  7. linux ls -l 日期乱码,请教-关于ls-l的日期显示问题
  8. charset参数 sqluldr2_利用sqluldr2导出数据和sqlldr导入数据的方法
  9. php sql注入防御方法,php怎么防御sql注入
  10. Ubuntu下载anaconda教程(全过程)
  11. 谁没有迟疑 彷徨的时候 --leo谈应届生求职 1
  12. NVDIMM 知识点
  13. 详解:S锁(读锁)和X锁(写锁)
  14. 安装更强大更美观的zsh,配置oh my zsh及插件
  15. Android软件开发之盘点界面五大布局(十六)
  16. 【精选模板】古风汉服影楼摄影PSD源文件,绝美的素材,附带预览图
  17. 使用SSD mobilenet训练自己的数据集
  18. 详解 js 函数中的 arguments
  19. OpenGL---PBO
  20. 英语口语116之每日十句口语

热门文章

  1. 机器学习训练素材_广告素材在编码训练营中导航的5条提示
  2. python之父考虑重构python解释器_Python之父考虑重构Python解释器
  3. 掌握4点职场技巧,打破测试人中年危机
  4. 【云计算学习教程】云计算是什么?它有哪些形式?
  5. 木瓜移动:黑五网一爆冷跨境电商如何破局?
  6. 如何用计算机弹出斗地主的声音,玩斗地主没声音电脑瞎出牌。我点的没有.怎么办?...
  7. 重新思考人体姿态估计 Rethinking Human Pose Estimation
  8. Windows10+Ctex+winedt10.3
  9. 详解与重构hyman《Android SurfaceView实战 打造抽奖转盘》
  10. 西门子bop20显示电流_SIEMENS/西门子BOP20基本操作员面板使用方法说明