广告

如何成为一名优秀的汽车软件工程师

2022-05-25 汽车电子与软件 阅读:
本篇文章是一名汽车工程师基于个人工作经验总结出来的4点浅谈一下成为优秀汽车软件工程师需要具备哪些特质:

xaKednc

基于个人工作经验来谈以下几点:
  • 汽车软件工程师的最重要技能
  • V流程引发的所思所想
  • Bug修复引发的所思所想
  • 汽车软件工程师如何精进技能

01 

汽车软件工程师的最重要技能

人到中年,感觉以前听的大道理都是人生真理,比如"求上得中,求中得下"。先来看参考[1]:xaKednc

引自[1]: The Most Significant Skills for Automotive Software DevelopersxaKednc
Skill 1: Industry ExpertisexaKednc
Software developers in the automotive industry must be familiar with various industry standards. You should know what an infotainment system and a head unit are, what components are behind them, how they can be connected and what forms of data transmission and storage exist. Tier 1 suppliers like Bosch will require hands-on experience in embedded programming. Automakers will also value your ability to develop and test software for ECUs (Electric Control Units) microcontrollers, microprocessors, debuggers, etc.
Skill 2: Experience with Large-Scale ProjectsxaKednc
In a large scale project, you will be required to communicate and interact with the teams of engineers, designers, testers as well as involved executive managers. If you’re an inexperienced software developer, brace yourself for overwhelming complexity of processes, tight deadlines and multiple interchangeable operations of geographically distributed teams. Therefore, before stepping up into any development activities, it’s better to study the entire structure of an organization, project requirements and only then, narrowing down to your specific job responsibilities.
Skill 3: Technology CompetencyxaKednc
If you are attentive to details and can demonstrate a good technology competency, you’ll be able to cope with an extensive codebase of an embedded system that can have different versions and modules, their complex logical dependencies and mathematical algorithms. In addition, it will be also valued if you understand how to alter the code to provide new functions without affecting the functionality of existing solutions. The act of balancing between technical requirements, changing business requirements and high standards to the functional safety of any in-vehicle solutions is also a part of this competency you may hardly find in any job description.
Skill 4: Communication SkillsxaKednc
Software development in the automotive industry has many factors to consider. Among them are project requirements, project planning, basic architecture, quality requirements and process changes. At every stage of software development, you will have to put into practice your communication skills and professional approach to the entire delivery process including numerous iterations of the same feature.
Skill 5: Good Knowledge of EnglishxaKednc
Frequently, automotive projects are international and people from different countries are expected to have a decent level of English to find a common language with other team members. Besides, your English fluency will be also highly estimated by the management of the project deciding on which IT service company and team to pick up during the tender.
Skill 6: ResponsibilityxaKednc
New releases in the automotive industry have far-reaching implications. The more features are added, the more complicated the entire embedded system becomes. And most importantly, these are mission-critical systems and any unnoticed mistake may incur more than just repair expenses. Perhaps, you remember a much-talked-of fatal test drive by Uber self-driving car[ that failed to recognize a pedestrian in the darkness. In this case, not only testers but also automotive software developers must have a strong sense of responsibility in terms of the code quality and deadlines.
读懂了么?发现英语重要了吧。目前以我个人经历,我觉得英语的重要性体现在:
  1. 标准规范多是英文的,比如ASPICE, AUTOSAR, ISO26262等;
  2. 优秀论文多是英文的,比如变速箱控制,自动驾驶,深度学习方面等;
  3. 工具文档多是英文的,比如matlab,Vector,Doors等......
不管怎样,让自己的英语越来越好,将会越来越受益。说可能受限于环境,但听读写不限。当然我觉得最重要不是英语,是责任。这里不谈责任,但都源于责任。
接下来我就基于自身作为一个汽车软件工程师的工作经历,从几个角度来分享我的体会。

02 

V流程

软件工程师应:
  • 具备强烈的需求意识;
  • 认真对待文档规范;
  • 积极测试。
作为汽车软件工程师,肯定都知道图1的V流程,左边的需求,设计,右边的测试。在工作中,V流程的各环节几乎都做过,很有感触。
图1 V流程,引自[2]

首先谈需求,没有需求就没有V流程后面的设计和测试。先看下需求的标准定义xaKednc

引自:ISO/IEC/IEEE 15288:2015(E) terms and definitionxaKednc
requirement:statement that translates or expresses a need and its associated constraints and conditions.
再看图1的需求类别:
  • stakeholder requirement(利益相关者需求),
  • system requirement(系统需求),
  • software requirement(软件需求) 。
这些需求之间有什么关系呢?我觉得下图2作了比较清晰的说明,即正向地来说利益相关者先提出了一个大概需求,经与系统,技术反复沟通与反馈,确定了利益相关者需求,再据此确定了系统需求,最后再据系统需求确定了软件需求;反向地来说,具体实现过程中也可能存在软件需求不合理情况,进而依次去更新软件需求,系统需求和利益相关者需求。
图2 系统需求规范开发流程
软件工程师也许属于图2红圈的一份子吧,当然这里的目的不在于探究细节,通过这个图主要想表达是:
软件工程师应具备强烈的需求意识,不仅仅局限于代码层面,应明白从需求层面到代码层面,只有深入理解了需求,才能写出更加准确精炼的模型或代码。
很多软件工程师也需要写相应的软件需求吧,那么怎样写好一条软件需求呢?我觉得图3是一个很好的推荐.
图3 需求的书写语法

其次谈文档规范。认真对待文档规范,你将会有意想不到的收获。软件工程师一般都不喜欢写文档,写了一份又一份,关键最后还可能几乎没人看,但规定要去写那还必须得写,些许无奈。那何不换个角度,先从认真对待开始,接下来就会逐渐思考如何写?如何写好?为什么文档模板这么安排?不知不觉就会去看一些标准规范,通过这些就能逐渐去理解文档的别有用心以及这些模板的由来,一般标准会提供一些参考模板,比如图4(源引自:IEEE Recommended Practice for Software Requirements Specifications,IEEE Std 830-1998)。然后结合自身工作经验,再来理解这些文档,会发现文档不再那么抽象,其实非常科学,非常严谨,最后会学着利用这些文档来帮助自己形成一个更有逻辑更有层次的表达。所以认真对待文档规范(也包括流程),有了这方面的强烈意识,我觉得一方面不管是要符合ASPICE,还要AUTOSAR,应该都可以很快遵循这些规范来指导实践;另一方面也极有助于我们从项目管理和软件工程角度来看待项目。xaKednc

图4 从Mode角度组织的软件需求模板

最后谈测试。本质上就一句话:纸上得来终觉浅,觉知此事要躬行。从零开始的项目一般还好,边开发边测试;有base的项目,最好得主动多仿真多测试,通过数据和现象来快速理解。说到测试,分享一个小故事:曾经看着德国同事准备集成测试报告的图,类似于下图5,他创建了多个子窗口归类地来分别显示数据,调好数轴标尺等操作,以使得他人一眼就看懂测试结果。当然他就是这么想的,然后我就照学了。看个反例(图6),自行对比感受下。xaKednc

图5 测试数据整理范例
图6 测试数据整理反例

03

bug修复

“这个bug对功能有什么影响?”,很喜欢听到别人这么问。
这里又想分享一个小故事:看到过有个人解决问题能力非常强,几乎来了一个bug,看看数据看看模型,咔咔两下就给解决了,但我发现很奇怪的现象,这个人天天都有bug要解决。后面不幸让我接手了,发现补丁好多好多,有些还无法追溯。后面又遇到了一位很有要求的同事,每次一有bug就问我“这个bug对功能有什么影响?”,刚开始我大概都这么回答“不知道,但代码层面分析了bug的影响和解决方法,该方法不会影响其他代码逻辑,能满足客户的要求,balabala. ......该方法”。
故事到这,首先得从功能层面去分析:这个bug对功能有什么影响?如果你都不清楚功能,怎么能够确定这就一个bug呢?怎么能够保证修复方案是最佳的呢?怎么能够确保修复后仍满足需求呢?当然要更全面更理想的分析可参见图7。
图7 理想的bug分析流程

所以,应该加强从功能层面理解好软件,当然模型或代码层面也很重要,这样宏微观上都能切换自如,软件就会被你玩的溜溜的。xaKednc

04 

技能精进

4.1 软件方面xaKednc

先谈软件方面,曾经为了了解从软件到硬件的最终执行,我花了几个月听计算机科学课程,从计算导论与C语言基础北京大学,李戈):记得当时听明白了计算机硬件如何实现0101,图灵机怎么工作等等,讲得非常精彩。xaKednc

