Technical articles
如何实现数据耦合控制耦合覆盖分析
引言
数据耦合控制耦合覆盖分析的目标是为了满足DO-178C中附表A-7中目标8,确定是否存在耦合点没有被基于需求的测试所覆盖,对于没有被覆盖的耦合点给出原因分析和解决措施。该目标隐含的目的是为了确保组件之间的耦合情况不会对系统造成危害或带来不可预测的结果。为了实现此目的,组件之间的耦合应越少越好,并建议组件内部建立保护机制保护不受其它组件带来的潜在错误影响。
从CAST-19中可知,如果机载软件程序由一个“模块”组成,模块内的接口和依赖关系在需求中被指定,并且对这些需求进行正常功能和鲁棒性测试,且满足需求覆盖和结构覆盖的目标,那么数据耦合控制耦合覆盖分析目标的满足可能是设计和验证过程的副产品。
由此可知:如果一个“模块”的设计和验证满足以下条件:
1) 模块级的高层需求覆盖所有的耦合关系;
2) 基于高层需求进行集成测试;
3) 集成测试满足需求覆盖和结构覆盖的目标。
那么模块内的数据耦合控制耦合可由模块级基于需求的集成测试所验证,不需要再进行额外的分析。
同理,如果一个“软件”可以全部采用集成测试的方式验证,且结构覆盖也是集成方式获取和分析,那么软件内部的数据耦合控制耦合覆盖分析目标即可满足。但是受测试方法和测试环境的限制,通常会将软件再分解为各个组件,对组件进行集成测试(这种方法叫低级测试),因此组件内部的数据耦合控制耦合覆盖分析目标即可满足,而组件间的数据耦合控制耦合通过组件间的集成测试验证分析。对于数据耦合控制耦合覆盖分析来说,组件的划分取决于低级测试的最小单元。
除此以外,数据耦合控制耦合覆盖分析还应包括软件间和系统间的数据耦合控制耦合覆盖分析。
数据耦合:软件组件对于不受该组件控制的数据的依赖性。包括全局变量、传参、返回值、指针、共享内存的数据等。
控制耦合:软件组件影响另一个软件组件执行的方式或程度。包括函数调用、函数指针、执行调用顺序、任务调度等。
数据控制耦合:即存在数据耦合又存在控制耦合关系的数据。
耦合对象:软件组件之间可能存在耦合关系的每一个变量或者函数被称之为耦合对象,其来源于软件架构中数据流和控制流图表中的对象,需经进一步分析是否存在耦合关系。例如,根据数据流表得知变量glob从组件A流向组件B,那么变量glob被称为一个耦合对象。
耦合点:根据代码分析得出软件组件之间耦合对象实际被定义和使用的耦合关系被称为耦合点。一个耦合对象在两个相同的组件之间可能存在多个耦合点,例如,变量glob在组件A中被定义,并在组件B中不同的位置被使用3次;那么耦合对象glob在组件A和组件B之间存在3个耦合点。
根据DO-248C中的FAQ#67,数据耦合控制耦合覆盖分析过程包括以下几个方面:
分析基本流程参见图 1
图 1 数据耦合控制耦合覆盖分析流程
LDRA工具套件中的静态分析模块,可辅助开展代码评审/分析,依据分析结果识别组件间的耦合对象是否与软件架构一致,控制流是否与软件架构中的控制流图相符。
静态数据流分析结果报告如图 2所示
图 2 静态数据流报告异常数据流
静态分析系统调用关系如图 3所示。
LDRA工具套件中的静态分析模块可分析生成变量交叉引用报告,如图 4所示。
图 4 变量交叉引用信息
此外LDRA工具套件中的数据耦合控制耦合分析模块,可辅助开展耦合点分析,根据静态分析的结果分析软件存在的耦合对象、耦合点及其位置信息。
动态数据流报告中展示的数据流信息如图 5所示。
图 5 动态数据流信息
随着机载软件复杂性的提高、软件开发方法的更新及软件运行平台的多样化,对数据耦合、控制耦合覆盖分析方法不断地提出更多的挑战。上海创景信息科技有限公司适航审定团队结合多个实际适航项目工程经验,编写了《数据耦合控制耦合覆盖分析指南》,其中包含数据耦合控制耦合分析活动的详细过程和报告模板,可为验证工程师开展数据耦合控制耦合覆盖分析工作提供一定的指导。
技术文章