基于LDRA Testbed的民用机载软件结构覆盖率分析流程研究

2014-03-04 09:06丁立冬
航空标准化与质量 2014年4期
关键词:源代码覆盖率代码

黄 荦 丁立冬

(上海飞机设计研究院,上海 201210)

基于LDRA Testbed的民用机载软件结构覆盖率分析流程研究

黄 荦 丁立冬

(上海飞机设计研究院,上海 201210)

根据RTCA DO-178B中对于民用飞机机载软件结构覆盖率的要求,从实践出发,给出了使用DLRA Testbed工具进行民用飞机机载软件结构覆盖率分析的主要流程。

机载软件; 结构覆盖率;分析流程

结构覆盖率分析(Structural Coverage Analysis, SCA),可以揭示在基于需求的测试过程中未被执行的代码结构。由于基于需求的测试,可能无法覆盖所有的代码结构,所以应完成结构覆盖率分析,并进行附加验证,以达到软件级别所要求的结构覆盖率。

基于LDRA Testbed的结构覆盖率分析,是使用LDRA Testbed对源代码进行插桩,然后在真实环境中执行插桩后的代码和选定的基于需求的测试程序,使用LDRA Testbed对通过串口传送到宿主机上的历史记录文件进行分析,进而产生结构覆盖率分析的报告。

本文以DO-178B《机载系统和设备合格审定中的软件考虑》标准为依据,描述使用LDRA Testbed,对民用飞机机载软件进行结构覆盖率分析的活动流程。

1 要求

DO-178B标准中定义软件验证过程通过评审、分析活动来验证需求、软件构架和代码的准确性、完全性和可测性;通过开发测试用例和测试程序来验证需求内部的一致性和完整性;通过运行测试程序来验证代码满足需求的要求。

1.1 结构覆盖率分析的必要性

进行结构覆盖率分析,是为了确定哪些代码结构未被测试程序执行。测试程序可能不会完全覆盖代码结构,所以执行结构覆盖率分析,并进行附加验证,以弥补结构覆盖的不足。

结构覆盖率分析通过鉴定软件模块来完成。软件模块贯彻软件需求,而这些需求则由特定的测试程序来测试。使用插桩后的代码,再次运行测试程序来捕获结构覆盖的结果。

结构覆盖率分析可以揭示测试过程中未被执行的代码结构。如果有疏漏,则决定是否由其它特定的测试程序来执行被测源代码模块。

不同安全级别的软件对结构覆盖率的要求不同。如表1所示。

表1 结构覆盖率要求

1.2 软件结构覆盖率分析过程概述

LDRA Testbed是通过了适航认证的覆盖率分析工具,有很高的可靠性,使用范围也相当广泛。使用LDRA Testbed进行结构覆盖率分析,工作可分为3个阶段。

——插装:拷贝源代码,在源代码的副本中根据静态分析得出的结果插入探针,把插装后的文件进行编译、链接、执行。在执行的过程中,插入的探针记录程序执行的信息,并保存在历史数据文件中。

——动态覆盖率分析:分析历史数据文件,并在静态信息的基础上绘制动态覆盖率图。

——查看报告:查看动态覆盖率分析的结果,选择执行相应的结构覆盖率分析解决方案。

结构覆盖率分析解决方案要求进行附加验证。未执行的代码结构可能由下列原因造成。

——基于需求的测试用例或程序的不足。这些测试用例应加以补充或修改测试程序,以提供丢失的覆盖范围。用于完成需求覆盖率分析的方法可能需要加以评审。

——软件需求的缺陷。应修改软件需求,开发额外的测试用例,执行测试程序。

——死码。应消除这种代码,完成分析以评定这种影响及是否需要重新验证。

——非激活码。对于在航空器或发动机中所用的任何配置中不打算执行的非激活码,可以通过分析和测试来表明防止、隔离或消除无意中执行这种码的方法。对仅在目标机环境的某些配置中执行的非激活码,要确定正常执行这种代码要求的操作配置,并且要开发附加的一些测试用例和测试程序,以满足要求的覆盖率的目标。

本文将要说明的,是针对民用飞机机载软件,使用LDRA Testbed对源代码进行插桩,然后在真实环境下执行插桩后的代码及选定的基于需求的测试程序,接着再次使用LDRA Testbed对传送到宿主机上的历史记录文件进行分析,查看分析报告选择相应的解决方案,进而达到期望的软件结构覆盖级别。

2 转换准则

结构覆盖率分析活动,在基于需求的测试完成,源代码及其相关的测试程序经过评审并且进入配置库之后就可以开始。

3 输入数据

输入数据有:待分析的源代码、软件需求、测试用例/程序。

4 过程处理

结构覆盖率分析流程如图1所示。

图1 结构覆盖率分析流程图

执行结构覆盖率分析,包含以下活动:

——选择要分析的代码;

——源代码进行插桩;

——构建插桩后的代码;

——运行插桩后的代码;

——运行选定的基于需求的测试用例程序;

——收集和分析历史数据文件;

——如果发现代码覆盖率不足,选择必要的SCA解决方案;

——重复相应步骤直到达到期望的覆盖级别。

4.1 基于单个文件分析

4.1.1 运行Testbed

通过“开始”→“所有程序”“C/C++ LDRA Testbed”来运行Testbed。

4.1.2 选择源文件

在File菜单下选择Select File选项,选择要分析的文件。

4.1.3 设置向导对话框

