草庐IT

从OTA测试变革浅析OTA测试系统升级方向

Polelink北汇信息 2023-04-13 原文

OTA测试的变革

自去年以来,OTA逐渐开始从少数“高端玩家”的卖点,成为汽车行业普遍应用的功能,各传统或新兴OEM都逐步开始在OTA上做布局,而随之而来的就是整个OTA功能从研发、测试到实际应用的全面开花。

我们知道,整车任何一项功能在车辆实际投产前都会进行测试,以验证其功能完备性,OTA同样也不例外,而OTA功能本身几乎涉及到了整车各大功能域,其测试难度和复杂性也有所上升。在此前几篇OTA相关文章内,我们已经详细介绍了OTA测试的方法及其测试重点,并通过北汇已经落地的实际案例,分享了OTA测试的解决方案。作为OTA测试的先行者,今天我们来继续看一看,OTA功能的普及为整个OTA测试领域带来了哪些新的变化。

地位进一步提升

如果说之前OTA功能还是加分项,那么很有可能在这两年以后,OTA功能就会变成像手机拍照一样“我可以不用,但不能没有”的基本功能。从各大OEM对于OTA相关功能研发的投入就可以看的出来,OTA功能的地位相较于以前有进一步的提升,甚至不少厂家已经将其拆分出来作为一个专门的功能域,这也足以凸显当前OTA功能的重要程度。而OTA测试作为OTA功能的保障,地位也自然随之水涨船高。

研发周期进一步压缩

当前国内汽车市场的竞争日趋激烈,整车研发的周期相较于前些年已经被压缩了很多,各个功能域的研发时间都会随之压缩,只是对于OTA来说,对这个变化的感知会更加明显。现在车辆很多功能都是在交付后逐步实现的,而可以这样做的前提,便是车辆具备OTA功能,因此可以说,良好的OTA功能是保证车辆后续其他功能正常开通的重要基石,而OTA本身也是用户直接体验的基本功能,因此OTA功能的开发周期自然会受到更严重的压缩。

北汇新一代OTA测试解决方案

相信大家在看到文章标题的时候,就已经开始感兴趣,为什么我们要推动OTA测试解决方案升级。其实在我们完成了初代OTA自动化/半自动化测试解决方案的设计后,一边积极推进方案落地,为客户提供优质服务的同时,也同时在积极思考下一代的OTA测试解决方案。原因也很简单,初代方案可以解决有无问题,但无法解决我们对OTA测试的更高要求,与此同时,越来越多的OEM对OTA测试产生兴趣,行业的发展也对测试方案提出了新的要求。基于以上需求,我们在初代方案落地的同时也完成了下一代测试方案的构想。相较于上一代的方案,我们主要聚焦于以下问题:

更完整的测试覆盖度

新的方案将部件级,系统级和实车级测试做了统筹规划,可以在一套测试系统内涵盖部件级,系统级和实车级的OTA测试,并由统一的管理终端进行测试管理。在此基础上,我们还可以将测试平台适配到更多硬件系统内(机柜,小型车载机箱等)。

更广泛的测试兼容度

在新的方案中,我们对测试流程做了抽象,从而可以使其变得方便配置和调整。在不同车型内,OTA流程往往存在细微差异,而在新的方案内,这种调整可以通过配置文件等方式快速进行适配,从而达到快速适配新车型的目的,缩短开发周期,提升测试系统兼容性和测试效率。

更自由的系统扩展度

新的测试解决方案虽然立足于OTA测试,但不仅仅局限于OTA测试,统一的接口带来的是更大自由度的扩展性,只要遵循相同的接口,那么各种不同的工具,插件,硬件设备都可以被容纳进测试系统内,成为测试系统的一部分,实现不同的功能。

新一代OTA测试解决方案

北汇信息基于第一代OTA测试解决方案研发的第二代OTA测试解决方案,在兼有第一代系统完整的车辆电子电器系统仿真及测试系统的基础上,整体架构采用“1+N+3”的形式:“1”代表了统一的测试管理平台Pavelink,“N”代表可兼容多种测试工具、测试硬件,“3”则代表了部件,台架,实车三种测试场景全覆盖。

谈到第一代测试方案,相信看过此前文章的大家不会陌生,我们通过第一代方案解决了OTA测试有无问题,将OTA测试从“通过输出看输出”的“黑盒测试”变成了车内全链路监控,全链路分析的“白盒测试”。与此同时,我们通过多年技术积累,具备了车内各类信号仿真的能力,可以将OTA核心部件脱离实车,来执行子系统层面的测试,甚至可以将某个部件单独取出,执行部件级测试,做到OTA问题早发现,早修正。

Pavelink作为北汇信息自研的测试管理平台,是整个解决方案的核心,承担着测试任务创建管控,测试工程下发执行,测试结果收集统计 ,测试日志记录存档等一系列功能。其基于服务器-客户端模式开发,可以实现服务器远程访问,无需亲临测试现场即可随时关注测试动向。而所有测试结果和测试数据均汇聚于服务器内,则意味着平台可以对整体测试情况进行统计和分析,从而做到全局监控,全局统计,全局评估。除此之外,布置在客户端内的代理引擎为多种工具提供了统一接口,使其可以被兼容在管理平台的测试工程内,这样无论是CANoe工程,抑或是程控设备,还是自主开发的工具,插件等都可以成为测试工程的一部分,实现我们的测试目的。

在测试环境方面,新一代解决方案可以运行在测试台架,测试机柜以及小型车载测试系统内,从而为部件级,系统级以及实车级测试提供硬件支持。无论测试机柜还是车载系统,北汇信息均可以针对不同需求进行定制开发,并在管理平台内做相应适配,从而在通用化基础上满足客户各类特殊需求。

而在自动化方面,我们通过和用户提供的服务器接口进行深度对接,可定制开发服务器自动控制模块,实现测试任务自动生成,自动下发,后台数据实时监控等功能,使得压力测试可以摆脱对人的依赖,24小时连续执行,极大的提升了测试效率。

最后,通用化的接口为管理平台的扩展奠定了基础。只要符合接口定义的模块,都可以直接被包含进测试逻辑内,通过函数进行相关调用,北汇信息自研的代理引擎CANoe Agent可以将所有指令进行汇总,并进行接口转化,以供不同的测试模块进行调用,从而使整个系统可以常用常新。

北汇信息一直致力于为客户提供更优质的解决方案,不仅仅解决有无问题,更希望从客户角度出发,提供更通用,更便捷和更全面的解决方案。对于OTA测试而言,前后两代方案举重若轻的背后是数年的潜心技术积累,希望我们的方案可以助力更多的客户解决OTA测试的需求,也希望可以为我们整个国内汽车行业的进步添一份力量。
如果大家对我们的方案感兴趣,或者有相关测试需求,也欢迎和我们联系,做更深入的技术沟通。


喜欢本篇文章的话记得💬评论💖点赞⭐收藏
➕更多技术文章直播课程,敬请持续关注北汇信息➕
⬇️业务咨询请私信北汇信息或在官网留言⬇️
📩📩📩

有关从OTA测试变革浅析OTA测试系统升级方向的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  5. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  9. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  10. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

随机推荐