測試 第4章.ppt_第1頁
測試 第4章.ppt_第2頁
測試 第4章.ppt_第3頁
測試 第4章.ppt_第4頁
測試 第4章.ppt_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于缺陷模式的軟件測試,簡介,軟件缺陷模式與測試是2000年后在美國誕生的一種新型軟件測試技術(shù) 主要面向軟件中的非功能性缺陷,并以缺陷檢測效率高、定位準(zhǔn)確、自動化程度高、易用等特點而受到廣泛關(guān)注 國際上目前主流軟件測試技術(shù)之一,是可信軟件系統(tǒng)中必須要做的一步測試,是美國政府指定,眾多大企業(yè)都普遍使用的測試技術(shù)。,基本概念,軟件缺陷:與需求不一致的統(tǒng)稱為缺陷 軟件缺陷分類:功能性缺陷和非功能性缺陷 非功能性軟件缺陷模式: 能給出確切語法和語義定義,并在實踐中經(jīng)常發(fā)生或后果比較嚴(yán)重的缺陷的集合。,非功能性軟件缺陷測試的必要性,從實踐來看:國際上大量的測試工具的應(yīng)用效果表明,大多數(shù)商用軟件和開源軟件

2、其故障率可達(dá)1-2個/KLOC,安全漏洞密度可達(dá)3-4個/KLOC,其他類型的缺陷密度更大。 非功能性缺陷也會造成系統(tǒng)的死機(jī)等安全問題 非功能性軟件缺陷大多是由開發(fā)者疏忽造成的,且眾多與路徑相關(guān),這種缺陷是不可避免的。,相關(guān)工具,Metal:斯坦福大學(xué)(C/C+) FindBugs:馬里蘭大學(xué)(Java) PMD:一款開源源碼靜態(tài)分析工具(Java) Klocwork:美國Klocwork 公司(C/C+/Java) CodeSonar:GrammaTech 公司(C/C+) Coverity Prevent:Coverity 公司(C/C+/Java) Inspector for C/C+:

3、Reasoning 公司,相關(guān)工具,Klocwork:中國有200多個用戶 Coverity:美國政府指定測試工具,2008年測試代碼超過100億行,2009年上半年超過115億行 DTS:北京郵電大學(xué)研發(fā),已經(jīng)在航天、武器裝備、企業(yè)ERP、財務(wù)、鐵路、電信、電力中使用,120多個試用戶,已經(jīng)測試了上千萬行代碼、數(shù)百個軟件,作用及意義,軟件缺陷模式與測試是軟件測試領(lǐng)域中一種新型的軟件測試技術(shù) 主要面向軟件的非功能性缺陷,可以檢測一般軟件測試技術(shù)中難以檢測的軟件缺陷 與面向過程的軟件測試具有很好的互補(bǔ)性 基于缺陷模式的測試技術(shù)與已往的軟件測試有很大的不同,檢測精度與效率比較高,測試成本低,基于缺

4、陷模式的軟件測試,基于缺陷模式的軟件測試概述 基于缺陷模式的軟件測試指標(biāo)分析 缺陷模式 基于缺陷模式的軟件測試系統(tǒng)(DTS),基于缺陷模式的軟件測試概述,缺陷模式必須滿足下列幾個條件: 該模式下的缺陷是符合實際的。 基于該模式的缺陷數(shù)目是可以容忍的。 該模式下的缺陷是可以測試的。,基于缺陷模式的軟件測試概述,基于模式的軟件測試技術(shù)具有如下特點: 針對性強(qiáng):如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且在被測軟件中是存在的,則面向缺陷的測試可以檢測出此類缺陷。 基于缺陷模式的軟件測試技術(shù)往往能發(fā)現(xiàn)其他測試技術(shù)難以發(fā)現(xiàn)的故障,如內(nèi)存泄漏缺陷,空指針引用缺陷。 工具自動化程度高以及測試效率高。 缺陷定位準(zhǔn)確

