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

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

2010-01-01 00:00:00劉春裕
電腦知識與技術 2010年1期

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

關鍵詞:內(nèi)存測試;運行時錯誤;語義分析技術;覆蓋率測試

中圖分類號:TP311文獻標識碼:A文章編號: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)存測試的背景

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

嵌入式軟件和一般的應用軟件測試相比,具有自身的特點(特別是對于沒有操作系統(tǒng)的嵌入式應用軟件而言):

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

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

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

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

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

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

針對內(nèi)存測試的特點和要測試的內(nèi)容,當前內(nèi)存測試的主要手段包括以下幾種:

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

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

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

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

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

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

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

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

3.1 軟件運行錯誤分析

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

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

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

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

傳統(tǒng)軟件測試技術分為靜態(tài)測試和動態(tài)測試。

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

3.3 PolySpace的語義分析技術

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

語義分析檢查包括如下幾個方面:

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

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

3) 一致性檢查。在很多場合要求對象只能被定義一次。

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

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

3.4 舉例說明運行時錯誤的檢查

某程序使用了兩個變量:x和y,檢查語句 x = x/(x-y)的運行時錯誤。

針對該語句,首先列舉語句可能存在的所有運行時錯誤:x和y可能沒有初始化、x-y可能會溢出、x和y可能會相等從而導致除數(shù)為0、x/(x-y)可能會溢出。以“x和y可能會相等從而導致除數(shù)為0”為例來說明PolySpace是如何進行語義分析的。

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

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

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

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

3.5 PolySpace對代碼覆蓋率的幫助

傳統(tǒng)的測試理論對于覆蓋率做了要求,根據(jù)軟件等級,需要達到的指標也不一樣。下面簡單的舉個例子來說明傳統(tǒng)代碼覆蓋率的局限。

static void **** (int *a)

{ float b;

*a = *a + 1;

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

……………}

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

4 結束語

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

參考文獻:

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

[2] 周濤.航天型號軟件測試[M].北京:宇航出版社,1999.

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

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

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

主站蜘蛛池模板: 久久久久久久久18禁秘| 91免费片| 欧美亚洲一区二区三区导航| 91久久国产热精品免费| 国产电话自拍伊人| 国产成人亚洲日韩欧美电影| 精品人妻无码中字系列| 久久福利网| 手机在线免费不卡一区二| 精品无码日韩国产不卡av| 久久semm亚洲国产| 在线a网站| 亚洲第一天堂无码专区| 国产精品亚洲精品爽爽| 97视频免费看| 国产亚洲精品资源在线26u| 成人无码一区二区三区视频在线观看| 久久女人网| 国产小视频a在线观看| 99ri国产在线| 亚洲黄网在线| 全部毛片免费看| 国产午夜小视频| 亚洲另类色| 欧美精品一二三区| 伊人91在线| 色播五月婷婷| 国产一在线观看| 伊人激情久久综合中文字幕| 国产原创自拍不卡第一页| 欧美翘臀一区二区三区| av在线5g无码天天| 国产在线欧美| 久久人与动人物A级毛片| 亚洲免费福利视频| jizz国产视频| 露脸真实国语乱在线观看| 国产嫖妓91东北老熟女久久一| 青草视频在线观看国产| 久久国产精品电影| 亚洲免费人成影院| 大香网伊人久久综合网2020| 午夜久久影院| 国产亚洲高清在线精品99| 亚洲一区黄色| 国产欧美精品一区aⅴ影院| 99爱在线| 亚洲成a人在线观看| 国产91蝌蚪窝| 亚洲一区二区成人| 久久综合干| 精品久久综合1区2区3区激情| 国产91高跟丝袜| 婷婷激情亚洲| 免费不卡视频| 国产精品美女网站| 国产成人精品一区二区三在线观看| 国产真实自在自线免费精品| 中文字幕无码中文字幕有码在线| 91av国产在线| 曰韩免费无码AV一区二区| 国产午夜精品一区二区三区软件| 日韩在线视频网站| 一级毛片不卡片免费观看| 国产清纯在线一区二区WWW| 九九久久精品免费观看| 欧美精品在线免费| 色男人的天堂久久综合| 亚洲欧美国产五月天综合| 午夜啪啪网| 国产激情第一页| 免费一级成人毛片| 国产真实乱子伦精品视手机观看 | 亚洲性影院| 亚瑟天堂久久一区二区影院| 国产成人一二三| 色网站在线视频| 久久黄色一级片| 欧美激情,国产精品| 欧美精品v| 成人日韩视频| 91外围女在线观看|