1、衡量测试效果的基本指标:白盒覆蓋
衡量测试效果的基本指标是白盒覆蓋率,即统计测试对代码逻辑单位的覆蓋状况。代码的逻辑单位主要有:语句(块),条件、判定、分支、路径。常用的白盒覆蓋有六种:语句覆蓋、条件覆蓋、分支覆蓋、判定条件覆蓋、修正判定条件覆蓋、和路径覆蓋。每种覆蓋都有它的局限性,因此,实践中要多种覆蓋组合应用。
除MC/DC外,其他覆蓋率的计算公式很简单:
覆蓋率 = 已覆蓋逻辑单位数 / 全部逻辑单位数 * 100%,如:
语句覆蓋率 = 已覆蓋语句块数 / 全部语句块数 * 100%;
C/DC = (已覆蓋判定数 + 已覆蓋条件数) / (全部判定书 + 全部条件数) * 100%,这里的判定数和条件数是指条件和判定计算结果,即判定值和条件值。
修正判定条件覆蓋,即MC/DC是欧美航空标准。MC/DC主要用于检测判定内的条件之间的关系是否正确,对逻辑操作符&&和||是相当敏感的,但是并不检查从函数入口到出口的代码组合的覆蓋,缺陷还是相当明显的。路径覆蓋检查入口到出口的各种代码组合的覆蓋,显然,MC/DC和路径覆蓋的组合,才是最强的覆蓋指标。
统计覆蓋率的一般方法是插装,即在被测代码中插入监视代码,监视执行状况。监视代码必须不影响被监视代码本身的功能逻辑。
工具可以将覆蓋状况清晰标示出来,语句覆蓋、条件覆蓋、MC/DC覆蓋可以在代码中标示,分支覆蓋和路径覆蓋可以在代码的逻辑结构图中标示。如上图,红色背景的是未覆蓋的语句。条件前面的T,表示条件的真值未覆蓋。条件前面的F,表示条件的假值未覆蓋。条件前面的M,表示MC/DC未覆蓋,也就是说,这个条件没有独立影响判定结果。红色背景的是未覆蓋的分支。未覆蓋的路径用红色画出。
2、多角度保证测试效果
对于代码质量要求很高的项目来说,仅有白盒覆蓋是远远不够的。白盒覆蓋不能发现代码缺失,白盒覆蓋基于现有代码,如果代码不存在,当然不能发现。为了检测代码缺失,需要人工对测试数据进行检查。白盒覆蓋也不能发现用例未反映功能。如果设计用例时,测试员不了解代码的功能,通过阅读代码来设计用例,这叫跟着代码走,这样测试的话,再高的覆蓋率也没有意义。这也从另一个角度说明了自动用例的局限性,完全由工具自动生成的用例,效果显然还比不上跟着代码走。
开发当中还有一个特点,也是我们要注意的,就是程序员和测试员都容易遗漏边界和非法输入。程序员未考虑某些输入,就会造成代码缺失,白盒覆蓋不能发现,如果测试员也漏掉,这种错误就发现不了。不过幸运的是,边界和非法输入容易产生的是极端错误,如崩溃、超时,自动生成的边界测试用例正好可以捕捉这类错误。
通过前面的分析,我们可以知道应该从哪些角度保证测试效果。黑盒、白盒、自动应该相结合。
黑盒角度,应该将测试数据分类集中起来,这样便于人工检查。如上图,每个参数或者其他输入取了什么值,哪些组合已经覆蓋,都会自动集中起来,这样人工检查就很方便了。
白盒方面,应该统计覆蓋率,并且找出遗漏用例实现高覆蓋。这在前文已经讲过了,这里不再重复。
自动化方面,由工具自动生成用例来捕捉边界和非法输入产生的极端错误。根据预设值自动生成用例是简单技术,预设值一般是可以修改的,如上图。不要指望主要依靠自动生成的用例来完成测试,自动用例的合理用途是作为人工用例的补充,检测极端错误。
如需了解更多测试技术信息请关注:https://www.duoceshi.cn/深圳多测师软件与技术服务有限公司