


摘要:隨著嵌入式系統應用的不斷拓展,軟件復雜度不斷提升,傳統的開發模式已無法保證軟件開發的進度與質量。針對這一現狀,文章通過引入測試驅動先行的設計理念,提出了一種嵌入式軟件敏捷測試平臺的設計方案,通過接口仿真、交聯關系、自動化測試設計等方面闡明了方案可行性。該敏捷測試平臺可擺脫硬件平臺對核心軟件邏輯測試的約束,快速完成軟件開發與維護階段的功能測試及回歸測試,大幅提升了軟件測試的效率,能夠更好地完成持續集成、持續測試。
關鍵詞:嵌入式系統;接口測試;測試驅動開發;敏捷測試;自動化測試
中圖分類號:TP273文獻標志碼:A
0 引言
隨著計算機技術的蓬勃發展,嵌入式系統逐漸在國防、航空、航天、航海等領域得到廣泛應用,而在嵌入式軟件規模日益擴大的同時,用戶對于開發進度、軟件質量等方面的要求愈來愈高,對于產品軟件已經不僅僅滿足于功能性需求,需要綜合考慮可靠性、安全性、維護性、測試性等各方面的非功能性需求。對于規模達到上萬甚至十余萬行的嵌入式軟件代碼,僅靠傳統的“即開即用”開發模式已無法滿足使用需求,系統而完備的測試方法是保證產品軟件質量和滿足用戶需求的重要保障。目前,嵌入式產品的測試方式多以手工測試為主,開發人員對系統邏輯及接口進行測試時均需要手工編碼完成用例設計執行,對于復雜系統的嵌入式軟件,由于交聯關系復雜、接口類型多樣的特點,靠手工測試難以滿足快速迭代的需求以及壓力測試需求。針對該情況,開發人員需要結合產品生命周期,研究一種與研發流程并行開展的全自動化敏捷測試平臺設計方案,從測試平臺構建、需求分解、用例設計、自動測試驗證等方面完成從需求到測試的全覆蓋閉環過程,實現防患于未然,提升產品的質量。
1 嵌入式軟件敏捷測試需求分析
目前,常見的軟件開發模型包括瀑布模型、V模型、W模型、敏捷開發模型[1-2],基本均包含了需求、設計、開發、測試、交付的全過程。以汽車行業廣泛應用的V模型為例,其開發過程如圖1所示。
V模型左側是需求分析及設計的過程,右側表示左側對應的驗證工作[3-4]。軟件開發過程引入多級測試的目的是及早發現軟件中潛藏的缺陷,在產品生命周期中越早發現問題,對問題進行糾正所產生的質量成本越低。軟件缺陷一般包括顯性功能性缺陷(與需求不符或實現錯誤)、隱性功能缺陷(需求文檔中未明確但應該實現的要求)、非功能缺陷(使用維護性不佳、用戶體驗不好)。軟件測試根據測試級別可分為單元測試、集成測試、系統測試、驗收測試等[5],根據測試方式可分為手動測試、自動測試2類。其中,手動測試需要花費大量的時間來構造測試用例及不斷修改與執行測試過程,而自動測試可通過測試用例的復用以及一鍵自動運行方法來提升測試效率,極大地節約了人力物力,成為現行測試手段中不可或缺的方法。
在嵌入式系統產品研發過程中,測試的一大難點是過于依賴硬件環境[6-8],容易出現“等、靠、搶”測試資源的問題,尤其在產品首套交付過程中,往往會出現硬件測試環境不足的情況,導致有效的測試時間由于進度原因被嚴重壓縮。在測試不充分的情況下,開發人員僅能針對軟件的典型需求開展基礎性功能測試,而無法開展完備的正向/邊界/異常測試,對后續產品交付效率與實物質量均造成了不利的影響,往往會導致問題集中暴露在后續產品調試過程而非軟件開發過程,造成軟件問題及硬件問題耦合在一起,極大地提升了問題排查的復雜度。傳統的系統級測試環境往往依賴于半實物或者實物激勵設備,由于產品研制與測試設備研制進度的不同步、界面不統一、測試數據定制化難以復用等原因,即使在已有類似產品的開發運行維護過程中已經開展了一系列煩瑣復雜的測試工作,在同類型其他產品的測試階段也無法對已有測試用例高效復用,導致大量低水平工作重復出現。
針對上述問題,可采用測試驅動開發(Test-Driven Development,TDD)[9-10]的思想來提前開展嵌入式系統軟件的敏捷測試。TDD思想顛倒了傳統“先設計后編碼再測試”的方法,提倡測試先行的理念,在編寫功能代碼之初即提前構造測試代碼,通過提早測試來避免代碼質量越來越糟的隱患。完全可測試的代碼能夠保證在代碼增量開發時提前發現軟件問題,大幅節約后續的產品調試時間,在調試時僅針對嵌入式系統的硬件接口特性進行重點測試即可,通過將測試工作前移來提升產品交付的質量和效率。
結合TDD思想,本文提出一種自動化敏捷測試平臺[11-12]設計方案,在產品研發過程中首先由軟件開發人員提前搭建好全數字仿真環境,依據功能需求和接口完成軟件的黑盒測試,形成“邊開發邊測試”的研發模式,極大地將風險提前暴露在開發階段;其次,針對快速迭代的需求,該平臺能夠快速實現需求變更的回歸測試,針對每一條需求變更項均開展正向及反向驗證,保證代碼更改對其他功能不產生次生影響;最后,針對需求條目形成可復用的測試用例,有助于不斷積累,快速構造自動化敏捷測試平臺復用庫,提升測試效率。
2 軟件敏捷測試平臺設計方案
產品敏捷開發與測試的要求是需要具備快速迭代能力,能夠及時持續地響應用戶的需求頻繁反饋,通過測試策略的正確建立,持續確保用戶有效需求能夠貫穿和落實到產品的整個研發周期,從而保證最終輸出物的正確性。
結合上述需求,要實現嵌入式軟件的敏捷測試平臺構建,需從以下幾個方面進行綜合考慮:接口仿真、交聯關系、自動化用例執行。
2.1 接口仿真
真實嵌入式系統所涉及的接口類型種類繁多[13-15],包括FC總線、GJB289A總線、CAN總線、RS422總線、離散量、模擬量等接口。要實現敏捷測試平臺對各類接口的覆蓋,本文通過數據消息仿真的方法來模擬外部激勵數據[16],被測軟件及敏捷測試平臺底層均按照用戶數據報協議(User Datagram Protocl,UDP)進行不同節點間的全數字仿真通信。節點間均通過協議封裝的形式來模擬各種總線通信的數據交互,在消息發送端發送數據時,封裝不同的消息包頭(包括消息類型、消息長度、消息ID等),采用“消息包頭+消息內容”的格式進行發送,消息接收端在收到UDP數據時,先對消息包頭進行解析,確認對應的數據類型,再根據協議解析對應的消息內容,即可完成對各種接口的數據內容傳輸與解析,從而方便快捷地實現不同節點間的全數字仿真通信。
2.2 交聯關系
敏捷測試環境交聯關系如圖2所示。在被測軟件按照敏捷測試平臺仿真驅動進行替換后,即可解決測試環境的通信問題。敏捷測試平臺作為測試用例導入和執行的核心節點,可以依據接口完成對被測軟件的激勵仿真,按照系統真實運行的業務場景將控制命令發送給待測軟件,將待測軟件對外輸出的接口反饋結果進行實時顯示,存儲到測試結果文件中進行記錄。對于簡單嵌入式系統,被測軟件可作為仿真節點直接與敏捷測試平臺進行點對點式交互來完成軟件的配置項測試;對于復雜嵌入式系統,僅須保證各節點仿真驅動的一致性,除了被測軟件與敏捷測試平臺外,系統內其他配套軟件也可作為仿真節點插入網絡,從而完成對整個嵌入式系統多個配置項軟件之間的系統級仿真測試。
2.3 自動化執行
單個測試用例在設計時應能覆蓋功能邏輯中總線/離散量等接口類數據連通性和內容正確性、消息發送間隔、消息回復間隔等方面的測試內容,對檢測過程、延時間隔、判讀窗口等內容進行通用約束,讓測試人員能夠通過測試結果直觀判斷軟件中對應需求實現的正確性。
要實現各測試用例的快速自動化測試[17-19],提升測試效率,需要敏捷測試平臺具備以下能力。
2.3.1 系統接口控制文件的自動導入功能
接口控制文件(Interface Control Document,ICD)作為系統與外部交互的頂層依據,也是開展黑盒測試的輸入文件指導,根據需求衍生出每個功能點輸入接口需求及輸出接口需求,敏捷測試平臺通過直接對導入的不同ICD接口的數據內容進行配置來快速模擬輸入接口激勵,判斷輸出接口的數據內容及時間特性是否符合系統要求。
2.3.2 測試用例快速設計功能
該平臺無需通過手動編碼的方式實現用例編輯,僅通過配置接口消息中對應數據的數值即可實現測試用例的快速設計與實現。一方面可快速完成首輪手動測試用例的編輯,另一方面可依據手動測試通過時敏捷測試平臺與產品軟件間運行所產生的真實交互數據作為期望值基準,測試人員只需要對用例的期望數據內容和時間范圍進行確認和調整,即可快速根據自動用例生成邏輯完成自動測試用例的生成和固化,避免了傳統方式下反復手動調整期望值的過程。
2.3.3 測試用例集的配置、修改、存儲、導入等功能
通過需求使用場景進行分解,該測試平臺將不同的測試用例通過組合的方式關聯固化為某一項業務場景下的用例集,該用例集可直接對不同測試用例間的時序關系進行配置,消息激勵可配置為事件觸發或者周期觸發,對于周期觸發應能配置消息的具體時間間隔。
2.3.4 一鍵式自動執行功能
敏捷測試平臺可以按照提前現有測試用例集中所固化的用例激勵順序和時序特性對被測軟件進行測試交互,通過模擬用戶一系列的操作和激勵輸入,完成對應需求的場景還原和測試覆蓋。
3 測試結果管理分析
為減輕測試人員負擔,測試結果應能實現自動分析功能,包含實時顯示、報告一鍵生成、測試結果回放等功能。因此,敏捷測試平臺設計時需要有效分割測試業務核心邏輯與人機界面,為項目人員提供簡單易用、可視化的測試用例開發環境;梳理共性需求,分離關注點,對業務進行合理切割,可以提高整體工作效率并有效提升工作質量;可結合產品運行數據,對測試過程的條件和產品的性能參數進行記錄和復盤分析;通過測試用例及結果的累積,形成可復用的組織知識,提升整體的測試水平。具體功能如下。
3.1 具備實時顯示對比功能
在測試用例集自動執行時,應能提供實際測試結果與預期測試結果的對比顯示,能夠直觀顯示是否測試通過,標注出具體錯誤項。
3.2 具備測試結果自動記錄功能
平臺應能支持測試結果一鍵生成,導入數據記錄文件中,記錄中包括每個測試用例的執行結果是否正確,用例的期望值與實測值以及最終執行結果的統計情況匯總信息。
3.3 具備測試結果報告的導入、回放、分析等功能
測試人員通過敏捷測試平臺完成測試用例的執行后,自動生成測試記錄供開發人員進行問題分析,同時通過測試用例、不通過率、缺陷數等數據進行統計分析,反復提煉測試用例設計關鍵點,有助于形成典型需求所配套的測試用例知識庫,便于后續類似產品測試用例的高效復用。
4 應用實踐
以某型機載嵌入式設備為例,軟件開發、迭代過程的應用場景及流程如圖3所示。
在軟件開發階段,一方面,設計人員應重點保證軟件功能需求實現的正確性,可根據系統頂層文件、接口控制文件、軟件研制任務書、軟件需求規格說明等對需求進行分解,衍生出不同的測試用例集,在對產品軟件進行編碼實現時完成驅動層的封裝,保證可同時兼容真實嵌入式環境驅動及仿真驅動[20-21]。另一方面,軟件開發人員通過根據系統接口控制文件完成敏捷測試平臺的接口配置,依據需求規格說明衍生出的測試用例完成用例設計及錄入功能,形成“邊開發邊測試”的模式后,每完成一個軟件功能點的開發及單元測試后,可通過敏捷測試平臺快速完成該功能的黑盒測試,可通過全數字仿真環境下單步跟蹤等方式來快速定位代碼問題。本階段形成的測試用例可按功能點配置為自動測試用例集,形成可供后續復用的組織資產。
在軟件已完成開發交付,處于運行階段時,軟件維護人員往往面臨系統需求的頻繁迭代變化,此時一方面應保證需求變更實現的正確性,另一方面應確保軟件變更對其他功能模塊無影響。此時針對新增/變更需求,敏捷測試平臺可充分利用現有測試用例集進行新增或修改,完成新增功能的自動測試,同時可確保已有代碼的功能不受影響。若在產品已大規模部署運行時出現軟件原因導致的故障,開發人員能夠足不出戶,遠程了解故障發生時的運行場景,利用敏捷測試平臺快速完成對應用例設計、場景復現、故障排查等工作,大幅節約了質量問題處理的人力成本及時間成本。
通過敏捷測試平臺的實踐落實,開發人員能夠快速對軟件變更內容進行自動化測試,將精力集中在軟件設計、測試用例覆蓋以及提升代碼質量上,一鍵式完成批量測試用例的統一自動執行,測試結果自動記錄,無需逐一核對,通過測試結果分析可以提前規避質量風險。實踐證明,該測試平臺相對比人工測試,環境搭建的效率提升了約60%,測試用例設計效率提升了70%,用例執行效率提升了65%左右,將整個項目的測試周期大幅壓縮。
5 結語
結合嵌入式系統的應用發展趨勢,針對嵌入式系統測試環境的特殊性,分析了嵌入式軟件敏捷測試相關的需求,本文提出了一種嵌入式軟件敏捷測試平臺的設計方案,通過接口仿真、交聯關系、自動化測試設計與結果分析等方面闡明了方案可行性。該敏捷測試平臺可適應不同嵌入式系統,快速完成軟件開發迭代的功能測試及回歸測試,有效避免了傳統手動測試反復開發難以復用的低效性,大幅提升了軟件測試的效率,有利于保證產品軟件的質量。該嵌入式軟件敏捷測試平臺已在多個項目上得到了充分驗證。實踐結果表明相對于傳統人工測試手段,能夠將原有的測試周期壓縮為十分之一,可以有效實現測試先行的設計理念,擺脫硬件平臺對核心軟件邏輯測試的約束,更好地完成持續集成、持續測試,后續可從全數字仿真環境擴展到半實物測試環境,有較好的應用前景。
參考文獻
[1]高明,李明,陳慶貴.基于系統工程V模型的航空發動機正向設計方法[J].海軍航空大學學報,2023(3):294-300.
[2]邢家茂,何平,王志成.基于V模型的伺服系統開發方法[J].小型微型計算機系統,2012(1):183-187.
[3]申曉彥,郭佳旭,曹春芳,等.基于改進V模型的軟件測試過程研究[J].電腦知識與技術,2021(9):81-82,87.
[4]王帥,藍啟亮,陳聰,等.基于汽車嵌入式軟件的持續集成和持續測試分析[J].汽車實用技術,2023(10):156-162.
[5]王樹義,南建國,黃雷.航空軟件測試過程模型應用研究[J].計算機測量與控制,2013(6):1443-1445.
[6]張翔,彭琿,張曉娜,等.基于全數字仿真的飛控嵌入式軟件測試方法與實現[J].無線互聯科技,2023(5):73-76.
[7]劉宏偉.基于半實物仿真的抄表系統自動化測試平臺設計[J].計算機測量與控制,2022(12):51-57,63.
[8]涂步華,鄭洪波,劉演超.基于半實物仿真的嵌入式軟件測試平臺的設計[J].信息技術與信息化,2023(11):24-27.
[9]馬寶英,董政昊,袁茂才,等.敏捷回歸測試中關鍵技術發展現狀研究[J].軟件,2023(4):74-77.
[10]劉先博,沈小侖.面向敏捷開發的軟件測試技術[J].電腦知識與技術,2015(18):70-72.
[11]趙光星.面向敏捷開發的軟件測試技術研究與應用[D].湘潭:湖南科技大學,2011.
[12]孟琪,韓曉晶.敏捷測試在軟件項目中的應用研究與實踐[J].數字技術與應用,2020(13):24-25.
[13]范義杰,趙昶宇.通用嵌入式測試平臺技術研究[J].科技與創新,2023(21):108-110.
[14]王向暉,李林.星載嵌入式軟件自動化測試技術研究[J].計算機測量與控制,2012(1):267-269.
[15]邢浩,胡佳貝,李碧涵,等.一種基于機載嵌入式軟件的自動化測試方法[J].信息技術與信息化,2022(2):17-20.
[16]耿嘉祺,李鑫麗,祝小蘭.支持用例集并行測試的接口測試平臺[J].計算機系統應用,2023(6):91-98.
[17]金虎.自動化軟件測試技術研究[D].成都:四川大學,2008.
[18]齊永龍,宋斌,劉道煦.國外自動測試系統發展綜述[J].國外電子測量技術,2015(12):1-47.
[19]李賀,鄧學文,朱奎寶,等.基于腳本驅動的光纖陀螺自動化測試系統設計[J].計算機工程與設計,2016(2):552-555,561.
[20]陽長永,王月波,代林.嵌入式軟件自動化測試及管理系統研究[J].計算機測量與控制,2019(9):57-60,75.
[21]高化琦.虛擬仿真環境下嵌入式軟件高效自動化測試技術及應用研究[D].杭州:杭州電子科技大學,2021.
Design of sharp testing platform for embedded software based on interface test driver
Abstract: With the continuous expansion of embedded system applications and the increasing complexity of software, traditional development models can no longer guarantee the progress and quality of software development. In response to this situation, a design scheme for an embedded software agile testing platform is proposed by introducing the design concept of first test driver. The feasibility of the scheme is elucidated through interface simulation, cross-linking relationships and automated testing design. This agile testing platform can break free from the constraints of hardware platforms on core software logic testing, quickly complete functional testing and regression testing during software development and maintenance stages, greatly improving the efficiency of software testing and enabling better continuous integration and testing.
Key words: embedded system; interface test; test-driven development; sharp test; auto test