随着汽车行业的发展,软件定义汽车已成为汽车产业达成的共识发展趋势,软件在汽车产品中也承担着越来越重要的角色,车身域各功能的实现,少则几千行代码,动辄百万行代码。随着汽车产业功能多样性以及复杂度的增加,传统的基于C代码开发的模式已不能满足某些特殊功能需求的实现,需要向更高级别的语言进化,实现复杂功能的开发。

C++语言的广泛应用

众所周知,C代码是面向过程的语言,具有执行速度快以及效率高的特点,在嵌入式开发领域占据很大的比重,是嵌入式系统、尤其面向底层的主要编程语言。但是随着汽车行业智能化以及网联化的发展,更多的是聚焦在复杂的应用以及算法开发上,对性能的要求就会非常高,比如智能驾驶,智能网联等这类项目,相比C语言,具有面向对象机制的C++更适合用于这类项目的开发。

此外,为适配SOA架构和并行处理大数据等更复杂的需求,AP(Adaptive AUTOSAR)平台正广泛地应用于诸如车载域控制器、自动驾驶和车联网等领域;而AP也是基于C++语言开发的,这也正是因为C++所具备的特点更能满足AP平台对高安全性以及高计算能力的要求。

•    C++兼容C语言的同时又引入了面向对象的机制。
•   封装,继承以及多态的特性使得C++中的类与对象呈现多样性。
•   C++中引入了一些特殊用法,比如const常量、智能指针、cast转换、引用等,使得代码更加安全。
•   C++引入了模板概念,实现了将类型参数化的泛型编程,提升了代码复用性;同时,基于模板类或模板函数的STL(标准模板库)使得开发更便捷。
•   C++中还提供了很多开源库,比如神经网络、加密、数学开源库等,为复杂的应用开发提供了更多便利。

如何高效地实施C++代码测试

随着汽车软件的复杂度以及代码量级的增加,主机厂和零部件供应商对代码质量的要求也越来越高,并寻求各种方式来提升代码质量,以尽早发现代码问题实现对项目的把控和交付。同时,ISO 26262以及ASPICE也对软件测试提出了明确的要求,即需要实施单元/集成测试。

在对软件进行单元测试和集成测试时,除了要满足相关需求测试的要求,还要考虑代码整个结构的覆盖度,测试过程因而比较繁琐。在面对复杂的C++代码项目时,如何才能高效地完成C++代码的单元测试和集成测试,最大化地实现自动化测试?北汇信息采用的自动化测试工具是Vector旗下的代码动态测试工具----VectorCAST/C++。

VectorCAST/C++

VectorCAST/C++工具是德国Vector公司的一款白盒测试工具,主要用于实现代码的单元测试和集成测试。它最大的特点,同时也是相比于其它同类工具最大的优势就在于,经受过多个大型量产项目实践的对C++高阶特性、Linux系统和CI平台的强力支持。

【北汇信息】VectorCAST | 嵌入式软件代码自动化测试方案-直播回放

支持C++11/14/17代码解析

VectorCAST/C++工具内置了权威的商业化前端解析工具EDG对代码进行解析,无论是基于C++11开发的,还是C++14又或者是C++17开发的,工具都可以完美支持C++11/14/17的特性。同时,针对C++复杂数据类型的使用,比如STL、模板、智能指针等,可实现图形化界面操作,无需过多添加测试代码,有效地提高了C++代码的测试效率。

(1)类的实例化

类在使用之前都需要进行类的实例化----对象创建,通过对象对类的成员属性以及成员方法进行访问,所以在编写测试用例时,需要完成实例化对象的创建。工具可以解析类的所有构造函数,并在测试用例编辑区开辟对象实例化区域,测试人员可根据实际测试需求选择匹配的构造函数来实例化对象。

(2)模板类/模板函数测试

在基于C++开发的代码中,模板的应用也非常广泛,模板的出现,实现了类型的参数化,真正做到代码的重用性。在针对函数模板和类模板进行测试时,VectorCAST/C++支持对模板函数自动插桩,实现图形化界面操作,无需编写测试代码。

此外,在对模板类或者模板函数进行测试之前需要先进行实例化,然后再进行模板的测试。

(3)容器类型数据测试

C++ STL标准模板库中的容器是用来存放各种数据结构对象的集合。关于容器类型的数据,在VectorCAST/C++中,工具支持对C++标准模板库的测试,可以对标准容器(string/vector/list/set/map等)、迭代器等进行解析,可直接在界面中进行赋值操作。

(4)智能指针测试

智能指针的使用解决了C++的内存回收问题,VectorCAST/C++支持解析智能指针,比如shared_ptr,unique_ptr等,可直接通过工具界面为参数赋值。

