999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于PolySpace的嵌入式軟件內(nèi)存測(cè)試

2010-01-01 00:00:00劉春裕
電腦知識(shí)與技術(shù) 2010年1期

摘要:基于嵌入式軟件的測(cè)試經(jīng)驗(yàn),針對(duì)嵌入式軟件特點(diǎn),研究了基于PolySpace的嵌入式軟件內(nèi)存測(cè)試方法,分析了PolySpace使用的語(yǔ)義分析技術(shù),以實(shí)例講解了如何實(shí)現(xiàn)內(nèi)存測(cè)試,并指出對(duì)覆蓋率測(cè)試的幫助。對(duì)于嵌入式軟件測(cè)試,具有實(shí)際參考價(jià)值。

關(guān)鍵詞:內(nèi)存測(cè)試;運(yùn)行時(shí)錯(cuò)誤;語(yǔ)義分析技術(shù);覆蓋率測(cè)試

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)01-85-03

Test of Memory Based on the PolySpace For Embedded Software

LIU Chun-yu, WANG Lei

(Software Test Center of CSBI, Lianyungang 222006, China)

Abstract: On the basis of researching software testing technology, aim at characteristic of embedded system, this thesis researched test of memory based on the PolySpace for embedded software. Analyzed the technology of semantic analyse using in PolySpace. Explain how to achieve memory testing by example,raise it can be help to test of procedure cover.

Keywords: test of memory; run-time errors; the technology of semantic analyse; test of procedure cover

1 研究嵌入式軟件內(nèi)存測(cè)試的背景

軟件測(cè)試是提高軟件質(zhì)量的一個(gè)重要手段,據(jù)統(tǒng)計(jì),國(guó)外軟件開(kāi)發(fā)機(jī)構(gòu)40%的工作量花在軟件測(cè)試上,軟件開(kāi)發(fā)費(fèi)用的近1/2用于軟件測(cè)試。對(duì)于一些要求高可靠、高安全的軟件,如核反應(yīng)監(jiān)控軟件、航天軟件,測(cè)試費(fèi)用可能相當(dāng)于軟件工程其它費(fèi)用總和的3~5倍。

嵌入式軟件和一般的應(yīng)用軟件測(cè)試相比,具有自身的特點(diǎn)(特別是對(duì)于沒(méi)有操作系統(tǒng)的嵌入式應(yīng)用軟件而言):

1)嵌入式軟件是在特定的硬件環(huán)境下才能運(yùn)行的軟件。因此,嵌入式軟件測(cè)試最重要的目的就是保證嵌入式軟件能在其特定的硬件環(huán)境下更可靠地運(yùn)行。

2)嵌入式軟件測(cè)試除了要保證嵌入式軟件在特定硬件環(huán)境中運(yùn)行的高可靠性,還要保證嵌入式軟件的實(shí)時(shí)性。比如在工業(yè)控制中,如果某些特定環(huán)境下的嵌入式軟件不具備實(shí)時(shí)響應(yīng)的能力,就可能造成巨大的損失。

3)嵌入式軟件產(chǎn)品為了滿足高可靠性的要求,不允許內(nèi)存在運(yùn)行時(shí)有泄漏等情況發(fā)生,因此嵌入式軟件測(cè)試除了對(duì)軟件進(jìn)行性能測(cè)試、GUI測(cè)試、覆蓋分析測(cè)試之外,還需要對(duì)內(nèi)存進(jìn)行測(cè)試。

內(nèi)存測(cè)試需要測(cè)試軟件中的內(nèi)存越界訪問(wèn)、內(nèi)存資源泄漏情況。內(nèi)存越界主要包括數(shù)組越界讀寫(xiě)、“野指針操作”和堆棧溢出等幾種。內(nèi)存資源泄漏情況則包含較多的種類,如分配的內(nèi)存沒(méi)有釋放、打開(kāi)的文件沒(méi)有關(guān)閉、socket沒(méi)有關(guān)閉、Windows窗口句柄沒(méi)有關(guān)閉等。內(nèi)存越界和內(nèi)存資源泄漏是普遍存在的嚴(yán)重問(wèn)題,可以說(shuō)如果解決了內(nèi)存越界和內(nèi)存資源泄漏問(wèn)題,軟件中的Bug就消除了一大半以上。

內(nèi)存測(cè)試還需要測(cè)試軟件的最大內(nèi)存等資源的占用率,防止軟件使用的資源超出系統(tǒng)的限制。同時(shí)還需要測(cè)試系統(tǒng)資源在極端情況下的軟件行為,如系統(tǒng)內(nèi)存資源被別的應(yīng)用程序消耗時(shí)程序長(zhǎng)時(shí)間運(yùn)行后的情況等。