再到计算机系统要素Build a Modern Computer from First Principles: Nand to Tetris,希伯来大学): 记得讲到布尔运算(两个结论:Any Boolean function can be represented using an expression containing AND and NOT operation. Boolean function can be represented using an expression containing only NAND operations),寄存器,CPU,汇编语言,编译原理,特别有意思。xaKednc

最后到数据结构清华大学,邓俊辉):记得讲到搜索算法改进,最终我都买了本邓教授的书。xaKednc

整个听课过程下来,虽然我没有做作业,忘了绝大部分,但是我觉得从软件到硬件怎么运行,我基本上有个概念,假如真要我去做这方面的深入,给我时间肯定没问题。xaKednc

总的来说,从广度上对软件要有一定的认识。当然,从深度上对软件也需要很深的认识。比如:运行时序问题,一定要明白先有谁后有谁;精度(scaling)问题,配置就要求很细致;内联函数问题,使用就要特别小心。xaKednc

4.2 工具方面xaKednc

再谈工具方面,以MATLAB/Simulink为例。我个人受益于两方面:一方面是来自同事,有同事的悉心指导和用心分享,也有看同事怎么做的,去模仿学习怎么做,去思考谈论为什么这么做(当然更多时候后者去看去试去悟);另一方面来自mathworks提供的demo和研讨会视频。比如入门变速箱控制模型时,我就找到了一个特别有用的demo包,如图7示意,通过这个demo包做仿真做调试,这样很快就上手建模操作。另外通过一系列的研讨会视频,很快就入门了MBD,以及如何使用Simulink工具做模型检查,验证与确认等,如图8。所以,把握身边的和网上的,工具肯定没问题。xaKednc

