官方微信视频号
随着工业自动化和智能化的快速发展,愈多愈复杂且涉及安全的软件功能出现在控制器上。这些软件功能的安全可靠,需要满足GB/T 20438.3标准的功能安全要求。GB/T 20438.3标准是一项针对电子、电气以及可编程电子安全控制系统的软件设计指导规范,它为软件安全提供了一个生命周期(从制定要求规范,软件开发和设计,编码,测试,修改到验证)的技术要求和方法保证。当对软件进行功能安全评估时,需要结合生命周期中每个阶段的特点以及定义的安全要求规范对所实现的功能安全做出判断。
软件开发生命周期
首先在进行功能安全评估之前,应根据整个系统的安全完整性等级,以及系统分配给每个执行要求的安全功能的电子系统的安全完整性等级,给出软件系统能力和具体安全功能的要求规范,该规范应有涉及各阶段特点且细致的规定,由此才能开展各个阶段的评估工作。上电科机器人在软件设计与开发阶段,标准划分成三部分进行规范:
在小型应用中,系统设计和架构设计可整合为一个阶段。首先架构设计阶段是一个需定义软件的整体行为,软件组件(包含操作系统、数据库、编程工具,子系统等)的功能和接口以及组件间相互作用的阶段。那么在这个阶段所进行的评估活动就抓住这几个元素进行开展:根据软件的子系统描述,包含它们的逻辑关系,输入输出,相互作用等,评价其安全策略(比如冗余接口和多样性功能)是否实现安全规范所要求的故障避免和故障裕度;
根据软件的数据库,通信接口,操作系统,应用程序等描述,评价其使用过程中数据安全性和可靠性;根据软件所选择的编程工具和语言,编程工具不仅指在线工具,也包含离线支持工具,比如设计优化工具、编译器、汇编器、代码生成工具等,确定它们是否存在潜在的失效机制,相互间的兼容性,版本迭代适用性以及置信水平。编程语言上,评估所选择的编码标准是否符合安全完整性等级,是否有文档规程。
在系统设计阶段,应根据在架构设计中所划分的系统进行各自的系统设计。因此评估活动会根据软件各系统功能描述和系统模块间的接口描述,评估其是否实现功能模块化,安全相关功能是否可测试,圈复杂程度等。
模块设计和编码阶段是开展具体设计的阶段。在这个阶段,评估是根据提供的源代码,进行代码复审,检查其是否满足在架构设计和系统设计所制定的要求规范,比如是否符合编码规范,是否具备清晰完整的注释等。
在测试阶段,标准建议应划分成三部分进行规范:模块测试,模块集成测试,系统测试。需要明确的是测试不仅需验证被测模块/系统是否执行了预定功能,也应验证是否不执行非预定功能。预定功能和非预定功能的定义是源于在设计阶段所输出的文档。
模块测试和模块集成测试都是基于纯代码的测试。但模块集成更关注于模块间是否正确进行了交互。评估活动会根据提供的源代码,以及在架构和系统设计阶段所制定的要求规范,利用静态、动态分析等方法对代码的编写规范性和结构完整性进行评估。
系统测试是将软件结合到可编程电子硬件上进行测试。根据提供的硬件实物,需测试的功能描述文档,接口描述文档,利用功能和黑盒测试(比如半实物仿真、全实物测试),性能测试等方法对整个系统的功能性,软硬件兼容性以及接口可靠方面进行评估,是否满足了前期在设计阶段所定义的安全规范。在整个测试阶段,用户根据所反馈的测试结果进行的操作和修改活动应有相应的规程和文档记录,确保修改活动的可追溯性,安全性。