周韶園 鄭薦中
摘要:嵌入式計算機(jī)技術(shù)的飛速發(fā)展加速了電器行業(yè)嵌入式系統(tǒng)的應(yīng)用,嵌入式系統(tǒng)中軟件系統(tǒng)的比重越來越大,軟件架構(gòu)也越發(fā)復(fù)雜,軟件運行的可靠性逐漸成為業(yè)界關(guān)注的焦點問題。本文由嵌入式軟件測試的基本概念入手,基于嵌入式軟件測試特點,綜合分析嵌入式軟件的關(guān)鍵技術(shù)和測試方法,旨在改善嵌入式軟件的質(zhì)量,提高其應(yīng)用性能。
關(guān)鍵詞:嵌入式軟件 軟件測試 測試方法
0 引言
當(dāng)前,嵌入式軟件已廣泛運用于工業(yè)控制系統(tǒng)、信息家電、通訊設(shè)備、醫(yī)療儀器、智能儀器儀表等眾多領(lǐng)域,軟件的質(zhì)量和應(yīng)用性能備受業(yè)界關(guān)注。以往業(yè)界僅僅將功能的軟件開發(fā)-測試模式作為重點研究課題,但當(dāng)前所取得研究成果已無法滿足日益增長的軟件測試需求,其對軟件行業(yè)的發(fā)展也產(chǎn)生了一些負(fù)面影響。嵌入式軟件測試的工作內(nèi)容主要是軟件質(zhì)量的監(jiān)測,這對于嵌入式軟件的開發(fā)及應(yīng)用十分關(guān)鍵。
本文在軟件測試基本技術(shù)的基礎(chǔ)上,進(jìn)一步探究嵌入式軟件測試技術(shù)與監(jiān)測方法,試圖形成一種較為規(guī)范化的嵌入式軟件測試解決方法。
1 軟件測試基礎(chǔ)
1.1 軟件測試概念 軟件是可以用來設(shè)計、制造、運行并且能有效維護(hù)的高質(zhì)量、高可靠性的技術(shù)解決方案的一系列計算機(jī)程序和相關(guān)的組件。對軟件進(jìn)行測試是軟件能否正常運行的重要保證,軟件測試是以發(fā)現(xiàn)錯誤和缺陷為目的的一系列處理分析的程序或過程。
根據(jù)IEEE(1983)對測試定義是選擇合適的測試用例,執(zhí)行被測試程序的過程,其目的在于發(fā)現(xiàn)程序錯誤。在IEEEStd829-1998對IEEE(1983)修訂版中,將測試定義為:測試(A)一個或多個的測試用例集,或(B)一個或多個的測試過程集,或(C)一個或多個的測試用例和測試過程集,是軟件的分析過程,其目的在于發(fā)現(xiàn)軟件功能特性等實現(xiàn)和要求不一致的地方(也即軟件錯誤)及對軟件的評估[1]。
從以上對軟件測試的定義我們可以了解到,軟件測試是以發(fā)現(xiàn)軟件缺陷為目的,進(jìn)而測試軟件功能,最終評估軟件質(zhì)量為目的的試驗過程。另外,為了確保測試結(jié)果客觀、準(zhǔn)確,必須按照設(shè)計要求選用合理的施測軟件。
1.2 軟件測試步驟 軟件測試工作分五步完成,即單元測試、集成測試、確認(rèn)測試、系統(tǒng)測試和驗收測試(詳見圖1-1)。
■
單元測試完成對最小的軟件設(shè)計單元的檢驗工作,篩查程序最小單位(模塊)中的缺陷,編碼后也需要作進(jìn)一步驗證。單元測試主要包括模塊接口、局部數(shù)據(jù)結(jié)構(gòu)、邊界條件、獨立路徑及錯誤處理五項內(nèi)容。
集成測試是將經(jīng)過單元測試的模塊按照軟件結(jié)構(gòu)組合在一起作為系統(tǒng)或子系統(tǒng)來進(jìn)行的測試,驗證模塊間接口的正確性和各部分工作是否達(dá)到或?qū)崿F(xiàn)相應(yīng)技術(shù)指標(biāo)及要求。集成測試一般在宿主機(jī)環(huán)境中進(jìn)行。
確認(rèn)測試是把軟件系統(tǒng)作為單一的執(zhí)行實體而進(jìn)行的需求有效性測試。其目的是驗證軟件是否滿足所有功能、性能、行為和執(zhí)行要求。主要驗證兩個方面:一是確認(rèn)軟件正確實現(xiàn)了需求中所要求的功能,二是確認(rèn)軟件實現(xiàn)的功能是需求中所需要的。
系統(tǒng)測試實際是通過比較系統(tǒng)的需求定義,篩查軟件中與需求定義不相符或相互矛盾的功能架構(gòu)。系統(tǒng)測試須綜合驗證軟件及其所含的信息、硬件程序是否與需求定義相一致,并檢驗程序的運行狀態(tài)能否達(dá)到應(yīng)用要求。
確認(rèn)測試主要通過用戶的參與,檢驗軟件的性能、功能能否滿足用戶的使用需求,即驗證軟件的有效性,因此確認(rèn)測試亦可稱作有效性測試。
2 嵌入式軟件測試的特點
性能和功能的測試是嵌入式軟件測試的主要內(nèi)容,但相對于一般性的軟件測試而言,嵌入式軟件測試仍有其特殊性。
①嵌入式軟件運行時對硬件環(huán)境有一定的要求,嵌入式軟件測試的重要目的是測試軟件在特定的硬件環(huán)境下能否可靠運行,故對嵌入式軟件的測試就需要在相應(yīng)的硬件環(huán)境下進(jìn)行。
②嵌入式軟件測試還要保證嵌入式軟件的實時性。測試還需在特定的外部環(huán)境下對嵌入式軟件進(jìn)行測試,例如強(qiáng)磁場、高溫等環(huán)境中保證軟件運行的可靠性。
③嵌入式軟件產(chǎn)品除了滿足設(shè)計的外部性能要求,還需要在特定的平臺上運用相應(yīng)的測試工具對軟件進(jìn)行內(nèi)存測試、GUI測試、覆蓋率分析。
嵌入式軟件的質(zhì)量以及程序的穩(wěn)定性須通過軟件測試來維護(hù),這也是軟件從開發(fā)階段到應(yīng)用階段所必經(jīng)的環(huán)節(jié)。圖2-1即為嵌入式軟件測試模型。
■
測試用例是詳細(xì)描述測試如何執(zhí)行的正式文檔。選用相應(yīng)的測試用例,配以測試平臺的操作系統(tǒng)以及驅(qū)動程序,使得被測軟件在正確的環(huán)境中運行。根據(jù)測試用例的執(zhí)行結(jié)果與預(yù)期的測試結(jié)果相比較,找出被測程序的缺陷,并加以改進(jìn)。
3 嵌入式軟件測試技術(shù)
科學(xué)合理的軟件測試技術(shù)是嵌入式軟件測試項目順利實施的基本前提。根據(jù)軟件測試程序的應(yīng)用情況我們可以對軟件測試技術(shù)進(jìn)行分類探討。從測試對象在施測階段是否被執(zhí)行角度來看,軟件測試涵蓋了動態(tài)測試與靜態(tài)測試兩部分內(nèi)容。
靜態(tài)測試即靜態(tài)分析,是對被測軟件進(jìn)行特性分析的一些方法的總稱。靜態(tài)測試無需執(zhí)行程序代碼,即可通過其他途徑篩查程序內(nèi)部的缺陷或?qū)Τ绦虼a目的進(jìn)行綜合評估。靜態(tài)測試的測試主要包括代碼審查、代碼走查、桌面檢查、技術(shù)評查,這些內(nèi)容全部須手動完成,另外還包括軟件自動完成的靜態(tài)分析[3]。
和靜態(tài)測試相對應(yīng),動態(tài)測試是使被測代碼在真實環(huán)境或仿真環(huán)境下有控制地運行,通過輸入測試用例,對代碼在運行時體現(xiàn)出的功能、邏輯、行為、結(jié)構(gòu)等多角度觀察,檢查運行結(jié)果與預(yù)期結(jié)果的差異以發(fā)現(xiàn)其中的缺陷,并分析運行效率和健壯性等性能。動態(tài)測試的關(guān)鍵在于如何選擇測試用例。
按軟件測試技術(shù)分類有兩種,即白盒測試與黑盒測試。
白盒測試主要涉及程序的內(nèi)部設(shè)計和結(jié)構(gòu)的測試。它將施測對象視為一可視化軟件,施測人員須全面掌握程序的內(nèi)部邏輯構(gòu)造和功能特性,然后選擇及設(shè)計測試用例,根據(jù)程序的邏輯路徑施測。在各施測點對程序運行狀態(tài)進(jìn)行監(jiān)測,確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。
黑盒測試在某些情況下也稱功能測試。這類測試方法根據(jù)軟件的用途和外部特征查找軟件缺陷,無須了解程序內(nèi)部的結(jié)構(gòu),黑盒測試的最大優(yōu)勢在于不依賴代碼,只需根據(jù)需求,設(shè)計相應(yīng)的測試用例,根據(jù)輸出結(jié)果判斷程序功能以及性能正確性。
4 嵌入式軟件系統(tǒng)測試方法
理論上講,將所有可能的輸入均作為測試情況考慮,軟件測試只有采用窮舉輸入測試,才能將程序內(nèi)所有的錯誤檢測出來。而現(xiàn)實中測試情況可有無窮多個,所有可能的輸入包含著合法輸入和非法輸入,要將所有的可能性輸入一一檢測仍有一定難度,因而須針對測試對象采取適當(dāng)?shù)臏y試手段,并參考測試對象的基本條件制定科學(xué)的測試用例,為測試工作提供參考依據(jù),以確保有序地落實軟件測試各個步驟。筆者結(jié)合實踐經(jīng)驗,對當(dāng)前常用的等價分類、邊界值分析、McCabe循環(huán)復(fù)雜度度量和因果圖法進(jìn)行了具體分析。
4.1 等價分類 等價類劃分就是把輸入劃分為若干部分,從每個部分中選取少量代表性數(shù)據(jù),來對被測應(yīng)用進(jìn)行測試的方法。等價類應(yīng)為互不相交的一組子集,而子集的并應(yīng)該是整個集合[4]。
因為軟件不僅要接收合理的數(shù)據(jù)信息,同時須經(jīng)受意外的考驗,因此等價類可細(xì)分為有效和無效兩種情況。有效等價類,即對于程序的規(guī)格說明來說是合理的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。通過有效等價類,可對程序所達(dá)到的性能和功能是否符合規(guī)格說明進(jìn)行驗證。而無效等價類與有效等價類恰好是兩個相反的概念。另外,對等價類進(jìn)行劃分后須根據(jù)設(shè)計要求全面測試用例的有效性。
4.2 邊界值分析 邊界值分析是一種黑盒測試方法,它是對等價類劃分方法的補(bǔ)充,通過選擇等價類邊界的測試用例。通過這種測試方法設(shè)計測試用例,須對邊界情況有大致的了解。一般來講,輸入與輸出等價類的邊界即應(yīng)著重測試的邊界情況[5]。
從某種意義上講,邊界值分析法也是一種測試輸入或輸出的邊界值的有效途徑。這里所有的邊界值涵蓋了邊界值兩邊的值。邊界值測試的基本原理:輸入變量的極值附近極有可能是缺陷點;基本思想:在最小值、略高于最小值、正常值、略低于最大值和最大值處取輸入變量的值。
4.3 McCabe循環(huán)復(fù)雜度度量 要全面測試某一軟件或某一功能模塊的有效性,先確保被測對象具有可測試性。顧名思義,可測試性即被測對象所具有的內(nèi)在屬性,它與測試工具或測試方法無關(guān)??蓽y試性能夠反映出軟件質(zhì)量優(yōu)劣,只有高內(nèi)聚、低耦合、接口明確、意圖清晰的軟件才具有可測試性。相反,高耦合、內(nèi)部邏輯混亂的軟件即為不可測試性軟件。
4.4 因果圖法 等價劃分和邊界值分析沒有對輸入條件進(jìn)行分析。組合分析有時是一件困難的事情,因為組合的數(shù)量可能達(dá)到天文數(shù)字。因果圖有助于找出高效的測試用例,甚至可以找到規(guī)格說明欠缺的地方。
因果圖法的步驟如下:①分析規(guī)格說明中的原因、結(jié)果,并賦予標(biāo)示符。②找出因果之間的對應(yīng)關(guān)系,畫出因果圖。③在因果圖上標(biāo)明約束條件。④把因果圖轉(zhuǎn)化為判定表。⑤根據(jù)判定表每一列表示的情況生成測試用例。
5 結(jié)束語
伴隨著嵌入式軟件事業(yè)的持續(xù)拓展,軟件測試作為保證軟件質(zhì)量的一項關(guān)鍵性的工作,已越來越受到重視。正確的嵌入式測試方法是軟件測試工作的工作重點。本文除了對有關(guān)軟件測試的基本概念作了簡要闡述,還對它們之間的內(nèi)在架構(gòu)進(jìn)行了重點分析,并介紹了幾種常用的嵌入式軟件測試技術(shù)及嵌入式軟件測試方法。這些技術(shù)與方法的運用對軟件測質(zhì)量和穩(wěn)定性起到非常關(guān)鍵的作用。
參考文獻(xiàn):
[1]IEEE,IEEE Standard for Software Test Documentation.IEEEStd829-1998.
[2]梁合慶.當(dāng)今嵌入式系統(tǒng)綜述與新的投資機(jī)遇[J].測控技術(shù),2000(4).
[3]康一梅,張永革.嵌入式軟件測試[M].北京:機(jī)械工業(yè)出版社,2007.
[4]古樂,史九林.軟件測試技術(shù)概論[M].北京:清華大學(xué)出版社,2004.
[5]蔡建平.嵌入式軟件測試實用技術(shù)[M].北京:清華大學(xué)出版社,2010.
基金項目:
浙江省大學(xué)生科研創(chuàng)新團(tuán)隊資助項目(編號:2012R409046);
2011國家公益性質(zhì)檢行業(yè)科研專項資助項目(編號:20110059)。