2 當(dāng)前內(nèi)存測(cè)試的主要手段

針對(duì)內(nèi)存測(cè)試的特點(diǎn)和要測(cè)試的內(nèi)容,當(dāng)前內(nèi)存測(cè)試的主要手段包括以下幾種:

1)靜態(tài)檢查。即使用靜態(tài)檢查工具(如PC-Lint)或代碼評(píng)審檢視(Code-review)等手段來(lái)發(fā)現(xiàn)問(wèn)題。可以檢查內(nèi)存中的堆棧溢出等比較淺顯的問(wèn)題,對(duì)復(fù)雜的內(nèi)存使用情況無(wú)能為力。

2)動(dòng)態(tài)檢查。即通過(guò)使用內(nèi)存動(dòng)態(tài)檢查工具(如BoundsChecker、Purify)在軟件運(yùn)行時(shí)進(jìn)行檢查。鑒于測(cè)試用例對(duì)程序執(zhí)行路徑的覆蓋很難做到完全,此時(shí)很難完全檢查內(nèi)存越界或內(nèi)存泄漏。

3)手工測(cè)試。自行編寫(xiě)內(nèi)存測(cè)試代碼進(jìn)行白盒測(cè)試和黑盒測(cè)試,設(shè)計(jì)專門(mén)的用例來(lái)檢查可能存在的資源泄漏和內(nèi)存越界等問(wèn)題。

4)使用內(nèi)存監(jiān)測(cè)工具進(jìn)行監(jiān)測(cè)。如Windows系統(tǒng)使用任務(wù)管理器來(lái)監(jiān)測(cè)程序的內(nèi)存使用情況、句柄等資源使用情況等。看是否存在資源泄漏等情況。

5)通過(guò)路徑分析方法來(lái)提高內(nèi)存測(cè)試的質(zhì)量,分析可能出現(xiàn)的操作路徑,對(duì)這些操作路徑反復(fù)測(cè)試,可以利用動(dòng)態(tài)檢查方法進(jìn)行測(cè)試。

6)編寫(xiě)極端情況下的測(cè)試用例來(lái)模擬內(nèi)存資源的最大消耗情況,看程序消耗的內(nèi)存等資源是否會(huì)超越系統(tǒng)所能承受的極限。

上述測(cè)試手段使用任何一種時(shí)都存在某種程度的缺陷,測(cè)試時(shí)需要將這些手段結(jié)合起來(lái)才能有效地進(jìn)行內(nèi)存測(cè)試。作為軟件測(cè)試工具的PolySpace使用目前最新的語(yǔ)義分析技術(shù),依靠大量的數(shù)學(xué)定理提供的規(guī)則,在最大程度保證數(shù)據(jù)覆蓋的基礎(chǔ)上實(shí)現(xiàn)了動(dòng)態(tài)運(yùn)行時(shí)內(nèi)存的檢測(cè)。

3 PolySpace的內(nèi)存測(cè)試原理

3.1 軟件運(yùn)行錯(cuò)誤分析

運(yùn)行時(shí)錯(cuò)誤(Run-time Errors)就是軟件在動(dòng)態(tài)運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤,是所有的軟件錯(cuò)誤中最具風(fēng)險(xiǎn)的。在日常使用Windows系統(tǒng)時(shí)都會(huì)遇到程序出現(xiàn)運(yùn)行錯(cuò)誤的情況,如圖1、圖2所示。

在上述情況下,無(wú)論如何操作,應(yīng)用程序都會(huì)退出。對(duì)于一般軟件,出現(xiàn)這樣的問(wèn)題也許沒(méi)關(guān)系,但對(duì)于航天、汽車(chē)、軍用等安全級(jí)別要求非常高的系統(tǒng),這樣的錯(cuò)誤是致命的。運(yùn)行時(shí)錯(cuò)誤由ANSI C 定義,是指那些能導(dǎo)致預(yù)定義之外的不正確結(jié)果或者處理器停機(jī)的錯(cuò)誤,它是所有的軟件錯(cuò)誤中最具風(fēng)險(xiǎn)的,其后果包括:處理器停機(jī)、數(shù)據(jù)崩潰、安全保密受到破壞等。

