当前位置: 首页 > news >正文

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

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

相关文章:

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

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

「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)

概述 队列,是一种基本的数据结构,也是一种数据适配器。它在底层上以链表方法实现。 队列的显著特点是他的添加元素与删除元素操作:先加入的元素总是被先弹出。 一个队列应该应该是这样的: --------------QUEUE-------------——…...

C++ STL中 `set` 和 `multiset` 简单对比

在 C STL 中,set 和 multiset 都是用于存储唯一或重复元素的关联容器,但它们在处理元素的唯一性和特性方面有显著的区别。以下是这两个容器的详细比较: 1. 数据结构 set:基于红黑树(自平衡的二叉搜索树)实…...

代码随想录算法训练营Day20 | Leetcode 235 二叉搜索树的最近公共祖先 Leetcode 701 二叉搜索树中的插入操作

Leetcode 235 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 代码随想录题解:代码随想录 (programmercarl.com) 思路:相比普通二叉树更简单,因为二叉搜索树的节点…...

第九届世界3D渲染大赛:赛程安排、赛事规则

第九届世界3D渲染大赛即将拉开帷幕,汇聚全球顶尖CG艺术家,展现最具有视觉盛宴的CG创作。那么该赛事的行程如何安排呢,赛事规则又是什么呢?本篇整理了赛事安排、赛事规则等内容,希望帮助大家。 赛事主题:Kin…...

RocketMQ5.0 Consumer Group

消费者分组的概念 消费者分组(Consumer Group)是指一组消费同一类消息的消费者实例。每个消费者分组有一个唯一的名称,用于标识该分组。消费者分组的设计使得消息能够被多个消费者实例并行消费,同时确保每条消息只被一个消费者实例…...

vulnhub之serial

这次我们来做这个靶场 项目地址https://download.vulnhub.com/serial/serial.zip 使用vm新建虚拟机 以下为注意事项 第一步,收集资产 扫描靶场ip netdiscover -i eth0 -r 192.168.177.0/24 抓个包 扫描目录 看到了cookie中有一个user Tzo0OiJVc2VyIjoyOntzOj…...

卷积神经网络(CNN)简单原理与简单代码实现