5、:對測試所發(fā)現(xiàn)的缺陷能夠準(zhǔn)確定位。 易學(xué)、易使用:對一般的IT專業(yè)??埔陨系漠厴I(yè)生,該測試方法一般經(jīng)過數(shù)天的培訓(xùn)即可掌握其使用方法。,基于缺陷模式的軟件測試概述 基于缺陷模式的軟件測試指標(biāo)分析 缺陷模式 基于缺陷模式的軟件測試系統(tǒng)(DTS),基于缺陷模式的軟件測試,基于缺陷模式的軟件測試指標(biāo)分析,設(shè)P是待測程序,將缺陷模式M分成類M=M1,M2,Mn,每類分成種Mi=Mi1,Mi2,MiL,從P中計算出和M相匹配的檢查點的集合IP=IP1,IP2,IPm,可以定義如下技術(shù)指標(biāo):,漏報率(ER):設(shè)P是程序,M是缺陷模式,A是算法,IP(M,A,P)是IP總的數(shù)目,考慮到測試算法實現(xiàn)過程中的不同

6、假設(shè),會導(dǎo)致IP(M,A,P)不同。漏報率定義為:,基于缺陷模式的軟件測試指標(biāo)分析,理論上IP(M,P)是確定的,但在實踐中很難得到; IP通常需要人工確定該IP是否真的是缺陷,考慮程序的復(fù)雜性以及測試代價等因素,IP經(jīng)確認(rèn)后分3中情況: IPY(P,A,M),IP確認(rèn)為缺陷的數(shù)目 IPN(P,A,M),確認(rèn)為非缺陷的數(shù)目. IPU(P,A,M),不能確定是否缺陷的數(shù)目,基于缺陷模式的軟件測試指標(biāo)分析,準(zhǔn)確率(CR): 誤報率(DR):,基于缺陷模式的軟件測試指標(biāo)分析,缺陷檢測率(DDR): 自動缺陷檢測率(ADR): 用IPAY(P,A,M)表示不需人工確認(rèn),工具可以自動缺陷的檢測個數(shù)。,基

7、于缺陷模式的軟件測試指標(biāo)分析,計算復(fù)雜性: 在理論上,基于缺陷的軟件測試技術(shù)可以100%的檢測所定義的缺陷模式,但由于缺陷的檢測可以模型化程序的遍歷問題,對于大型程序,全部遍歷雖然可以提高精度,但需要花費(fèi)大量的時間。因此,該技術(shù)有一個性價比的問題,在時間遍歷過程中,往往都有一定的限制,如在一個函數(shù)內(nèi)、一個類內(nèi)、一個文件內(nèi)等。,基于缺陷模式的軟件測試指標(biāo)分析,基于缺陷模式的軟件測試,基于缺陷模式的軟件測試概述 基于缺陷模式的軟件測試指標(biāo)分析 缺陷模式 基于缺陷模式的軟件測試系統(tǒng)(DTS),缺陷模式,缺陷模式概述 故障模式 安全漏洞模式 疑問代碼模式 規(guī)則模式,缺陷模式概述,缺陷發(fā)生機(jī)理:疏忽、二

8、義性、不理解、遺漏 分類:故障、安全漏洞、疑問代碼、規(guī)則 語法與語義定義:給出基于語言的缺陷定義 缺陷新模式研究:論文、工具、實踐、推理 缺陷模式數(shù)據(jù)庫:核心技術(shù)之一,不斷增補(bǔ) 嵌入式軟件缺陷模式研究:適合嵌入式特點,缺陷模式概述,缺陷模式是和語言本身相關(guān)的,不同的語言有著不同的缺陷模式。我們以C+語言和Java語言為背景來描述其缺陷模式,將軟件的缺陷模式分為四個層次,即故障模式、漏洞模式、疑問代碼模式和規(guī)則模式。,軟件缺陷模式,此類缺陷是故障,一經(jīng)產(chǎn)生,會導(dǎo)致系統(tǒng)出錯。 存儲器泄露模式 資源泄漏模式 指針使用錯誤模式 數(shù)組越界模式 非法計算模式 使用未初始化變量模式 死循環(huán)結(jié)構(gòu)模式 死鎖模式

