ECU软件开发从业10年+一点感悟

文摘   2025-01-13 07:19   上海  
刚工作时,做ECU应用层软件开发,眼里只有各种技术细节,就想立马掌握核心的控制逻辑和算法;然后过了两年开始关注软件架构和技术方案等,以期待能够建立起自己的技术壁垒;再后来发现当产品出了问题,这时不管你的软件有没有问题,出了问题软件先查,不管有没有问题,证据拿来;最后发现做一个非垄断性技术的软件,做软件可不是埋头就能做好,还得从整个公司和整个项目的组织架构来理解。
在这个弱肉强食的工作环境下,得先认清自己角色的地位,掂量自己有几斤几两,再去思考自己要做什么,能做什么,怎么去做,即所谓:

本文回顾自己10+年的多段工作经历,来分享点感悟:认清形势,理解规则,最佳实践。

1 你所在软件团队的地位怎样

见过强势的软件团队,它就像客户爸爸,它说是什么就是什么,别人使唤不动。什么概念呢,比如出了问题,它说它没问题,它可以推动让系统,硬件和测试去查问题;客户需求或内部需求来了,它可以说从技术层面分析下来做不了,或者这个节点我交付不了。

见过弱势的软件团队,它为“人民”服务,哪里需要去哪里,不管刀山还是火海,它都得去。什么概念呢,出了问题,不管是客户的,生产的,系统的,硬件的,测试的,都得软件先查;需求来了,系统不管,硬件不管,软件自行理解分析消化,然后设计测试写文档报告,最后还得经受质量和测试的双重考核,也许稍有夸大成分。

source: 某汽车汽车零部件公司的组织架构
当然林子大了什么鸟都有,其他的见过也经历过,为什么会出现地位差别如此悬殊的软件团队?先得从组织架构说起,即各自的势力范围,或者说老板给谁的支持力度最大(权与钱)。公司情况不同,自然其组织架构中各方的底气不一样,比如从销售,生产,质量,人力,研发等团队来说:有些企业销售最大,有些企业生成最大,有些企业人力最大,大家可以根据自己的经验对号入座下...... 这就好比你的出生背景或社会阶级,决定你有无发展前景,或者你要发展的困难等级。所以当你身处一个软件团队,这是你首先需要认清的点,认清形势是做好下一步的前提
然后还得是老板/领导,领导在其位,领导能争取多少推掉多少,这非常重要。最后可能是软件团队是否握有垄断性技术,好像新能源时代也没有多少垄断性技术。
为什么一开始就说这些呢?因为近几年我发现大多数企业(不管哪种性质的企业)的研发流程是不成熟的,我所说的不成熟在于所定义的研发流程与实际执行情况存在或多或少的脱节现象,此时做事主要不是凭流程,而是凭气势,即弱肉强食。
那有什么解法吗?我只能说,不管怎样,搞清楚研发流程很重要。为什么?

2 软件开发的规则制高点--研发流程

曾经被一个工程师次次都拿研发流程来说事,结论就是按咱的流程,因为你没给需求,所以我没法做。然而实际情况就是纸上谈兵的流程根本就没有在实际项目中应用,但你却无力反击,流程确实这么规定的。当上升到老板那去,老板肯定不会说咱不按那个狗屎的流程来这样ZZ不正确的话。

因为流程或制度的目的就是服务于效率、规范性和一致性,确保企业运作有序,减少错误和浪费,提高工作效率,它们定义了做事的路径、方法、责任分配以及行为准则,最关键的是这些都是老板们最终拍板决策的。所以说流程就是规则制高点,流程要重视,要理解到位,流程是很有用的。

首先我们可以从项目角度来了解,具体可以了解下图所示的一个汽车ECU软件研发项目的流程以及主要内容,这里不展开描述,可自行理解。


然后从研发角度来了解ECU产品的研发流程,可以通过ASPICE所定义的V流程来看:

