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

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

3天内不再提示

VectorCAST在汽车电子C++代码测试的应用

北汇信息POLELINK 2022-09-02 10:16 次阅读


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

1

C++语言的广泛应用

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

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

• C++兼容C语言的同时又引入了面向对象的机制。

• 封装,继承以及多态的特性使得C++中的类与对象呈现多样性。

• C++中引入了一些特殊用法,比如const常量、智能指针、cast转换、引用等,使得代码更加安全。

• C++引入了模板概念,实现了将类型参数化的泛型编程,提升了代码复用性;同时,基于模板类或模板函数的STL(标准模板库)使得开发更便捷。

• C++中还提供了很多开源库,比如神经网络、加密、数学开源库等,为复杂的应用开发提供了更多便利。

POLELINK

2

如何高效地

实施C++代码测试

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

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

VectorCAST/C++

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

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

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


b15134da-296c-11ed-9ade-dac502259ad0.png

1

类的实例化

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


b1898ca4-296c-11ed-9ade-dac502259ad0.png

2

模板类/模板函数测试

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


b1ba7e0e-296c-11ed-9ade-dac502259ad0.png

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


b1ecf352-296c-11ed-9ade-dac502259ad0.png

3

容器类型数据测试

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

b22ea57c-296c-11ed-9ade-dac502259ad0.png

4

智能指针测试

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


b25a5492-296c-11ed-9ade-dac502259ad0.png

5

支持对第三方库解析

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


b29c9a50-296c-11ed-9ade-dac502259ad0.png

集成实际交叉编译链

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


b2cd5744-296c-11ed-9ade-dac502259ad0.png

自动生成测试用例

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


b2f5889a-296c-11ed-9ade-dac502259ad0.png

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

3

结束语

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


注:部分图片来自于Vector。

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

    关注

    3012

    文章

    7739

    浏览量

    164803
收藏 人收藏

    评论

    相关推荐

    ModusToolbox 3.2c代码中包含c++代码的正确步骤是什么?

    文件,但要在 main.c 中 #include 它们时 会导致构建失败。 将 main.c 重命名为 main.cpp 会导致标准 XMC 库函数(如 XMC_GPIO_SetMode)中出现许多错误。
    发表于 07-23 08:21

    C++语言基础知识

    电子发烧友网站提供《C++语言基础知识.pdf》资料免费下载
    发表于 07-19 10:58 6次下载

    OpenCV图像识别C++代码

    的头文件 您的C++代码中,包含以下必要的头文件: # include # include # include # include # include # include # include 读取图像
    的头像 发表于 07-16 10:42 1083次阅读

    任意波形发生器汽车电子测试中的应用

    随着汽车电子技术的飞速发展,汽车电子系统日趋复杂,对测试技术的要求也越来越高。任意波形发生器(Arbitrary Waveform Gene
    的头像 发表于 05-15 15:37 368次阅读

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    c语言,c++,java,python区别

    操作系统、嵌入式系统等对性能要求较高的场景。C语言的语法相对简单,学习曲线较平缓,也是学习其他高级语言的入门语言。 C++C++C
    的头像 发表于 02-05 14:11 1358次阅读

    汽车emc测试项目包括哪些 汽车电子emc测试标准

    汽车EMC测试项目是为了评估汽车电子设备电磁环境下的抗干扰能力,以确保车辆的正常运行和安全性。以下是关于
    的头像 发表于 01-31 14:32 2449次阅读

    C++简史:C++是如何开始的

    MISRA C++:2023,MISRA® C++ 标准的下一个版本,来了!为了帮助您做好准备,我们介绍了 Perforce 首席技术支持工程师 Frank van den Beuken 博士撰写
    的头像 发表于 01-11 09:00 426次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的

    VectorCAST 对基于***的软件代码开发支持

    的技术挑战,其中之一就是确保国产芯片开发和应用的质量和可靠性。VectorCAST工具的应用为解决这一挑战提供了强大的支持,它具有丰富的测试功能,有助于确保基于国产芯
    的头像 发表于 12-14 08:25 400次阅读
    <b class='flag-5'>VectorCAST</b> 对基于***的软件<b class='flag-5'>代码</b>开发支持

    C语言和C++中那些不同的地方

    C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C++
    的头像 发表于 12-07 14:29 773次阅读
    <b class='flag-5'>C</b>语言和<b class='flag-5'>C++</b>中那些不同的地方

    c++怎么开始编程

    应用程序、嵌入式系统和网络应用程序等各种领域。 开始编程之前,你需要安装C++的编程环境。首先,你需要下载并安装一个编译器,比如微软的Visual Studio、GNU的GCC或者Clang。这些编译器可以将你的C++
    的头像 发表于 11-27 15:56 732次阅读

    c++多行注释快捷键

    C++中,多行注释(也称为块注释)是一种用于注释大段代码或多个语句的方法。当你希望暂时禁用一些代码或者解释特定部分代码的作用时,多行注释是
    的头像 发表于 11-22 10:24 6770次阅读

    C/C++语言学习大全套

    电子发烧友网站提供《C/C++语言学习大全套.rar》资料免费下载
    发表于 11-18 14:33 2次下载
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>语言学习大全套

    C++之父新作带你勾勒现代C++地图

    为了帮助大家解决这些痛点问题,让大家领略现代C++之美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他亲自操刀写就了这本《C++之旅》!
    的头像 发表于 10-30 16:35 696次阅读
    <b class='flag-5'>C++</b>之父新作带你勾勒现代<b class='flag-5'>C++</b>地图

    使用VectorCAST MATLAB Toolbox获取代码覆盖度的基本步骤

    不同阶段的常用方法,用于有效验证生成的嵌入式代码。SIL测试目的是验证嵌入式代码的正确性,甄别潜在的问题,并评估程序的初步性能,一般PC上即可执行;PIL则须运行在物理目标板上,主要
    的头像 发表于 10-26 11:06 883次阅读
    使用<b class='flag-5'>VectorCAST</b> MATLAB Toolbox获取<b class='flag-5'>代码</b>覆盖度的基本步骤