魏雪卉
(航空工業(yè)雷華電子技術(shù)研究所 江蘇 無錫 214063)
隨著嵌入式軟件的規(guī)模越來越大,嵌入式軟件也需要進(jìn)行系統(tǒng)化測試。由于嵌入式系統(tǒng)開發(fā)過程中,軟件和硬件始終相互依賴,其開發(fā)模式、調(diào)試方法都有所不同,因此嵌入式軟件不僅遵循軟件測試的基本原則,也有其自己的特點(diǎn)[1]。
配置項(xiàng)測試就是其中必不可少的環(huán)節(jié)。配置項(xiàng)測試可以有效的發(fā)現(xiàn)配置項(xiàng)范圍內(nèi)存在的缺陷和問題,同時(shí)驗(yàn)證配置項(xiàng)能否實(shí)現(xiàn)需求規(guī)格說明中的功能、性能、質(zhì)量屬性、約束及安全性等技術(shù)要求,檢驗(yàn)配置項(xiàng)接口的正確性和互操作性。
配置項(xiàng)測試采用黑盒測試。軟件黑盒測試要在軟件的接口處進(jìn)行,利用軟件的用途和外部特征查找軟件缺陷,對于某些代碼段可用白盒測試進(jìn)行補(bǔ)充[1]。
嵌入式軟件配置項(xiàng)測試時(shí),要把系統(tǒng)預(yù)期用途作為重要依據(jù),判斷軟件是否滿足需求規(guī)格說明。
以下簡單介紹嵌入式軟件配置項(xiàng)測試的技術(shù)要求和測試類別,并針對不同的測試類型,分析幾種基本測試技術(shù)。
配置項(xiàng)測試一般要符合以下技術(shù)要求[2]:
1)應(yīng)覆蓋需求規(guī)格說明所有功能、性能等特性;
2)配置項(xiàng)的每個(gè)特性應(yīng)至少被一個(gè)正常測試用例和一個(gè)被認(rèn)可的異常測試用例所覆蓋;
3)測試用例的輸入應(yīng)至少包括有效等價(jià)類值、無效等價(jià)類值和邊界數(shù)據(jù)值;
4)應(yīng)測試人機(jī)交互界面提供的操作和顯示界面,包括用非常規(guī)操作、誤操作、快速操作測試界面的可靠性;
5)應(yīng)測試運(yùn)行條件在邊界狀態(tài)和異常狀態(tài)下,或在人為設(shè)定的狀態(tài)下,配置項(xiàng)的功能和性能;
6)應(yīng)測試配置項(xiàng)的安全性和數(shù)據(jù)的安全保密性;
7)應(yīng)測試配置項(xiàng)的所有外部輸入、輸出接口及其格式(包括和硬件之間的接口),及要人為設(shè)定接口異常值和邊界值;
8)應(yīng)測試配置項(xiàng)的全部存儲量、輸入/輸出通道的吞吐能力和處理時(shí)間余量;
9)應(yīng)對配置項(xiàng)的功能、性能進(jìn)行強(qiáng)度測試;
10)應(yīng)測試用于提高配置項(xiàng)的安全性和可靠性的方案,如結(jié)構(gòu)、算法、容錯(cuò)、冗余、中斷處理等;
11)對安全性關(guān)鍵的配置項(xiàng),應(yīng)對其進(jìn)行安全性分析,明確每一個(gè)危險(xiǎn)狀態(tài)和導(dǎo)致危險(xiǎn)的可能原因,并對此進(jìn)行針對性的測試;
12)對有恢復(fù)或重置功能需求的配置項(xiàng),應(yīng)測試其恢復(fù)或重置功能和平均恢復(fù)時(shí)間,并且對每一類導(dǎo)致恢復(fù)或重置的情況進(jìn)行測試。
1.2.1 等價(jià)類劃分
等價(jià)類劃分是選擇有限子集“代表”所有可能的輸入全集,將被測試軟件的輸入和輸出分成許多區(qū)域,對于一個(gè)區(qū)中的任何值,軟件的行為是等價(jià)的。
設(shè)計(jì)正常測試用例和異常測試用例時(shí),即激勵(lì)類型為有效等價(jià)類和無效等價(jià)類,即使用等價(jià)類劃分。
其中無效類比有效類更能夠發(fā)現(xiàn)問題,故無效類應(yīng)盡量做到全覆蓋。
圖1 弱等價(jià)類劃分
圖1中,有效等價(jià)類取值2個(gè),無效等價(jià)類取值1個(gè),取值個(gè)數(shù)過少,取值范圍狹窄,所以測試用例設(shè)計(jì)非常不充分。
圖2 強(qiáng)一般等價(jià)類劃分
圖2中,有效等價(jià)類取值4個(gè),無效等價(jià)類取值2個(gè),有效類和無效類設(shè)置依然不能滿足測試充分性,無效類驗(yàn)證不充分。
圖3 健壯強(qiáng)等價(jià)類劃分
圖3中,有效等價(jià)類和無效等價(jià)類做到全覆蓋,測試能得到充分驗(yàn)證。
適用的測試類別:
1)功能測試(FN):又稱正確性測試,檢查軟件的功能是否符合需求規(guī)格說明[1]。其中包括:
正常功能測試(FN-N):正常條件或正常數(shù)據(jù)的情況下,對軟件功能進(jìn)行的測試,輸入為有效等價(jià)類。
異常功能測試(FN-A):驗(yàn)證系統(tǒng)自身異常處理的能力,輸入為無效等價(jià)類。
2)性能測試(PF):對軟件需求規(guī)格說明文檔中明確或隱含的的性能需求逐項(xiàng)輸入有效等價(jià)類,驗(yàn)證其性能滿足要求;
3)接口測試(IF):輸入無效等價(jià)類,驗(yàn)證當(dāng)輸入錯(cuò)誤接口數(shù)據(jù)時(shí),軟件處理是否出錯(cuò);
4)安全性、可靠性測試(SAF):設(shè)置無效等價(jià)類來驗(yàn)證,一般有看門狗檢測、數(shù)據(jù)發(fā)送異常、設(shè)置其它配置項(xiàng)故障測試報(bào)錯(cuò)機(jī)制、通信異常檢測等手段;
1.2.2 邊界值分析
邊界區(qū)域是錯(cuò)誤高發(fā)區(qū),如存在邊界值,邊界值測試是必須的。
應(yīng)將邊界周圍的點(diǎn)覆蓋,以達(dá)到良好的健壯性。
圖4 一般邊界值分析
圖4中,邊界點(diǎn)覆蓋不充分,缺少“頂點(diǎn)”處的邊界值設(shè)置。
圖5 健壯邊界值分析
圖5中,邊界點(diǎn)覆蓋非常充分,每個(gè)“頂點(diǎn)”處邊界周圍也都有覆蓋,健壯性好。
適用的測試類別:
1)邊界測試(BD):使軟件處于邊界或端點(diǎn)情況下,觀測軟件運(yùn)行是否出錯(cuò);
2)接口測試(IF):針對軟件需求規(guī)格說明中外部接口的極限值,利用邊界值分析,驗(yàn)證接口接收極限數(shù)據(jù)時(shí),軟件處理是否出錯(cuò)。
1.2.3 正交設(shè)計(jì)法
在配置項(xiàng)測試中,當(dāng)輸入條件為兩個(gè)或更多時(shí),且存在組合配對關(guān)系時(shí),正交設(shè)計(jì)法是設(shè)計(jì)測試用例時(shí)必須考慮的方法之一。
正交設(shè)計(jì)法是基于配對組合的算法,選擇滿足覆蓋要求的配對,列出正交設(shè)計(jì)表,直觀的看到該處理所涉及的所有組合條件,但要篩除效率低下的組合。
適用的測試類別:
功能測試(FN):當(dāng)輸入條件為兩個(gè)或更多時(shí),且一個(gè)功能改變會(huì)影響其它功能時(shí),利用正交設(shè)計(jì)法設(shè)置輸入不同且大量組合數(shù)據(jù),驗(yàn)證功能在多種條件下都能正確實(shí)現(xiàn)。
1.2.4 狀態(tài)轉(zhuǎn)換法
嵌入式軟件系統(tǒng)全部或部分表現(xiàn)出基于狀態(tài)的行為[1],狀態(tài)轉(zhuǎn)換通過建立導(dǎo)致轉(zhuǎn)換事件的方法來設(shè)計(jì)測試用例,測試狀態(tài)之間連續(xù)的轉(zhuǎn)換,保證所有轉(zhuǎn)換至少遍歷一次,所有的事件至少觸發(fā)一次。
適用的測試類別:
1)功能測試(FN):存在多個(gè)工作狀態(tài)及子模式時(shí),可以采取這種方法來測試各個(gè)工作狀態(tài)轉(zhuǎn)換是否正確;
2)強(qiáng)度測試(IS):在軟件多個(gè)工作狀態(tài)或子模式間任意連續(xù)轉(zhuǎn)換,將所有事件不規(guī)律進(jìn)行觸發(fā)。
1.2.5 隨機(jī)測試法
在所有輸入數(shù)據(jù)中隨機(jī)選取輸入,可在超長時(shí)間范圍內(nèi)測試,這種方能發(fā)現(xiàn)長而復(fù)雜的操作鏈產(chǎn)生的問題,而通過有計(jì)劃的測試發(fā)現(xiàn)這些問題很困難。
如測試長時(shí)間狀態(tài)轉(zhuǎn)換是否正常,可以采用隨機(jī)測試法中經(jīng)典方法——“猴”測試,進(jìn)行雜亂無章的操作。如長時(shí)間隨機(jī)輸入錯(cuò)誤數(shù)據(jù),驗(yàn)證軟件的可靠性和安全性。
適用的測試類別:
強(qiáng)度測試(IS):驗(yàn)證軟件可以正常運(yùn)行到何種程度,不間斷運(yùn)行軟件、大量多次發(fā)送錯(cuò)誤信息、快速雜亂的輸入數(shù)據(jù)等手段來實(shí)現(xiàn)。
1.2.6 插樁測試法
軟件插樁是通過修改軟件代碼,來手動(dòng)設(shè)置發(fā)送特定數(shù)據(jù)、觀測特定變量或數(shù)組、觀測具體數(shù)據(jù)變化趨勢,但插樁語句不能對配置項(xiàng)功能性能造成影響。
適用的測試類別:
1)接口測試(IF):軟件接收區(qū)插樁設(shè)置極限值或錯(cuò)誤數(shù)據(jù),測試該配置項(xiàng)軟件在異常情況下,功能、時(shí)序是否正確;
2)功能測試(FN):測試一組數(shù)據(jù)的變化趨勢、具體數(shù)值時(shí),利用插樁數(shù)組對觀測數(shù)據(jù)進(jìn)行大量連續(xù)的記錄;
3)性能測試(PN):測試某個(gè)功能的處理性能時(shí),在處理的起點(diǎn)和終點(diǎn)插樁跟蹤語句,讀出跟蹤的總時(shí)長即為性能;
4)余量測試(RC):插樁占存儲余量20%~30%的數(shù)組,達(dá)到存儲邊界的軟件運(yùn)行是否正常;
5)可靠性測試:插樁設(shè)置死循環(huán)等超時(shí)語句,觀測軟件看門狗能否起效。插樁設(shè)置發(fā)送多個(gè)異常數(shù)據(jù),觀測軟件的容錯(cuò)性。
由于嵌入式軟件的特殊性,在測試過程中不僅要融入普通的測試技術(shù),還需要輔助以儀器和特殊策略才能更有效的對功能、性能、接口、安全性進(jìn)行驗(yàn)證。
以下將嵌入式軟件在實(shí)際測試中出現(xiàn)的代表性問題及測試策略進(jìn)行深入分析。
文檔類問題主要表現(xiàn)為由于代碼員脫離需求規(guī)格說明的約束,會(huì)出現(xiàn)缺少或增加功能點(diǎn)、功能處理流程改變、接口傳送格式描述不清晰、接口數(shù)據(jù)極限值精確度等信息不清晰。
在進(jìn)入動(dòng)態(tài)測試前,必須對軟件需求規(guī)格說明的功能、性能、外部接口、安全性等描述進(jìn)行文檔審查:
1)檢查功能點(diǎn)描述是否完整準(zhǔn)確,處理過程是否清晰,有明確的輸入和輸出作為黑盒測試的測試依據(jù);
2)輔助白盒測試方法,利用代碼審查,檢查邏輯流程圖和代碼實(shí)現(xiàn)是否一致;
3)性能、安全性指標(biāo)是否清晰;
4)外部接口的數(shù)據(jù)格式、個(gè)數(shù)、長度、值域、精確度等接口必要信息是否完整清晰。
通過文檔審查,基本可以達(dá)到軟件配置項(xiàng)測試的入口條件。
功能性能類問題主要表現(xiàn)為功能實(shí)現(xiàn)和需求不符、性能不達(dá)標(biāo)。
2.2.1 信號類、離散量的功能測試策略
此類功能測試首先應(yīng)了解各個(gè)信號對應(yīng)的硬件管腳,再將硬件輸出的信號波形用示波器讀出,來驗(yàn)證功能、性能的正確性,有時(shí)還需要信號源輸入脈沖信號作為激發(fā)信號:
1)測試硬件的收發(fā)控制功能:采用信號源輸入脈沖信號,用示波器觀測輸出電平波形與信號源輸入是否一致,驗(yàn)證收發(fā)控制是否正確;
2)測試時(shí)分控制功能:采用信號源輸入脈沖信號,利用示波器觀測時(shí)分通道高低電平來判斷選通情況,一般選通通道呈現(xiàn)高電平;
3)測試某硬件板信號控制功能:輸入單端脈沖信號,用示波器觀測輸出信號與輸入信波形號是否一致,一致則信號控制功能正常。
可利用示波器輔助的功能測試一般有:
1)示波器觀測復(fù)位信號產(chǎn)生的復(fù)位高電平,驗(yàn)證復(fù)位功能正確性;
2)示波器測量單片機(jī)離散量對應(yīng)管腳顯示高低電平,驗(yàn)證離散量置位的正確性;
3)軟件插樁設(shè)置該配置項(xiàng)軟件運(yùn)行超時(shí),利用示波器觀測超時(shí)后是否有復(fù)位高電平,驗(yàn)證看門狗能否起效,滿足安全性要求;
4)在處理流程起始插樁設(shè)置高低電平變化,示波器觀測對應(yīng)管腳上的信號高低電平變化,計(jì)算高低電平間隔時(shí)間即可驗(yàn)證性能;
5)切換不同工作狀態(tài),示波器連接硬件管腳測量脈沖寬度,可間接驗(yàn)證該工作狀態(tài)下的采樣率、工作頻率是否正確。
2.2.2 串口通信、線性調(diào)頻信號的功能測試策略
此類功能測試需借助頻譜儀觀測輸出頻率、帶寬、波形等信息:
1)測試模塊是否工作正常,可通過頻譜儀測試該模塊輸出頻率是否正確;
2)用頻譜儀測試輸出連續(xù)波頻率,驗(yàn)證模塊產(chǎn)生連續(xù)波信號功能是否正常;
3)用頻譜儀測試輸出帶寬,驗(yàn)證模塊產(chǎn)生線性調(diào)頻信號功能是否正常;
4)設(shè)置正確串口通信命令和錯(cuò)誤通信命令,用頻譜儀觀測模塊的信號頻率,驗(yàn)證串口通信是否正常;
5)不同工作狀態(tài)下,頻譜儀測試工作頻率是否設(shè)置正確;
6)通過串口多次大量發(fā)送錯(cuò)誤指令,利用頻譜儀監(jiān)控輸出波形是否穩(wěn)定,可以直觀驗(yàn)證該模塊的健壯性。
2.2.3 變量值、時(shí)序類、趨勢類、處理時(shí)間類的測試策略
當(dāng)需要觀測軟件的具體變量數(shù)據(jù)、處理時(shí)序、數(shù)據(jù)趨勢、數(shù)據(jù)幅度等信息,可借助該嵌入式軟件專用的調(diào)試工具實(shí)現(xiàn):
1)測試軟件控制信息、狀態(tài)信息及波形,在調(diào)試工具中直接輸入變量地址,查看該地址中控制參數(shù)、波形數(shù)值是否正確;
2)需要觀測一組數(shù)據(jù)的變化趨勢時(shí),可軟件插樁對數(shù)據(jù)進(jìn)行連續(xù)記錄,利用調(diào)試工具對記錄數(shù)據(jù)畫圖,選擇需要觀測的數(shù)據(jù)長度、數(shù)據(jù)步進(jìn)后,可清晰看到數(shù)據(jù)變化趨勢、變化范圍,驗(yàn)證了該功能是否達(dá)到預(yù)期效果;
3)測試軟件處理時(shí)序是否正確,軟件插樁跟蹤語句在處理流程的起始處,調(diào)試工具即可畫出各個(gè)處理模塊的調(diào)用時(shí)序圖;
4)測試軟件處理的吞吐時(shí)間、響應(yīng)時(shí)間等性能時(shí),將關(guān)心的處理流程用插樁跟蹤語句,調(diào)試工具可測量處理時(shí)長,即可分析處理時(shí)間性能能否達(dá)標(biāo)。
這類測試需要插樁輸入無效類輸入和邊界類數(shù)據(jù),用調(diào)試工具監(jiān)控變量數(shù)值、時(shí)序圖、運(yùn)行情況,驗(yàn)證該軟件是否進(jìn)行了異常保護(hù),防止了時(shí)序混亂和死機(jī)等嚴(yán)重錯(cuò)誤的發(fā)生。
1)設(shè)置單個(gè)或多個(gè)條件參數(shù)組合后達(dá)到臨界值時(shí),觀測軟件能否正常運(yùn)行;
2)軟件插樁讓該模塊重要參數(shù)發(fā)生錯(cuò)誤,觀測軟件的健壯性,是否出現(xiàn)死機(jī)或功能失效;
3)接口測試中著重觀測異常值、邊界值是否做了保護(hù),插樁使軟件接收邊界值或異常值,觀測軟件能否正常運(yùn)行。
很多嵌入式軟件在正常的情況下比較穩(wěn)定,但將軟件置于“惡劣環(huán)境”后還能否正常運(yùn)行、無功能失效,是軟件安全性和可靠性的關(guān)注重點(diǎn):
1)對于存在多個(gè)工作狀態(tài)的嵌入式軟件,可人工快速、無序、5~8小時(shí)的不間斷切換和操作;
2)軟件插樁組合設(shè)置重要參數(shù)為異常/邊界值后,再次進(jìn)行無序快速的操作,觀測軟件能否正常運(yùn)行;
3)軟件插樁占存儲空間20%~30%(看具體要求,但至少要20%)的數(shù)組,程序加載后,控制嵌入式軟件進(jìn)入最飽和狀態(tài),觀測軟件功能運(yùn)行是否正常;
4)控制嵌入式軟件進(jìn)入最飽和工作狀態(tài),讀出每個(gè)工作狀態(tài)下的處理時(shí)間,和預(yù)計(jì)處理時(shí)間相比,觀測能否留出20%~30%的時(shí)間余量;
5)設(shè)置配置項(xiàng)硬件故障,觀測該配置項(xiàng)能否向系統(tǒng)上報(bào)故障信息。
本文深入分析了在嵌入式軟件配置項(xiàng)測試過程中,在熟練運(yùn)用基本測試技術(shù)的基礎(chǔ)上,根據(jù)軟件運(yùn)行環(huán)境的特點(diǎn),采用了對應(yīng)的調(diào)試工具和豐富的輔助手段,制定有效的測試策略,設(shè)計(jì)充足的正常測試用例、邊界和異常測試用例、強(qiáng)度測試用例、安全性測試用例,就可達(dá)到良好的配置項(xiàng)測試效果,大幅度提高發(fā)現(xiàn)軟件缺陷的概率,對以后測試工作者有一定的指導(dǎo)意義。
參考文獻(xiàn):
[1] 康一梅,張永革,李志軍,胡江,武偉.嵌入式軟件測試[M].北京:機(jī)械工業(yè)出版社,2008.
[2] 朱少民.軟件測試方法和技術(shù)[M].北京:清華大學(xué)出版社,2005.
[3] GJB/Z141-2004[S].軍用軟件測試指南.中國人民解放軍總裝備部,2004.
[4] 石磊,林曉欲.KTFlow在嵌入式軟件測試過程管理中的應(yīng)用[J].微處理機(jī),2012(6):44-50.
[5] 王象剛.軟件測試過程管理工具的設(shè)計(jì)與實(shí)現(xiàn)[J].SOFTWARE.2014.35(2) :96-97.