1 你所在软件团队的地位怎样
见过弱势的软件团队,它为“人民”服务,哪里需要去哪里,不管刀山还是火海,它都得去。什么概念呢,出了问题,不管是客户的,生产的,系统的,硬件的,测试的,都得软件先查;需求来了,系统不管,硬件不管,软件自行理解分析消化,然后设计测试写文档报告,最后还得经受质量和测试的双重考核,也许稍有夸大成分。
2 软件开发的规则制高点--研发流程
曾经被一个工程师次次都拿研发流程来说事,结论就是按咱的流程,因为你没给需求,所以我没法做。然而实际情况就是纸上谈兵的流程根本就没有在实际项目中应用,但你却无力反击,流程确实这么规定的。当上升到老板那去,老板肯定不会说咱不按那个狗屎的流程来这样ZZ不正确的话。
因为流程或制度的目的就是服务于效率、规范性和一致性,确保企业运作有序,减少错误和浪费,提高工作效率,它们定义了做事的路径、方法、责任分配以及行为准则,最关键的是这些都是老板们最终拍板决策的。所以说流程就是规则制高点,流程要重视,要理解到位,流程是很有用的。
首先我们可以从项目角度来了解,具体可以了解下图所示的一个汽车ECU软件研发项目的流程以及主要内容,这里不展开描述,可自行理解。
然后从研发角度来了解ECU产品的研发流程,可以通过ASPICE所定义的V流程来看:
3 软件开发的V流程
上面多次涉及的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,备注:公司+职务入群。仅限汽车从业人员。