0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聚焦汽车软件开发与测试:静态代码扫描、单元测试与集成测试等方面的实践应用

龙智 来源:jf_15970448 作者:jf_15970448 2024-08-05 13:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

2024年7月18-19日,龙智携汽车软件开发及管理解决方案创新亮相2024 ATC汽车软件与安全技术周。龙智技术支持部负责人&Atlassian认证专家叶燕秀、龙智功能安全高级工程师景玉鑫在活动主会场联合发表了精彩演讲,分享推动汽车软件开发与功能安全的创新实践。

本期,龙智功能安全高级工程师景玉鑫将从开发和测试的角度出发,探讨如何借助静态代码分析及自动化测试工具,确保代码在符合ISO 26262功能安全标准的同时,提升生产力。

以下为演讲实录(内容有精简润色)。

大家好,前面我的同事已经提及了功能安全标准、质量与合规的重要性,特别是在汽车行业中,这些方面至关重要。( 点此阅读上期演讲回顾)接下来,我们将从开发和测试的角度出发,探讨如何在确保代码符合功能安全标准的同时,提升生产力。

静态代码分析

我们知道,以安全至上的汽车行业对代码质量的要求极为严格,而维护代码质量又与企业成本息息相关。

首先我们来看一张图:

wKgZomawYaWAMxdWAABERMNvjjI524.jpg

该图的横坐标代表了软件开发周期的不同阶段,包括编码阶段、单元测试、功能测试、系统测试和发布阶段;蓝色曲线表示代码问题产生的比例;橙色曲线表示代码问题被发现的比例;而红色曲线则反映了代码问题的维护成本。

我们不难发现,随着产品生命周期的推进,维护成本在不断增加。在开发初期,由于环境相对简单,发现问题后的维护成本相对较低。而进入单元测试阶段后,由于测试人员需要建立和调整测试用例,并与开发人员进行沟通和协调,维护成本会有所增加。到了系统测试和发布阶段,维护成本更是呈指数级增长。因此,尽早地发现代码问题对于降低维护成本至关重要。

那么,如何有效发现代码问题呢?依赖人工的审查和审核?显然,这种方式高度依赖于个人的专业性和经验,而且面对汽车行业庞大的代码量,也显得不切实际。我们需要借助静态代码扫描工具,以标准、权威的规则来扫描代码,帮助发现隐藏问题。

如何选择静态代码扫描工具?

在选择静态代码扫描工具时,我们期望它能够满足功能安全标准的要求,并获取相应的资质认证,以此提升扫描代码的可信度和可靠性。此外,该工具内置的扫描规则也需要全面覆盖我们日常使用的或熟知的编码标准。

wKgaomawYaWACjKWAAAoSP-4vQ8162.jpg

除了功能安全标准的专业性外,作为代码扫描工具本身,我们还需关注以下的关键条件:

检查规则是否全面:不仅限于上述涉及的相关功能安全标准,还应涵盖对特定编程语言模块的深入扫描规则。

是否具有较低的误报率、漏报率,保障精度与准确度。

是否与开发人员日常使用的工具实现友好集成,以提升工作效率。

扫描结果是否可以在团队内外进行共享和管理,促进团队协作与信息传递。

是否具备丰富的报表功能,便于项目管理者或项目成员查看分析报告。

是否支持与现有持续集成(CI)工具的集成。对此,我们的推荐方式是将CI工具、源代码管理(SCM)工具以及代码扫描工具进行集成。通过代码扫描工具,自动扫描每一次的提交和拉取请求,确保提交至SCM的代码符合标准和规范。

wKgZomawYaeAMPXiAAAlbFILA-U150.jpg

单元测试/集成测试

下面,我们来简要探讨一下动态测试。一些安全标准(如ISO 26262)对单元测试和集成测试都是有一定要求的,我们需要确保代码能够满足不同级别的安全标准。

V模型开发模式

wKgaomawYaiAKqu8AAA14Ipbzm4301.jpg

在上图以V模型为例的开发模式中,可以看到,单元测试是首个动态测试环节,通过函数级别的扫描来发现代码中的错误,并避免这些错误在后续测试甚至最终用户处才被发现。

自动化测试和人工测试

对于动态测试,大致可以分为自动化测试和人工测试。相比于人工测试,自动化测试具有显著优势。

