覆盖率测试的几种方法
军用软件对覆盖率测试有明确的要求,比如语句覆盖率要达到100%,分支覆盖率要达到100%。那么这些覆盖率测试是怎么做的呢?
首先我们要明确的是,覆盖率测试运用的是白盒测试技术,具体的测试技术包括代码检查法,逻辑覆盖法,基本路径测试法,静态结构分析法等。
代码检查法
代码检查法是一种静态测试(不执行程序)方法,它通过专业工具或者人工的方式检查代码和设计的一致性,检查代码结构的合理性、逻辑的正确性以及代码的可读性等。
静态结构分析法
静态结构分析是使用图表来表示代码的内部结构,包括控制流图、函数调用关系图等,并通过对这些图表的分析来检查软件的数据流、控制流、接口等是否存在缺陷或错误。
逻辑覆盖法
逻辑覆盖法包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和条件组合覆盖5种测试方法。
语句覆盖法的目标是让程序中每个语句至少执行一次,但它对程序的逻辑覆盖甚少。
判定覆盖法也叫分支覆盖法,它的目标是覆盖每个判定的所有分支,但它对程序的逻辑覆盖仍然不高。
条件覆盖法的目标是不仅每个语句至少执行一次,而且要使判定表达式中每个条件都取到可能的结果。
判定/条件覆盖兼顾了判定覆盖和条件覆盖,它的目标是使得判定中每个条件的所有可能至少出现一次,每个判定的所有结果至少出现一次。
条件组合覆盖目标是使得每个判定表达式中每个条件的各种可能组合都至少出现一次。
按照覆盖强度由低到高的顺序,这5种测试方法排列如下:语句覆盖->判定覆盖->条件覆盖->判定/条件覆盖->条件组合覆盖。
基本路径测试法
基本路径测试法首先计算程序的圈复杂度,用该复杂度定义执行路径的基本集合,再从该集合中导出测试用例来保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。
我们的军用软件开发通常包括单元测试、集成测试、配置项测试和系统测试等测试级别。其中在单元测试和集成测试阶段主要应用白盒测试技术,在配置项测试和系统测试阶段,主要应用黑盒测试技术。
所以,军用软件要满足覆盖率测试要求,主要就是在单元测试阶段。
虽然理论上,使用语句逻辑覆盖和判定逻辑覆盖就能够满足语句和分支覆盖率的要求。但在实际上覆盖率100%是很难达到的。我们要追求较高的测试覆盖率,通常是要把以上几种白盒测试技术混合使用,设计更多的测试用例。
最后,覆盖率可以通过专业的测试工具获得,也可以通过打桩或更改应用入口的手工方式来获得。
这正是:
覆盖指标想达成,单一技术不太行
混合使用多技术,相互补充有望行
参考书目:现代软件测试技术与管理研究,作者:赵仕波 魏生斌 罗耀华,出版社:中国水利水电出版社