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

  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/深圳多测师软件与技术服务有限公司

发表回复

相关推荐

《黄老饼梦游惊奇》评测:一款无厘头冒险的“3A黄游”

独特的大坐机制为玩家带来爽快的游戏体验,多样的特性、道具Build又极大丰富游戏内容,各种无厘头搞笑内容也博玩家在战斗之 ...

· 7秒前

《孙子兵法·三十六计》

【三十六计·内容】 第一计:瞒天过海 第二计:围魏救赵 第三计:借刀杀人 第四计:以逸待劳 第五计:趁火打劫 第六计:声东 ...

· 2分钟前

耳鳴服藥日記,不定期更!

我今年28歲,體制內工作,耳鳴從14歲開始,至今已14年,耳鳴類似電流聲,蟬鳴的頻率,對聽力沒有影響,中間去過第四軍醫...

· 5分钟前

装修设计必做 | 洗墙灯效果真的太赞了~

想做简约风格的家装但光秃秃的白墙看起来更像是叙利亚风墙面过于单调又不想加些奇奇怪怪的装饰如何做才能让大白墙变得有设计 ...

· 5分钟前

湖南黑茶十大品牌,湖南黑茶哪個牌子正宗?

很多茶友沒有專業的知識,所以在購買湖南黑茶時,大多會認準知名的品牌購買。要說黑茶哪個牌子正宗,湖南黑茶十大品牌如下:1...

· 7分钟前