基于個(gè)人(rén)工(gōng)作(zuò)經驗來(lái)談以下(xi← à)幾點:
01 汽車(chē)軟件(jiàn)工(gōn∞<g)程師(shī)的(de)最重要(yào)技(jì)能(néng€✘λ)
人(rén)到(dào)中年(nián),感覺以前聽(tī≠♥ng)的(de)大(dà)道(dào)理(lǐ)都∞₹§(dōu)是(shì)人(rén)生(shēng)真理(lǐ♥$),比如(rú)"求上(shàng)得(de)中,求中得 ♣(de)下(xià)"。先來(lái)看(kàn)參考[1]:
引自(zì)[1]: The Most Significant Skills ×γ¶for Automotive Software Devel§ §₹opers
Skill 1: Industry Expertise
Software developers in the ≈₩¥automotive industry must be fa δmiliar with various industry standards. επ♥You should know what an infotγ§ainment system and a head unit are, wh∑at components are behind λΩ¶'them, how they can be₩& connected and what forms of data traπ←σnsmission and storage exist. Tier 1 suppliers ★ε∞✔like Bosch will require hands-on experience in ♣£embedded programming. Automake✘≤&rs will also value your ability to develop♥ and test software for EC←≈ ®Us (Electric Control Unit₽ s) microcontrollers, microproα±cessors, windows, etc.
Skill 2: Experience with ∑&₹Large-Scale Projects
In a large scale project, you will be requirλ≈§ed to communicate and interact with th ¥•e teams of engineers, designers, testers as ™÷well as involved executive managers. If y₹ ↑ou’re an inexperienced software develo> ✘÷per, brace yourself for overwhelming co>↔←mplexity of processes, tight deadlines and multε♦₩→iple interchangeable✘• operations of geographically distributed tea¥ms. Therefore, before steppinβ&★g up into any development activities, i↑¶t’s better to study t←←↕he entire structure of an organization, project ↕✘requirements and only then ≥÷, narrowing down to your spec¥ ific job responsibilities.
Skill 3: Technology Competency
If you are attentive to details and can demonstrΩ←¶®ate a good technology cε↓ompetency, you’ll be able to copeδβ with an extensive codebase of an em&¥'¥bedded system that can have different versions an ™d modules, their complex logical dependenci< es and mathematical algorithms. In additi♠★βon, it will be also valδ&≤ued if you understand how to alter the code t•☆ o provide new functions without affecting t×πhe functionality of existing solutions. The act>&™ of balancing between technicalλ↕β requirements, changing business requirement'✔s and high standards to the f¥≈£<unctional safety of any in-vehicle sol"&σ utions is also a part of this competency you ma ♦¥∞y hardly find in any job description. $
Skill 4: Communication Skill≤€✔s
Software development in tε∑Ωhe automotive industΩ₽ ry has many factors to consider. Among them are >•★project requirements, project plan∞α₹ning, basic architecture, quali∑™©"ty 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 del★<ivery process including numerous iter•↓✘©ations of the same feature.
Skill 5: Good Knowledge of English
Frequently, automotive projects are interφ∏♦↑national and people from different countries ar± σ×e expected to have a dec$→∏ent level of English to•₹♠ find a common language with other team mem•≈♣£bers. Besides, your English fluency will be also∞¥ highly estimated by the m ≠anagement of the project deciding on whi©∏$ch IT service company and team to pic×✘k up during the tender.
Skill 6: Responsibility
New releases in the automotive indus♣'try have far-reaching implications. The more→✘ features are added, the more complicated t×±he entire embedded system becomes. And most i ∞mportantly, these are mission-critical systems≈<£π and any unnoticed mistake may incur more thanδ←' just repair expenses. Perhaps, you remem€♠$ber a much-talked-of <↓$fatal test drive by Uber self-driv✘↔¥ing car[ that failed to recognize a pede•↔γstrian in the darkness. In δ∑this case, not only te× ∞sters but also automotive softwa$ re developers must have a strong sense of respo÷ nsibility in terms of th±>←e code quality and deadline←¥s.
讀(dú)懂(dǒng)了(le)麽?發現(x€©Ωiàn)英語重要(yào)了(le)吧(ba)。目前以我個(gè)人(rén)經曆,我覺★εΩ得(de)英語的(de)重要(yào)性體(tǐ)現(xiàn)在:
&nbs$•≈¶p; 作(zuò)為(wèi)汽車(chē)軟件(jiàn)工(g&εōng)程師(shī),肯定都(dōu)知(zhī)道(d₹®ào)圖1的(de)V流程,左邊的(de)需求,設計(jì),右邊≠♠的(de)測試。在工(gōng)作(zuò)中,V流程¶₩♥δ的(de)各環節幾乎都(dōu)做(zuò)過,很(hěn)有(yǒu✘≤)感觸。 ₽φ×
圖1 V流程,引自(zì)[2] ¶✘¶
首先談需求,沒有(yǒu)需求就(jiù)沒有(y¶§ǒu)V流程後面的(de)設計(jì)和(hé)測試。先看(kàn)下(xià)需求的(de)"$★标準定義:
引自(zì):ISO/IEC/IEEE 15288:2015∏€(E) terms and definitionrequirement:statement that translates or expresseελΩ±s a need and its associated constraints and con☆≈ditions.
圖2 系統需求規範開(kāi)發流程
&nb♥← sp; 軟件(jiàn)工(gōng)程師(shī)也(yě$÷÷)許屬于圖2紅(hóng)圈的(de)一(yī)份子(zǐ)吧(ba),當然↓πσ這(zhè)裡(lǐ)的(de)目的(de)不(bù)在于探究細節,通(t©®×ōng)過這(zhè)個(gè)圖主要(yào)想表達是(shì):軟件(jiàn)工(gōng)程師(shī)應具備強烈的(de)需求意★↔αφ識,不(bù)僅僅局限于代碼層面,應明(míng)白(bái)從(cóng)需求層面到(dào ™≠)代碼層面,隻有(yǒu)深入理(lǐ)→☆解了(le)需求,才能(néng)寫出更加準确精煉的(de ♠)模型或代碼。很(hěn)多(duō)軟件(jiàn)工(gōng)程師(shī)也(y§≈ě)需要(yào)寫相(xiàng)應的(de)軟件(jiàn)需求吧(ba),那(n÷©♥↕à)麽怎樣寫好(hǎo)一(yī)條軟件(jiàn)需求呢(ne)?我覺得(de)圖3是(shì)一(☆γ'☆yī)個(gè)很(hěn)好(hǎo)的(de)推薦. ÷ε €
圖3 需求的(de)書•✘(shū)寫語法 •↕
其次談文(wén)檔規範。認真對(duì)待文(wén)檔規範,你(nǐ)将會(huì)有(yǒu₹φ)意想不(bù)到(dào)的(de)收獲。軟件(jiàn)工(gōng)程師(shī)一(yī)般都(dōu)不(♣✘∞↕bù)喜歡寫文(wén)檔,寫了(le)一(yī)β份又(yòu)一(yī)份,關鍵最後還(λ>hái)可(kě)能(néng)幾乎沒人(rén)看(kàn),但(dàn)規定要(yà€o)去(qù)寫那(nà)還(hái)必須得(de≤¥×)寫,些(xiē)許無奈。那(nà)何不(bù)換個(gè)角度,先從•↓>(cóng)認真對(duì)待開(kāi)始,接下(xià)來(lái→ ↓)就(jiù)會(huì)逐漸思考如(rú)何寫?如(rú)←σ何寫好(hǎo)?為(wèi)什(shén)麽文(wén)檔模闆這(&✘™¶zhè)麽安排?不(bù)知(zhī)不(bù)覺就(jiù) δ"會(huì)去(qù)看(kàn)一(yī)些(xiē)标準規範,通(tō©↓Ω"ng)過這(zhè)些(xiē)就(jiù)能(néng)逐漸去(qù)理(lǐ×><)解文(wén)檔的(de)别有(yǒu ×)用(yòng)心以及這(zhè)些(xiē)模闆的(de)由來(lái),一(₩÷¶yī)般标準會(huì)提供一(yī)些(xiē)參考模闆,比如(rú)圖4(源λ≈α引自(zì):IEEE Recommended Practice for S 'oftware Requirements ₽∏±Specifications,IEEE Std 830-1998)。然後結合自(zì)身(♣¥∏shēn)工(gōng)作(zuò)經驗,再來(lái)理(lǐ)解這(zhè)¶λ÷些(xiē)文(wén)檔,會(huì)發現(xiàn)文(wén)檔不(bù)↑♠α再那(nà)麽抽象,其實非常科(kē)學,非常嚴謹,最後會(huì)學著(zheσ✘★)利用(yòng)這(zhè)些(xiē)文(w鶧n)檔來(lái)幫助自(zì)己形成一(yī)個(gè)更有(₽₹♥yǒu)邏輯更有(yǒu)層次的(de)表達。所以認真對(duì)待文(w<σ£én)檔規範(也(yě)包括流程),有(yǒu)了(le)這(zhè)方面的(de)強烈意識,我覺 πε∏得(de)一(yī)方面不(bù)管是(shì)要(yào)符合ASPICE,還(hái)要π$♦(yào)AUTOSAR,應該都(dōu)可(kě)以₹ →很(hěn)快(kuài)遵循這(zhè)些(≤↔¶πxiē)規範來(lái)指導實踐;另一(yī)方面也••(yě)極有(yǒu)助于我們從(cóng)項目管理(lǐ)和(hé)軟件(jiàn)✔©£σ工(gōng)程角度來(lái)看(kàn)待項目。
圖4 從(cóng)Mode角度組織的(de)軟件(jiàn)需求模闆
最後談測試。本質上(shàng)就(jiù)一(yī$₹×)句話(huà):紙(zhǐ)上(shàng)得(de)來(lái)終覺淺,覺×☆♦知(zhī)此事(shì)要(yào)躬行(xíng)。從(cóng)零開(kāi)始的(de)項目一(yī)般還(hái)好(hǎo),邊開(kāi¥↕)發邊測試;有(yǒu)base的(de)項目,最好(hǎo)得(de)主動多(duō)仿<↓←₩真多(duō)測試,通(tōng)過數(shù)據和(hé)現(xiàn)象來(lá÷β♠¶i)快(kuài)速理(lǐ)解。說(shuō)到(dào)測試,分(fēn)±∑←→享一(yī)個(gè)小(xiǎo)故事(shì):曾經看( kàn)著(zhe)德國(guó)同事(shì)準備集成測試報(bβ★ào)告的(de)圖,類似于下(xià)圖5,他(tā)創建了(le)多(duō)個(★↑gè)子(zǐ)窗(chuāng)口歸類✘✔<地(dì)來(lái)分(fēn)别顯示數(shù)據,調好(hǎo)數(s★☆→hù)軸标尺等操作(zuò),以使得(de)他(tā)人(rén)一(↑✘yī)眼就(jiù)看(kàn)懂(dǒng)測試結果。當然他(tā)就(j∞ iù)是(shì)這(zhè)麽想的(de),然後我就(ji♦§÷↓ù)照(zhào)學了(le)。看(kàn)個(gè)反例(圖6),☆↕§自(zì)行(xíng)對(duì)比感受下(xià)。
圖5 測試數(shù)據整理(lǐ)範例
圖6 測試數(shù)據整理(lǐ)反例
03 bug修複
“這(zhè)個(gè✘₽♠ )bug對(duì)功能(néng)有(yǒu)什(shén)麽影(yǐng)響?≤α↕”,很(hěn)喜歡聽(tīng)到(dào)别人(rén)這(zhè© )麽問(wèn)。這(zhè)裡(lǐ)又(yòu)想分(fēn)享一(yī)個(gè)λ>₹小(xiǎo)故事(shì):看(kàn)到(dào)過有(yǒ∞♥u)個(gè)人(rén)解決問(wèn)題能(néng)力非常強λ↓,幾乎來(lái)了(le)一(yī)個(gè)bug,看(kàn)看(kà∞♦↓φn)數(shù)據看(kàn)看(kàn)模型,咔咔兩®下(xià)就(jiù)給解決了(le),但(d↑δ♣àn)我發現(xiàn)很(hěn)奇怪的(de)現(xiàn)象,這(zhè≈₩)個(gè)人(rén)天天都(dōu)有©♦✔(yǒu)bug要(yào)解決。後面不(bù)幸讓我↔✔♣接手了(le),發現(xiàn)補丁好(hǎo)多(duō)好(hǎo)多(duō),有↓✔©(yǒu)些(xiē)還(hái)無法追溯。後面又(yòu)遇到(dào)了(le≠λ)一(yī)位很(hěn)有(yǒu)要(yào)求的(de)同事(©≥±↑shì),每次一(yī)有(yǒu)bug就(jiù)問(wèn)我↔✔π“這(zhè)個(gè)bug對(duì)功能(néng)有(yǒu)什(shén)麽影(yǐnγ★≥♣g)響?”,剛開(kāi)始我大(dà)概都(dōu)這≠←(zhè)麽回答(dá)“不(bù)知(zhī)道(dào↔✘),但(dàn)代碼層面分(fēn)析了(le)bug的(de)影(yǐng)響和( ₽↕hé)解決方法,該方法不(bù)會(huì)影(yǐng)響其他(tā)代碼邏輯, ↑∑∞能(néng)滿足客戶的(de)要(yào)求,balabala. .....≠↕₩.該方法”。故事(shì)到(dào)這(zhè),首先得(de)從(cóng)功能(néng)層面↓☆♣∞去(qù)分(fēn)析:這(zhè)個(gè)bug對(duì)功能(néng)有£₹♦ (yǒu)什(shén)麽影(yǐng)響?如(rú)果你(nǐ)都(dōu)不(bù)清楚功能♥←(néng),怎麽能(néng)夠确定這(zhè)就(jiù)一(yī)個(gè)bug呢(ne)<÷?怎麽能(néng)夠保證修複方案是(shì)★≥最佳的(de)呢(ne)?怎麽能(néng)夠确保修複後₩→γ★仍滿足需求呢(ne)?當然要(yào)更全面更理(lǐ)想的(de)分(fēn)析可(¶kě)參見(jiàn)圖7。
圖7 理(lǐ)想的(de)bug分(fπ®≠₽ēn)析流程
所以♥π¥±,應該加強從(cóng)功能(néng)層面理(lǐ)解好(hǎo)軟件(jiàn),↔₹≤當然模型或代碼層面也(yě)很(hěn)δ₩↕重要(yào),這(zhè)樣宏微(wēi)觀上(shàng)都(dōu)₹→÷能(néng)切換自(zì)如(rú),軟件(ji∑>àn)就(jiù)會(huì)被你(nǐ)玩(wán)的(de)溜溜的(de)↑ ★∞。
4.1 軟件(jiàn)方面
先談軟件(jiàn)方面,曾經→♣♠為(wèi)了(le)了(le)解從(cóng)軟件(jiàn)到(dào)硬件(jiàn)的(d™πγe)最終執行(xíng),我花(huā)了(l∏™≥e)幾個(gè)月(yuè)聽(tīng)計(↕Ωjì)算(suàn)機(jī)科(kē)學課程,從(cóng)計(jì)算(suàn)導論與C語言基礎(北(běi)京大(dà)學,李戈):記得(de)當時(shí)聽(tīng)明(míng)白(bái)了(le)計(j™εφì)算(suàn)機(jī)硬件(jiàn)如(rú)何實現(xiàγλn)0101,圖靈機(jī)怎麽工(gōng)作(zuò)等等,講得(de)非常精彩。
再到(dà₩×↑>o)計(jì)算(suàn)機(jī)系統要(yào)素☆φ↕"(Build a Modern Computer from Fi&™<rst Principles: Nand to Te $ tris,希伯來(lái)大(dà)學): 記得(de)講到(dào)布爾運算(suàn)(兩個(gè)結論:Any Boolean fu♥☆nction can be represenγ★∑ted using an expression containing AND an>σ↔d NOT operation. Boolean function can be ₹♠>represented using an e₩₽xpression containing only NAND opeα∞rations),寄存器(qì),CPU,彙編語言,編譯原理(lǐ),特别有(yǒu)意思。
最後到(dào)數(shù)據結構(清華大(dà)學,鄧俊輝):記得(de)講到(dào)搜索算(suàn)法改進,最終我都(dōu)買了(le)本鄧教授∑♦δ的(de)書(shū)。
整個πβ(gè)聽(tīng)課過程下(xià)來(lái),雖然我沒有 ∞(yǒu)做(zuò)作(zuò)業(yè),忘了(le)絕大(dà)部分(fēn),但(d♠ •λàn)是(shì)我覺得(de)從(cóng)軟件(jiàn)到(dào)硬件(jiàn)怎∑πφ₹麽運行(xíng),我基本上(shàng)有(yǒu)個(gè)概念,假如(rú)真要(yào☆☆≈)我去(qù)做(zuò)這(zhè)方面的(de)深入,給我✘♠時(shí)間(jiān)肯定沒問(wèn)題。
總的(de)來(lái)說(shuō•φδ),從(cóng)廣度上(shàng)對(duì)軟件(jiàn)要(yào)有'♦≈&(yǒu)一(yī)定的(de)認識。當然,從(cóng)深度上(shàng)對(duì)軟件(jiàn)也(yě)需要(yà"&"λo)很(hěn)深的(de)認識。比如(rú):運行(xíng)時(shí)序問(wèn)題,一(yī)定要(yào₹)明(míng)白(bái)先有(yǒu)誰後有(yǒu)誰;精度(scaling)問(w✔ èn)題,配置就(jiù)要(yào)求€→₽♦很(hěn)細緻;內(nèi)聯函數(shù)問(wèn)題,使用(yò€<ng)就(jiù)要(yào)特别小(xiǎo)心。
4.2 工(gōng)具方面
再談工(gōng)具方面,以MATLAB/Simulink為(wèi)例。我個(gè)人(rén)受益于兩✘☆®λ方面:一(yī)方面是(shì)來(lái)自(zì€ σ)同事(shì),有(yǒu)同事(shì)的(' λ∏de)悉心指導和(hé)用(yòng)心分(fēn)享,也(yě)有(yǒu)看(kàn)同事γ≈>•(shì)怎麽做(zuò)的(de),去(qù)♣¶¶模仿學習(xí)怎麽做(zuò),去(qù)思考談論為(wèi)什(shén)麽這(zhè)♥ ±φ麽做(zuò)(當然更多(duō)時(s≈€hí)候後者去(qù)看(kàn)去(qù)試去(qù)悟);另一(yī)方面來(↓↓αlái)自(zì)mathworks提供的(de)demo和(hé)研討(×↓★tǎo)會(huì)視(shì)頻(pín)。比如(rú)δ™入門(mén)變速箱控制(zhì)模型時(shí),我就(jiù)找到(dào)了(le)一(y£↕↔ī)個(gè)特别有(yǒu)用(yòng)的(de)demo包,如(rú)圖7示¶↑"意,通(tōng)過這(zhè)個(gè)demo包做(zuò)仿真做(zuò)∑β調試,這(zhè)樣很(hěn)快(kuài)就(jiù)上(shàng)手建模操作(zuò)。★另外(wài)通(tōng)過一(yī)系列的(de)₩'研討(tǎo)會(huì)視(shì)頻(pín),很(hěn)快(kuài)就(jiù)∏↓♠入門(mén)了(le)MBD,以及如(rú)何使用(yòφ←ng)Simulink工(gōng)具做(zuò)模型檢查,驗證與确認等,如(rú)圖8。所以,φ÷¥把握身(shēn)邊的(de)和(hé)網上(shàng)的(de),工(gōλ∞σ←ng)具肯定沒問(wèn)題。
圖9 MATLAB/Simulink錄制(zhì)的(de)研討(tǎo)會(huì)
4.3 專業(yè)知(zhī)識
 ↑±; 最後談專業(yè)知(zhī)識,以變速箱控制(zhì)為(wèi)例,變速箱控制(zhì)目的(de)就(jiù)是(shìα ≤)開(kāi)車(chē)的(de)人(rén)踩了(le)多(d∑≠✔uō)大(dà)油門(mén)或多(duō)大(dà)β 刹車(chē),變速箱就(jiù)要(yào)自(zì)動地(dì)去(qù±←×)操作(zuò)擋位和(hé)離(lí)合器(qì),讓開(kāi)車(chē)的(de)人(♠&∏rén)開(kāi)加速不(bù)錯(cuò),的(de)很(hěn)爽,很(hěα±n)是(shì)舒服(當然不(bù)僅僅是(shì)變速箱的(×✔↓φde)功勞)。那(nà)麽怎麽實現(xiàn)的(de•÷)呢(ne)?比如(rú)圖10示意一(y♦>ī)個(gè)升檔控制(zhì)過程。
本質上(shàng)就(jiù)講理(lǐ)解此公式:
就(j &λiù)基本可(kě)以應付變速箱的(de)離(lí)合器(qì)控制≈∞(zhì)工(gōng)作(zuò)了(le)。再深挖電(diàn)液系統α↓σ的(de)話(huà),那(nà)麽牛頓第二定律和(h駮♥λ)伯努利方程都(dōu)來(lái)了(le)。
圖11 電(diàn)液控制(zhì)系統原£ 理(lǐ)圖
如(rúγ)果還(hái)覺得(de)不(bù)夠的(de)話(huà),那(nà)麽還(hái)可(£λ÷±kě)以繼續,如(rú)圖12。(技(jì)術(shù)真是(shì)個(g₹©è)黑(hēi)洞)
圖12 變速箱系統的(de)知(zhī)識網絡
所以,技(jì)術(shù)精進不(bù)隻在于一(yī)個(gè)點,而在ε¥Ω于一(yī)個(gè)面或一(yī)個(gè)體(tǐ),任重而道(dào)遠(yuǎn)。
一✔ε(yī)個(gè)人(rén)的(de)精力是(shì)有(yǒu)限λΩσ的(de),上(shàng)述所說(shuō)大(dà)多πΩ(duō)數(shù)人(rén)還(hái)是(shì)很(hě÷α≈n)難做(zuò)到(dào)位。但(dàn)是(shì)不(bù)管怎"♥§樣,一(yī)個(gè)汽車(chē)工(gōng)程師(shī)最好(hǎoδ≠↑)要(yào)具備這(zhè)些(xiē)意識,不(bù)管是(shì)重在廣博,還(hái←∑)是(shì)貴在專精,選好(hǎo)自(zì)己的(de)方向,ε∏認真工(gōng)作(zuò),一(yī)定會(huì)越來(lái)越優秀。'≠
最後引用(yò÷↓↓ ng)參考[8]的(de)圖,溫故下(xià)本文(w鶱™πn)的(de)3個(gè)層面內(nèi)容:
1) &εΩ項目管理(lǐ)與軟件(jiàn)工(gōng)♠&↓程層面
圖13 V流程和(hé)工(gōng)具鏈
2)功✔>±≠能(néng)與軟件(jiàn)實現(xi↕ àn)層面:
圖14
3)專業(yè)技(β✔÷jì)術(shù)層面
圖15 挂擋控制(zhì)
[1] AUTOMOTIVE SOFTWARE DEVELOPER: TOP 6 SKILL↑ S AT A GLANCE,https://www.infopulse.com/blog/automotive-softwar★σ₽e-developer-top-6-skills-at∞&®&-a-glance/
[2] Automotive SPICE Process Assessment / →↓>★Reference Mode,static/file/20230530152627_81257
[3] Essential aspects of the V-cycle softwa ™re development process,https://x-engineer.org/graduate-e←φngineering/modeling-simulation/mode™ αl-based-design/essential-aspects-of-$£↕the-v-cycle-software-development-process/
[4] Mathworks官網錄制(zhì)的(de)視(shì)頻₩→✔π(pín)與網上(shàng)研討(tǎ¶ $o)會(huì),https://ww2.mathworks.cn/videos/search≥σ®ε.html?s_tid=evmain_rw_bod&q=&p& β≠age=1
[5] AUTOSAR_Introduction,https://www.autosar.org/fileadmi n/ABOUT/AUTOSAR_Introduction.p ✔"♦df,
[6] The Analyzing Method of Roo×Ω×t Causes for Software Problems,static/file/73-13.pdf
[7] Estimation of the Clutch Characteris∑•γtic Map for an Automated Weγγπt Friction Clutch Transmissi★☆on,https://www.sae.org/publications¶✘✘↓/technical-papers/content/2016-01-1→≥'≈113/
[8] Model-Based Design Meth¶δ™ods for the Development of T£φransmission Control Systems,https://www.sae.org/publications/tλ☆echnical-papers/content/2014-01-03δ★04/
轉自(zì)汽車(chē)電(diàn)子(zǐ)與軟件(jiàn)