怎样才能保证单元测试效果

网友投稿 734 2022-11-19

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

怎样才能保证单元测试效果

衡量测试效果的基本指标是白盒覆盖率,即统计测试对代码逻辑单位的覆盖状况。代码的逻辑单位主要有:语句(块),条件、判定、分支、路径。常用的白盒覆盖有六种:语句覆盖、条件覆盖、分支覆盖、判定条件覆盖、修正判定条件覆盖、和路径覆盖。每种覆盖都有它的局限性,因此,实践中要多种覆盖组合应用。

除MC/DC外,其他覆盖率的计算公式很简单:

覆盖率 = 已覆盖逻辑单位数 / 全部逻辑单位数 * 100%,如:

语句覆盖率 = 已覆盖语句块数 / 全部语句块数 * 100%;

C/DC = (已覆盖判定数 + 已覆盖条件数) / (全部判定数 + 全部条件数) * 100%,这里的判定数和条件数是指条件和判定计算结果,即判定值和条件值。

修正判定条件覆盖,即MC/DC是欧美航空标准。MC/DC主要用于检测判定内的条件之间的关系是否正确,对逻辑操作符&&和||是相当敏感的,但是并不检查从函数入口到出口的代码组合的覆盖,缺陷还是相当明显的。路径覆盖检查入口到出口的各种代码组合的覆盖,显然,MC/DC和路径覆盖的组合,才是最强的覆盖指标。

统计覆盖率的一般方法是插装,即在被测代码中插入监视代码,监视执行状况。监视代码必须不影响被测代码本身的功能逻辑。

工具可以将覆盖状况清晰标示出来,语句覆盖、条件覆盖、MC/DC覆盖可以在代码中标示,分支覆盖和路径覆盖可以在代码的逻辑结构图中标示。如上图,红色背景的是未覆盖的语句。条件前面的T,表示条件的真值未覆盖。条件前面的F,表示条件的假值未覆盖。条件前面的M,表示MC/DC未覆盖,也就是说,这个条件没有独立影响判定结果。红色背景的是未覆盖的分支。未覆盖的路径用红色画出。

2、多角度保证测试效果

对于代码质量要求很高的项目来说,仅有白盒覆盖是远远不够的。白盒覆盖不能发现代码缺失,白盒覆盖基于现有代码,如果代码不存在,当然不能发现。为了检测代码缺失,需要人工对测试数据进行检查。白盒覆盖也不能发现用例未反映功能。如果设计用例时,测试员不了解代码的功能,通过阅读代码来设计用例,这叫跟着代码走,这样测试的话,再高的覆盖率也没有意义。这也从另一个角度说明了自动用例的局限性,完全由工具自动生成的用例,效果显然还比不上跟着代码走。

开发当中还有一个特点,也是我们要注意的,就是程序员和测试员都容易遗漏边界和非法输入。程序员未考虑某些输入,就会造成代码缺失,白盒覆盖不能发现,如果测试员也漏掉,这种错误就发现不了。不过幸运的是,边界和非法输入容易产生的是极端错误,如崩溃、超时,自动生成的边界测试用例正好可以捕捉这类错误。

通过前面的分析,我们可以知道应该从哪些角度保证测试效果。黑盒、白盒、自动应该相结合。

黑盒角度,应该将测试数据分类集中起来,这样便于人工检查。如上图,每个参数或者其他输入取了什么值,哪些组合已经覆盖,都会自动集中起来,这样人工检查就很方便了。

白盒方面,应该统计覆盖率,并且找出遗漏用例实现高覆盖。这在前文已经讲过了,这里不再重复。

自动方面,由工具自动生成用例来捕捉边界和非法输入产生的极端错误。根据预设值自动生成用例是简单技术,预设值一般是可以修改的,如上图。不要指望主要依靠自动生成的用例来完成测试,自动用例的合理用途是作为人工用例的补充,检测极端错误。

上一篇:性能测试新手之找不到测试点
下一篇:白盒测试动态测试之白盒单元测试
相关文章

 发表评论

暂时没有评论,来抢沙发吧~