《軟件測試教程(華為培訓專用)-第4章》由會員分享,可在線閱讀,更多相關(guān)《軟件測試教程(華為培訓專用)-第4章(40頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,,,,,,,基于缺陷模式的軟件測試,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,*,基于缺陷模式的軟件測試,,,,基于缺陷模式的軟件測試,基于缺陷模式的軟件測試概述,,,基于缺陷模式的軟件測試指標分析,,,缺陷模式,,,基于缺陷模式的軟件測試系統(tǒng)(,DTS,),,,基于缺陷模式的軟件測試概述,缺陷模式必須滿足下列幾個條件:,,該模式下的缺陷是符合實際的。,,基于該模式的缺陷數(shù)目是可以容忍的。,,該模式下的缺陷是可以測試的。,,基于缺陷模式的軟件測試概述,基于模式的軟件測試技術(shù)具有如下特點:,,針對性強:如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且在被測軟件中是存在的,則
2、面向缺陷的測試可以檢測出此類缺陷。,,基于缺陷模式的軟件測試技術(shù)往往能發(fā)現(xiàn)其他測試技術(shù)難以發(fā)現(xiàn)的故障,如內(nèi)存泄漏缺陷,空指針引用缺陷。,,工具自動化程度高以及測試效率高。,,缺陷定位準確:對測試所發(fā)現(xiàn)的缺陷能夠準確定位。,,易學、易使用:對一般的,IT,專業(yè)??埔陨系漠厴I(yè)生,該測試方法一般經(jīng)過數(shù)天的培訓即可掌握其使用方法。,,,基于缺陷模式的軟件測試概述,,,基于缺陷模式的軟件測試指標分析,,,缺陷模式,,,基于缺陷模式的軟件測試系統(tǒng)(,DTS,),基于缺陷模式的軟件測試,,基于缺陷模式的軟件測試指標分析,,設(shè),P,是待測程序,將缺陷模式,M,分成類,M={M1,,,M2,,,…,Mn,},,
3、每類分成種,Mi={Mi1,,,Mi2,,,…,,,MiL,},,從,P,中計算出和,M,相匹配的檢查點的集合,IP={IP1,IP2,…,,IPm,},,可以定義如下技術(shù)指標:,,漏報率,(ER),:設(shè),P,是程序,,M,是缺陷模式,,A,是算法,,IP,(,M,,,A,,,P,)是,IP,總的數(shù)目,考慮到測試算法實現(xiàn)過程中的不同假設(shè),會導(dǎo)致,IP,(,M,,,A,,,P,)不同。漏報率定義為:,,基于缺陷模式的軟件測試指標分析,,,準確率,(CR),:,,,,誤報率,(DR),:,,基于缺陷模式的軟件測試指標分析,,,缺陷檢測率,(DDR),:,,,,自動缺陷檢測率,(ADR),:,,用,
4、IPAY,(,P,,,A,,,M,)表示不需人工確認,工具可以自動缺陷的檢測個數(shù)。,基于缺陷模式的軟件測試指標分析,,,計算復(fù)雜性:,,在理論上,基于缺陷的軟件測試技術(shù)可以,100%,的檢測所定義的缺陷模式,但由于缺陷的檢測可以模型化程序的遍歷問題,對于大型程序,全部遍歷雖然可以提高精度,但需要花費大量的時間。因此,該技術(shù)有一個性價比的問題,在時間遍歷過程中,往往都有一定的限制,如在一個函數(shù)內(nèi)、一個類內(nèi)、一個文件內(nèi)等。,基于缺陷模式的軟件測試指標分析,,,基于缺陷模式的軟件測試,基于缺陷模式的軟件測試概述,,,基于缺陷模式的軟件測試指標分析,,,缺陷模式,,,基于缺陷模式的軟件測試系統(tǒng)(,DT
5、S,),,缺陷模式,,缺陷模式概述,,故障模式,,安全漏洞模式,,缺陷模式,,缺陷模式概述,缺陷模式是和語言本身相關(guān)的,不同的語言有著不同的缺陷模式。我們以,C++,語言和,Java,語言為背景來描述其缺陷模式,將軟件的缺陷模式分為四個層次,即故障模式、漏洞模式、缺陷模式和規(guī)則模式。,,,故障模式,:,此類缺陷是故障,一經(jīng)產(chǎn)生,會導(dǎo)致系統(tǒng)出錯。,,存儲器泄露模式,,資源泄漏模式,,指針使用錯誤模式,,數(shù)組越界模式,,非法計算模式,,使用未初始化變量模式,,死循環(huán)結(jié)構(gòu)模式,,死鎖模式,缺陷模式概述,,缺陷模式概述,安全漏洞模式:此類缺陷會給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。,,緩沖區(qū)溢出模
6、式,,被感染的數(shù)據(jù)模式,,競爭條件模式,,風險操作模式,,缺陷模式概述,缺陷模式:此類缺陷是不應(yīng)該發(fā)生的,它未必會造成系統(tǒng)的錯誤,但可能會隱含某些故障,或者是由初級軟件工程師不理解造成的。,,性能缺陷模式:此類缺陷會降低系統(tǒng)的性能,,疑問代碼模式:讓人費解的代碼,,缺陷模式概述,規(guī)則模式:軟件開發(fā)總要遵循一定的規(guī)則,某個團隊也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。,,代碼規(guī)則,,復(fù)雜性規(guī)則,,控制流規(guī)則,,命名規(guī)則,,可移植性規(guī)則,,資源規(guī)則,,缺陷模式,缺陷模式概述,,,故障模式,,安全漏洞模式,,缺陷模式,,,故障模式,,故障模式中給出的故障描述,是程序中可能存在的故障,這些故障一旦被
7、激活,就會使系統(tǒng)發(fā)生錯誤。包括以下幾種故障模式:,,故障模式,存儲泄漏的故障模式(,Memory Leak Fault MLF,),,定義:內(nèi)存泄漏故障(,Memory Leak Faults,):設(shè)在程序的某處申請了大小為,M,的空間,凡在程序結(jié)束時,M,或者,M,的一部分沒被釋放、或者多次釋放,M,或,M,的一部分都是內(nèi)存泄漏故障。,,,MLF,有三種形式:,,遺漏故障:是指申請的內(nèi)存沒有被釋放。,,不匹配故障:是指申請函數(shù)和釋放函數(shù)不匹配。,,不相等的釋放錯誤:是指釋放的空間和申請的空間大小不一樣。,,故障模式,數(shù)組越界故障的故障模式(,Out of Bounds Array Acces
8、s Fault OBAF,),,定義:數(shù)組越界故障:設(shè)某數(shù)組定義為,Array[min,?,max,],,若引用,Array[i,],且,imax,都是數(shù)組越界故障。在,C++,中,若,i<0,或,i,?,max,是數(shù)組越界故障。,,(,1,)對程序中任何出現(xiàn),Array[i,],的地方,都要判斷,i,的范圍,可能有三種情況:,,?,若,i,是在數(shù)組定義的范圍內(nèi),則是正確的;,,?,若,i,是在數(shù)組定義的范圍外,則是,OBAF,;,,故障模式,(,2,)字符串拷貝過程中存在的數(shù)組越界故障 。,,(,3,)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝過程中,多
9、余的數(shù)據(jù)會自動的存放在后面所定義的成員變量中,這種情況數(shù)組并不產(chǎn)生越界錯誤。,,,故障模式,3,.使用未初始化變量故障模式(,Uninitialized Variable Fault,,,UVF,),,定義:使用未初始化變量故障:存在一個路徑,在該路徑上使用前面沒有被賦初值的變量是使用未初始化變量故障。,,,4,.空指針使用故障(,NULL Pointer Dereference Fault NPDF,),,定義:空指針使用故障:引用空指針或給空指針賦值的都是空指針使用故障。,,故障模式,5,.非法計算類故障(,Illegal Computing Fault ILCF,),,定義:非法計算類故
10、障:是指計算機不允許的計算。,,一旦非法計算類故障產(chǎn)生,系統(tǒng)將強行退出。例如:,,除數(shù)為,0,故障。,,對數(shù)自變量為,0,或負數(shù)故障。,,根號內(nèi)為負數(shù)的故障。,,故障模式,6,.,死循環(huán)結(jié)構(gòu)模式,(Dead Loop Fault DLF),,,定義:在控制流圖中,,,對任何一個循環(huán)結(jié)構(gòu),,,包括,:,,FOR,語句中的死循環(huán)結(jié)構(gòu);,,WHILE,語句中的死循環(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)。,,故障模式,7,.資源泄漏故障(,RLF,),,定義:資源泄漏故障:在,Java,程序中,當一個資源被打開后,如果并不是
11、在所有的可執(zhí)行路徑上都對其進行了顯式的釋放操作,則是一個資源泄漏故障。,,故障模式,8.,并發(fā)故障模式,,該模式主要是針對程序員對多線程的編碼機制、各種同步方法、,Java,存儲器模式和,java,虛擬機的工作機制不清楚,而且由于線程啟動的任意性和不確定性使用戶無法確定所編寫的代碼具體何時執(zhí)行而導(dǎo)致對公共區(qū)域的錯誤使用。這類模式主要包括不正確的同步、死鎖、多線程應(yīng)用中方法調(diào)用時機或方式不正確、同一變量的雙重驗證、相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。,,缺陷模式,,缺陷模式概述,,故障模式,,安全漏洞模式,,,缺陷模式,,安全漏洞模式,,安全漏洞模式為他人攻擊軟件提供可能。而一旦軟件被攻擊成
12、功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因此,此類漏洞應(yīng)當盡量避免。,,下面以,C++,為基礎(chǔ),介紹基于安全漏洞檢測的缺陷模式。,,安全漏洞模式,緩沖區(qū)溢出(,buffer overflow,)漏洞模式,,定義:當程序要在一個緩沖區(qū)內(nèi)存儲比該緩沖區(qū)的大小還要多的數(shù)據(jù)時,即會產(chǎn)生緩沖區(qū)溢出漏洞。,,緩存區(qū)溢出主要有,2,種類型:數(shù)據(jù)拷貝造成的緩沖區(qū)溢出和格式化字符串造成的緩沖區(qū)溢出。,,安全漏洞模式,被污染的數(shù)據(jù)模式,(Tainted Data),,,定義:程序從外部獲取數(shù)據(jù)時,這些數(shù)據(jù)可能含有具有欺騙性或者是不想要的垃圾數(shù)據(jù),如果在使用這些數(shù)據(jù)前不進行合法性檢查則將威脅到程序的安全,造成一個
13、,tainted data,缺陷。,tainted data,可能會導(dǎo)致程序不按原計劃執(zhí)行,也有可能直接或間接地導(dǎo)致緩沖區(qū)溢出缺陷。,,被污染的數(shù)據(jù)模式主要有兩種類型:使用的數(shù)據(jù)來自外部的全局變量和使用的數(shù)據(jù)來自輸入函數(shù)。,,安全漏洞模式,競爭條件,(Race Condition),,,定義,:,如果程序中有兩種不同的,I/O,調(diào)用同一文件進行操作,而且這兩種調(diào)用是通過絕對路徑或相對路徑引用文件的,那么就易出現(xiàn),Race Condition,問題。在兩種操作進行的間隙,黑客可能改變文件系統(tǒng),那么將會導(dǎo)致對兩個不同的文件操作而不是同一文件進行操作。,,這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運行的
14、程序中,(,例如:,setuid,程序、數(shù)據(jù)庫和服務(wù)器程序等,),。,,安全漏洞模式,風險操作(,Risky Operation,),,定義:如果不恰當?shù)厥褂昧四承藴蕩旌瘮?shù),可能會帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用,,,就可能會帶來安全隱患。,,例如像,rand(),和,random(),這樣的隨機數(shù)生成函數(shù),,,它們在生成偽隨機值的時候表現(xiàn)出來的性能是非常差的,,,如果用它們來生成默認的口令,,,這些口令將很容易被攻擊者猜測到。,,,缺陷模式,,缺陷模式概述,,故障模式,,安全漏洞模式,,缺陷模式,,,缺陷模式,低性能模式,:,,,該模式導(dǎo)致軟件運行效率低下,因此建議采用更
15、高效的代碼來完成同樣的功能。這類模式主要包括使用低效函數(shù),/,代碼、使用多余函數(shù)、,Java,中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的文件包含、字符串低效操作和有更簡單的運算可以替代等。,,基于缺陷模式的軟件測試,基于缺陷模式的軟件測試概述,,,基于缺陷模式的軟件測試指標分析,,,缺陷模式,,,基于缺陷模式的軟件測試系統(tǒng)(,DTS,),,基于缺陷模式的軟件測試系統(tǒng),(,DTS,),,下面以作者自主開發(fā)的基于缺陷模式的測試系統(tǒng),DTS,為例,介紹基于缺陷模式的軟件測試的基本原理。,DTS,是作者在國家,863“,軟件的故障模式與面向故障的軟件測試系統(tǒng)”資助下開發(fā)的測試系統(tǒng),能對上面介紹的缺陷模式進行有效測試。,,DTS,系統(tǒng)結(jié)構(gòu),,基于缺陷模式的軟件測試系統(tǒng)(,DTS,),,,DTS,缺陷模式描述,,,1,.,缺陷模式狀態(tài)機,,有限自動機是計算機科學的重要基石,它在軟件開發(fā)領(lǐng)域內(nèi)通常被稱作有限狀態(tài)機。,,,2,.缺陷模式狀態(tài)機的,xml,描述,,作者用,xml,來對缺陷模式狀態(tài)機進行描述。,xml schema,定義了描述缺陷模式狀態(tài)機的語法,包括標簽以及標簽的各個屬性。,,基于缺陷模式的軟件測試系統(tǒng),(,DTS,),,,DTS,的測試界面,,基于缺陷模式的軟件測試系統(tǒng),(,DTS,),,,