典型的運(yùn)行時(shí)錯(cuò)誤包括:企圖讀未初始的變量、對(duì)空指針和越界指針的引用、對(duì)超界數(shù)組的訪問(wèn)、非法類型轉(zhuǎn)換(long to short, float to integer)、非法的算數(shù)運(yùn)算 (例,除零錯(cuò)誤,負(fù)數(shù)開(kāi)方)、整數(shù)和浮點(diǎn)數(shù)的上溢出/下溢出、多線程應(yīng)用中未保護(hù)數(shù)據(jù)的訪問(wèn)沖突、不可達(dá)到的代碼等。運(yùn)行時(shí)錯(cuò)誤屬于潛在威脅,廣泛存在于軟件之中。對(duì)于運(yùn)行時(shí)錯(cuò)誤的測(cè)試技術(shù)研究,成為當(dāng)前最重要的課題之一。

3.2 傳統(tǒng)軟件測(cè)試技術(shù)限制

傳統(tǒng)軟件測(cè)試技術(shù)分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。

靜態(tài)測(cè)試可以檢查軟件代碼的編程規(guī)范,分析程序的靜態(tài)結(jié)構(gòu),對(duì)軟件進(jìn)行質(zhì)量度量(如Testbed等)。借助于靜態(tài)測(cè)試技術(shù),可以使代碼更加規(guī)范,結(jié)構(gòu)更加清晰,但不能分析各個(gè)變量之間的關(guān)系,當(dāng)程序動(dòng)態(tài)運(yùn)行時(shí),可能出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤不能檢查出來(lái)。因此,傳統(tǒng)測(cè)試時(shí)靜態(tài)測(cè)試要和動(dòng)態(tài)測(cè)試結(jié)合起來(lái)做。但動(dòng)態(tài)測(cè)試具有太大的人為因素,導(dǎo)致動(dòng)態(tài)測(cè)試不可能達(dá)到完全測(cè)試,只能達(dá)到測(cè)試用例覆蓋的程度,保證測(cè)試過(guò)的用例輸入不會(huì)出問(wèn)題。同時(shí),動(dòng)態(tài)測(cè)試發(fā)現(xiàn)的問(wèn)題僅局限于現(xiàn)象(如圖1、圖2),測(cè)試人員提交BUG后,開(kāi)發(fā)人員還需要對(duì)BUG進(jìn)行重現(xiàn)并使用調(diào)試工具對(duì)BUG進(jìn)行定位,這需要一定的時(shí)間。尤其對(duì)于偶爾出現(xiàn)的問(wèn)題,需要更多的時(shí)間去調(diào)試、定位。

3.3 PolySpace的語(yǔ)義分析技術(shù)

PolySpace 使用的是目前最新的語(yǔ)義分析技術(shù),它依靠大量的數(shù)學(xué)定理提供的規(guī)則去分析軟件的動(dòng)態(tài)行為。語(yǔ)義分析技術(shù)沒(méi)有使用簡(jiǎn)單的窮舉法,卻有能力在更普通的模式下去表達(dá)程序的狀態(tài),還能提供規(guī)則巧妙的去處理它。當(dāng)應(yīng)用在運(yùn)行時(shí)錯(cuò)誤的檢測(cè)時(shí),語(yǔ)義分析技術(shù)會(huì)對(duì)所有危險(xiǎn)的操作,執(zhí)行一個(gè)詳細(xì)的分析,盡早發(fā)現(xiàn)其中的運(yùn)行時(shí)錯(cuò)誤。

語(yǔ)義分析檢查包括如下幾個(gè)方面:

1) 類型檢查。如果操作符作用于不相容的操作數(shù),編譯程序必須報(bào)告出錯(cuò)信息。

2) 控制流檢查。控制流語(yǔ)句必須使控制轉(zhuǎn)移到合法的地方。例如,在C語(yǔ)言中break語(yǔ)句使控制跳離包括該語(yǔ)句的最小 while、for 或 switch 語(yǔ)句。如果不存在包括它的這樣的語(yǔ)句,則應(yīng)報(bào)錯(cuò)。

3) 一致性檢查。在很多場(chǎng)合要求對(duì)象只能被定義一次。

4) 相關(guān)名字檢查。有時(shí),同一名字必須出現(xiàn)兩次或多次,此時(shí)必須要檢查這幾個(gè)地方用的名字是相同的。

5) 作用域分析。對(duì)元素的作用域分析,確保元素使用不出現(xiàn)問(wèn)題。

3.4 舉例說(shuō)明運(yùn)行時(shí)錯(cuò)誤的檢查

某程序使用了兩個(gè)變量:x和y,檢查語(yǔ)句 x = x/(x-y)的運(yùn)行時(shí)錯(cuò)誤。

