单元测试之覆盖

讲覆盖是为了引入覆盖率, 而覆盖率是指用于确定测试所执行到的覆盖项(有语句,路径, 条件, 参数等等)的百分比, 可以在测试分析报告中作为量化指标的依据. 最终是探索的问题:How much testing is enough?

通过对test case覆盖率的分析, 或许会发现test case没有测试到的区域, 进而添加新的test case来对它测试; 也或许会发现多余的test case, 可以删掉. test case是为了保证产品的质量, 而test case覆盖率是为了保证test case的有效性. 当然, 覆盖率不是目的, 只是手段, 为了保证覆盖率而花费更多的资源通常是不可取的, 通常在有很多判定的程序中效果比较好.

结构化测试和功能性测试

结构化测试, 对应的为白盒测试技术, 基于代码,来比较程序的执行行为和规格说明的行为的差异. 功能性测试,  对应的为黑盒测试技术, 基于功能,来和规格说明的所要完成的功能比较,找出差异. 

下面讨论的是结构化测试的覆盖度量方法, 相应的测试工具Junit(基于java).

(1)语句覆盖(Statement Coverage),也称为line coverage, segment coverage和basic block coverage(若一个代码单元没有分支,那么和statement coverage一样)

选择足够多的test case, 使得程序中的每一个可执行语句至少执行一次.

优点是不需要对源代码进行处理, 直接做就行. 缺点是对控制结构不敏感, 毕竟bug主要都是在控制流中,而不是计算中.

(2)判定覆盖(Decision Coverage), 也称为branch coverage, all-edges coverage等

选择足够多的test case, 使得程序中的每个判定(判定和条件不同, 一个判定可以包含一个或多个条件)至少取一次true和false, 即真分支和假分支都要至少执行一次.

优点是略好于statement coverage. 缺点是忽视了在boolean表达式中运算符短路操作所带来的忽视分支的问题.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值