灵芝厂家
免费服务热线

Free service

hotline

010-00000000
灵芝厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

McCabe在多项目工程中的应用及覆盖率统计技巧

发布时间:2020-07-01 01:09:52 阅读: 来源:灵芝厂家

摘要:McCabe软件测试工具常常被测试人员用来测试单一项目工程的软件系统,然而随着软件工程的发展,多项目工程的大型系统软件陆续出现。那么如何利用现有的McCabe软件测试工具解决多项目工程中的逻辑测试呢?本文详细介绍McCabe软件测试工具在多项目工程中的应用及覆盖率统计技巧,供读者参考与交流。

本文引用地址: McCabe软件测试工具简介

McCabe IQ是美国McCabe Software公司的软件质量管理解决方案,为用户提供软件质量度量、软件结构分析、动态结构化测试的全面支持。McCabe IQ的功能可以分为质量度量、覆盖率测试、数据流分析、变更分析、冗余代码分析和企业级报告等。

McCabe是一个完全图形化的工具,可以提供如下图形报告:

· 模块调用关系图:用红黄绿颜色标识出模块的复杂度的高低,对于软件的结构和复杂程度一目了然。

· 模块控制流图:有助于了解软件模块的内部流程,发现隐藏的危险路径。

· 散点图/KV图/柱状图:综合分析软件整体的质量分布情况,有助于了解软件质量情况,和测试工作量评估。

图 1?1-该资料来源于中国评测

图 1?2-该资料来源于中国评测

McCabe软件测试工具在逻辑动态测试时,前提是要对代码进行插装。然而在实际工作中,由于大型软件常常是由多个项目工程构成,所以针对多项目工程的插装一直是众多软件测试人员困惑的问题。下面我们将详细分析如何在多项目工程中巧妙使用McCabe软件测试工具。

2 McCabe在多项目工程中的应用

由于 McCabe 在分析程序之前先要调用用户环境中的编译器对程序进行预处理,在按照用户指定的插装选项对被测程序文件插装后,才能获得足够的程序信息,完成正确的分析。

按照以下步骤完成创建工程操作:

1. 在 File 目录下选择New Project。创建新项目工程。

2. 给新建的工程命名,并选择工程将要存放的目录。

3. 选择所用的语言以及语言的扩展。

4. 源代码选择对话框有两个界面。这是因为我们是对多项目工程的插装,所以选择I’ll supply the infor选项,点击“下一步”。如图2.1。

图 2?1-该资料来源于中国评测

5. 进入源文件选择界面,如图2.2,点击“Add/Remove Files”。Add/Remove Files 对话窗口有三种操作模式,进入源代码目录存放文件夹中,点击“Add Hierarchy”,这样所有文件都会被添加进项目。如图2.3。

图 2?2-该资料来源于中国评测

图 2?3-该资料来源于中国评测

6. 依次点击“下一步”,对项目进行设置,完成项目插装步骤。

7. 在完成了项目的插装后,会在项目指定的目录中生成McCabe对本项目工程的说明文件test_。这个文件必须加载在插装后的代码文件中,这样才能对工程项目进行调试。

8. 将插装完成后的文件拷贝至源文件目录下,同名覆盖源文件。启动源文件中的解决方案,如图2.4。

图 2?4-该资料来源于中国评测

9. 在现有的解决方案中新建一个项目,命名为“cabe”,并将先前的test_文件添加进来。在原有的工程项目中添加引用cabe工程。如图2.5。

图 2?5-该资料来源于中国评测

10. 启动项目调试,生成输出文件,多工程项目文件的插装工作完成。测试完成后,将项目输出文件导入McCabe中,就可以进行代码覆盖率统计工作了。

3 McCabe软件测试覆盖率统计技巧

McCabe 的动态测试不但适合于宿主机系统,也适合于各种嵌入式系统环境下运行,当被测软件动态运行的时候,McCabe 分析生成的追踪信息,得到覆盖率信息,McCabe 可以提供的覆盖率类型有:集成覆盖率、路径覆盖率、分支覆盖率、语句覆盖率、类覆盖率、布尔覆盖率(MC/DC)、数据覆盖率和调用对覆盖率等。

覆盖率的信息最直观的查看方式就是在模块调用图上用不同的颜色标识出来,基于McCabe度量的理论,可以提供给用户强大的路径分析路径覆盖率,适合于安全关键软件的严格测试。覆盖率的信息以切片(Slice)的方式详细的报告给用户,用户可以使用McCabe的切片直接的逻辑运算发现被测软件的业务规律。

然而在覆盖率统计时,我们常常发现无论选择什么样的测试用例,总有一些分支无法覆盖。下面就对常见无法覆盖的分支详细分析。

1. 只有if分支,无else分支

这是最常见无法覆盖的情况之一。当if判断条件存在重复判断时,往往出现else无法覆盖的情况。如下所示:

if (a > 1)

{

if (a > 0)

{

a = a + 1;

}

else return;

}

else return;

在上面这个简单的例子中我们发现,在大于1的情况下,是永远大于0 的,所以第一个else是无法覆盖的。

2. if 及else if 已经包含了所有的可能

同样还是看这段代码举例,如下所示:

if (a > 0)

{

a = a + 1;

}

else if (a <= 0)

{

a = a - 1;

}

else return;

我们发现if和else if已经把大于、小于和等于所有的可能包括其中了,所以最后一个else也是无法覆盖的。

3. switch case已经包含了所有的可能,无default分支

在使用枚举类型变量时,通过switch语句判断类型。这时往往已经列出了所有可能的case分支,这样的话default分支就无法覆盖。如下所示:

switch(tType)

{

case int;

case float;

default return;

}

由于case分支已经列出了a变量的所有属性,所以default分支就无法覆盖。

4 总结

McCabe在辅助测试人员进行测试时,可以为用户提供各种静态分析结果和覆盖率统计分析。本文主要从实际工作角度出发,为大家提供多项目工程下McCabe软件测试工具解决方案。通过上述方法,巧妙的利用原项目工程解决方案,不改动文件目录结构,解决大型系统软件中多项目工程无法同时插装的问题,从而进行覆盖率统计工作。掌握了覆盖率统计中各种统计技巧,我们就可以为用户解释,覆盖率为何总是无法满足用户需求的缺陷,为软件测试工作提供了有力的保障。工具的使用只是辅助性的,一个软件的可靠与否还是需要测试人员进行测试后,结合工具的结果和理性的分析,从而得出一个软件真正的评判结果和质量度量。

青岛制做劳保工服

订西服

临沂防静电工作服制做