
? ? ? ? ?
作者?|?不可說
出品?|?汽車電子與軟件
在投身于汽車電子軟件開發(fā)時,偶爾會聽到一種說法:“三分開發(fā),七分測試”。這一說法不僅是對汽車電子軟件開發(fā)流程的一種精煉概括,更是對測試環(huán)節(jié)在整體開發(fā)過程中至關(guān)重要性的高度強(qiáng)調(diào)。它意味著,盡管系統(tǒng)設(shè)計、代碼編寫、架構(gòu)設(shè)計等環(huán)節(jié)構(gòu)成了軟件開發(fā)的基石,但確保軟件功能完善、性能穩(wěn)定、安全可靠,以及符合嚴(yán)格的汽車行業(yè)標(biāo)準(zhǔn)與法規(guī)要求,則更多地依賴于后續(xù)的測試工作。
測試之所以占據(jù)如此重要的位置,是因?yàn)槠囯娮榆浖苯雨P(guān)系到車輛的安全運(yùn)行、駕駛體驗(yàn)及能效表現(xiàn)。從基本的控制邏輯驗(yàn)證到極端條件下的穩(wěn)定性測試,從用戶界面的友好性評估到與車輛其他系統(tǒng)(如發(fā)動機(jī)控制、制動系統(tǒng)、導(dǎo)航系統(tǒng)等)的無縫集成,每一個細(xì)節(jié)都需經(jīng)過嚴(yán)格而全面的測試。這不僅能及時發(fā)現(xiàn)并修復(fù)潛在的漏洞與缺陷,還能通過模擬各種真實(shí)或極端駕駛場景,提升軟件的魯棒性和適應(yīng)性,從而保障乘客的安全與舒適。
也可以參考ASPICE模型,軟件開發(fā)過程涉及測試的環(huán)節(jié)有SWE.4、SWE.5、SWE.6,分別代表著軟件單元測試、軟件集成測試以及軟件合格性驗(yàn)證。

ASPICE過程參考模型
#02
軟件的單元測試就是軟件單元驗(yàn)證,目的是驗(yàn)證軟件單元是否與軟件詳細(xì)設(shè)計一致,提供證據(jù)證明軟件單元符合軟件詳細(xì)設(shè)計和非功能軟件需求,確保每個軟件單元(如函數(shù)、模塊或類)按照設(shè)計規(guī)范正確實(shí)現(xiàn)其功能。
執(zhí)行軟件單元測試,需要輸入軟件的靜態(tài)設(shè)計、動態(tài)設(shè)計文檔或者說是軟件詳細(xì)設(shè)計文檔,再加上軟件的模型、代碼。
開發(fā)階段:在軟件開發(fā)的初期,即編寫代碼的同時,開發(fā)人員需要同步編寫與代碼相對應(yīng)的測試用例。這些測試用例旨在覆蓋所有的功能點(diǎn)和邊界條件,以確保軟件單元在獨(dú)立運(yùn)行時的正確性和穩(wěn)定性。通過邊編寫代碼邊設(shè)計測試用例,開發(fā)人員能夠在第一時間發(fā)現(xiàn)并解決潛在的問題,從而提高代碼的質(zhì)量和可靠性。
測試階段:一旦測試用例編寫完成,測試人員會利用這些用例對軟件單元進(jìn)行執(zhí)行測試。在執(zhí)行過程中,他們會詳細(xì)記錄每一個測試用例的執(zhí)行結(jié)果,包括通過、失敗、異常等狀態(tài),以便后續(xù)的分析和定位問題。
分析階段:測試執(zhí)行完成后,測試人員會對測試結(jié)果進(jìn)行深入的分析。他們會仔細(xì)查看每個失敗的測試用例,確定其失敗的原因,并歸納整理出軟件單元中存在的缺陷和問題。這一階段的輸出將作為后續(xù)修復(fù)工作的主要依據(jù)。
修復(fù)階段:在確定了缺陷后,開發(fā)人員會針對這些問題進(jìn)行修復(fù)。修復(fù)完成后,他們會重新執(zhí)行之前失敗的測試用例,以及相關(guān)的回歸測試用例,以確保問題已經(jīng)被正確解決,并且沒有引入新的缺陷。
回歸測試:回歸測試是修復(fù)階段后的重要環(huán)節(jié)。它旨在確保在修復(fù)已知缺陷的過程中,沒有引入任何新的問題或破壞原有的功能。測試人員會再次運(yùn)行所有相關(guān)的測試用例,以驗(yàn)證軟件的完整性和穩(wěn)定性。
持續(xù)集成:為了進(jìn)一步提高測試效率和軟件質(zhì)量,單元測試會被集成到持續(xù)集成(CI)流程中。在每次代碼提交后,CI系統(tǒng)會自動運(yùn)行所有的測試用例,包括新增的單元測試和回歸測試。這樣,開發(fā)人員可以實(shí)時了解代碼變更對軟件質(zhì)量的影響,及時發(fā)現(xiàn)并解決潛在的問題。同時,自動化的測試運(yùn)行也大大減輕了測試人員的工作負(fù)擔(dān),提高了測試效率。
測試用例應(yīng)包括測試的目的、輸入條件、預(yù)期結(jié)果、實(shí)際操作步驟以及測試通過的標(biāo)準(zhǔn)。測試用例的編寫應(yīng)遵循以下原則:
1.?清晰性:測試用例的描述應(yīng)清晰明了,便于測試人員理解和執(zhí)行。
2.?可操作性:測試用例中的操作步驟應(yīng)具有可操作性,測試人員能夠按照步驟準(zhǔn)確地執(zhí)行測試。
3.?可驗(yàn)證性:預(yù)期結(jié)果應(yīng)具有可驗(yàn)證性,測試人員能夠通過觀察或測量來判斷測試結(jié)果是否符合預(yù)期。
示例:

