代码覆盖的15种典型情景
作者:网络转载 发布时间:[ 2012/10/25 10:57:48 ] 推荐标签:
10、被拒绝的馈赠
在接口/抽象类定义的时候,有时候定义的一些方法子类并没有都实现,即常说的被拒绝的馈赠(Refused Bequest),这种问题如果是为了短期扩展需求多加了一些方法也可接受,否则还是需要重新继承体系设计。
提示:子类未使用“馈赠”,无需覆盖,需重新审视继承体系结构。
11、代码覆盖工具未做合并
做代码覆盖时,往往工具本身不支持“合并”的功能,这导致以下问题存在:
时间上:
例如对于拥有cache的系统: 系统经过一段时间运行后,重新测试得到的代码覆盖往往不包括cache miss的情况。
手工测试问题:每次统计都需要重新完成全部手工测试,否则将丢失数据。
空间上:
负载均衡:现在大多系统应用都采用负载均衡技术,如果测试时间不够长且只统计一台系统的代码覆盖情况,往往不全面。
提示:代码覆盖本身要支持“合并”功能,对多个系统、不同时间的数据进行合并,才能覆盖的完整全面。
12、系统逻辑重复
这里可分为两种情况:
组件之间重复:上层系统可能会对数据合法性做检验,但是下层系统出于系统的独立性目标,也可能对数据做二次校验,但是作为一个完整系统进行end-to-end测试时,无法覆盖二次校验的代码;针对这种情况,需要拆开成独立组件进行测试。
组件内部重复:同一组件内多层重复逻辑确实可以纠正代码,例如在对于某个数据做多次同一类型校验,这种问题常出现于多人协同编码又缺乏沟通的情况中。
提示:逻辑重复导致的部分未覆盖要分辨是组件之间还是组件内部冗余,组件之间则需要覆盖,组件内部则要修改代码。
13、代码写法
有时候某些代码的写法,也会导致无法覆盖,例如对于代码调用顺序:多个类调用读取配置文件,而稍晚些调用的再次判断配置文件是否初始化,自然为已初始化。再如对于单例,某些代码写成这样:
private static SingleInstance INSTANCE = new SingleInstance();
public static SingleInstance getInstance() {
if (INSTANCE == null) {
INSTANCE = new SingleInstance();
}
return INSTANCE;
}
提示:代码写法造成的未覆盖,需要审查下是代码问题。
14、隐式的分支
当代码中含有隐式的分支时,往往很难覆盖,例如上文提到的断言assert,貌似只有一句,但是即使启用断言仍然无法覆盖,例如下例还是显示黄色:分支未覆盖。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11