劉佳 楊永文 李金華
摘? 要:嵌入式軟件通常采用交叉開發(fā)的方式,盡早進(jìn)行軟件測試可以及時發(fā)現(xiàn)軟件開發(fā)初期的不足。單元測試是嵌入式軟件開發(fā)過程中最基礎(chǔ)級別的測試活動。本文對嵌入式軟件的單元測試進(jìn)行了分析,主要包括測試工具的選擇、測試內(nèi)容的梳理和測試過程的優(yōu)化,重點(diǎn)闡述了注意事項(xiàng)及原則。通過總結(jié)分析,提出了適宜操作的嵌入式軟件單元測試方法。實(shí)踐證明,該方法大大提高了軟件測試水平和軟件產(chǎn)品代碼的質(zhì)量。
關(guān)鍵詞:測試計(jì)劃;單元測試;測試過程;嵌入式軟件
中圖分類號:TP311.5? ? ?文獻(xiàn)標(biāo)識碼:A
Abstract:As the cross-development method is usually applied for embedded software,software testing is conducted early,so as to promptly find out the defects and problems at the early stage of software development.Unit testing is the basic testing in the process of embedded software development.This paper analyses embedded software unit testing,including the choice of testing tools,the analysis of testing content and the optimization of testing process,mainly describing the notes and principles.Through the comprehensive summary and analysis,the paper proposes an easy-to-operate and suitable unit testing method for embedded software.Practice indicates that this method greatly improves the level of software testing and software product quality.
Keywords:testing plan;unit testing;testing process;embedded software
1? ?引言(Introduction)
由于嵌入式軟件運(yùn)行在嵌入式計(jì)算機(jī)系統(tǒng)中,且實(shí)時性強(qiáng)。開發(fā)人員在編寫完一段代碼后,很難立即有效地去運(yùn)行程序,從而導(dǎo)致缺陷越積越多。軟件單元測試是軟件開發(fā)過程中的一項(xiàng)基本活動,也是軟件驗(yàn)證、確認(rèn)的重要手段。通過一系列的單元測試,可改進(jìn)軟件質(zhì)量,有效地減少軟件漏洞的數(shù)量,降低程序的風(fēng)險,找到軟件中可能潛在的問題,提高代碼的規(guī)范性、穩(wěn)定性、可靠性。
單元測試針對單個函數(shù)的測試,工作量大,處于施工設(shè)計(jì)的重要階段,時間緊,且發(fā)現(xiàn)的軟件問題“嚴(yán)重等級”較低,如果依靠人工進(jìn)行代碼審查、靜態(tài)分析,代碼打樁編寫執(zhí)行用例,成本較高,流程不清晰不可控,難以保證測試充分性。本文根據(jù)嵌入式軟件的特點(diǎn),基于多年的測試工作經(jīng)驗(yàn),參考相關(guān)的標(biāo)準(zhǔn),提出了一套適用的單元測試流程,包含測試工具、測試內(nèi)容、測試過程的標(biāo)準(zhǔn)化、規(guī)范化等要求。
嵌入式軟件測試環(huán)境分為目標(biāo)機(jī)環(huán)境和宿主機(jī)環(huán)境。但在單元測試層面上,對于嵌入式軟件來講,除非特別指定在目標(biāo)機(jī)環(huán)境下進(jìn)行,都可以在宿主機(jī)環(huán)境進(jìn)行。
2? ?單元測試工具(Unit testing tools)
單元測試的本質(zhì)是針對代碼進(jìn)行測試,工作量和難度都比較大。采用合適的工具及有效的方法,可或多或少地實(shí)現(xiàn)“自動化”,極大提高測試效率,滿足單元測試的覆蓋率和準(zhǔn)確度要求,減少工作量,降低成本。
常見的單元測試工具有PQRA QAC、C++Test、Logiscope、Tessy、LDRA Testbed、PolySpace、Cantata等。
本文采用QAC軟件作為靜態(tài)測試工具,該工具是針對C代碼的深度流靜態(tài)分析器,通過內(nèi)置的標(biāo)準(zhǔn)規(guī)則,以警告消息方式突顯代碼中存在的違規(guī)現(xiàn)象,幫助開發(fā)者改善軟件開發(fā)質(zhì)量[1]。采用Tessy軟件作為動態(tài)測試工具,針對嵌入式語言,能夠快速進(jìn)行驅(qū)動模塊樁模塊配置,用例設(shè)計(jì)可視化,并且可根據(jù)測試要求的不同,選擇不同的測試環(huán)境。Tessy可以實(shí)現(xiàn)代碼實(shí)際運(yùn)行結(jié)果和測試用例中設(shè)定的預(yù)期結(jié)果的自動對比,檢查代碼功能正確性。在進(jìn)行功能測試的同時,還對代碼測試的覆蓋率進(jìn)行了統(tǒng)計(jì)。
3? ?單元測試內(nèi)容(Content of unit testing)
在單元測試開展之前,需要對測試過程的各個階段進(jìn)行方法設(shè)計(jì),以作為具體工作的指導(dǎo)依據(jù)。嵌入式軟件單元測試要求可分為靜態(tài)測試階段和動態(tài)測試階段。
3.1? ?靜態(tài)測試階段
靜態(tài)測試是借助測試工具或人工檢查的方法,對被測程序進(jìn)行特性分析,查找軟件編碼的錯誤,并對軟件單元的靜態(tài)度量指標(biāo)進(jìn)行分析。由于靜態(tài)測試不需要編譯或運(yùn)行代碼,因而也不會受到軟件內(nèi)部其他缺陷模塊的影響。
靜態(tài)測試階段可分為代碼審查和靜態(tài)分析兩部分。
3.1.1? ?代碼審查
代碼審查主要工作為檢查代碼和設(shè)計(jì)的一致性、代碼執(zhí)行標(biāo)準(zhǔn)的情況、代碼邏輯表達(dá)的正確性、代碼結(jié)構(gòu)的合理性、代碼的可讀性等[2]。根據(jù)適用的規(guī)則,項(xiàng)目組內(nèi)部定制合適的代碼審查單,規(guī)定內(nèi)容及標(biāo)準(zhǔn)。