軟件單元測試記錄文件主要包含了測試用例編號、測試用例標(biāo)題、軟件單元詳細(xì)設(shè)計ID、描述、測試步驟、期望數(shù)據(jù)、實(shí)際結(jié)果、測試結(jié)果、測試數(shù)據(jù)、備注等信息。如需要某些前置條件,應(yīng)在測試步驟內(nèi)最前面標(biāo)注。
測試用例設(shè)計:
確保每個測試用例都是獨(dú)立的,只針對一個特定的功能進(jìn)行測試,以降低測試結(jié)果的干擾。
考慮邊界條件和異常情況的處理,如輸入?yún)?shù)的邊界值、空值、越界等。
使用等價類劃分和邊界值法等用例設(shè)計技術(shù),以提高測試效率和覆蓋率。
粒度控制:
單元測試應(yīng)該盡可能細(xì)粒度地進(jìn)行,每個測試用例只關(guān)注一個函數(shù)或小段代碼。
對于復(fù)雜的函數(shù),可以考慮將其拆分為多個子函數(shù)進(jìn)行單元測試。
自動化和可維護(hù)性:
單元測試應(yīng)該是全自動的,測試套件應(yīng)定期執(zhí)行,以減少人工干預(yù)和提高測試效率。
測試環(huán)境應(yīng)易于配置,最好通過簡單的命令或按鈕就能執(zhí)行單個測試用例和測試套件。
覆蓋率分析:
對執(zhí)行的測試進(jìn)行覆蓋率分析,以得到精確的代碼執(zhí)行覆蓋率。
調(diào)查哪些代碼未被執(zhí)行,并考慮是否需要補(bǔ)充測試用例。
及時修正失敗的測試:
一旦發(fā)現(xiàn)失敗的測試,應(yīng)立即進(jìn)行修正。
確保新提交的代碼不會導(dǎo)致現(xiàn)有測試用例失敗。
代碼評審與靜態(tài)分析:
結(jié)合代碼評審和靜態(tài)分析工具,如Model Advisor(MBD檢查)、Polyspace等,檢查代碼的合規(guī)性、復(fù)雜性和潛在缺陷。
代碼評審應(yīng)注重代碼的可讀性、可維護(hù)性和邏輯正確性。
保持測試代碼的輕巧與快速:
測試代碼應(yīng)盡可能簡潔明了,以減少開發(fā)迭代周期。
避免在測試代碼中引入不必要的復(fù)雜性和依賴。
#03
軟件組件驗(yàn)證和集成驗(yàn)證;這一測試目的是驗(yàn)證軟件組件與軟件架構(gòu)設(shè)計一致,并集成軟件元素,驗(yàn)證集成的軟件元素與軟件架構(gòu)設(shè)計一致;確保各個軟件模塊在集成后能夠正確交互,數(shù)據(jù)傳遞和接口調(diào)用符合設(shè)計規(guī)范、能夠正確協(xié)同工作;
測試準(zhǔn)備階段:
需求分析:明確測試的目標(biāo)和需求,這通?;谙到y(tǒng)的功能規(guī)格書、設(shè)計文檔和需求文檔。需要確定哪些功能是關(guān)鍵的,哪些場景需要被測試,以及預(yù)期的測試結(jié)果是什么。
測試方案設(shè)計:根據(jù)需求分析的結(jié)果,制定詳細(xì)的測試方案。這包括確定測試策略(如自頂向下、自底向上或混合策略)、測試環(huán)境配置、測試用例設(shè)計、測試工具選擇等。
編寫測試用例:根據(jù)測試方案,編寫覆蓋各種可能輸入和場景的測試用例。測試用例應(yīng)詳細(xì)描述測試步驟、預(yù)期結(jié)果和實(shí)際結(jié)果。
測試執(zhí)行階段:
接口測試:驗(yàn)證模塊間的接口(如函數(shù)調(diào)用、消息傳遞、數(shù)據(jù)共享等)是否正確,并測試接口在異常情況下的行為(如空指針、非法參數(shù)等)。這有助于確保數(shù)據(jù)在模塊間傳遞時沒有丟失或錯誤。
功能測試:按照測試用例,對集成后的系統(tǒng)進(jìn)行功能測試。這包括驗(yàn)證系統(tǒng)功能的完整性、正確性和穩(wěn)定性。測試人員需要記錄測試過程中的實(shí)際結(jié)果,并與預(yù)期結(jié)果進(jìn)行比較。
回歸測試:在每次代碼修改或缺陷修復(fù)后,運(yùn)行回歸測試以確保新代碼沒有引入新的問題,并且之前的問題已經(jīng)被正確修復(fù)?;貧w測試可以自動化進(jìn)行,以提高測試效率。
測試結(jié)果分析與處理階段:
數(shù)據(jù)分析與報告:收集測試數(shù)據(jù),分析結(jié)果并生成測試報告。測試報告應(yīng)詳細(xì)描述測試過程、測試結(jié)果、發(fā)現(xiàn)的問題以及修復(fù)建議。
缺陷管理:詳細(xì)記錄發(fā)現(xiàn)的缺陷,包括缺陷描述、復(fù)現(xiàn)步驟、影響范圍等。跟蹤缺陷的修復(fù)進(jìn)度,并與開發(fā)團(tuán)隊(duì)溝通以確保所有缺陷都能及時得到修復(fù)。對缺陷進(jìn)行分類和優(yōu)先級排序,以便優(yōu)先處理重要缺陷。
測試覆蓋率分析:分析測試用例的覆蓋率,確保關(guān)鍵功能和模塊都被充分測試。如果發(fā)現(xiàn)測試覆蓋率不足,需要補(bǔ)充測試用例以提高覆蓋率。
測試結(jié)束與后續(xù)工作
測試總結(jié):對整個測試過程進(jìn)行總結(jié),評估測試的有效性、效率和覆蓋率。提出改進(jìn)建議,以便在未來的測試過程中提高測試質(zhì)量和效率。
文檔歸檔:將測試計劃、測試用例、測試報告等文檔進(jìn)行歸檔,以便后續(xù)參考和審計。
將測試用例按照一定的格式進(jìn)行編寫,包括測試用例名稱、測試步驟、預(yù)期結(jié)果、實(shí)際結(jié)果等內(nèi)容。測試用例文檔應(yīng)清晰、準(zhǔn)確、易于理解,以便測試人員能夠準(zhǔn)確地執(zhí)行測試并記錄測試結(jié)果。
測試用例編寫完成后,需要經(jīng)過同行或?qū)<业脑u審,確保用例的合理性和完整性。根據(jù)反饋對用例進(jìn)行必要的調(diào)整和更新。同時,隨著項(xiàng)目進(jìn)度的推進(jìn)和需求的變更,測試用例也需要不斷迭代和更新,以確保測試的持續(xù)有效性和準(zhǔn)確性。
示例:

測試計劃和策略
制定詳細(xì)的測試計劃:明確測試目標(biāo)、范圍、資源、時間表和測試方法。
選擇合適的測試策略:如自頂向下、自底向上或混合集成測試策略。
接口測試
驗(yàn)證接口的正確性:確保模塊間的接口(如函數(shù)調(diào)用、消息傳遞、數(shù)據(jù)共享等)符合設(shè)計規(guī)范。
測試接口的健壯性:檢查接口在異常情況下的行為,如空指針、非法參數(shù)等。
數(shù)據(jù)完整性
驗(yàn)證數(shù)據(jù)傳遞的正確性:確保數(shù)據(jù)在模塊間傳遞時沒有丟失或錯誤。
測試數(shù)據(jù)的邊界條件:檢查數(shù)據(jù)在邊界值下的行為,確保系統(tǒng)能夠正確處理。
測試數(shù)據(jù)管理
管理好測試數(shù)據(jù):確保測試數(shù)據(jù)的完整性和一致性,測試數(shù)據(jù)應(yīng)涵蓋各種可能的輸入和場景。
記錄測試結(jié)果:詳細(xì)記錄測試結(jié)果,包括通過的測試用例和失敗的測試用例,以及失敗的原因和修復(fù)建議。
回歸測試
運(yùn)行回歸測試:在每次代碼修改后,運(yùn)行回歸測試,確保新的修改沒有引入新的問題,現(xiàn)有功能仍然正常。
自動化回歸測試:將回歸測試集成到持續(xù)集成(CI)流程中,自動化運(yùn)行測試,及時發(fā)現(xiàn)和修復(fù)問題。
團(tuán)隊(duì)協(xié)作
跨團(tuán)隊(duì)協(xié)作:集成測試通常涉及多個團(tuán)隊(duì),需要良好的溝通和協(xié)作。
共享測試結(jié)果:及時共享測試結(jié)果,確保所有團(tuán)隊(duì)成員都能了解測試進(jìn)度和問題。
缺陷管理
記錄缺陷:詳細(xì)記錄發(fā)現(xiàn)的缺陷,包括缺陷描述、復(fù)現(xiàn)步驟、影響范圍等。
跟蹤缺陷修復(fù):跟蹤缺陷的修復(fù)進(jìn)度,確保所有缺陷都能及時修復(fù)。
#04
軟件驗(yàn)證,確保集成的軟件與軟件需求一致,也叫軟件合格性測試,主要目的是驗(yàn)證軟件是否滿足所有設(shè)計和功能要求,確保其在實(shí)際應(yīng)用中的可靠性和安全性。
該環(huán)節(jié)的輸入主要來源于開發(fā)的系統(tǒng)需求與集成軟件。
測試準(zhǔn)備階段
需求分析與理解:
深入理解軟件合格性測試的需求,包括功能、性能、可靠性等方面的要求。
確保所有軟件需求已明確,并可用于測試驗(yàn)證。
測試策略與計劃制定:
制訂包括回歸測試策略在內(nèi)的軟件合格性測試策略,該策略應(yīng)與項(xiàng)目計劃和發(fā)布計劃相一致。
制定詳細(xì)的測試計劃,明確測試目標(biāo)、范圍、資源、時間表等關(guān)鍵要素。
測試用例設(shè)計:
根據(jù)軟件需求和測試策略,設(shè)計覆蓋各種典型和邊界情況的測試用例。
確保測試用例具有足夠的覆蓋率,能夠全面驗(yàn)證軟件的正確性。
測試執(zhí)行階段
測試環(huán)境搭建:
根據(jù)測試需求搭建合適的測試環(huán)境,包括硬件、軟件、網(wǎng)絡(luò)等基礎(chǔ)設(shè)施。
確保測試環(huán)境與實(shí)際運(yùn)行環(huán)境盡可能一致,以提高測試的準(zhǔn)確性和可靠性。
測試用例執(zhí)行:
按照測試計劃執(zhí)行測試用例,記錄測試結(jié)果和日志。
對于發(fā)現(xiàn)的缺陷和問題,應(yīng)及時記錄并跟蹤處理。
缺陷管理與修復(fù):
跟蹤和管理測試過程中發(fā)現(xiàn)的缺陷,與開發(fā)團(tuán)隊(duì)合作進(jìn)行修復(fù)和驗(yàn)證。
確保所有缺陷得到妥善處理,并在必要時進(jìn)行回歸測試。
測試評估與報告階段
測試結(jié)果評估:
對測試結(jié)果進(jìn)行全面評估,包括測試覆蓋率、測試通過率等指標(biāo)。
分析測試結(jié)果,確定軟件是否滿足所有需求,并識別可能存在的風(fēng)險和問題。
測試報告編制:
根據(jù)評估結(jié)果編制詳細(xì)的測試報告,包括測試過程、結(jié)果、缺陷處理情況等關(guān)鍵信息。
將測試報告發(fā)布給相關(guān)人員,如項(xiàng)目管理人員、開發(fā)人員等,以便他們了解軟件的測試情況和質(zhì)量狀況。
可追溯性與一致性檢查:
建立軟件需求與軟件合格性測試規(guī)范中的測試用例之間的雙向可追溯性。
確保軟件需求與測試用例之間的一致性,并通過評審記錄來證明。
軟件合格性測試的測試用例設(shè)計可以考慮以下幾點(diǎn)原則:
1.?基于需求:測試用例應(yīng)緊密圍繞軟件需求進(jìn)行設(shè)計,確保每個需求都有相應(yīng)的測試用例進(jìn)行驗(yàn)證。
2.?全面覆蓋:盡可能覆蓋所有可能的輸入、輸出和邊界條件,以確保軟件的全面測試。
3.?可重現(xiàn)性:測試用例應(yīng)具有明確的測試步驟和預(yù)期結(jié)果,以便在不同環(huán)境下重現(xiàn)測試。
4.?獨(dú)立性:每個測試用例應(yīng)盡可能獨(dú)立,避免相互之間的依賴,以便于測試的執(zhí)行和結(jié)果的評估。
示例:

測試計劃和策略
制定詳細(xì)的測試計劃:明確測試目標(biāo)、范圍、資源、時間表和測試方法。
選擇合適的測試策略:結(jié)合功能測試、性能測試、安全測試等多種測試方法,確保全面覆蓋。
測試用例設(shè)計
全面覆蓋功能點(diǎn):設(shè)計測試用例以覆蓋所有功能點(diǎn),包括正常路徑和異常路徑。
考慮邊界條件和異常情況:測試輸入值的邊界條件和異常情況,確保軟件的健壯性。
使用等價類劃分和邊界值分析:優(yōu)化測試用例,減少冗余,提高測試效率。
測試環(huán)境
模擬實(shí)際運(yùn)行環(huán)境:確保測試環(huán)境與實(shí)際運(yùn)行環(huán)境盡可能一致,包括硬件、操作系統(tǒng)、網(wǎng)絡(luò)等。
使用測試工具:使用專業(yè)的測試工具(如CANoe、VectorCAST等)進(jìn)行測試,提高測試效率和準(zhǔn)確性。
性能測試
定義性能指標(biāo):明確性能測試的目標(biāo),如響應(yīng)時間、吞吐量、資源占用等。
模擬高負(fù)載情況:測試系統(tǒng)在高負(fù)載下的表現(xiàn),確保性能符合要求。
安全測試
驗(yàn)證安全機(jī)制:檢查系統(tǒng)的安全機(jī)制(如加密、認(rèn)證、授權(quán)等)是否有效。
測試安全漏洞:使用安全測試工具(如漏洞掃描器)查找潛在的安全漏洞。
進(jìn)行功能安全測試:驗(yàn)證系統(tǒng)是否符合功能安全標(biāo)準(zhǔn)(如ISO 26262),特別是在故障情況下的行為。
兼容性測試
測試不同硬件平臺:確保軟件能夠在目標(biāo)硬件平臺上正常運(yùn)行。
測試不同操作系統(tǒng):如果適用,測試軟件在不同操作系統(tǒng)上的兼容性。
測試通信協(xié)議:確保軟件能夠正確處理通信協(xié)議(如CAN總線、LIN總線等)。
可靠性測試
進(jìn)行長時間運(yùn)行測試:測試系統(tǒng)在長時間運(yùn)行下的穩(wěn)定性。
模擬極端條件:測試系統(tǒng)在高溫、低溫、高濕度等極端條件下的表現(xiàn)。
測試結(jié)果記錄
詳細(xì)記錄測試結(jié)果:包括通過的測試用例和失敗的測試用例,以及失敗的原因和修復(fù)建議。
使用缺陷跟蹤系統(tǒng):記錄和跟蹤缺陷的修復(fù)進(jìn)度,確保所有問題都能得到解決。
團(tuán)隊(duì)協(xié)作
跨團(tuán)隊(duì)協(xié)作:合格性測試通常涉及多個團(tuán)隊(duì),需要良好的溝通和協(xié)作。
共享測試結(jié)果:及時共享測試結(jié)果,確保所有團(tuán)隊(duì)成員都能了解測試進(jìn)度和問題。
#05
汽車電子軟件單元測試、集成測試以及合格性測試共同構(gòu)成了確保汽車電子軟件質(zhì)量、安全性和可靠性的堅實(shí)防線。單元測試通過驗(yàn)證軟件中的最小可測試單元(如函數(shù)或方法)的功能正確性,提升了代碼質(zhì)量和開發(fā)效率;集成測試則關(guān)注組件間的交互與整體功能的初步驗(yàn)證,降低了系統(tǒng)集成的風(fēng)險;而合格性測試作為對軟件是否滿足既定要求的最終檢查,確保了軟件在交付前達(dá)到預(yù)期的質(zhì)量標(biāo)準(zhǔn)。這些測試環(huán)節(jié)相互補(bǔ)充,共同保障了汽車電子軟件在面對復(fù)雜多變的車輛環(huán)境時能夠穩(wěn)定、安全地運(yùn)行。