卷积神经网络(CNN)简单原理与简单代码实现 卷积神经网络(CNN)简单原理基本原理卷积层(Convolutional Layer):激活层(Activation Layer):池化层(Po…...

实时数仓分层架构详解

首先,我们从数据仓库说起。 数据仓库的概念可以追溯到20世纪80年代,当时IBM的研究人员提出了商业数据仓库的概念。数据仓库概念的提出,是为了解决和数据流相关的各种问题,特别是多重数据复制带来的高成本问题。 数据仓库之父Bill …...

计算机“八股文”在实际工作中是助力、阻力还是空谈?

“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考…...

新160个crackme - 022-CM_2

运行分析 需破解Name和Serial,输入的小写字母都会变为大写字母 PE分析 C程序,32位,无壳 静态分析&动态调试 发现关键字符串 ida动态调试,发现Name和Serial长度需要大于5,且Serial前6位明文爆出,6287-A …...

在.c和.h 文件里定义数组的区别

在C语言开发中,掌握如何在.c文件和.h文件中合理定义数组,对于维护代码的模块化和避免不必要的编译错误至关重要。本文将探讨在这两种类型的文件中定义数组时需要注意的几个关键方面,包括定义性质、作用域、重复定义问题以及外部可见性等&…...

使用Step Functions运行AWS Backup时必备的权限要点

引言 在尝试从Step Functions执行AWS Backup的按需备份时,我在权限方面遇到了一些困难。为了备忘,我将这些经验写成这篇文章。 概述 从Step Functions执行AWS Backup时,需要分配以下权限: AWS Backup相关权限 执行备份的权限…...

强化JS基础水平的10个单行代码来喽!(必看)

目录 生成数组 数组简单数据去重 多数组取交集 重新加载当前页面 滚动到页面顶部 查找最大值索引 进制转换 文本粘贴 删除无效属性 随机颜色生成 生成数组 当你需要要生成一个0-99的数组 // 生成一个0-99的数组 // 方案一 const createArr n > Array.from(new A…...

大模型学习笔记 - 大纲

LLM 大纲 LLM 大纲 1. LLM 模型架构 LLM 技术细节 - 注意力机制LLM 技术细节 - 位置编码 2. LLM 预训练3. LLM 指令微调 LLM 高效微调技术 4. LLM 人类对齐 LLM InstructGPTLLM PPO算法LLM DPO 算法 5. LLM 解码与部署6. LLM 模型LLaMA 系列7. LLM RAG 1. LLM 模型架构 大模…...

苹果电脑可以玩什么小游戏 适合Mac电脑玩的休闲游戏推荐

对于游戏爱好者而言,Mac似乎并不是游戏体验的首选平台。这主要是因为相较于Windows系统,Mac上的游戏资源显得相对有限。不过,这并不意味着Mac用户就与游戏世界绝缘。实际上,Mac平台上有着一系列小巧精致且趣味横生的小游戏&#x…...

浅谈KMP算法(c++)

目录 前缀函数应用【模板】KMP题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例 1 解释数据规模与约定 思路AC代码 本质不同子串数 例题讲解[NOI2014] 动物园题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路AC代码 [POI2006] OKR-Periods of …...

关于C++编程注意点(竞赛)

赛前准备 多复习 重中之重, 多刷题 确保手感 参加几场模拟赛,熟悉流程 熟悉 Linux 系统,否则你将会手忙脚乱 放松心情,调整心态,分数 实力 心态 赛中注意 输入输出方面 在数据范围超过 时尽量使用 scanf pr…...

Markdown文本编辑器:Typora for Mac/win 中文版

Markdown 是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档。Typora 支持且仅支持 Markdown 语法的文本编辑,生成的文档后缀名为 .md。 这款软件的特点包括: 实时预览:Typora 的一个显著特点是实时预览&#x…...

Mysql-窗口函数一

文章目录 1. 窗口函数概述1.1 介绍1.2 作用 2. 场景说明2.1 准备工作2.2 场景说明2.3 分析2.4 实现2.4.1 非窗口函数方式实现2.4.2 窗口函数方式实现 3. 窗口函数分类4. 窗口函数基础用法:OVER关键字4.1 语法4.2 场景一 :计算每个值和整体平均值的差值4.2.1 需求4.2…...

Python3 爬虫 数据抓包

一、数据抓包 所谓抓包(Package Capture),简单来说,就是在网络数据传输的过程中对数据包进行截获、查看、修改或转发的过程。如果把网络上发送与接收的数据包理解为快递包裹,那么在快递运输的过程中查看里面的内容&…...

js强制刷新

在JavaScript中触发强制刷新通常指的是强制浏览器重新加载页面,忽略缓存。以下是几种实现强制刷新的方法: ### 使用 location.reload() 这是最简单的方法,它会重新加载当前页面。 javascript location.reload(true); // 传入true参数表示强制…...

yolov5 part2

two-stage (两阶段):Faster-rcnn Mask-Rcnn系列 one-stage (单阶段):YOLO系列 最核心的优势:速度非常快,适合实时监测任务。但是缺点也有,效果可能不好 速度较慢在2018…...

Hive3:表操作常用语句-内部表、外部表

一、内部表 1、基本介绍 (CREATE TABLE table_name ......) 未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/ware…...

【PXE+kickstart】linux网络服务之自动装机

PXE: 简介:PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式,只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式,工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文…...

vmware ubuntu虚拟机网络联网配置

介绍vmware虚拟机配置基础网络环境,同时连接外网(通过桥接模式),以及ubuntu下输入法等基础工具安装。 本文基于ubuntu22.04,前提虚拟机已经完成安装。本文更多是针对vmware虚拟机的设置,之前有一篇针对ubun…...

Vue3_对接声网实时音视频_多人视频会议

目录 一、声网 1.注册账号 2.新建项目 二、实时音视频集成 1.声网CDN集成 2.iframe嵌入html 3.自定义UI集成 4.提高进入房间速度 web项目需要实现一个多人会议,对接的声网的灵动课堂。在这里说一下对接流程。 一、声网 声网成立于2014年,是全球…...

慧灵科技:创新引领自动化未来

在智能制造与自动化生产日益成为主流趋势的今天,慧灵科技凭借其卓越的技术创新能力和产品优势,在机器人领域崭露头角。 自2015年在深圳成立以来,慧灵科技专注于核心技术的研发与产品创新,‌为各行业提供性价比极高的机器人产品及自…...

【TiDB 社区智慧合集】TiDB 在核心场景的实战应用

作者: 社区小助手 原文来源: https://tidb.net/blog/5cc4ec70 杭州银行 杭州银行采用 TiDB 作为其核心系统数据库,标志着银行资产规模和业务复杂性的大幅增长。通过"分布式透明化"的思考,杭州银行实现了从传统 Orac…...

JetBrains:XML tag has empty body警告

在xml文件中配置时,因为标签内容为空,出现黄色警告影响观感。 通过IDE配置关闭告警...