9、,故障模式,安全漏洞模式,安全漏洞模式:此類缺陷會給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。 緩沖區(qū)溢出模式 被感染的數(shù)據(jù)模式 競爭條件模式 風(fēng)險操作模式,疑問代碼模式,此類缺陷是不應(yīng)該發(fā)生的,它未必會造成系統(tǒng)的錯誤,但可能會隱含某些故障,或者是由初級軟件工程師不理解造成的。 性能缺陷模式:此類缺陷會降低系統(tǒng)的性能 疑問代碼模式:讓人費(fèi)解的代碼,規(guī)則模式,規(guī)則模式:軟件開發(fā)總要遵循一定的規(guī)則,某個團(tuán)隊也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。 代碼規(guī)則 復(fù)雜性規(guī)則 控制流規(guī)則 命名規(guī)則 可移植性規(guī)則 資源規(guī)則,缺陷模式,缺陷模式概述 故障模式 安全漏洞模式 疑問代碼模式 規(guī)則模式,故障模式,

10、故障模式中給出的故障描述,是程序中可能存在的故障,這些故障一旦被激活,就會使系統(tǒng)發(fā)生錯誤。包括以下幾種故障模式:,29,故障模式,1、內(nèi)存泄漏的故障模式(Memory Leak Fault, MLF) 定義:設(shè)在程序的某處申請了大小為MB的空間,凡在程序結(jié)束時MB或者M(jìn)B的一部分沒被釋放、多次釋放MB或MB的一部分都是內(nèi)存泄漏故障。 MLF有三種形式: 遺漏故障:是指申請的內(nèi)存沒有被釋放。 不匹配故障:是指申請函數(shù)和釋放函數(shù)不匹配。 不相等的釋放錯誤:是指釋放的空間和申請的空間大小不一樣。,30,例題,例4-1:申請的內(nèi)存沒有被釋放 listrec *add_list_entry(listre

11、c *entry,int value) listrec *new_entry=(listrec *)malloc(sizeof(listrec); if(!new_entry) return NULL; if(!entry) return NULL; 例4-2/3:申請函數(shù)和釋放函數(shù)不匹配 str=malloc(10) ; ; delete(str) ; str=new(10);. ; free(str);. malloc與free匹配;new與delete匹配,31,例4-6:申請內(nèi)存的pointer發(fā)生了變化 char *p=malloc(10); +p; free(p); 例:“=”指針

12、賦值,不能重復(fù)刪除。 char *str=new char100; char *p; str=abc; p=str; delete str; delete p;,32,故障模式,2、數(shù)組越界故障的故障模式(Out of Bounds Array Access Fault OBAF) 定義:設(shè)某數(shù)組定義為Arrayminmax,若引用Arrayi且imax都是數(shù)組越界故障。,33,故障模式,(1)對程序中任何出現(xiàn)Arrayi的地方,都要判斷i的范圍,可能有三種情況: 若i是在數(shù)組定義的范圍內(nèi),則是正確的; 若i是在數(shù)組定義的范圍外,則是OBAF; 若i是不確定的,則Arrayi是否是OBAF則不

13、確定 例4-10:數(shù)組越界 int data10; for(i=0; i=10; i+)datai=.;,34,(2)字符串拷貝過程中存在的數(shù)組越界故障 。 例(文件檢索系統(tǒng),集成測試): #define MAXPATTERN 3 #define MAXFILELEN 12 char l_PatMAXPATTERN+1MAXFILELEN+1; memset(l_Pat, 0, 20*(MAXFILELEN+1); (3)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝過程中,多余的數(shù)據(jù)會自動的存放在后面所定義的成員變量中,這種情況數(shù)組并不產(chǎn)生越界錯誤。,35,故障模式,3使用未

14、初始化變量故障模式(Uninitialized Variable Fault,UVF) 定義:使用未初始化變量故障:存在一個路徑,在該路徑上使用前面沒有被賦初值的變量是使用未初始化變量故障。 例4-13 使用未初始化變量 char c; while(c!=EOF ,36,故障模式,4空指針使用故障(NULL Pointer Dereference Fault NPDF) 定義:引用空指針或給空指針賦值的都是空指針使用故障。 例4-18:引用空指針 listrec *new_entry=(listrec *)malloc(sizeof(listrec); if(!entry) return NU

15、LL; new_entry-value=value; new_entry-next=entry-next;,提示:在申請空間后、fopen打開文件之后,都需要判斷是否申請、打開成功。,37,故障模式,5非法計算類故障(Illegal Computing Fault ILCF) 定義:非法計算類故障:是指計算機(jī)不允許的計算。 一旦非法計算類故障產(chǎn)生,系統(tǒng)將強(qiáng)行退出。例如: 除數(shù)為0故障。 對數(shù)自變量為0或負(fù)數(shù)故障。 根號內(nèi)為負(fù)數(shù)的故障。,38,故障模式,6死循環(huán)結(jié)構(gòu)模式(Dead Loop Fault DLF) 定義:在控制流圖中,對任何一個循環(huán)結(jié)構(gòu),包括: FOR語句中的死循環(huán)結(jié)構(gòu); WHIL

16、E語句中的死循環(huán)結(jié)構(gòu); DO-WHILE語句中的死循環(huán)結(jié)構(gòu); GOTO語句中的死循環(huán)結(jié)構(gòu); 函數(shù)循環(huán)調(diào)用造成的死循環(huán)結(jié)構(gòu)。,39,死循環(huán),例4-19:無增量 for(i=1; i=100; j+ ) 例4-20:無結(jié)束條件 for(i=1;i+) 例4-21:增量變化不能使程序結(jié)束 for(i=1;i=100;i=i+2),40,故障模式,7資源泄漏故障(RLF) 定義:資源泄漏故障:在Java程序中,當(dāng)一個資源被打開后,如果并不是在所有的可執(zhí)行路徑上都對其進(jìn)行了顯式的釋放操作,則是一個資源泄漏故障。 簡單泄露 異常泄露 交叉函數(shù)的情況 “靜態(tài)”情況,41,故障模式,8. 并發(fā)故障模式 該模式

17、主要是針對程序員對多線程的編碼機(jī)制、各種同步方法、Java存儲器模式和java虛擬機(jī)的工作機(jī)制不清楚,而且由于線程啟動的任意性和不確定性使用戶無法確定所編寫的代碼具體何時執(zhí)行而導(dǎo)致對公共區(qū)域的錯誤使用。 這類模式主要包括不正確的同步、死鎖、多線程應(yīng)用中方法調(diào)用時機(jī)或方式不正確、同一變量的雙重驗證、相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。,缺陷模式,缺陷模式概述 故障模式 安全漏洞模式 疑問代碼模式 規(guī)則模式,43,安全漏洞模式,此類缺陷會給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。 緩沖區(qū)溢出模式 被感染的數(shù)據(jù)模式 競爭條件模式 風(fēng)險操作模式,44,安全漏洞模式,安全漏洞模式為他人攻擊軟件提供可

18、能。而一旦軟件被攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因此,此類漏洞應(yīng)當(dāng)盡量避免。,45,安全漏洞模式,緩沖區(qū)溢出(buffer overflow)漏洞模式 定義:當(dāng)程序要在一個緩沖區(qū)內(nèi)存儲比該緩沖區(qū)的大小還要多的數(shù)據(jù)時,即會產(chǎn)生緩沖區(qū)溢出漏洞。 緩存區(qū)溢出主要有2種類型: 數(shù)據(jù)復(fù)制造成的緩沖區(qū)溢出 格式化字符串造成的緩沖區(qū)溢出,46,例4-47:數(shù)據(jù)復(fù)制造成的緩沖區(qū)溢出 main(int argc, char *argv) char argvBuffer16; if(argc=2) strcpy(argvBuffer,argv1); . argv來自命令行,長度如果超過15則溢出

19、例4-48:格式化字符串造成的緩沖區(qū)溢出 int main() char fixed_bur10; sprintf(fixed_buf,”very long format string .n”); . sprintf引號內(nèi)字符長度超過10,則造成緩沖區(qū)溢出。,47,安全漏洞模式,被污染的數(shù)據(jù)模式(Tainted Data) 定義:程序從外部獲取數(shù)據(jù)時,這些數(shù)據(jù)可能含有具有欺騙性或者是不想要的垃圾數(shù)據(jù),如果在使用這些數(shù)據(jù)前不進(jìn)行合法性檢查則將威脅到程序的安全,造成一個tainted data缺陷。tainted data可能會導(dǎo)致程序不按原計劃執(zhí)行,也有可能直接或間接地導(dǎo)致緩沖區(qū)溢出缺陷。 被污

20、染的數(shù)據(jù)模式主要有兩種類型: 使用的數(shù)據(jù)來自外部的全局變量 使用的數(shù)據(jù)來自輸入函數(shù),48,例4-49:使用的數(shù)據(jù)來自外部的全局變量 main(int argc, char *argv) char argvBuffer16; if(argc=2) strcpy(argvBuffer,argv1); . 例4-50:使用的數(shù)據(jù)來自輸入函數(shù) FILE *f=NULL; char *config = getenv(“CONFIG_FILE”); if(config!=NULL) f=fopen(config,”r”);,49,安全漏洞模式,競爭條件(Race Condition) 定義: 如果程序中有

21、兩種不同的I/O調(diào)用同一文件進(jìn)行操作,而且這兩種調(diào)用是通過絕對路徑或相對路徑引用文件的,那么就易出現(xiàn)Race Condition問題。在兩種操作進(jìn)行的間隙,黑客可能改變文件系統(tǒng),那么將會導(dǎo)致對兩個不同的文件操作而不是同一文件進(jìn)行操作。 這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運(yùn)行的程序中(例如:setuid程序、數(shù)據(jù)庫和服務(wù)器程序等)。,50,安全漏洞模式,風(fēng)險操作(Risky Operation) 定義:如果不恰當(dāng)?shù)厥褂昧四承?biāo)準(zhǔn)庫函數(shù),可能會帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用, 就可能會帶來安全隱患。,51,隨機(jī)數(shù),例如像rand()和random()這樣的隨機(jī)數(shù)生成函數(shù),它

22、們在生成偽隨機(jī)值的時候表現(xiàn)出來的性能是非常差的, 如果用它們來生成默認(rèn)的口令, 這些口令將很容易被攻擊者猜測到。 可以選變量作為種子,如時間: srand(unsigned) time(NULL) ; rand() ; 更精確,可以使clock、硬件,缺陷模式,缺陷模式概述 故障模式 安全漏洞模式 疑問代碼模式 規(guī)則模式,53,疑問代碼模式,此類缺陷是不應(yīng)該發(fā)生的,它未必會造成系統(tǒng)的錯誤,但可能會隱含某些故障,或者是由初級軟件工程師不理解造成的。 性能缺陷模式:此類缺陷會降低系統(tǒng)的性能 疑問代碼模式:讓人費(fèi)解的代碼,低性能模式:,該模式導(dǎo)致軟件運(yùn)行效率低下,因此建議采用更高效的代碼來完成同樣的

23、功能。這類模式主要包括使用低效函數(shù)/代碼、使用多余函數(shù)、Java中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的文件包含、字符串低效操作和有更簡單的運(yùn)算可以替代等。,55,比較下兩段代碼各有什么優(yōu)缺點:,if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing(); ,for (i=0; iN; i+) if (condition) DoSomething(); else DoOtherthing(); ,疑問代碼模式,代碼國際化模式: 對語言進(jìn)行國際化的過程中,可能造成本地設(shè)置和程序需求不符的情況,造成匹配錯誤。 疑問代碼模式 代碼中容易引起歧義的、讓人迷惑、毫無意義的編寫方式。,缺陷模式,缺陷模式概述 故障模式 安全漏洞模式 疑問代碼模式 規(guī)則模式,58,規(guī)則模式,軟件開發(fā)總要遵循一定的規(guī)則,某個團(tuán)隊也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。 代碼規(guī)則 復(fù)雜性規(guī)則 控制流規(guī)則 命名規(guī)則 可移植性規(guī)則 資源規(guī)則,基于缺陷模式的軟件測試,基于缺陷模式的軟件測試概述 基于缺陷模式的軟件測試指標(biāo)分析 缺陷模式 基于缺陷模式的軟件測試系統(tǒng)(DTS),基于缺陷模式的測試系統(tǒng)(DTS),DTS3.0(缺陷測試系統(tǒng))

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論