图7 变速箱控制的demo
图8 模型验证的最佳实践
图9 MATLAB/Simulink录制的研讨会

4.3 专业知识xaKednc

最后谈专业知识,以变速箱控制为例,变速箱控制目的就是开车的人踩了多大油门或多大刹车,变速箱就要自动地去操作挡位和离合器,让开车的人开加速不错,的很爽,很是舒服(当然不仅仅是变速箱的功劳)。那么怎么实现的呢?比如图10示意一个升档控制过程。xaKednc

图10

本质上就讲理解此公式:xaKednc

就基本可以应付变速箱的离合器控制工作了。再深挖电液系统的话,那么牛顿第二定律和伯努利方程都来了。xaKednc

图11 电液控制系统原理图

如果还觉得不够的话,那么还可以继续,如图12。(技术真是个黑洞)xaKednc

图12 变速箱系统的知识网络

所以,技术精进不只在于一个点,而在于一个面或一个体,任重而道远xaKednc

05

总结

一个人的精力是有限的,上述所说大多数人还是很难做到位。但是不管怎样,一个汽车工程师最好要具备这些意识,不管是重在广博,还是贵在专精,选好自己的方向,认真工作,一定会越来越优秀。
最后引用参考[8]的图,温故下本文的3个层面内容:
1)项目管理与软件工程层面
图13 V流程和工具链

2)功能与软件实现层面xaKednc

图14

3)专业技术层面xaKednc

图15 挂挡控制

参考:

[1] AUTOMOTIVE SOFTWARE DEVELOPER: TOP 6 SKILLS AT A GLANCE, https://www.infopulse.com/blog/automotive-software-developer-top-6-skills-at-a-glance/
[2] Automotive SPICE Process Assessment / Reference Mode,
http://www.automotivespice.com/fileadmin/software-download/Automotive_SPICE_PAM_30.pdf
[3] Essential aspects of the V-cycle software development process,
https://x-engineer.org/graduate-engineering/modeling-simulation/model-based-design/essential-aspects-of-the-v-cycle-software-development-process/
[4] Mathworks官网录制的视频与网上研讨会,
https://ww2.mathworks.cn/videos/search.html?s_tid=evmain_rw_bod&q=&page=1
[5] AUTOSAR_Introduction,
https://www.autosar.org/fileadmin/ABOUT/AUTOSAR_Introduction.pdf,
[6]  The Analyzing Method of Root Causes for Software Problems,
https://global-sei.com/technology/tr/bn73/pdf/73-13.pdf
[7] Estimation of the Clutch Characteristic Map for an Automated Wet Friction Clutch Transmission, https://www.sae.org/publications/technical-papers/content/2016-01-1113/
[8] Model-Based Design Methods for the Development of Transmission Control Systems, https://www.sae.org/publications/technical-papers/content/2014-01-0304/
责编:Admin
文章来源及版权属于汽车电子与软件,EDN电子技术设计仅作转载分享,对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。如有疑问,请联系Demi.xia@aspencore.com
汽车电子与软件
汽车电子与软件
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了