✅ 首先,测试用例和测试动作可以提前定义并保存,当实施重复性测试时,只需少量修改甚至无需修改,就可以确保测试数据的一致性。

✅ 自动化测试能够覆盖人工测试难以或无法覆盖的用例,测试覆盖率更高。

✅ 采用自动化测试,可以利用周末或晚间的非工作时间运行,从而释放测试人员的精力,以设计更好的测试用例,提高测试效率。

✅ 和前面介绍的静态代码扫描工具类似,如果我们的自动化测试工具已经通过功能安全标准认证,那么该工具的测试结果也具有更高的可靠性和可信度。

✅ 此外,自动化测试还能有效降低项目成本。

下图是自动化测试(TESSY)和人工测试的Effort的比较,可以看出,尽管前期自动化测试在设计和定义上需要更多的投入,但长期来看,其优势愈发明显。

wKgZomawYaqAXZ2ZAAAVWAohElo330.jpg

开展详尽规范的单元测试

对于何时开展测试,我们建议尝试持续测试和测试左移策略,这是DevOps中的一个概念,即让测试人员在早期介入,更早地开始设计和定义测试用例,并伴随着开发周期进行测试,同时结合自动化测试工具,以尽早发现问题,缩短交付周期。

wKgaomawYa6AcTZkAAA56icTXos247.jpg

测试覆盖率

为了评估软件本身覆盖率的可信度,我们还需要特别关注一些测试覆盖率。以ISO 26262标准为例,该标准对软件测试中的覆盖率提出了明确要求。

wKgZomawYa-AGD8LAABJ_u2tFWo668.jpg

上图的右侧展示了ISO 26262对覆盖率要求的一部分,包括语句覆盖率、分支覆盖率等关键指标。另外也有很多其他的覆盖率度量,我们在左侧列举了部分,供大家参考。

测试覆盖率图形分析

使用自动化测试工具时,我们希望这些工具在精确计算复杂的覆盖率度量的同时,还能以用户友好的可视化形式,直观地展示结果,以便更清晰地了解软件的测试覆盖情况。

wKgaomawYa-AaKvFAABWjtCspY8740.jpg

比如上图所示的可视化界面,通过流程图、彩色代码等图示,我们能够直观地进行分支覆盖率分析,清晰地看到哪些分支已被执行(以绿色标注),哪些分支尚未被执行(以红色标注)。这样的可视化展示不仅提供了覆盖率的直观概览,也为后续的优化工作指明方向。

便捷的测试用例设计方式

此外,在使用自动化测试工具的过程中,同样需要注重测试用例的建立是否便捷。结合我们使用过的工具,这里向大家推荐两种有效方式:

第一种,采用测试用例编辑器的模式。该模式可以通过可视化表格将测试的输入、预计的输出及实际的执行结果直观展现出来,同时清晰且高效地管理测试数据。

wKgZomawYa-AcPUWAABuMCzl8YQ377.jpg

第二种,采用分类树编辑器的方式。该方式运用边界值法和等价类的划分法,帮助半自动地生成测试用例,从而提高测试覆盖率,减少测试用例的冗余,并进一步提升测试效率。

wKgaomawYbCAaDnnAABNjqcnYEU251.jpg

