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

    文章

    5303

    浏览量

    126655
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68616
  • 汽车软件
    +关注

    关注

    0

    文章

    100

    浏览量

    3182
收藏 人收藏

    评论

    相关推荐

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

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

    开发者必读!CircleCI 组件测试单元测试全解析

    软件开发中,测试是保证软件质量和可靠性的关键环节。作为领先的 CI/CD 平台,CircleCI 提供了支持自动化测试的强大工具。其中,单元测试
    的头像 发表于 12-03 09:18 212次阅读

    汽车软件单元测试的重要性

    设计和测试不充分密切相关,这引发了社会各界对汽车软件健壮性的重要性进行深入思考。本文将探讨汽车软件测试
    的头像 发表于 11-29 10:57 167次阅读

    严格的单元测试造就完美的软件

    关键系统时,更是对软件质量提出了极高的要求。而单元测试作为软件开发过程中的核心环节,其重要性不言而喻。 单元测试的作用 单元测试是指对
    的头像 发表于 11-26 13:22 168次阅读

    嵌入软件单元/集成测试工具专业分析

    软件开发设计的单元测试工具,其独特的功能和优势使其在市场中占据了一席之地。本文将对WinAMS进行深入分析,并将其与其他测试工具进行对比,探讨其在功能、易用性和兼容性等方面的优点。 1
    的头像 发表于 11-19 16:41 229次阅读

    ECU电控软件开发测试介绍

    本文重点介绍符合AutoSar架构的应用软件开发、MBD开发模式下的软件质量评估与优化方案、复杂场景下的ECU性能压力测试方案。
    的头像 发表于 09-26 14:25 3353次阅读
    ECU电控<b class='flag-5'>软件开发</b>及<b class='flag-5'>测试</b>介绍

    9月12日云技术研讨会 | ECU电控软件开发测试全流程解决方案

    本次研讨会,经纬恒润将结合业务团队多年来在软件开发测试领域的工程实践经验,分享探讨基于AutoSar架构的应用软件开发、基于MBD开发
    的头像 发表于 09-26 14:18 1384次阅读
    9月12日云技术研讨会 | ECU电控<b class='flag-5'>软件开发</b>及<b class='flag-5'>测试</b>全流程解决方案

    单元测试集成测试自动化工具

    CoverageMaster winAMS : 适用于嵌入式目标机代码单元测试/集成测试工具 全面支持嵌入式微机!验证嵌入式C/C++软件
    的头像 发表于 06-26 13:41 452次阅读
    <b class='flag-5'>单元测试</b>、<b class='flag-5'>集成</b><b class='flag-5'>测试</b>自动化工具

    接口测试的工具有哪些种类

    单元测试框架 单元测试框架主要用于测试单个模块或函数的功能。虽然它们主要用于开发阶段,但也可以用于接口测试。 1.1 JUnit (Jav
    的头像 发表于 05-30 15:07 717次阅读

    仿真测试软件测试的区别

    在当今软件开发和验证的领域中,测试是保证软件质量的关键环节。而在测试的众多方法中,仿真测试软件
    的头像 发表于 05-17 14:33 894次阅读

    嵌入软件单元测试工具的作用

    嵌入软件单元测试工具是现代软件开发过程中不可或缺的一环。它的作用在于帮助开发人员对软件中的各个单元
    的头像 发表于 04-23 15:31 435次阅读
    嵌入<b class='flag-5'>软件</b><b class='flag-5'>单元测试</b>工具的作用

    单元/集成测试服务

    单元/集成测试旨在证明被测软件实现其单元/架构设计规范、证明被测软件不包含非预期功能。经纬恒润
    的头像 发表于 02-29 13:27 383次阅读
    <b class='flag-5'>单元</b>/<b class='flag-5'>集成</b><b class='flag-5'>测试</b>服务

    Tessy—嵌入式软件单元测试/集成测试工具

    搭建测试环境、执行测试、评估测试结果并生成测试报告。目前Tessy被广泛应用在汽车电子客户中,在V模型
    的头像 发表于 01-15 14:39 835次阅读
    Tessy—嵌入式<b class='flag-5'>软件</b><b class='flag-5'>单元测试</b>/<b class='flag-5'>集成</b><b class='flag-5'>测试</b>工具

    什么是DevOps中的持续测试?持续测试如何融入DevOps?

    持续测试(CT) 是在整个软件开发生命周期(SDLC) 中自动测试软件应用程序和组件的实践。在 DevOps 中,持续
    的头像 发表于 01-09 09:10 568次阅读
    什么是DevOps中的持续<b class='flag-5'>测试</b>?持续<b class='flag-5'>测试</b>如何融入DevOps?

    软件测试活动有哪些?

    第三方软件测试是一种软件测试活动,旨在确保软件的质量、功能、性能和安全性等方面符合预期要求。 一
    发表于 01-08 11:11