嵌入式軟件技術(shù)軟件測試策略和方案設(shè)計
軟硬件結(jié)合的嵌入式系統(tǒng)正越來越多地應(yīng)用到我們常見的儀器設(shè)備中,嵌入式領(lǐng)域目標(biāo)系統(tǒng)的應(yīng)用系統(tǒng)也日趨復(fù)雜,開發(fā)技術(shù)日新月異。同時,隨著硬件技術(shù)發(fā)展的日趨穩(wěn)定,而軟件故障卻日益突顯,由此軟件的重要性已逐漸引起人們的重視,越來越多的研究人員認(rèn)識到嵌入式系統(tǒng),優(yōu)化其測試技術(shù)已勢在必行,研究出合適的嵌入式軟件系統(tǒng)測試方法,正是本課題的意義所在。
本文引用地址:http://www.ex-cimer.com/article/201612/333021.htm嵌入式系統(tǒng)介紹及軟件特點
嵌入式系統(tǒng)簡介
嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪,是專為應(yīng)用系統(tǒng)量身打造、是對功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用的計算機系統(tǒng)。
嵌入式系統(tǒng)一般指非PC類標(biāo)配系統(tǒng),它也包括硬件和軟件兩部分。硬件包括處理器/微處理器、存儲器及外設(shè)器件和I/O端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件(OS)(要求實時和多任務(wù)操作)和應(yīng)用程序。有時設(shè)計人員把這兩種軟件組合在一起。應(yīng)用程序控制著系統(tǒng)的運作和行為,而操作系統(tǒng)控制著應(yīng)用程序編程與硬件的交互作用。
嵌入式系統(tǒng)軟件特點分析
嵌入式系統(tǒng)開發(fā)有其自身的特點。一般先進(jìn)行硬件部分的開發(fā),主要包括形成裸機平臺,根據(jù)需要移植實時操作系統(tǒng),開發(fā)底層的硬件驅(qū)動程序等。硬件平臺測試通過后,應(yīng)用軟件的開發(fā)調(diào)試是基于該硬件平臺進(jìn)行的,這同時也是對硬件平臺的一個測試。
嵌入式系統(tǒng)的開發(fā)過程是一個軟硬件互相協(xié)調(diào),互相反饋和互相測試的過程。一般來說,在嵌入式系統(tǒng)軟件中,底層驅(qū)動程序、操作系統(tǒng)和應(yīng)用程序的界面是不清晰的,根據(jù)需要甚至混編在一起。這主要是由于嵌入式系統(tǒng)中軟件對硬件的依賴性造成的?;谇度胧杰浖τ布囊蕾囆?,其要求軟件測試時必須最大限度地模擬被測軟件的實際運行環(huán)境,以保證測試的可靠性,而底層程序和應(yīng)用程序界限的不清晰又增加了測試的難度。測試時只有確認(rèn)嵌入式系統(tǒng)平臺及底層程序是正確的情況下才能進(jìn)行應(yīng)用程序的測試,而且在系統(tǒng)測試時,錯誤的定位較為困難。
軟件的專用性也是嵌入式軟件的一個重要特點。由于嵌入式軟件設(shè)計是以一定的目標(biāo)硬件平臺為基礎(chǔ)的,面向固定的任務(wù)進(jìn)行的,因此,一旦被加載到目標(biāo)系統(tǒng)上,功能必須完全確定。這個特點決定了嵌入式應(yīng)用軟件的繼承性較差,也延長系統(tǒng)的測試時間和增加了測試費用。
嵌入式軟件的另外一個重要特點就是實時性。這是基于軟件的執(zhí)行角度而言的,也就是說嵌入式軟件的執(zhí)行要滿足一定的時間約束。嵌入式系統(tǒng)中,應(yīng)用軟件自身算法的復(fù)雜度和操作系統(tǒng)任務(wù)調(diào)度,決定了系統(tǒng)資源的分配和消耗。因此,對系統(tǒng)實時性進(jìn)行測試時,要借助一定的測試工具對應(yīng)用程序算法復(fù)雜度和操作系統(tǒng)任務(wù)調(diào)度進(jìn)行分析測試。可見嵌入式軟件與傳統(tǒng)的面向?qū)ο蠛兔嫦蜻^程的軟件相比有其自身的特點。所以嵌入式軟件的開發(fā)和測試也就與一般商用軟件的開發(fā)和測試策略有了很大的不同,可以說嵌入式軟件是最難測試的一種軟件。針對這些特點對嵌入式軟件的測試進(jìn)行研究是必要的和有意義的。
嵌入式軟件測試
軟件測試是軟件質(zhì)量保證的關(guān)鍵因素,代表了規(guī)約、設(shè)計和編碼的最終檢查。是從經(jīng)濟、效率的角度出發(fā),對軟件代碼進(jìn)行質(zhì)量、正確性保證的一個過程。軟件測試是軟件開發(fā)中的一個重要環(huán)節(jié),也是軟件從開發(fā)過程到應(yīng)用過程的關(guān)鍵一環(huán),嵌入式軟件也不例外。
嵌入式軟件測試策略和方案設(shè)計
討論嵌入式軟件測試首先就會遇到一個問題:為什么不把所有測試都放在目標(biāo)上進(jìn)行呢?因為若所有測試都放在目標(biāo)平臺上有很多不利的因素:
可能會造成與目標(biāo)環(huán)境開發(fā)者爭奪時間的瓶頸,避免提供更多的目標(biāo)環(huán)境;
目標(biāo)環(huán)境可能還不可行;
比起主機平臺環(huán)境,目標(biāo)環(huán)境通常是不精密的和不方便的;
提供給開發(fā)者的目標(biāo)環(huán)境和開發(fā)環(huán)境通常是很昂貴的;
開發(fā)和測試工作可能會妨礙目標(biāo)環(huán)境已存在持續(xù)的應(yīng)用。
確定目標(biāo)主機(host-target)測試環(huán)境后,開發(fā)測試人員又會遇到以下的問題:
1)多少開發(fā)人員會進(jìn)行測試工作?
2)多少軟件應(yīng)該測試,測試會花費多長時間?
3)主機環(huán)境和目標(biāo)環(huán)境有哪些軟件工具,價格怎樣?
4)多少目標(biāo)環(huán)境可以提供給開發(fā)者?
5)主機和目標(biāo)主機之間的連接怎樣?
6)被測軟件下載到目標(biāo)主機有多快?
7)使用主機與目標(biāo)環(huán)境之間有什么限制?
進(jìn)行嵌入式軟件的測試都應(yīng)深入考慮以上問題,結(jié)合自身實際情況,選定合理測試策略和方案。
嵌入式軟件測試流程及方法
根據(jù)不同的指標(biāo),軟件測試有不同的劃分方法。
從軟件開發(fā)過程中測試所處的不同階段可分為模塊測試、集成測試和系統(tǒng)測試;根據(jù)是否需要運行目標(biāo)代碼又可分為動態(tài)測試和靜態(tài)測試;根據(jù)目標(biāo)代碼的可見性還可分為白盒測試(結(jié)構(gòu)測試)和黑盒測試(功能測試)。
在軟件測試中,每種測試方法都不是孤立的。為了最經(jīng)濟最有效地達(dá)到測試的目的,各種測試方法往往是互相嵌套的。例如,在軟件的單元測試階段,可以用黑盒測試和白盒測試的方法分別進(jìn)行動態(tài)測試。
近年來,在軟件測試中,測試代碼的覆蓋率逐漸成為軟件測試的統(tǒng)一標(biāo)準(zhǔn),因此不管采用何種測試方法,盡可能地提高軟件測試中的代碼覆蓋率是必需的。軟件測試代碼覆蓋率是基于白盒測試方法的,因此,為了提高軟件測試的代碼覆蓋率,測試人員必須清楚源代碼的結(jié)構(gòu),擁有程序設(shè)計文檔,以便設(shè)計測試用例,使測試盡可能地覆蓋程序內(nèi)部結(jié)構(gòu)的每條語句,提高代碼的覆蓋率。
嵌入式軟件測試流程
根據(jù)嵌入式系統(tǒng)的開發(fā)流程,為了最經(jīng)濟地實現(xiàn)系統(tǒng)的功能,采用自頂向下、層層推進(jìn)的方法對嵌入式系統(tǒng)進(jìn)行測試,采用如下圖所示的測試流程。
平臺測試:這部分包括硬件電路測試、操作系統(tǒng)及底層驅(qū)動程序測試等。
硬件電路測試需要用專門的測試工具進(jìn)行測試,這里不再多述。操作系統(tǒng)和底層驅(qū)動程序的測試主要包括測試操作系統(tǒng)的任務(wù)調(diào)度、實時性能、通信端口的數(shù)據(jù)傳輸率。該階段測試完成后,系統(tǒng)應(yīng)為一個完整的嵌入式系統(tǒng)平臺,用戶只需添加應(yīng)用程序即可完成特定的任務(wù)。
模塊測試:把大型的嵌入式軟件系統(tǒng)劃分為若干個相對較小的任務(wù)模塊,由不同的程序員分別同時對其進(jìn)行編碼。編碼完成后,把各個模塊集成起來前,必須對單個模塊進(jìn)行測試。由于沒有其它數(shù)據(jù)模塊進(jìn)行數(shù)據(jù)傳遞的支持,該階段測試一般是在宿主機上進(jìn)行的(宿主機有豐富的資源和方便的調(diào)試環(huán)境)。此階段主要是進(jìn)行白盒測試,盡可能地測試每一個函數(shù)、每一個條件分支、每一個程序語句,提高代碼測試的覆蓋率。由于只有單個模塊正確才有整體集成的必要性,因此,單個模塊測試一定要充分、完整。模塊測試階段,測試用例的構(gòu)造不但要測試系統(tǒng)正常的運行情況,還要進(jìn)行邊界測試。邊界測試就是進(jìn)行某一數(shù)據(jù)變量的最大值和最小值的測試,同時進(jìn)行越界測試,即輸入不該輸入的數(shù)據(jù)變量測試系統(tǒng)的運行情況。理想的嵌入式系統(tǒng)是不應(yīng)該由于用戶的信息交互而導(dǎo)致死機的,這也是嵌入式設(shè)計的一個基本要求。因此,不論進(jìn)行何種測試,系統(tǒng)死機都該被作為測試錯誤處理。
在模塊測試階段,也可以把大的模塊劃分成小的模塊。在程序內(nèi)部,小模塊之間數(shù)據(jù)傳遞的入口設(shè)計接口函數(shù),要用于快速地定位錯誤。用模塊嵌套的思想進(jìn)行軟件測試,需要模塊內(nèi)部結(jié)構(gòu)清晰,數(shù)據(jù)鏈路簡單。
集成測試:單個軟件模塊測試正確之后,將所有模塊集成起來進(jìn)行測試。本階段主要是找出各模塊之間數(shù)據(jù)傳遞和系統(tǒng)組成后的邏輯結(jié)構(gòu)的錯誤。在宿主機上采用黑盒與白盒相結(jié)合的方法進(jìn)行測試,要最大限度地模擬實際運行環(huán)境,可以屏蔽掉一些不影響系統(tǒng)執(zhí)行的和數(shù)據(jù)傳遞難以模擬的函數(shù)。
集成測試是嵌入式軟件測試優(yōu)點充分體現(xiàn)的階段。集成測試前,應(yīng)該由程序員根據(jù)模塊之間的數(shù)據(jù)的輸入輸出編寫模塊接口函數(shù),這需要負(fù)責(zé)不同軟件模塊的程序員共同協(xié)調(diào)完成,然后將模塊接口函數(shù)集成到接收數(shù)據(jù)模塊的入口處。單鏈路數(shù)據(jù)傳遞的軟件模塊集成測試時容易定位錯誤所在的軟件模塊。一個軟件模塊的數(shù)據(jù)不一定只有另外一個模塊提供,即軟件模塊的數(shù)據(jù)鏈路不一定只是單鏈路的,測試時可以把復(fù)雜鏈路結(jié)構(gòu)的數(shù)據(jù)傳遞劃分為單鏈路結(jié)構(gòu)數(shù)據(jù)傳送進(jìn)行錯誤定位。
集成測試是在擁有程序設(shè)計文檔、程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)時,對軟件模塊在集成中出現(xiàn)的錯誤進(jìn)行測試。
系統(tǒng)測試:集成測試完成后,退出宿主機測試環(huán)境,把系統(tǒng)移植到目標(biāo)機上來,完成應(yīng)用到現(xiàn)場環(huán)境中的移植,從用戶的角度對系統(tǒng)進(jìn)行黑盒測試,以驗證每一項具體的功能。由于測試者對程序內(nèi)容、程序執(zhí)行情況一無所知,因此本測試階段的錯誤定位比較困難。系統(tǒng)測試階段應(yīng)該進(jìn)行意外測試和破壞性測試,即測試系統(tǒng)正常執(zhí)行情況下不該發(fā)生的活動和人為的破壞性的測試,進(jìn)一步驗證系統(tǒng)性能。系統(tǒng)測試階段不應(yīng)該確定錯誤后立即修改代碼,應(yīng)根據(jù)一定的錯誤發(fā)生頻率,確定測試周期,在每個測試周期結(jié)束時修改代碼,進(jìn)行反復(fù)測試;否則,不但增加了完全測試的任務(wù)量,而且降低了測試的可信度。
測試結(jié)果分析:測試結(jié)果分析可以定位錯誤,指導(dǎo)程序員修改代碼,同時指出進(jìn)行測試的程序進(jìn)一步測試的方向。測試結(jié)果分析是一個由測試結(jié)果和測試預(yù)得結(jié)果進(jìn)行分析、比較和定位錯誤的過程。測試結(jié)果分析是一次測試的最后環(huán)節(jié),分析時應(yīng)該考慮軟件的運行環(huán)境與實際運行環(huán)境的差異,以及各種外界因素的影響等。
白盒測試方法
白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,它是知道產(chǎn)品內(nèi)部工作過程,可通過測試來檢測產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行,按照程序內(nèi)部的結(jié)構(gòu)測試程序,檢驗程序中的每條通路是否都能按預(yù)定要求正確工作的功能,白盒測試的主要方法有邏輯驅(qū)動、基路測試等,主要用于軟件驗證。“白盒”法要求全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對所有邏輯路徑進(jìn)行測試。“白盒”法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測試數(shù)據(jù)。
黑盒測試方法
黑盒測試也稱功能測試或數(shù)據(jù)驅(qū)動測試,它是在已知產(chǎn)品所應(yīng)具有的功能,通過測試來檢測每個功能是否都能正常使用。在測試時,把程序看作一個不能打開的黑盆子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,測試者在程序接口進(jìn)行測試。它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)鋸而產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫或文件)的完整性。黑盒測試方法主要有等價類劃分、邊值分析、因果圖、錯誤推測等,主要用于軟件確認(rèn)測試。“黑盒”法著眼于程序外部結(jié)構(gòu)、不考慮內(nèi)部邏輯結(jié)構(gòu)、針對軟件界面和軟件功能進(jìn)行測試。“黑盒”法是窮舉輸入測試,只有把所有可能的輸入都作為測試情況使用,才能以這種方法查出程序中所有的錯誤。
測試用例的構(gòu)造
測試用例是為了測試目標(biāo)程序設(shè)計的,包括輸入項和預(yù)得結(jié)果的一種文件。根據(jù)測試環(huán)境和測試目標(biāo)程序的不同,可分為某種格式的文檔或某種輸入行為(如一次按鍵)等。測試用例的構(gòu)造要盡可能覆蓋所有可能的取值范圍,使測試盡可能地覆蓋所有程序代碼,提高代碼的測試覆蓋率,同時又不作多余、重復(fù)和無意義的測試。在嵌入式軟件測試的不同階段,要構(gòu)造不同的測試用例;在系統(tǒng)平臺測試階段,要構(gòu)造針對系統(tǒng)任務(wù)調(diào)度、實時性能和底層驅(qū)動程序的測試用例;在模塊測試階段,應(yīng)構(gòu)造針對某一模塊進(jìn)行測試的測試用例;在集成測試階段,針對系統(tǒng)集成時數(shù)據(jù)傳遞、結(jié)構(gòu)連接的問題構(gòu)造相應(yīng)的測試用例;在系統(tǒng)測試階段,要構(gòu)造針對某項功能的或多項功能結(jié)合在一起的測試用例,或使用已經(jīng)在同類產(chǎn)品上已經(jīng)驗證正確的測試用例,測試用例是可復(fù)用的。
結(jié)語
嵌入式設(shè)計已經(jīng)成為工業(yè)現(xiàn)代化、智能化的必經(jīng)之路,嵌入式產(chǎn)品已經(jīng)深入到各行各業(yè)。嵌入式系統(tǒng)的專用程度較高,系統(tǒng)的整體繼承性相對較小,為了保證系統(tǒng)的穩(wěn)定性,軟件測試成為嵌入式開發(fā)的一個重要環(huán)節(jié)。由于嵌入式軟件自身的特點,傳統(tǒng)的軟件測試?yán)碚摬荒苤苯佑糜谇度胧杰浖臏y試。文章對嵌入式軟件的特點作了分析,總結(jié)了嵌入式軟件測試的策略和方案設(shè)計,提出了嵌入式軟件測試流程和測試方法。本文的研究內(nèi)容對嵌入式軟件的測試有重要意義。
評論