研发流程包含的内容很多,自然地,会涉及到的多个部门协同合作,比如系统,硬件,软件,采购,质量,项目管理,销售等部门,那么这些部门之间如何进行协同工作?我理解核心是围绕着:什么时候,谁经过哪些活动必须交付什么样的东西以此为基础来推动各部门各角色的协同工作。
比如某个节点的软件释放与交付(Products),假设需要交付正式版的软件以及软件测试报告,那么由谁来集成软件,又由谁输入需要集成的软件内容,由谁来负责测试集成好的软件。更细一点,对于软件集成者,具体来自谁的需求,应用层软件经理以规定的文件形式输入软件释放内容,底层软件经理以规定的文件形式输入BSW目标版本等;然后软件集成者具体负责数据仓库的版本管理,上传释放软件及其相应的文件等,最终输出包括软件在内的其他交付物等;软件测试需要测试软件各项需求。
这只是简单的一个举例说明,实际操作可能很复杂,对于每个活动,核心在你的交付物是什么,你的输入是什么。当建立起了这个基准,那么当别人找你时,你看他是不是你的输入,你看他是不是你的输出,如果都不是,从岗位职责上你可以不理他,从道义上那就看你的心情。

3 软件开发的V流程

当认清了形式,了解了规则之后,还有非常重要的一点:应用。在自己已建立的一套完整且标准的软件开发流程至上,灵活应用于你当前所在的岗位。
我觉得这方面可以参透ASPICE或功能安全所提出的流程,结合主流工具链,从需求分析开始,接着软件架构,详细设计,单元测试,软件集成到HIL测试。

source:https://www.embitel.com/blog/embedded-blog

上面多次涉及的V流程,这里稍微说明:V流程是一种经典的ECU软件开发流程模型,它强调软件开发过程的系统性和阶段性,形状像字母 “V”,左边是自上而下的分解过程,包括从系统级需求逐步细化到软件单元的详细设计;右边是自下而上的验证过程,从括单元测试、集成测试到系统测试等,通过逐步验证确保软件质量。个人认为V流程的核心要素是正确性和可追溯性。软件开发V流程各阶段具体是:

  • 软件需求分析这是软件开发的起始阶段,主要目的是明确软件需要实现的功能和性能等要求,它要收集来自系统层面的需求,并且要考虑用户需求、法规要求等诸多因素。通常采用DOORS和Polarion等工具来管理需求。

  • 软件架构设计:基于软件需求,设计软件的整体架构,确定软件的模块划分、模块之间的接口以及软件运行的基本框架。比如以底盘控制ECU软件为例,可能会划分出悬挂控制模块、转向控制模块等,并且定义它们之间如何通信和交互。通常采用EA和Visio等工具以图形化的方式构建软件架构模型。

  • 软件详细设计:在软件架构的基础上,对每个软件模块进行详细的设计,包括模块内部的逻辑、算法和数据等。对于应用层软件开发主要使用MATLAB/Simulink,而底层软件开发则采用VS Code等。

  • 软件单元测试:对软件/模型中的最小可测试单元进行测试,验证其功能是否符合设计要求。单元测试主要关注单元的内部逻辑,比如测试一个计算电机扭矩的函数,输入不同的参数,验证其输出是否正确。常用Tessy,Polyspace和TPT等工具进行静动态单元测试。

  • 软件集成和集成测试将经过单元测试的软件模块按照软件架构设计进行集成,形成完整的软件系统,并对集成后的系统进行测试,主要检查模块之间的接口是否正确,以及整个系统的功能是否满足需求。

  • 软件合格性测试确定软件是否满足规定的要求,以判断软件是否有资格被验收或发布。这些测试活动可能包括功能测试、性能测试、可靠性测试等多种类型的测试,主要目的是验证软件是否达到预期的质量标准,从而决定软件是否可以进入实际使用阶段或交付给用户。通常采用HIL测试形式,将ECU硬件与虚拟的被控对象模型连接起来进行测试,通过模拟真实的硬件环境,对ECU软件进行更接近实际工况的测试。

总之,软件开发逃离不了上述的6个阶段,也许因企业而异,因环境而异,但本质上一定会涉及到这六个阶段,也许有时候裁剪掉(省掉了)而没有体现,但是可以通过最佳实践消化吸收这6个阶段,以此建立起自己的流程标准。当然开发流程离不开开发工具,没有好的开发工具支持,开发流程很内耗,但记住工具只是工具,关键还是自己心里有一把标尺。

4 小结

写到这里,其实小结很简单:认清形势,理解规则,最佳实践


创作不易,欢迎点赞再看收藏关注

汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章