当新的文件或一个set被调入Testbed时,向导窗口将被激活。这个对话窗口允许测试人员修改和当前文件相关的Sysppvar.dat文件和Sysearch.dat文件。如图2所示。

图2 设置向导对话框

4.1.4 检查分析范围设置

点击菜单栏中的Configure,在下拉菜单中点击Static Options选项,将会出现图3所示窗口。

这个窗口用来设置和静态分析相关的选项:

a) 是否分析include文件;

b) 通过Sysearch.dat添加搜索路径;

c) 通过Sysppvar.dat添加宏(只针对C/ C++)。

图3 静态配置项窗口

4.1.5 选择分析选项

测试人员能够通过对话窗口来选择Testbed进行哪些分析。点击Analysis下拉菜单,选择Select Analysis。

测试人员通过选择确认框来选择进行哪些分析,然后选择Start Analysis按钮开始进行分析。

如果仅仅是给文件插桩,选择Main Static Analysis和Generate Instrumented Program(s)即可。

4.1.5.1 主要静态分析(Main Static Analysis)

Main Static Analysis是进行其它分析的必要条件,所以在进行其它的静态或者动态分析之前,一定要执行主要静态分析。在选择Main Static Analysis之后,会出现带下划线的“configure”选项,可根据需要对Main Static Analysis中的一些选项进行配置。

而选择Generate Instrumented Program(s)之后,同样会在其后出现带下划线的“configure”选项,可根据需要设置生成插桩后文件的名称、指定生成插桩文件的存放路径、选择插桩模板等。

在编译插桩后的文件时,需要明白并不是被测系统的所有原文件都要被插桩。例如:一个有300个文件的系统,测试人员可以插桩其中的一个文件,也可以把300个文件都插桩。测试人员在第一个测试覆盖率的实例中,应该首先测试一小部分文件而不是整个系统。

在这个阶段,插桩后的代码的编译和执行不必在Testbed中进行。可以用插桩后的代码代替原代码,然后在开发的环境中编译,在实际的环境中运行。同时,LDRA Testbed可以很便利调用一个编译器的命令行,或编译命令文件。

被插桩后的文件在执行时,会打开一个历史文件并把分支执行的信息写入该文件,在执行结束关闭该文件。在LDRA Testbed的动态分析的选项中,指定执行的历史文件(sourcefilename.exh or history. exh)的路径。

4.1.5.2 动态覆盖率分析(Dynamic Coverage Analysis)

Dynamic Coverage Analysis是对程序在运行时生成的历史信息,提供各种各样的结果以及创建新的图形示例和文本报告。同样,在选择Dynamic Coverage Analysis之后,会出现带下划线的“configure”选项,可根据需要进行其他相关配置。

需要说明的是,在使用Testbed进行动态覆盖率分析之前,有必要指定分析报告的级别。选择configure下拉菜单中的Dynamic Coverage Report Options 选项,在弹出的窗中选择级别。

4.1.6 查看结果

分析结束后,需要查看覆盖率结果。LDRA Testbed可以生成含有覆盖率信息的源代码浏览文件(html/txt),可在Individual Results下拉菜单中选择所需的覆盖率报告类型。如图4所示。

图4 选择报告类型窗口

4.2 基于多个文件的分析

除了能分析单个源文件外,Testbed还能以“集”(set)的方式对多个文件同时进行分析。一个set可以有两种模式:Group(default)和System。

Group这种模式下,Testbed对一个set中的文件进行相互独立的分析,这样对于一批文件就可以一次分析完,而不需要一个个的导入工具来进行分析。

System这种模式下,Testbed将这个set中的所有文件是作为一个整体来分析的,会给出这些文件内函数相互间的调用关系,变量引用等等结果,也就是将这些文件作为一个工程来分析。

从Set菜单,选择Select/Create/Delete Set选项。

然后被提示,往如下的对话框中输入集的相应的名称,如图5所示:

集的名字不能为空白,也不应以空格开头,还不可包含如下的字符:/:*?”<>|。用不被允许的字符给集命名会产生一个强制集命名的错误消息。如果往LDRA Testbed中输入有效的命名,这个名称会被确认并登陆到数据库。

图5 设置集名称窗口

4.2.1 设置集属性

给新集命名后会弹出如下的对话框,并要求给一个属性。选择“System”,然后LDRA Testbed就会把新集的名字以及其属性保存到它的内部的数据库。

4.2.2 往集里添加文件

从Set菜单下选择List/Add/Remove Files in Set,将弹出如下窗口,如图6所示:

图6 添加文件窗口

点击Add按钮添加要分析的程序。

4.2.3 集的分析及结果查看

对集的文件的分析和前面的单个文件的是一样的。

不同的是集的方式在结果显示上,System Results菜单下是一个集内所以文件的分析结果的汇总。如果要单独察看单个文件的结果,需要在如下的选择框选择想察看的文件,如图7所示。

选定了要查看的文件后,相应的结果查看的方式也和前面单个文件的方式一致。

V221+.91

C

1003–6660(2014)04–0026–05

10.13237/j.cnki.asq.2014.04.007

[收修订稿日期] 2014-05-05

猜你喜欢
源代码覆盖率代码
民政部等16部门:到2025年村级综合服务设施覆盖率超80%
我国全面实施种业振兴行动 农作物良种覆盖率超过96%
基于TXL的源代码插桩技术研究
创世代码
创世代码
创世代码
创世代码
电信800M与移动联通4G网络测试对比分析
基于语法和语义结合的源代码精确搜索方法
解密别克安全“源代码”