(5)支持对第三方库解析

在涉及到第三方库的代码测试中,VectorCAST/C++工具支持解析众多第三方库,并可针对相关库函数进行自动插桩,实现图像化界面操作。

集成实际交叉编译链

VectorCAST/C++可以在Windows和Linux平台中稳定运行,且支持众多主流的交叉编译链,比如Green Hills,Hightec,IAR,Tasking,Keil等。之所以支持众多主流编译链,是因为VectorCAST/C++是基于实际编译链进行测试的。

自动生成测试用例

VectorCAST/C++满足ISO26262和ASPICE中不同安全等级项目对覆盖度指标的要求,包括语句、分支、MC/DC等。同时支持基于不同覆盖度指标要求自动生成测试用例并自动填充输入值,可以有效的提高V2X项目的测试效率。

综上所述,在汽车电子未来发展中,大量复杂C++代码会得到广泛使用。借助工具对C++代码的完美解析,都可以在工具中找到对应的解决方案,实现图形化界面的操作,同时借助工具自身的测试优势,可以有效地提高测试效率,实现C++代码软件的自动化测试。

结束语

本文主要介绍了VectorCAST/C++工具在基于C++开发的汽车电子软件项目中的应用,当前工具也被广泛用于智能网联、智能驾驶的量产项目中。VectorCAST/C++工具不仅适用于C++测试,也适用于C测试,且通过了南德认证,是一款可用于功能安全认证的高效的代码动态自动化测试工具,已广泛用于众多国内知名主机厂和零部件厂商。北汇信息作为Vector在中国的合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。如果你还在寻找合适的C/C++代码测试工具,不妨来试一试VectorCAST/C++工具,定会让你有心动的感觉。此外,在过去的C++测试项目中,我们也积累了一些测试经验,期待与大家的交流与探讨。

注:部分图片来自于Vector。
作者:北汇信息-米粒

喜欢本篇文章的话记得

VectorCAST/C++在汽车电子C++代码测试的应用相关推荐

  1. PHP特级课视频教程_第二十八集 PHP搜索代码测试_李强强

    2019独角兽企业重金招聘Python工程师标准>>> 教程内容: 1.linux下网站开发 2.samba服务器网站共享 3.网站权限设计 4.php搜索代码测试 5.php中sp ...

  2. SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...

  3. 用GPUDirect RDMA技术做的代码测试

    用GPUDirect RDMA技术做的代码测试 [复制链接]     sisiy 电梯直达 楼主 发表于 2015-7-13 21:06:28|只看该作者 要应用GPUDirect RDMA技术,首先 ...

  4. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  5. java. 端序_c代码测试本机处理器的端序

    1.端序简介(维基百科): 端序(Endianness),又称字节序.尾序.在计算机科学领域中,端序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序. ...

  6. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  7. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  8. python入门代码-Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  9. Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

    -------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...

最新文章

  1. Python 3 —— 使用 PyMySQL 操作 MySQL8
  2. 图像放大算法一:最近邻法(Nearest Interpolation)
  3. ListActivity的onListItemClick不响应的解决办法
  4. maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class for JSP
  5. ChineseGLUE(CLUE):针对中文自然语言理解任务的基准平台
  6. resin php mysql_RedhatAS4.0上安装Apache2+PHP5+MySQL+Resin+SSL+GD+webalizer
  7. jmeter接口自动化部署jenkins教程
  8. python按位定义数据_《Python3智能数据分析快速入门》—2.2.5 按位运算符
  9. 自动化部署之jenkins及简介
  10. python-random种子
  11. npm以及gulp相关操作
  12. 关于mongodb的可视化工具:nosql manager for mongodb
  13. 对称二叉树c++_数据结构学习(C++)——平衡二叉树
  14. Oracle与MySQL使用区别
  15. 访问网址(使用CDN)时 智能DNS调度 与 用户定位调度(根据IP定位)
  16. 计算机技术与园林,计算机技术在园林绿化设计中的应用
  17. U盘不能复制超过4G的文件解决方法
  18. python PDF文件拆分与合并
  19. 周记0053:0054
  20. 麻省理工的服务器位置,美国麻省理工大学位置在哪里?

热门文章

  1. 宝塔面板网站一打开cpu百分百_解决宝塔面板CPU占满100%,负载100%网站缓慢等问题...
  2. WIN7修改“桌面”存储位置
  3. 二十几岁的女孩应该有这几点思想
  4. C语言网络聊天室程序
  5. el-table高亮显示
  6. 成为游戏开发程序员,要学些什么
  7. Caffeine - Caches - Removal
  8. FFMPEG监控拉流,向流媒体服务器推流
  9. 谈谈我当韭菜的投机经历
  10. jmeter中控制器的使用