如果您已经拥有本站账号,可以直接登录。
如果您已经拥有本站账号,可以直接登录。
如果您没有本站账号,可以注册。
021-61680661
在航空航天、核电、轨道交通、汽车电子等高安全领域,对软件测试的充分性提出了明确且严格的要求,包括需求覆盖、结构覆盖、耦合覆盖等方面。其中,不容忽视的是通过软件集成测试实现对软件部件间耦合关系的覆盖,涉及到软件部件间的控制交互(控制耦合)、数据传递(数据耦合)。
如何评估测试对软件部件耦合覆盖的充分性,成为了业界普遍关注的焦点。
▌航空:DO-178C 对控制耦合与数据耦合的测试覆盖要求
DO-178B/C目标A7-8明确要求A、B、C级软件应进行数据耦合和控制耦合测试覆盖分析。
DO-178B中6.4.4.2.c节要求覆盖分析应当确认软件部件之间的数据耦合和控制耦合。而DO-178C第6.4.4.2.c则更进一步,明确了该分析应该 结合基于需求的测试 确认测试执行了代码部件之间的耦合关系。
这个澄清提出了新要求,即能够结合基于需求的测试评估部件之间的耦合关系的覆盖程度。工程人员一方面需要适应新的适航要求,确保顺利通过适航审定;另一方面,也需要充分利用合适的工具,在满足适航要求的前提下,提升效率,降低成本。
▌核电:IEC-60880 对软件部件耦合的测试覆盖要求
IEC-60880第8.2.3节明确指出,应通过模块集成测试来表明所有模块能够正确交互,以实现预期的功能。并在E.4.2.5指出,在集成测试中,每个模块至少被调用一次、每个调用至少被测试一次,以检测模块间不正确的控制流和数据流。
▌轨道交通:EN50128 对软件部件级测试覆盖的要求
EN50128-2011 Table A.21提出了针对测试覆盖的要求,对于SIL 3和SIL 4要求完成部件级测试覆盖,需要考虑分支、组合条件、数据流、路径等准则。
▌汽车电子:ISO26262 对软件部件耦合的测试覆盖要求
在ISO26262-6 第10章关于软件集成与验证章节中,明确提出应当提供证据表明集成后的软件模块/部件能够满足软件架构中的相应需求。根据10.4.2节 Table 10,软件集成验证的首选方法即为基于需求的测试。
进而在10.4.5节提出,为了评估测试用例的完整性、并表明集成测试的充分性,应当开展软件架构级别的结构覆盖分析。不同于软件单元级的覆盖率准则(语句覆盖、分支覆盖、MC/DC),软件架构级覆盖主要关注软件部件的覆盖、以及部件间调用关系的覆盖。Table 12 列出了软件架构级结构覆盖方法,如下:
从具体实践上,上述内容的两个隐含的要求是:
1) 软件架构的结构覆盖是基于软件部件(完成特定功能的软件子程序)的,而不等价于一个代码文件,或多个代码文件的组合;
2) 软件架构的结构覆盖率是通过基于需求的测试执行获得的,不能仅仅通过使用静态分析方法获得。
▌现状及问题
目前有少量工具声称能够收集软件架构级的覆盖率。但遗憾的是,这些工具强烈的使用约束大大限制了其实际的工程应用,例如:
软件架构的测试覆盖要求在软件部件之间开展测试充分性分析。在现有工具中,有的工具默认一个C文件就是一个软件部件;有的工具允许用户把多个C文件组合定义成为一个部件。事实上,一个软件部件不一定是一个C文件,也不一定是多个C文件的组合,而是密切相关、高度内聚的软件功能的组合。
现有工具通常只能实现粗略的耦合分析,如函数调用(控制耦合)、全局变量的读写异常(数据耦合)等。而实际工程中,部件间的耦合涵盖了更细致、更复杂的内容,如函数调用时的参数类型一致性、数据的先读后写和先写后读、数据的轮流写入等等。
▌SA-Covalyzer解决方案
SA-Covalyzer (Software Architecture based COVerage anALYZER)为实现软件架构的测试覆盖分析,提高测试充分性,提供了一套完善的解决方案。
SA-Covalyzer支持软件部件的定义,自动识别部件间的耦合关系,推荐适用的覆盖准则,针对覆盖点进行低膨胀率的插桩,在测试过程中收集、累积和统计覆盖情况,对未覆盖到的情形进行辅助分析,并自动生成覆盖分析报告。
软件部件的定义
SA-Covalyzer允许用户以自然而直观的方式,根据软件架构来定义软件部件。部件的定义支持“By File”和“By Function”两种粒度。
定义好软件部件以后,SA-Covalyzer使用专利技术自动识别各个软件部件之间的耦合关系(如调用、读写、写写等)。
针对每一个自动识别出的耦合关系,SA-Covalyzer为其推荐适用的覆盖准则,用户可以基于耦合关系实际的功能特性酌情选用。
根据耦合分析结果,SA-Covalyzer对源代码进行插桩。SA-Covalyzer同样使用最新的专利技术对源代码进行低膨胀率插桩。
SA-Covalyzer使用灵活的方式收集覆盖率,支持自动化测试、手工测试、混合测试。SA-Covalyzer也支持分批次收集覆盖并进行累积。
SA-Covalyzer能够以直观地展示测试覆盖结果,以高亮方式指出未覆盖的耦合点;用户可以对未覆盖耦合点加以评注,或者完善代码或用例,执行回归分析。
SA-Covalyzer会自动生成全面的覆盖分析报告,供用户离线使用。