針對(duì)該語(yǔ)句,首先列舉語(yǔ)句可能存在的所有運(yùn)行時(shí)錯(cuò)誤:x和y可能沒(méi)有初始化、x-y可能會(huì)溢出、x和y可能會(huì)相等從而導(dǎo)致除數(shù)為0、x/(x-y)可能會(huì)溢出。以“x和y可能會(huì)相等從而導(dǎo)致除數(shù)為0”為例來(lái)說(shuō)明PolySpace是如何進(jìn)行語(yǔ)義分析的。

為了更形象的理解語(yǔ)義分析,可以在坐標(biāo)系中表示x和y的所有可能取值,其中紅線部分表示x和y相等能夠?qū)е鲁龜?shù)為0的集合。如圖3。

根據(jù)圖3所示,如果要判斷出現(xiàn)除數(shù)為0的狀態(tài),就要窮舉x和y的每一個(gè)狀態(tài),檢查它是否在紅線上,很快我們就能意識(shí)到該方法的局限性:實(shí)際程序中不可能只有兩個(gè)變量,所有的變量值都窮舉,花費(fèi)時(shí)間無(wú)法預(yù)計(jì);同時(shí)該方法也不能查出一些運(yùn)行時(shí)錯(cuò)誤,如讀取未初始化變量等。

目前大多數(shù)的編譯器、鏈接器和一般的靜態(tài)分析工具都在使用間隔分析技術(shù)。它可以根據(jù)x和y的坐標(biāo),得到x和y的最大值和最小值,從而畫(huà)出一個(gè)矩形,如圖4所示。如果圖中矩形和紅線的交集為空,則說(shuō)明除數(shù)不可能為0。

上述根據(jù)間隔分析得到的矩形還不是一個(gè)很好的形狀,因?yàn)樗撕A康牟粚?shí)際的x、y的值,運(yùn)行時(shí)錯(cuò)誤的檢測(cè)結(jié)果包含了大量的警告信息,不適合實(shí)際的分析。語(yǔ)義分析技術(shù)能夠依據(jù)自己的規(guī)則,建立非常精確的形狀,包括網(wǎng)格或者多個(gè)多邊形、基于變量(x,y)之間的關(guān)系、程序的控制結(jié)構(gòu)(if-then-else, for, while loops,switch)、內(nèi)部過(guò)程之間的關(guān)系(函數(shù)調(diào)用)、多任務(wù)分析、進(jìn)行運(yùn)行時(shí)錯(cuò)誤的檢測(cè)。語(yǔ)義分析技術(shù)的原理不僅僅是計(jì)算數(shù)據(jù)類型和常量的值,象編譯器和一般的靜態(tài)分析工具那樣,語(yǔ)義分析包括很多方面。它起源于這些包括在程序里面的每一個(gè)操作的相關(guān)的語(yǔ)義和操作數(shù)據(jù)的關(guān)系,并以此作為基礎(chǔ)去詳細(xì)審查源代碼和細(xì)微的運(yùn)行時(shí)錯(cuò)誤。結(jié)合語(yǔ)義分析技術(shù),得到的x和y的取值表示如圖5所示。

3.5 PolySpace對(duì)代碼覆蓋率的幫助

傳統(tǒng)的測(cè)試?yán)碚搶?duì)于覆蓋率做了要求,根據(jù)軟件等級(jí),需要達(dá)到的指標(biāo)也不一樣。下面簡(jiǎn)單的舉個(gè)例子來(lái)說(shuō)明傳統(tǒng)代碼覆蓋率的局限。

static void **** (int *a)

{ float b;

*a = *a + 1;

b = 10.0/(float)(*a -6);

……………}

傳統(tǒng)意義的覆蓋測(cè)試包括語(yǔ)句覆蓋、分支覆蓋、路徑覆蓋,針對(duì)上面的程序段,如果設(shè)計(jì)測(cè)試用例時(shí)輸入(*a = 10),則語(yǔ)句覆蓋可以達(dá)到100%,此時(shí)認(rèn)為已經(jīng)滿足覆蓋率測(cè)試的要求,不再繼續(xù)設(shè)計(jì)測(cè)試用例。很顯然,程序可能出問(wèn)題的數(shù)據(jù)輸入并沒(méi)能測(cè)試出來(lái)。如果(*a = 6),會(huì)造成除數(shù)為0,使用傳統(tǒng)的測(cè)試方法導(dǎo)致漏掉了一些致命問(wèn)題。從數(shù)據(jù)輸入的覆蓋角度講,int *a能接受的數(shù)據(jù)輸入為65536個(gè),在語(yǔ)句覆蓋率100%的基礎(chǔ)上數(shù)據(jù)輸入覆蓋僅僅為1/65536。如果使用PolySpace,它采用的類似于窮舉的語(yǔ)義分析技術(shù)將所有可能輸入的情況都會(huì)檢查一遍,這樣才能最大程度保證程序不會(huì)出錯(cuò)。從這個(gè)意義上講,PolySpace可以取代傳統(tǒng)的覆蓋率測(cè)試。

