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

news2024/9/27 12:09:38

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解决方案提供商——龙智:
官网:http://www.shdsd.com
电话:400-666-7732
邮箱:marketing@shdsd.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Deep-ML系列】Solve Linear Equations using Jacobi Method (雅可比迭代求解线性方程)

题目链接:Deep-ML 需要注意的是,np.diag 的返回值会根据输入参数的类型不同而有所不同: 输入为一维数组:np.diag 会返回一个以输入数组元素为对角线元素的对角矩阵。 输入为二维矩阵:np.diag 会返回输入矩阵的对角线元…

数组案例练习进阶版---对数组中的元素进行排序(选择法)

上期文章当中,我们一起了解了怎样查找数组中的元素,今天,再让我们来看一看怎样对数组中的元素进行排序吧。 再java中,关于数据的排序手段,多种多样,例如:选择法排序、冒泡法排序、快速排序等等…

Centos7.9操作系统kdump crash文件vmcore未生成问题

Centos7.9操作系统kdump crash文件未生成问题 一、背景说明1、问题背景 二、排查思路1、先了解下crashkernelcrashkernel设置方式示例如何配置crashkernel验证crashkernel配置 2、再了解下kdump2.1 Kdump 的基本概念2.1.1. 生产内核(Production Kernel)2…

WPF使用Direct2D绘制曲线

wpf使用Direct2D绘制曲线 Install-Package SharpDX Install-Package SharpDX.Direct2D1 Install-Package SharpDX.DXGI Install-Package SharpDX.Direct3D11 <Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xam…

告别繁复,三款PDF转图片工具让一切变得简单

作为一名刚刚踏入职场的新手&#xff0c;各种电子文档真的是让我手忙脚乱&#xff0c;尤其是PDF文件&#xff0c;它以其格式稳定、兼容性好而被广泛使用。然而&#xff0c;有时候我们需要将PDF文件中的内容转换成图片格式&#xff0c;以便在不同的场合下使用。今天就和大家分享…

如何用IP地址去申请SSL证书?

在当今社会&#xff0c;网络安全越来越重要&#xff0c;网站部署SSL证书是保障网络安全的重要方面。在大多数情况下都是用域名来申请SSL证书&#xff0c;但是有时候没有域名&#xff0c;或者域名不能用来申请SSL证书时&#xff0c;就需要用IP地址来申请SSL证书。下面是具体申请…

Stable Diffusion绘画 | 图生图-局部重绘(一)

使用 文生图 生成如下图片&#xff0c; 正向提示词&#xff1a; (best quality, masterpiece:1.2),1girl,wearing school uniform,in the school playground, 反向提示词&#xff1a; NSFW,(EasyNegativeV2:1.2),worst quality,low quality,monochrome, 点击&#x1f3a8;按…

ThinkPHP6与金仓数据库(Kingbase)集成:模型查询的解决方案

摘要&#xff1a; ThinkPHP6是一款流行的PHP框架&#xff0c;支持多种数据库。然而&#xff0c;对于金仓数据库&#xff08;Kingbase&#xff09;这种相对小众的数据库系统&#xff0c;开发者在使用ThinkPHP6进行模型查询时可能会遇到一些兼容性问题。本文将提供一种解决方案&a…

08.JAVA线程基础

1.线程介绍 单线程&#xff1a;同一个时刻&#xff0c;只允许执行一个线程 多线程&#xff1a;同一个时刻&#xff0c;允许执行多个线程 并发&#xff1a;同一时刻&#xff0c;多个任务交替执行。 并行&#xff1a;同一时刻&#xff0c;多个任务同时执行。 2.线程使用 方式一&…

对称二叉树 - 力扣(LeetCode)C语言

101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09;(点击前面链接即可查看题目) 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&…

【有手就行】:从无到有搭建前端VUE项目

前言 由于好久没正儿八经写过前端代码了&#xff0c;导致现在想自己创建个VUE项目搞点东西却连步骤都忘了。反正闲着也是闲着&#xff0c;就简单归纳下&#xff0c;就当整理下笔记吧。 直接开始吧 本次教程主要以VUE 2.x版本为介绍 第一步 环境准备 1.安装Node 从 Node官网…

战绩绿油油!全红婵巴黎奥运再度爆火,一个家庭兴旺的底层逻辑——早读(逆天打工人爬取热门微信文章解读)

上期点赞挺多呀&#xff0c;看来周六不上班的人真不少&#xff0c;羡慕呀&#xff01; 引言Python 代码第一篇 洞见 全红婵巴黎奥运再度爆火&#xff0c;我顿悟一个家庭兴旺的底层逻辑第二篇 股市 绿油油战纪结尾 引言 今天很晚 没办法 今天上班都差点迟到 有两点 一是早上开始…

CodeSys中处理(拼接)超长字符串

文章目录 1.需求2.目前的限制3.解决方案4.注意事项4.1.更改字符串的长度后还是被限制在32767或者32768 1.需求 目前有个需求&#xff1a;在CodeSys中&#xff0c;需要将上万甚至十几万条数据&#xff08;字符串&#xff09;汇总到一个字符串上。 2.目前的限制 我们知道默认使…

8–9月,​Sui Move智能合约工作坊将在台北举行

你对区块链和去中心化应用感兴趣吗&#xff1f;想深入学习Sui Move编程语言吗&#xff1f; 从8月10日到9月28日&#xff0c;Sui Mover社区将在每周六下午13:00–17:00举办精彩的工作坊&#xff0c;为期两个月&#xff0c;带你从零基础入门到高级进阶&#xff0c;全面掌握Sui M…

Gateway网关设置请求头乱码

问题描述&#xff1a; ​ 在做gateway用户认证过程中&#xff0c;我们将前端传过来的token字符串进行解析以后&#xff0c;将用户信息存入请求头往下传递的过程中&#xff0c;如果用户信息中存在中文&#xff0c;下游服务从请求头中获取到用户信息时会出现乱码 ​ 总体来说&a…

担心异构数据库迁移踩“坑”?听听大咖们怎么说

在技术升级和国产化战略的双重推动下&#xff0c;如何将来自Oracle、MySQL等异构数据库的数据无缝迁移至国产数据库&#xff0c;已成为企业持续发展的关键一环。 YashanDB Meetup第13期特别邀请首届迁移体验官用户代表、TechTalk社区创始人尚雷&#xff0c;YashanDB 售后服务负…

【python】Scrapy中常见的“Response Not Ready”或“Response Not 200”错误分析及解决

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

家用洗地机有什么推荐的吗?洗地机口碑榜前四名推荐

随着日常清洁需求的提升&#xff0c;如今洗地机已成为现代家居清洁的好帮手&#xff0c;承担着家庭卫生的重要角色&#xff0c;而一台高效、便捷的洗地机更是成为了众多家庭清洁卫生必备工具。 不过市场上的洗地机品牌众多&#xff0c;每个品牌下又有诸多系列&#xff0c;让人…

动态规划之——背包DP(入门篇)

文章目录 概要说明01背包模板例题题意概要思路code1code2 01背包的应用题题目来源思路code 完全背包模板例题题意概要思路code 概要说明 本文只讲了01背包和完全背包&#xff0c;至于其他背包问题后续补充 01背包 模板例题 点击这里 题意概要 思路 01背包的模板题 首先对…

SAM 图像分割算法计算物体表面积

参考: https://enpeicv.com/forum.php?mod=viewthread&tid=90&extra=page%3D1 使用SAM算法进行图像分割,计算出分割图像有多少像素,然后根据像素数量计算实际面积 SAM安装及模型下载: https://github.com/facebookresearch/segment-anything?tab=readme-ov-file…