安全相关产品的软件确认测试
2019-04-29廖丽华
廖丽华
(1.上海仪器仪表自控系统检验测试所有限公司,上海 200233;2.上海工业自动化仪表研究院有限公司,上海 200233)
0 引言
由于功能安全相关产品的软件验证与确认在安全性和可靠性上有独立性要求(技术独立性、管理独立性和财务独立性),为了保证软件测试独立性要求的有效性,需委托独立的第三方软件测试机构进行安全相关产品的软件测试,且要求该测试机构一般在软件测试领域具有专业技术能力,并且是取得国家认可的测试实施机构。对于独立性要求低的软件,即使不交付于独立的第三方软件测试机构,也要交付于与软件设计和开发人员独立的部门进行测试。由于测试人员不直接参加软件的设计与开发,所以必须依据标准、文档和测试技术全面深入分析,才能进行软件测试,发现软件中存在的问题,从而确保软件仅执行预期功能而不执行非预期功能。
1 软件确认计划
软件确认测试是通过检查和提供客观依据,证明软件是否满足特定预期用途的需求[1]。安全相关产品的软件确认一般要经过三个确认阶段,分别是软件确认、软硬件集成后的嵌入式软件确认和整体系统安全确认。本文的安全相关软件的确认是指将软件需求规格说明书中每一个安全、安全相关、约束的功能、条件以及性能进行逐条确认的测试,针对的是整个软件与硬件集合的嵌入式软件系统。安全相关产品软件确认的主要目标是检查和解决需求规格书的不合理性、检查和解决设计阶段中的设计错误和确认软件是否完全实现了软件需求规格书规定的要求。
软件确认的主要方法是以测试为主,分析和建模仿真等为辅;选择手动或自动技术对软件的每个功能作确认测试。一般以功能为单位、标准规范与约束条件为前提,将软件的功能与软件模块作对应分析,实现这些功能的测试数据、测试规程,通过手动/自动、静态/动态、分析/统计等技术实施。其测试结果的接受准则除了需满足软件需求规格书要求,还要满足安全相关产品的特性或专家判断等主观要求。
安全确认测试应按照软件确认计划进行,测试计划应包括被测软件的范围、测试环境的搭建、测试工具的选择、测试进度的规划、测试技术/措施的选择等,具体如下。
(1)确认组织的安排。
① 确认测试的进入条件。
② 确认测试的人员:确认期间评审人员都必须在场。
(2)安全相关产品相关运行模式的确定,包括[1]:
① 系统运行前的配置,包括设置和调整;
② 启动、教学、自动、手动、半自动、稳定状态运行;
③ 重启、关机和维护;
④ 合理可预见的异常事件和误操作。
(3)确认测试的内容应[2]:
① 覆盖软件需求规格书的所有需求;
② 非常有代表性地覆盖所有信号范围以及计算
的参数的范围;
③ 全面覆盖表决逻辑和其他逻辑以及逻辑组合;
④ 用最终的组装配置测试所有的保护信号;
⑤ 确保数据的精度与系统的响应时间得到证实;
⑥ 确保对所有设备故障或故障组合采取正确的行动。
(4)确认测试时要求的工具和设备在使用前应进行校准和配置(软件和硬件参数)。
(5)确认的技术及措施(如静态测试、动态测试)。
(6)定义通过/失败准则,包括[1]:
① 输入的信号和顺序以及输入值;
② 期望输出的信号和顺序以及输出值;
③ 其他可接受的准则,如存储使用、时序和数值允差。
(7)确认测试记录的相关要求。
(8)确认测试报告的相关要求。
2 软件确认测试方法
2.1 静态测试
静态测试[3]是指不运行程序,通过人工对软件程序和文档进行分析与检查。静态测试主要方式有人工审查、符号执行、需求确认等。
软件系统确认测试的静态测试主要是对被测软件的需求规格书文档等进行静态测试,目的是满足安全软件需求规格书的可测试性、正确性、一致性、完备性、向前和向后的追溯性的要求。
软件确认测试的静态测试活动如表1所示。
表1 软件确认测试的静态测试活动
静态测试需满足以下准则:系统合格性的可行性、软件的可测性、系统需求的测试覆盖率、所用测试方法与标准的适合性、对预期结果的依从性、运行和维护的可行性。
2.2 动态测试
动态测试是指通过人工或使用工具运行程序进行检查、分析程序的执行状态和程序的外部表现。软件系统确认测试的动态测试,一般包括概率测试、过程仿真、建模、功能和黑盒测试(black-box testing)。其中:功能和黑盒测试是软件确认测试的必要测试方法,其余测试方法均适用于安全要求较高的软件;而概率测试主要适用于安全要求最高的软件(如核级安全软件)。
黑盒测试[4]又称功能测试、数据驱动测试或基于软件需求规格说明的测试。在完全不考虑程序内部结构和内部特性的情况下,仅依据程序功能的需求规格书确定测试用例和推断测试结果的正确性。黑盒测试典型方法如表2所示。
表2 黑盒测试典型方法
概率测试[8]的目的是为了得到被测软件的可靠性属性的定量数值。该定量数值与置信度的要求密切相关,并能给出每一个功能要求的一个失效概率、在某一时段的一个失效概率和错误控制的一个概率。
概率测试的用例选择方法有:随机选择、依概率大小选择、选取特殊状态插入到序列中、用区间估计的方法对总体进行抽样测试、直接在期望值附近抽样取值、基于马尔可夫链的序列选择等。这些方法各有如下优势。
①在输入域内选择随机的均匀分布的测试数据。
②可靠性预测,通过测试软件来预测软件的使用性能。
③自动生成测试用例,通过软件测试工具和编制程序自动生成测试序列。
④通过对软件的量化处理,序列中每个操作都有明确的概率。
3 软件确认测试评价
软件确认测试的评价应满足如下要求。
(1)软件确认的结果应文档化。
(2)对每一个功能,软件确认应对以下结果文档化。
① 确认活动的按时间顺序的记录,以便追溯活动的顺序;
② 所用的软件确认计划的版本;
③ 确认的功能(通过测试或分析);
④ 使用的工具和设备及其校准数据;
⑤ 确认活动的结果;
⑥ 期望结果和实际结果的差异。
(3)当期望结果和实际结果出现差异时,要对其进行分析,确认是继续进行测试还是提出变更请求,并且其都应作为确认结果而被文档化。
(4)如有变更请求,应先对其进行影响分析,以确定修改的范围以及是否会引发新的危险或风险。这些分析结果应文档化。
如有修改,软件确认需作回归测试。根据影响分析的结果确定回归测试的范围,回归测试的过程及结果也需文档化。
安全确认测试结果进行评审需考虑:测试应表明软件需求规格书中规定的要求都已正确满足,且没有执行非预定的功能;测试用例及其结果应文档化以便用于后续分析,以及有安全要求的独立评估;已归档的软件确认的结果应表明软件已通过确认或未通过确认的原因。
4 结束语
安全软件的确认贯穿于安全相关产品软件实现的全过程[9]。为了确保安全相关产品能起到真正的安全防范作用,软件的确认一定要与产品信息需求达到正确性、一致性与完备性。由于软件确认测试是一个可重复的过程,所以配置管理很重要,需满足以下要求:①完备性,确认拥有用于描述软件产品功能性、跟踪程序版本和管理变化的过程;②充分性,确认配置管理过程对于开发复杂性、软件和系统规模、软件安全级别、项目计划和用户要求是充分的。