以上所提及的理念、相关数据、产品特性和截图等,均源自两款备受认可的软件——静态代码扫描工具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授权分销商——龙智详细咨询。谢谢大家。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    6031

    浏览量

    130724
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73151
  • 汽车软件
    +关注

    关注

    1

    文章

    151

    浏览量

    3665
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入软件单元测试的全面研究与实践

    作为软件开发过程中最早进行的测试活动,能够有效隔离代码片段,验证其功能是否符合设计预期,从而在早期阶段发现潜在缺陷,提升代码质量。本文将系统探讨嵌入
    的头像 发表于 12-01 14:31 189次阅读

    CW32嵌入式软件开发的必备知识

    设计的原则和方法,能够设计出高效、可维护的软件系统。 了解嵌入式系统的实时性要求,能够设计出满足实时性要求的软件系统。 8、 测试与验证 掌握单元测试
    发表于 11-28 07:48

    新能源汽车质量保证体系与传统汽车单元测试规范的融合研究

    中的应用,以及winAMS等认证工具在提升测试效率和质量方面的作用。研究结果表明,传统汽车测试规范经过适当调整后,能够有效提升新能源汽车
    的头像 发表于 11-07 10:10 93次阅读

    单元测试专业工具在新能源开发中的作用研究

    单元测试的历史由来与发展 单元测试的概念可以追溯到20世纪60年代,伴随着计算机科学和软件工程学科的发展而逐步形成。早期的计算机科学研究(20世纪60年代)中,程序员意识到仅依靠手工调试和集成
    的头像 发表于 11-03 16:03 310次阅读

    嵌入式软件测试与专业测试工具的必要性深度解析

    ‌:单元测试集成测试、系统测试等不同阶段可能需要不同的工具组合16。 ‌软件特性‌:实时性要求、安全等级等特性决定工具的功能需求。 ‌
    发表于 09-28 17:42

    边聊安全 | 软件单元测试的设计方法

    上海磐时PANSHI“磐时,做汽车企业的安全智库”软件单元测试的设计方法写在前面:软件单元测试的设计是一个系统化的过程,旨在验证
    的头像 发表于 09-05 16:18 4363次阅读
    边聊安全 | <b class='flag-5'>软件</b><b class='flag-5'>单元测试</b>的设计方法

    HarmonyOSAI编程单元测试用例

    根据选中的ArkTS方法名称,CodeGenie支持自动生成对应单元测试用例,提升测试覆盖率。 在ArkTS文档中,光标放置于方法名称上或框选完整的待测试方法代码块,右键选择CodeG
    发表于 08-27 14:33

    HarmonyOS AI辅助编程工具(CodeGenie)代码测试

    放置于方法名称上或框选完整的待测试方法代码块,右键选择CodeGenie > Generate UT,开始生成单元测试用例。 说明 最多支持解读20000字符以内的代码片段。Ar
    发表于 07-14 17:33

    模型捉虫行家MV:致力全流程模型动态测试

    动态测试通过模拟真实运行数据,对模型及生成的代码进行“全维度体检”。这一过程层层递进:从单元测试聚焦单个模块的精准性,到集成
    的头像 发表于 07-09 16:37 885次阅读
    模型捉虫行家MV:致力全流程模型动态<b class='flag-5'>测试</b>

    新能源车软件单元测试深度解析:自动驾驶系统视角

    ‌第一部分:新能源车软件单元测试的战略重要性 ‌汽车电子架构的范式转变‌ 随着新能源车的普及,汽车电子架构从传统的分布式ECU(电子控制单元
    发表于 05-12 15:59

    新能源车背后的隐形守护者:软件单元测试的生死较量‌

    。这个教科书级的避让动作背后,是超过8000万行代码的精密协作,而确保这些代码绝对可靠的秘密武器,正是我们今天要揭秘的软件单元测试。 ‌一、代码
    的头像 发表于 05-12 11:00 439次阅读

    单元测试在嵌入式软件中的关键作用及winAMS工具的卓越贡献

    1. 单元测试概述 ‌定义与核心目标‌ 单元测试软件开发过程中针对程序模块(如函数、类或组件)的最小可测试单元进行的验证活动。其核心目标在
    的头像 发表于 04-11 14:31 758次阅读

    嵌入式软件单元测试的必要性、核心方法及工具深度解析

    一、为什么嵌入式软件必须重视单元测试? ‌嵌入式系统的特殊性‌ 在汽车 ECU、医疗设备控制器等场景中,软件直接操控硬件,‌单比特错误可能导致刹车失灵或呼吸机故障‌。不同于 PC 
    的头像 发表于 03-21 14:53 970次阅读

    嵌入式软件测试技术深度研究报告

    ‌ ISO 26262要求MC/DC覆盖率≥99%,但传统工具依赖人工用例设计导致达标周期长达8-12个月‌; 汽车电子代码量年均增长35%,测试成本占比从15%攀升至28%‌; ‌ 静态
    的头像 发表于 03-03 13:54 766次阅读

    嵌入式系统开发中的测试方法 嵌入式系统开发与AI结合应用

    嵌入式系统开发中的测试方法 嵌入式系统开发是一个复杂的过程,涉及到硬件和软件的紧密结合。测试是确保系统可靠性和性能的关键步骤。以下是一些常用
    的头像 发表于 12-09 10:22 2047次阅读