实时软件测试[1] 软件测试
软件测试和维护占用了典型软件生命周期过程的70%或更多,那么选择什么样的策略来控制这些成本呢?LDRA将给出您答案。
多年来,在航空电子工业领域,覆盖率分析技术已经在复杂的软件控制系统错误检测方面取得了非常有效的业绩。现在,汽车工业也在考虑在软件控制方面的测试质量和不断增加的费用之间选择。如果能够借鉴航空电子工业领域中的经验和教训将是一种明智的选择。
有很多不同类型和级别的覆盖率。经常被提及的术语是函数覆盖率,这是一个用来报告你是否调用过每一个函数的度量标准。这种覆盖率有助于在测试的初级阶段确保软件的所有部分达到一些基本的覆盖率和消除一些明显的不足。
在那些开发复杂实时软件(RTS)的公司里,通常情况下这种级别的覆盖是不够充分的,因此无论哪一种被应用的覆盖技术都扩充到包括语句和分支覆盖。
语句覆盖——也称为线性覆盖、段覆盖或者基本块覆盖,它可用来说明每一个可执行语句是否被执行,基本块覆盖和语句覆盖是一致的,被测的代码单元是没有分支的序列。这大大的扩充了覆盖图的范围,虽然仅仅是平面图。
语句覆盖是最容易达到100%的覆盖度量指标。它能覆盖整个源代码并且帮助用户发现存在于程序中很少运行到的代码段中的错误。虽然它相对来说容易达到100%,不需要花费昂贵的费用和资源,但是它仍然能够显著的增强我们在源代码的正确性方面的信心。然而,简单的实现100%的语句
覆盖率意味者仍然有通过这些语句的潜在的路径没有被执行,语句覆盖不能测量这些路径。
语句覆盖是不能够辨认很多的控制结构。例如,下面的这段C/C++代码,在没有一个测试用例使condition变量成为false的情况下,语句覆盖就认为这个代码被充分覆盖了;实际上,如果一旦condition为false,这个代码将出错。这是语句覆盖的一个非常严重的缺点。而If语句的使用是十分普遍的。
int* p = NULL;
if (condition)
p = &variable;
*p = 123;
语句覆盖也不能告诉我们循环是否在终止时退出,它仅仅说明执行了循环体。因为像do-while这样的循环会首先执行循环体一次,语句覆盖认为它们是没有分支的语句。
语句覆盖率也忽略逻辑操作符(||和$$)。而且,语句覆盖也不能辨认连续的开关语句标号。为了达到更加完整和精确的覆盖,至少应用二维覆盖图,显然需要分解判定条件。
if(condition1&&(condition2|| function1()))
statement1;
文章来源于领测软件测试网 https://www.ltesting.net/