2024年7月18-19日,龙智携汽车软件开发及管理解决方案创新亮相2024 ATC汽车软件与安全技术周。龙智技术支持部负责人&Atlassian认证专家叶燕秀、龙智功能安全高级工程师景玉鑫在活动主会场联合发表了精彩演讲,分享推动汽车软件开发与功能安全的创新实践。
本期,龙智功能安全高级工程师景玉鑫将从开发和测试的角度出发,探讨如何借助静态代码分析及自动化测试工具,确保代码在符合ISO 26262功能安全标准的同时,提升生产力。以下为演讲实录(内容有精简润色)。
大家好,前面我的同事已经提及了功能安全标准、质量与合规的重要性,特别是在汽车行业中,这些方面至关重要。(🔗点此阅读上期演讲回顾)接下来,我们将从开发和测试的角度出发,探讨如何在确保代码符合功能安全标准的同时,提升生产力。
静态代码分析
我们知道,以安全至上的汽车行业对代码质量的要求极为严格,而维护代码质量又与企业成本息息相关。首先我们来看一张图:
该图的横坐标代表了软件开发周期的不同阶段,包括编码阶段、单元测试、功能测试、系统测试和发布阶段;蓝色曲线表示代码问题产生的比例;橙色曲线表示代码问题被发现的比例;而红色曲线则反映了代码问题的维护成本。
我们不难发现,随着产品生命周期的推进,维护成本在不断增加。在开发初期,由于环境相对简单,发现问题后的维护成本相对较低。而进入单元测试阶段后,由于测试人员需要建立和调整测试用例,并与开发人员进行沟通和协调,维护成本会有所增加。到了系统测试和发布阶段,维护成本更是呈指数级增长。因此,尽早地发现代码问题对于降低维护成本至关重要。
那么,如何有效发现代码问题呢?依赖人工的审查和审核?显然,这种方式高度依赖于个人的专业性和经验,而且面对汽车行业庞大的代码量,也显得不切实际。我们需要借助静态代码扫描工具,以标准、权威的规则来扫描代码,帮助发现隐藏问题。
如何选择静态代码扫描工具?
在选择静态代码扫描工具时,我们期望它能够满足功能安全标准的要求,并获取相应的资质认证,以此提升扫描代码的可信度和可靠性。此外,该工具内置的扫描规则也需要全面覆盖我们日常使用的或熟知的编码标准。
除了功能安全标准的专业性外,作为代码扫描工具本身,我们还需关注以下的关键条件:
检查规则是否全面:不仅限于上述涉及的相关功能安全标准,还应涵盖对特定编程语言模块的深入扫描规则。
- 是否具有较低的误报率、漏报率,保障精度与准确度。
- 是否与开发人员日常使用的工具实现友好集成,以提升工作效率。
- 扫描结果是否可以在团队内外进行共享和管理,促进团队协作与信息传递。
- 是否具备丰富的报表功能,便于项目管理者或项目成员查看分析报告。
- 是否支持与现有持续集成(CI)工具的集成。对此,我们的推荐方式是将CI工具、源代码管理(SCM)工具以及代码扫描工具进行集成。通过代码扫描工具,自动扫描每一次的提交和拉取请求,确保提交至SCM的代码符合标准和规范。
单元测试/集成测试
下面,我们来简要探讨一下动态测试。一些安全标准(如ISO 26262)对单元测试和集成测试都是有一定要求的,我们需要确保代码能够满足不同级别的安全标准。
V模型开发模式
在上图以V模型为例的开发模式中,可以看到,单元测试是首个动态测试环节,通过函数级别的扫描来发现代码中的错误,并避免这些错误在后续测试甚至最终用户处才被发现。
自动化测试和人工测试
对于动态测试,大致可以分为自动化测试和人工测试。相比于人工测试,自动化测试具有显著优势。
✅ 首先,测试用例和测试动作可以提前定义并保存,当实施重复性测试时,只需少量修改甚至无需修改,就可以确保测试数据的一致性。
✅ 自动化测试能够覆盖人工测试难以或无法覆盖的用例,测试覆盖率更高。
✅ 采用自动化测试,可以利用周末或晚间的非工作时间运行,从而释放测试人员的精力,以设计更好的测试用例,提高测试效率。
✅ 和前面介绍的静态代码扫描工具类似,如果我们的自动化测试工具已经通过功能安全标准认证,那么该工具的测试结果也具有更高的可靠性和可信度。
✅ 此外,自动化测试还能有效降低项目成本。下图是自动化测试(TESSY)和人工测试的Effort的比较,可以看出,尽管前期自动化测试在设计和定义上需要更多的投入,但长期来看,其优势愈发明显。
开展详尽规范的单元测试
对于何时开展测试,我们建议尝试持续测试和测试左移策略,这是DevOps中的一个概念,即让测试人员在早期介入,更早地开始设计和定义测试用例,并伴随着开发周期进行测试,同时结合自动化测试工具,以尽早发现问题,缩短交付周期。
测试覆盖率为了评估软件本身覆盖率的可信度,我们还需要特别关注一些测试覆盖率。以ISO 26262标准为例,该标准对软件测试中的覆盖率提出了明确要求。
上图的右侧展示了ISO 26262对覆盖率要求的一部分,包括语句覆盖率、分支覆盖率等关键指标。另外也有很多其他的覆盖率度量,我们在左侧列举了部分,供大家参考。
测试覆盖率图形分析
使用自动化测试工具时,我们希望这些工具在精确计算复杂的覆盖率度量的同时,还能以用户友好的可视化形式,直观地展示结果,以便更清晰地了解软件的测试覆盖情况。
比如上图所示的可视化界面,通过流程图、彩色代码等图示,我们能够直观地进行分支覆盖率分析,清晰地看到哪些分支已被执行(以绿色标注),哪些分支尚未被执行(以红色标注)。这样的可视化展示不仅提供了覆盖率的直观概览,也为后续的优化工作指明方向。
便捷的测试用例设计方式
此外,在使用自动化测试工具的过程中,同样需要注重测试用例的建立是否便捷。结合我们使用过的工具,这里向大家推荐两种有效方式:
第一种,采用测试用例编辑器的模式。该模式可以通过可视化表格将测试的输入、预计的输出及实际的执行结果直观展现出来,同时清晰且高效地管理测试数据。
第二种,采用分类树编辑器的方式。该方式运用边界值法和等价类的划分法,帮助半自动地生成测试用例,从而提高测试覆盖率,减少测试用例的冗余,并进一步提升测试效率。
以上所提及的理念、相关数据、产品特性和截图等,均源自两款备受认可的软件——静态代码扫描工具Perforce Helix QAC和单元测试工具TESSY。这两款软件均获得了TÜV SÜD关于功能安全标准的一系列认证,多年来专注于功能安全标准和安全合规领域,为用户提供可靠的技术支撑。
Helix QAC:
30多年来,Helix QAC一直是值得信赖的C/C ++语言静态代码分析器。凭借其分析的深度和准确性,Helix QAC已成为监管严格、安全至上的行业满足合规要求的首选静态代码分析器,包括汽车行业。它能检测代码错误、是否编码标准符合(例如MISRA和AUTOSAR),是否存在安全隐患,并帮助团队遵循合规标准(例如ISO 26262),提升代码质量和安全性,从而为汽车软件开发团队创造更高标准、更可靠的产品。TESSY:
TESSY是一款应用于嵌入式软件的自动化测试工具,专门针对嵌入式软件的C/C++代码进行单元测试、集成测试。TESSY作为较早的单元测试工具之一,设计用于支持符合标准的开发和测试,已经成为高质量产品和安全关键应用的常用工具。作为一款经过认证的测试工具,TESSY支持所有行业领先的编译器、调试器和微控制器,以及主机模拟,符合IEC 61508/ISO 26262、IEC 62304和EN 50128标准的安全相关软件开发要求。众多汽车整车厂、零部件供应商都在使用TESSY。
若您对上述内容或相关软件有进一步的兴趣和疑问,欢迎联系Perforce中国授权合作伙伴、TESSY授权分销商——龙智详细咨询。谢谢大家。
获取更多汽车软件开发领域的解决方案和实践案例,欢迎咨询DevSecOps解决方案提供商——龙智:
官网:www.shdsd.com
电话:400-666-7732
邮箱:marketing@shdsd.com
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。