4 結(jié)束語(yǔ)

PolySpace使用語(yǔ)義分析技術(shù),通過(guò)靜態(tài)分析驗(yàn)證的方法,專注于發(fā)現(xiàn)動(dòng)態(tài)運(yùn)行時(shí)才會(huì)出現(xiàn)的錯(cuò)誤。使用PolySpace不用編寫(xiě)測(cè)試用例,不需要將代碼執(zhí)行起來(lái),需要的只是自動(dòng)的數(shù)學(xué)建模。在人工前期配置好以后,剩下的工作都是自動(dòng)化分析,節(jié)省人力時(shí)間。在實(shí)際的軟件測(cè)試工作中,已經(jīng)多次使用PolySpace,取得了良好的效果,值得推廣。

參考文獻(xiàn):

[1] 鄭人杰.軟件工程[M].北京:清華大學(xué)出版社,1999.

[2] 周濤.航天型號(hào)軟件測(cè)試[M].北京:宇航出版社,1999.

[3] 康一梅,張永革,李志軍,等.嵌入式軟件測(cè)試[M].北京:機(jī)械工業(yè)出版社,2008.

[4] 周偉明.軟件測(cè)試實(shí)踐[M].北京:電子工業(yè)出版社,2008.

[5] 韓柯,杜旭濤.軟件測(cè)試[M].北京:機(jī)械工業(yè)出版社,2003.

主站蜘蛛池模板: 亚洲人成网7777777国产| 久久久亚洲色| 青青热久免费精品视频6| 97在线观看视频免费| 国产精品99久久久久久董美香| 国产精品嫩草影院视频| 暴力调教一区二区三区| 91蝌蚪视频在线观看| 青青草原国产一区二区| 久久黄色小视频| 亚洲免费毛片| 国产第一色| 一本大道AV人久久综合| 欧美精品伊人久久| 午夜a级毛片| 毛片免费观看视频| 激情無極限的亚洲一区免费| 国产黄网永久免费| 亚洲高清无码久久久| 国产一在线观看| 国产爽妇精品| 国产内射在线观看| 国产精品免费露脸视频| 亚洲国产91人成在线| 亚洲天堂久久新| www.youjizz.com久久| 国产免费久久精品99re不卡| 波多野结衣久久精品| 国产中文一区a级毛片视频 | 国产在线高清一级毛片| 欧美黄网在线| 国产在线自在拍91精品黑人| 无码精品国产VA在线观看DVD| 久久这里只有精品免费| 在线看片中文字幕| 欧美成一级| 国产精品欧美在线观看| 国产人人干| 欧洲av毛片| 国产一区在线观看无码| 成人亚洲国产| 99999久久久久久亚洲| 全部毛片免费看| 国产一在线观看| 久久伊人色| 毛片网站免费在线观看| 国产成人免费观看在线视频| 真实国产乱子伦高清| 国产制服丝袜91在线| 国产高潮流白浆视频| 成人国产精品网站在线看| 国产精品女在线观看| a级免费视频| 亚洲日韩第九十九页| 亚洲视屏在线观看| 四虎国产永久在线观看| 99久久精品国产自免费| 红杏AV在线无码| a毛片免费在线观看| 亚国产欧美在线人成| 一级毛片免费高清视频| 天堂va亚洲va欧美va国产| 亚洲国产成熟视频在线多多 | 国产一线在线| www.精品视频| 亚洲欧美另类中文字幕| 囯产av无码片毛片一级| 欧美成人怡春院在线激情| 亚洲性视频网站| 国产麻豆91网在线看| 国产在线观看精品| 91免费片| 日本成人一区| 国产午夜一级淫片| 91国内在线视频| 日韩午夜伦| 人人妻人人澡人人爽欧美一区| 亚洲狼网站狼狼鲁亚洲下载| 成人中文字幕在线| 四虎AV麻豆| 国产在线小视频| 欧美国产视频|