![試論基于缺陷模式的軟件測試課件_第1頁](http://file4.renrendoc.com/view/840123a52aab3ba894d8503197ea2262/840123a52aab3ba894d8503197ea22621.gif)
![試論基于缺陷模式的軟件測試課件_第2頁](http://file4.renrendoc.com/view/840123a52aab3ba894d8503197ea2262/840123a52aab3ba894d8503197ea22622.gif)
![試論基于缺陷模式的軟件測試課件_第3頁](http://file4.renrendoc.com/view/840123a52aab3ba894d8503197ea2262/840123a52aab3ba894d8503197ea22623.gif)
![試論基于缺陷模式的軟件測試課件_第4頁](http://file4.renrendoc.com/view/840123a52aab3ba894d8503197ea2262/840123a52aab3ba894d8503197ea22624.gif)
![試論基于缺陷模式的軟件測試課件_第5頁](http://file4.renrendoc.com/view/840123a52aab3ba894d8503197ea2262/840123a52aab3ba894d8503197ea22625.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第4章基于缺陷模式的軟件測試
第4章基于缺陷模式的軟件測試1第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)
第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試24.1基于缺陷模式的軟件測試概述缺陷模式必須滿足下列幾個條件:該模式下的缺陷是符合實際的?;谠撃J降娜毕輸?shù)目是可以容忍的。該模式下的缺陷是可以測試的。
采用該種方式實現(xiàn)測試,首先必須建立一種可以使用的模型(模式),稱為缺陷模式。4.1基于缺陷模式的軟件測試概述缺陷模式必須滿足下列幾個條3基于缺陷模式的軟件測試概述基于模式的軟件測試技術(shù)具有的特點(5條):針對性強:如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且在被測軟件中是存在的,則面向缺陷的測試可以檢測出此類缺陷?;谌毕菽J降能浖y試技術(shù)往往能發(fā)現(xiàn)其他測試技術(shù)難以發(fā)現(xiàn)的故障,如內(nèi)存泄漏缺陷,空指針引用缺陷。工具自動化程度高以及測試效率高。缺陷定位準(zhǔn)確:對測試所發(fā)現(xiàn)的缺陷能夠準(zhǔn)確定位。易學(xué)、易使用:對一般的IT專業(yè)??埔陨系漠厴I(yè)生,該測試方法一般經(jīng)過數(shù)天的培訓(xùn)即可掌握其使用方法。
基于缺陷模式的軟件測試概述基于模式的軟件測試技術(shù)具有的特點(4缺陷模式經(jīng)過傳統(tǒng)軟件測試后,殘留在軟件中的缺陷一般都是小概率、開發(fā)人員疏忽造成的。我們對8類軟件故障的測試實踐表明,經(jīng)過嚴(yán)格的傳統(tǒng)軟件測試,殘留在軟件中的故障密度為1~2個故障/10KLOC,而沒有經(jīng)過嚴(yán)格測試的軟件,其故障密度一般在5~10個故障/10KLOC,而這些故障一旦發(fā)生,往往會導(dǎo)致系統(tǒng)崩潰。軟件缺陷模式就是經(jīng)過理論分析、實踐總結(jié)歸納出來的,我們目前將其分為故障、漏洞、疑問和規(guī)則模式。這是基于缺陷模式測試的核心技術(shù)之一。缺陷模式經(jīng)過傳統(tǒng)軟件測試后,殘留在軟件5缺陷模式的概念(1)缺陷模式的定義缺陷模式是缺陷的語法或語義特征的抽象,具有一定代表性或者會造成嚴(yán)重后果。(2)缺陷模式中缺陷產(chǎn)生的原因?疏忽:缺陷模式中的缺陷一般是由開發(fā)人員疏忽造成的。由于涉及可能多條路徑、多個約束條件,疏忽往往是不可避免的。這類缺陷往往都是和路徑或多個約束條件相關(guān)的。?不理解:缺陷模式中的缺陷也可能是由于開發(fā)人員對程序語言本身不理解造成的。如對某些規(guī)則不了解、對某些語言現(xiàn)象不理解都可能會產(chǎn)生缺陷。缺陷模式的概念(1)缺陷模式的定義6(3)缺陷模式中缺陷的特點:?一般都是非功能性的缺陷?路徑敏感的缺陷一般都是有由疏忽造成的?路徑不敏感的缺陷一般疏忽或不理解造成的?在大量工程軟件的測試結(jié)果統(tǒng)計中,模式中的缺陷是會存在于大多數(shù)的軟件中,并且有一定發(fā)生概率。這個概率要大于人們?nèi)萑痰姆秶?。?)缺陷模式中缺陷的特點:7(4)軟件缺陷模式中的缺陷發(fā)生密度?在以往的對N個軟件測試活動中,該類缺陷的總個數(shù)除以N個軟件的總行數(shù)×1000,稱為該類缺陷的缺陷密度,用缺陷個數(shù)/KLOC表示,N越大,其缺陷密度統(tǒng)計的準(zhǔn)確性就越高。(5)缺陷模式的分類——按缺陷產(chǎn)生后的嚴(yán)重程度:故障模式、安全漏洞模式、疑問代碼模式和規(guī)則模式(6)缺陷模式分類——按是否是路徑敏感?是路徑敏感:需要人工確認(rèn)?路徑不敏感:不需要人工確認(rèn)(4)軟件缺陷模式中的缺陷發(fā)生密度8作用及意義軟件缺陷模式與測試是軟件測試領(lǐng)域中一種新型的軟件測試技術(shù)主要面向軟件的非功能性缺陷,可以檢測一般軟件測試技術(shù)中難以檢測的軟件缺陷與面向過程的軟件測試具有很好的互補性基于缺陷模式的測試技術(shù)與已往的軟件測試有很大的不同,檢測精度與效率比較高,測試成本低作用及意義軟件缺陷模式與測試是軟件測試領(lǐng)域中一種新型的軟件測9軟件缺陷模式缺陷發(fā)生機理:疏忽、二義性、不理解、遺漏分類:故障、安全漏洞、疑問代碼、規(guī)則語法與語義定義:給出基于語言的缺陷定義缺陷新模式研究:論文、工具、實踐、推理缺陷模式數(shù)據(jù)庫:核心技術(shù)之一,不斷增補嵌入式軟件缺陷模式研究:適合嵌入式特點軟件缺陷模式缺陷發(fā)生機理:疏忽、二義性、不理解、遺104.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述第4章基于缺陷模式的軟114.2基于缺陷模式的軟件測試指標(biāo)分析
設(shè)P是待測程序,將缺陷模式M分成類:M={M1,M2,…Mn},每類分成種:Mi={Mi1,Mi2,…,MiL},從P中計算出和M相匹配的檢查點的集合:IP={IP1,IP2,…,IPm},可以定義如下技術(shù)指標(biāo):
(1)漏報率(ER)(2)準(zhǔn)確率(CR)(3)誤報率(DR)(4)缺陷檢測率(DDR):(5)自動缺陷檢測率(ADR):(6)計算復(fù)雜性4.2基于缺陷模式的軟件測試指標(biāo)分析設(shè)124.2基于缺陷模式的軟件測試指標(biāo)分析漏報率(ER):設(shè)P是程序,M是缺陷模式,A是算法,IP(M,A,P)是IP總的數(shù)目,由于測試算法實現(xiàn)過程中的不同假設(shè),會導(dǎo)致IP(M,A,P)不同。
漏報率定義為:4.2基于缺陷模式的軟件測試指標(biāo)分析漏報率(ER):134.2基于缺陷模式的軟件測試指標(biāo)分析注意:
理論上,在給定M和P之后,IP(M,P)是確定的,但在實際中很難得到IP(M,P)。假設(shè)不同的測試工具算法為:A1,A2,…An,則通常用表示IP(M,P)。對于每個IP通常需要人工去判斷高IP是否真的是缺陷,根據(jù)程序的邏輯復(fù)雜性以及測試代價等因素,IP經(jīng)確認(rèn)后分為3種情況:表示IP確認(rèn)為缺陷的數(shù)目:IPY(M,A,P)
表示IP確認(rèn)為非缺陷的數(shù)目:IPN(M,A,P)
表示IP不能確定是否缺陷的數(shù)目:IPU(M,A,P)
所以,可得:
IPY(M,A,P)+IPN(M,A,P)+IPU(M,A,P)=IP(M,A,P)4.2基于缺陷模式的軟件測試指標(biāo)分析注意:14準(zhǔn)確率(CR):誤報率(DR):
4.2基于缺陷模式的軟件測試指標(biāo)分析
準(zhǔn)確率(CR):4.2基于缺陷模式的軟件測試指標(biāo)分析15缺陷檢測率(DDR):
自動缺陷檢測率(ADR):
用IPAY(P,A,M)表示不需人工確認(rèn),工具可以自動缺陷的檢測個數(shù)。4.2基于缺陷模式的軟件測試指標(biāo)分析
缺陷檢測率(DDR):4.2基于缺陷模式的軟件測試指標(biāo)分析16計算復(fù)雜性:
在理論上,基于缺陷的軟件測試技術(shù)可以100%的檢測所定義的缺陷模式,但由于缺陷的檢測可以模型化程序的遍歷問題,對于大型程序,全部遍歷雖然可以提高精度,但需要花費大量的時間。因此,該技術(shù)有一個性價比的問題,在時間遍歷過程中,往往都有一定的限制,如在一個函數(shù)內(nèi)、一個類內(nèi)、一個文件內(nèi)等。4.2基于缺陷模式的軟件測試指標(biāo)分析
計算復(fù)雜性:4.2基于缺陷模式的軟件測試指標(biāo)分析17基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述184.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式4.4.4缺陷模式4.3缺陷模式4.3.1缺陷模式概述194.3.1缺陷模式概述
缺陷模式是和語言本身相關(guān)的,不同的語言有著不同的缺陷模式。我們以C++語言和Java語言為背景來描述其缺陷模式。將軟件的缺陷模式分為四個層次:
即故障模式漏洞模式缺陷模式規(guī)則模式4.3.1缺陷模式概述缺陷模式是和語20軟件缺陷模式的分類:按缺陷嚴(yán)重程度軟件缺陷模式的分類:按缺陷嚴(yán)重程度211.故障模式:
此類缺陷是故障,一經(jīng)產(chǎn)生,會導(dǎo)致系統(tǒng)出錯。主要有:存儲器泄露模式資源泄漏模式指針使用錯誤模式數(shù)組越界模式非法計算模式使用未初始化變量模式死循環(huán)結(jié)構(gòu)模式死鎖模式4.3.1缺陷模式概述1.故障模式:4.3.1缺陷模式概述224.3.1缺陷模式概述2.安全漏洞模式:
此類缺陷會給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。主要有:緩沖區(qū)溢出模式被感染的數(shù)據(jù)模式競爭條件模式風(fēng)險操作模式4.3.1缺陷模式概述2.安全漏洞模式:234.3.1缺陷模式概述3.缺陷模式:
此類缺陷是不應(yīng)該發(fā)生的,它未必會造成系統(tǒng)的錯誤,但可能會隱含某些故障,或者是由初級軟件工程師不理解造成的。主要有:性能缺陷模式:此類缺陷會降低系統(tǒng)的性能疑問代碼模式:讓人費解的代碼4.3.1缺陷模式概述3.缺陷模式:244.3.1缺陷模式概述4.規(guī)則模式:軟件開發(fā)總要遵循一定的規(guī)則,某個團隊也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。主要有:代碼規(guī)則復(fù)雜性規(guī)則控制流規(guī)則命名規(guī)則可移植性規(guī)則資源規(guī)則4.3.1缺陷模式概述4.規(guī)則模式:254.缺陷模式4.3.1缺陷模式概述
4.3.2故障模式4.3.3安全漏洞模式4.3.4缺陷模式4.缺陷模式4.3.1缺陷模式概述264.3.2故障模式
故障模式中給出的故障描述,是程序中可能存在的故障,這些故障一旦被激活,就會使系統(tǒng)發(fā)生錯誤。包括以下幾種故障模式(8種):存儲泄漏的故障模式數(shù)組越界故障的故障模式使用未初始化變量故障模式空指針使用故障非法計算類故障死循環(huán)結(jié)構(gòu)模式資源泄漏故障并發(fā)故障模式4.3.2故障模式故障模式中給出的故障274.3.2故障模式存儲泄漏的故障模式(MemoryLeakFaultMLF)
內(nèi)存泄漏故障:設(shè)在程序的某處申請了大小為M的空間,凡在程序結(jié)束時M或者M的一部分沒被釋放、或者多次釋放M或M的一部分都是內(nèi)存泄漏故障。MLF有三種形式:
(1)遺漏故障:是指申請的內(nèi)存沒有被釋放。(2)不匹配故障:是指申請函數(shù)和釋放函數(shù)不匹配。(3)不相等的釋放錯誤:是指釋放的空間和申請的空間大小不一樣。分析教材中的例子:例1----例9(9種情況)4.3.2故障模式存儲泄漏的故障模式(MemoryLea284.3.2故障模式數(shù)組越界故障的故障模式(OBAF) 數(shù)組越界故障:設(shè)某數(shù)組定義為Array[minmax],若引用Array[i]且i<min或i>max都是數(shù)組越界故障。在C++中,若i<0或imax是數(shù)組越界故障。4.3.2故障模式數(shù)組越界故障的故障模式(OBAF)294.3.2故障模式數(shù)組越界故障的類型分析(3種故障類型):(1)對程序中任何出現(xiàn)Array[i]的地方,都要判斷i的范圍,可能有三種情況:若i是在數(shù)組定義的范圍內(nèi),則是正確的;若i是在數(shù)組定義的范圍外,則是OBAF;若i是不確定的,則Array[i]是否是OBAF則不確定的。(分析教材例4-10和例4-11)(2)字符串拷貝過程中存在的數(shù)組越界故障。
(分析教材例表4-1)(3)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝過程中,多余的數(shù)據(jù)會自動的存放在后面所定義的成員變量中,這種情況數(shù)組并不產(chǎn)生越界錯誤。(分析教材例4-12)4.3.2故障模式數(shù)組越界故障的類型分析(3種故障類型):304.3.2故障模式3.使用未初始化變量故障模式(UninitializedVariableFault,UVF)
定義:使用未初始化變量故障:存在一個路徑,在該路徑上使用前面沒有被賦初值的變量是使用未初始化變量故障。
(分析教材例4-13、例4-14、例4-15、例4-16、例4-17)4.3.2故障模式3.使用未初始化變量故障模式(Unini314.3.2故障模式4.空指針使用故障(NULLPointerDereferenceFaultNPDF)
定義:空指針使用故障:引用空指針或給空指針賦值的都是空指針使用故障。(分析教材例4-18、表4-2)4.3.2故障模式4.空指針使用故障(NULLPoint324.3.2故障模式5.非法計算類故障(IllegalComputingFaultILCF)
定義:非法計算類故障:是指計算機不允許的計算。一旦非法計算類故障產(chǎn)生,系統(tǒng)將強行退出。例如:
除數(shù)為0故障。對數(shù)自變量為0或負數(shù)故障。根號內(nèi)為負數(shù)的故障。4.3.2故障模式5.非法計算類故障(IllegalCo334.3.2故障模式6.死循環(huán)結(jié)構(gòu)模式(DeadLoopFaultDLF)
定義:在控制流圖中,對任何一個循環(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)。
要分析控制循環(huán)的變量的開始條件、結(jié)束條件、步長變化,檢查該循環(huán)能否結(jié)束,若不能則會形成死循環(huán)。(分析教材例4-19、例4-20、例4-21
)4.3.2故障模式6.死循環(huán)結(jié)構(gòu)模式(DeadLoopF344.3.2故障模式7.資源泄漏故障(RLF)定義:資源泄漏故障:在Java程序中,當(dāng)一個資源被打開后,如果并不是在所有的可執(zhí)行路徑上都對其進行了顯式的釋放操作,則是一個資源泄漏故障。資源泄漏一般分為4種情況:
簡單泄漏:資源被分配給本地變量,在該變量的有效范圍內(nèi)沒有釋放資源;
異常泄漏:資源被分配給本地變量,在該變量的有效范圍內(nèi)也釋放了資源,但在釋放資源前由于異常拋出,導(dǎo)致資源釋放操作沒有執(zhí)行交叉函數(shù)泄漏:在一個方法內(nèi)分配資源,該資源被傳遞到另外一個方法內(nèi),在另一個方法內(nèi)沒有正常釋放資源;靜態(tài)情況:資源被分配給靜態(tài)變量或其他非本地變量,該變量沒有被正常釋放。分析教材例4-22、例4-23、例4-24、例4-254.3.2故障模式7.資源泄漏故障(RLF)資源泄漏一般分為354.3.2故障模式8.并發(fā)故障模式 該模式主要是針對程序員對多線程的編碼機制、各種同步方法、Java存儲器模式和java虛擬機的工作機制不清楚,而且由于線程啟動的任意性和不確定性使用戶無法確定所編寫的代碼具體何時執(zhí)行而導(dǎo)致對公共區(qū)域的錯誤使用。
這類模式主要包括:
不正確的同步可能導(dǎo)致死鎖多線程應(yīng)用中方法調(diào)用時機或方式不正確同一變量的雙重驗證相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。分析教材例4-22、例4-23、例4-24、例4-254.3.2故障模式8.并發(fā)故障模式分析教材例4-22、例436(1)不正確的同步定義:在java程序中,由于對synchronized關(guān)鍵字使用不當(dāng)將造成不正確的同步缺陷。
主要有:
不連續(xù)的同步;對易變域的同步;
set方法被同步了,但get方法卻沒有被同步;方法writeObject同步但其他方法均沒有同步;方法readObject使用了synchronized修飾;靜態(tài)域的不正確初始化;分析教材例中對應(yīng)類型的例題(1)不正確的同步定義:分析教材例中對應(yīng)類型的例題37(2)可能導(dǎo)致死鎖定義:在java中,對鎖的不正確操作可能造成導(dǎo)致死鎖的缺陷。(2)可能導(dǎo)致死鎖定義:38(3)多線程應(yīng)用中方法調(diào)用時機或方式不正確定義:在java中,一些同步方法的不正確調(diào)用將造成該類缺陷。(3)多線程應(yīng)用中方法調(diào)用時機或方式不正確定義:39(4)同一變量的雙重驗證定義:在java中,同一變量的雙重驗證指對一個對象進行了兩次判斷,判斷其是否為空。(4)同一變量的雙重驗證定義:40(5)相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)定義:在java中,互相初始化的類指的是兩個類中分別對對方類的實例進行初始化的代碼。(5)相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)定義:414.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式
4.3.4缺陷模式4.3缺陷模式4.3.1缺陷模式概述424.3.3安全漏洞模式
安全漏洞模式為他人攻擊軟件提供可能。而一旦軟件被攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因此,此類漏洞應(yīng)當(dāng)盡量避免。
下面以C++為基礎(chǔ),介紹基于安全漏洞檢測的缺陷模式。主要有:(1)緩沖區(qū)溢出漏洞模式;(2)被污染的數(shù)據(jù)模式;(3)競爭條件(4)風(fēng)險操作4.3.3安全漏洞模式安全漏洞模式為他434.3.3安全漏洞模式1、緩沖區(qū)溢出(bufferoverflow)漏洞模式 定義:當(dāng)程序要在一個緩沖區(qū)內(nèi)存儲比該緩沖區(qū)的大小還要多的數(shù)據(jù)時,即會產(chǎn)生緩沖區(qū)溢出漏洞。 緩存區(qū)溢出主要有2種類型:
數(shù)據(jù)拷貝造成的緩沖區(qū)溢出;格式化字符串造成的緩沖區(qū)溢出;4.3.3安全漏洞模式1、緩沖區(qū)溢出(bufferov441、緩沖區(qū)溢出(bufferoverflow)漏洞模式(1)數(shù)據(jù)拷貝造成的緩沖區(qū)溢出
如果數(shù)據(jù)是從外部傳進來的或是在緩沖區(qū)之間進行數(shù)據(jù)復(fù)制,在使用之前沒有進行檢驗,那么,有可能出現(xiàn)安全問題。
教材:例4-47
表4-5
(2)格式化字符串造成的緩沖區(qū)溢出
利用緩沖區(qū)時,若對數(shù)據(jù)長度不加限制,就可能造成溢出。教材:例4-48
表4-61、緩沖區(qū)溢出(bufferoverflow)漏洞模式(454.3.3安全漏洞模式被污染的數(shù)據(jù)模式(TaintedData)
定義:程序從外部獲取數(shù)據(jù)時,這些數(shù)據(jù)可能含有具有欺騙性或者是不想要的垃圾數(shù)據(jù),如果在使用這些數(shù)據(jù)前不進行合法性檢查則將威脅到程序的安全,造成一個被污染的數(shù)據(jù)缺陷。被污染的數(shù)據(jù)可能會導(dǎo)致程序不按原計劃執(zhí)行,也有可能直接或間接地導(dǎo)致緩沖區(qū)溢出缺陷。
被污染的數(shù)據(jù)模式主要有兩種類型使用的數(shù)據(jù)來自外部的全局變量使用的數(shù)據(jù)來自輸入函數(shù)4.3.3安全漏洞模式被污染的數(shù)據(jù)模式(TaintedD462被污染的數(shù)據(jù)模式(1)使用的數(shù)據(jù)來自外部的全局變量
使用來自外部的全局變量前應(yīng)先進行合法性檢查。教材:例4-49
(2)使用的數(shù)據(jù)來自輸入函數(shù)教材:例4-50
表4-72被污染的數(shù)據(jù)模式(1)使用的數(shù)據(jù)來自外部的全局變量474.3.3安全漏洞模式競爭條件(RaceCondition)
定義:
如果程序中有兩種不同的I/O調(diào)用同一文件進行操作,而且這兩種調(diào)用是通過絕對路徑或相對路徑引用文件的,那么就易出現(xiàn)競爭條件問題。在兩種操作進行的間隙,黑客可能改變文件系統(tǒng),那么將會導(dǎo)致對兩個不同的文件操作而不是同一文件進行操作。
這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運行的程序中(例如:數(shù)據(jù)庫和服務(wù)器程序等)。
程序代碼中,針對文件名的一些操作往往會被黑客利用從而造成競爭條件。
教材:例4-51、524.3.3安全漏洞模式競爭條件(RaceConditio484.3.3安全漏洞模式風(fēng)險操作(RiskyOperation)
定義:如果不恰當(dāng)?shù)厥褂昧四承?biāo)準(zhǔn)庫函數(shù),可能會帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用,就可能會帶來安全隱患。
例如像rand()和random()這樣的隨機數(shù)生成函數(shù),它們在生成偽隨機值的時候表現(xiàn)出來的性能是非常差的,如果用它們來生成默認(rèn)的口令,這些口令將很容易被攻擊者猜測到。
教材中給出了23種類型,每種類型都給出了應(yīng)用實例。例4-53-------例4-794.3.3安全漏洞模式風(fēng)險操作(RiskyOperati49
23種類型及其對應(yīng)實例(1)_spawnvpe函數(shù)使用相對路徑;(例4-53)(2)不可靠的隨機數(shù);(例4-54)(3)可預(yù)測的臨時文件名(例5-55,56,57)(4)危險的外部程序調(diào)用(例5-58,59,60)(5)socke綁定問題(例5-61)(6)使用不可靠的宏(例4-62)(7)使用不可靠的注冊表參數(shù)(例4-63)(8)使用不可靠的參數(shù)(例4-64)
(9)對明確的宏定義使用變量(例4-65)(10)變量作為注冊表參數(shù)(例4-66)(11)使用不可靠的shell命令(例4-67)(12)不充分的路徑(例4-68)23種類型及其對應(yīng)實例(1)_spawnvpe函數(shù)使用相對5023種類型及其對應(yīng)實例(13)不安全的權(quán)限提升(例4-69)(14)使用不可靠的加密算法(例4-70)(15)使用不可靠的進程創(chuàng)建(例4-71)(16)不可靠的資源處理(例4-72)(17)忽略檢查函數(shù)的返回值(例4-73)(18)命名管道的脆弱性(例4-74)
(19)Windows臨時文件的脆弱性(例4-75)(20)以外的內(nèi)存復(fù)制(例4-76)(21)文件存取函數(shù)(例4-77)
(22)不安全的文件操作(例4-78)
(23)暴露絕對路徑(例4-79)23種類型及其對應(yīng)實例(13)不安全的權(quán)限提升(例4-69)514.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式4.3.4缺陷模式
4.3缺陷模式4.3.1缺陷模式概述524.3.4缺陷模式缺陷模式主要分為以下幾類:
1、低性能模式:2、代碼國際化模式
3、疑問代碼模式4.3.4缺陷模式缺陷模式主要分為以下幾類:531低性能模式低性能模式:
該模式導(dǎo)致軟件運行效率低下,因此建議采用更高效的代碼來完成同樣的功能。這類模式主要包括使用低效函數(shù)/代碼、使用多余函數(shù)、Java中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的文件包含、字符串低效操作和有更簡單的運算可以替代等。低性能模式分為以下小類(1)使用低效率的函數(shù)/代碼(10種);(2)使用多余函數(shù)(5種)(3)顯示垃圾回收(4)冗余代碼;(5)頭文件中定義靜態(tài)變量;(6)不必要的文件包含(7)字符串低效操作(8)可以用更簡單的運算替代1低性能模式低性能模式:541低性能模式(1)使用低效率的函數(shù)/代碼定義:在java程序中,對于一些特定的類、函數(shù)和語法,若沒有使用合適的方法,將造成性能下降,此類缺陷為使用低效函數(shù)、代碼缺陷。該類缺陷主要包括以下(10種);判定字符串為空的方法的使用;在邏輯表達式中使用了非短路運算符;使用低效的類型構(gòu)造器;不必要的包裝類實例化;產(chǎn)生隨機整數(shù)在多個類之間復(fù)制很大的字符串常量循環(huán)中的字符串連接未定義為靜態(tài)的內(nèi)部類未聲明為靜態(tài)屬性;調(diào)用低效的.url比較方法教材例4-80---》4-871低性能模式(1)使用低效率的函數(shù)/代碼551低性能模式:(2)使用多余函數(shù)
定義:在java中,若調(diào)用了一些不必要的函數(shù),而造成性能下降,則此類缺陷為使用多余函數(shù)缺陷。該類缺陷主要包括以下(5種)
同一鎖的同步方法調(diào)用;沒有必要的方法調(diào)用;調(diào)用了不必要的getClass()方法;參數(shù)為常數(shù)的數(shù)學(xué)方法;字符串變量調(diào)用toString()教材例4-88---》4-911低性能模式:(2)使用多余函數(shù)教材56(3)顯示垃圾回收
定義:在java中,垃圾回收是很耗費資源的,顯示地調(diào)用垃圾回收機制會導(dǎo)致應(yīng)用的性能急劇下降,此類缺陷為垃圾回收缺陷。1低性能模式:教材例4-92(3)顯示垃圾回收1低性能模式:教材571低性能模式:(4)冗余代碼定義:在java中,存在從未使用過的方法或?qū)傩裕虼嬖趶奈词褂米x取過的局部變量,則此類缺陷為冗余代碼缺陷1低性能模式:(4)冗余代碼581低性能模式:(5)頭文件中定義靜態(tài)變量
定義:頭文件中定義的函數(shù)或變量被聲明為靜態(tài)的,即包含該頭文件的任一文件都比較并復(fù)制一份該對象,這樣無疑明顯增加了可執(zhí)行文件的大小。教材例4-931低性能模式:(5)頭文件中定義靜態(tài)變量教材591低性能模式:(6)不必要的文件包含
定義:一個文件包含了另一個頭文件卻沒有使用該頭文件中的任何符號,這種缺陷會增加編譯的時間。教材例4-941低性能模式:(6)不必要的文件包含教材601低性能模式:(7)字符串低效操作
定義:循環(huán)中的字符串連接。在循環(huán)里用“+”做String變量的連接。教材例4-951低性能模式:(7)字符串低效操作教材61(8)可以用更簡單運算替代
例:i=i+1--i++i=i-1--i--(8)可以用更簡單運算替代622代碼國際化模式
該模式主要是在對語言進行國際化的過程中,可能造成本地設(shè)置和程序需求不符的情況,造成匹配錯誤。2代碼國際化模式該模式主要是在對63
3疑問代碼模式該模式主要指:
代碼中容易引起歧義的,讓人迷惑的編寫方式。3疑問代碼模式該模式主要指:644基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)4基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述65基于缺陷模式的軟件測試系統(tǒng)(DTS)
本教材的作者自主開發(fā)的基于缺陷模式的測試系統(tǒng)DTS。介紹基于缺陷模式的軟件測試的基本原理。
DTS是作者在國家863“軟件的故障模式與面向故障的軟件測試系統(tǒng)”資助下開發(fā)的測試系統(tǒng),能對上面介紹的缺陷模式進行有效測試?;谌毕菽J降能浖y試系統(tǒng)(DTS)66DTS系統(tǒng)結(jié)構(gòu)
基于缺陷模式的軟件測試系統(tǒng)(DTS)
DTS系統(tǒng)結(jié)構(gòu)基于缺陷模式的軟件測試系統(tǒng)(DTS)67DTS缺陷模式描述
1.缺陷模式狀態(tài)機 有限自動機是計算機科學(xué)的重要基石,它在軟件開發(fā)領(lǐng)域內(nèi)通常被稱作有限狀態(tài)機。
2.缺陷模式狀態(tài)機的xml描述 作者用xml來對缺陷模式狀態(tài)機進行描述。xmlschema定義了描述缺陷模式狀態(tài)機的語法,包括標(biāo)簽以及標(biāo)簽的各個屬性。
基于缺陷模式的軟件測試系統(tǒng)(DTS)
DTS缺陷模式描述基于缺陷模式的軟件測試系統(tǒng)(DTS)68DTS的測試界面
基于缺陷模式的軟件測試系統(tǒng)(DTS)
DTS的測試界面基于缺陷模式的軟件測試系統(tǒng)(DTS)69補充:基于缺陷模式測試的三個研究領(lǐng)域補充:基于缺陷模式測試的三個研究領(lǐng)域70補充:補充:71補充:補充:72區(qū)間運算技術(shù)擴展了經(jīng)典的數(shù)值型區(qū)間代數(shù)理論,提出了區(qū)間集的概念并定義了數(shù)值型變量區(qū)間集上的集合運算、代數(shù)運算和邏輯運算,提高了分析的精度定義了布爾類型、數(shù)組類型、引用類型的區(qū)間及其運算方法定義了條件表達式中的變量取值區(qū)間的可能集和必然集及其計算方法,提高了計算的效率采用多值邏輯,減少了誤報率引入了拓寬算子,提高對循環(huán)語句中變量分析的精確性區(qū)間運算技術(shù)擴展了經(jīng)典的數(shù)值型區(qū)間代數(shù)理論,提出了區(qū)間集的概73區(qū)間運算研究區(qū)間運算研究74函數(shù)間分析技術(shù)創(chuàng)建函數(shù)摘要是一種靈活的過程間分析方法函數(shù)摘要是對函數(shù)實際語義的抽象,當(dāng)分析到該函數(shù)的調(diào)用時,就將該函數(shù)摘要作為函數(shù)調(diào)用的替代進行使用函數(shù)摘要的靈活性在于其可以非常精確(相對復(fù)雜),也可以不精確(相對簡單)函數(shù)間分析技術(shù)創(chuàng)建函數(shù)摘要是一種靈活的過程間分析方法75函數(shù)間分析研究函數(shù)間分析研究76變量相關(guān)性分析技術(shù)變量的相關(guān)樹簡化區(qū)間運算,壓縮變量取值空間路徑敏感分析的簡化變量相關(guān)性分析技術(shù)變量的相關(guān)樹77課堂練習(xí)題:分析一下各代碼段的的缺陷類型,及其改進方式課堂練習(xí)題:分析一下各代碼段的的缺陷類型,及其改進方式78第4章基于缺陷模式的軟件測試
第4章基于缺陷模式的軟件測試79第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)
第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試804.1基于缺陷模式的軟件測試概述缺陷模式必須滿足下列幾個條件:該模式下的缺陷是符合實際的?;谠撃J降娜毕輸?shù)目是可以容忍的。該模式下的缺陷是可以測試的。
采用該種方式實現(xiàn)測試,首先必須建立一種可以使用的模型(模式),稱為缺陷模式。4.1基于缺陷模式的軟件測試概述缺陷模式必須滿足下列幾個條81基于缺陷模式的軟件測試概述基于模式的軟件測試技術(shù)具有的特點(5條):針對性強:如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且在被測軟件中是存在的,則面向缺陷的測試可以檢測出此類缺陷?;谌毕菽J降能浖y試技術(shù)往往能發(fā)現(xiàn)其他測試技術(shù)難以發(fā)現(xiàn)的故障,如內(nèi)存泄漏缺陷,空指針引用缺陷。工具自動化程度高以及測試效率高。缺陷定位準(zhǔn)確:對測試所發(fā)現(xiàn)的缺陷能夠準(zhǔn)確定位。易學(xué)、易使用:對一般的IT專業(yè)專科以上的畢業(yè)生,該測試方法一般經(jīng)過數(shù)天的培訓(xùn)即可掌握其使用方法。
基于缺陷模式的軟件測試概述基于模式的軟件測試技術(shù)具有的特點(82缺陷模式經(jīng)過傳統(tǒng)軟件測試后,殘留在軟件中的缺陷一般都是小概率、開發(fā)人員疏忽造成的。我們對8類軟件故障的測試實踐表明,經(jīng)過嚴(yán)格的傳統(tǒng)軟件測試,殘留在軟件中的故障密度為1~2個故障/10KLOC,而沒有經(jīng)過嚴(yán)格測試的軟件,其故障密度一般在5~10個故障/10KLOC,而這些故障一旦發(fā)生,往往會導(dǎo)致系統(tǒng)崩潰。軟件缺陷模式就是經(jīng)過理論分析、實踐總結(jié)歸納出來的,我們目前將其分為故障、漏洞、疑問和規(guī)則模式。這是基于缺陷模式測試的核心技術(shù)之一。缺陷模式經(jīng)過傳統(tǒng)軟件測試后,殘留在軟件83缺陷模式的概念(1)缺陷模式的定義缺陷模式是缺陷的語法或語義特征的抽象,具有一定代表性或者會造成嚴(yán)重后果。(2)缺陷模式中缺陷產(chǎn)生的原因?疏忽:缺陷模式中的缺陷一般是由開發(fā)人員疏忽造成的。由于涉及可能多條路徑、多個約束條件,疏忽往往是不可避免的。這類缺陷往往都是和路徑或多個約束條件相關(guān)的。?不理解:缺陷模式中的缺陷也可能是由于開發(fā)人員對程序語言本身不理解造成的。如對某些規(guī)則不了解、對某些語言現(xiàn)象不理解都可能會產(chǎn)生缺陷。缺陷模式的概念(1)缺陷模式的定義84(3)缺陷模式中缺陷的特點:?一般都是非功能性的缺陷?路徑敏感的缺陷一般都是有由疏忽造成的?路徑不敏感的缺陷一般疏忽或不理解造成的?在大量工程軟件的測試結(jié)果統(tǒng)計中,模式中的缺陷是會存在于大多數(shù)的軟件中,并且有一定發(fā)生概率。這個概率要大于人們?nèi)萑痰姆秶#?)缺陷模式中缺陷的特點:85(4)軟件缺陷模式中的缺陷發(fā)生密度?在以往的對N個軟件測試活動中,該類缺陷的總個數(shù)除以N個軟件的總行數(shù)×1000,稱為該類缺陷的缺陷密度,用缺陷個數(shù)/KLOC表示,N越大,其缺陷密度統(tǒng)計的準(zhǔn)確性就越高。(5)缺陷模式的分類——按缺陷產(chǎn)生后的嚴(yán)重程度:故障模式、安全漏洞模式、疑問代碼模式和規(guī)則模式(6)缺陷模式分類——按是否是路徑敏感?是路徑敏感:需要人工確認(rèn)?路徑不敏感:不需要人工確認(rèn)(4)軟件缺陷模式中的缺陷發(fā)生密度86作用及意義軟件缺陷模式與測試是軟件測試領(lǐng)域中一種新型的軟件測試技術(shù)主要面向軟件的非功能性缺陷,可以檢測一般軟件測試技術(shù)中難以檢測的軟件缺陷與面向過程的軟件測試具有很好的互補性基于缺陷模式的測試技術(shù)與已往的軟件測試有很大的不同,檢測精度與效率比較高,測試成本低作用及意義軟件缺陷模式與測試是軟件測試領(lǐng)域中一種新型的軟件測87軟件缺陷模式缺陷發(fā)生機理:疏忽、二義性、不理解、遺漏分類:故障、安全漏洞、疑問代碼、規(guī)則語法與語義定義:給出基于語言的缺陷定義缺陷新模式研究:論文、工具、實踐、推理缺陷模式數(shù)據(jù)庫:核心技術(shù)之一,不斷增補嵌入式軟件缺陷模式研究:適合嵌入式特點軟件缺陷模式缺陷發(fā)生機理:疏忽、二義性、不理解、遺884.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)第4章基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述第4章基于缺陷模式的軟894.2基于缺陷模式的軟件測試指標(biāo)分析
設(shè)P是待測程序,將缺陷模式M分成類:M={M1,M2,…Mn},每類分成種:Mi={Mi1,Mi2,…,MiL},從P中計算出和M相匹配的檢查點的集合:IP={IP1,IP2,…,IPm},可以定義如下技術(shù)指標(biāo):
(1)漏報率(ER)(2)準(zhǔn)確率(CR)(3)誤報率(DR)(4)缺陷檢測率(DDR):(5)自動缺陷檢測率(ADR):(6)計算復(fù)雜性4.2基于缺陷模式的軟件測試指標(biāo)分析設(shè)904.2基于缺陷模式的軟件測試指標(biāo)分析漏報率(ER):設(shè)P是程序,M是缺陷模式,A是算法,IP(M,A,P)是IP總的數(shù)目,由于測試算法實現(xiàn)過程中的不同假設(shè),會導(dǎo)致IP(M,A,P)不同。
漏報率定義為:4.2基于缺陷模式的軟件測試指標(biāo)分析漏報率(ER):914.2基于缺陷模式的軟件測試指標(biāo)分析注意:
理論上,在給定M和P之后,IP(M,P)是確定的,但在實際中很難得到IP(M,P)。假設(shè)不同的測試工具算法為:A1,A2,…An,則通常用表示IP(M,P)。對于每個IP通常需要人工去判斷高IP是否真的是缺陷,根據(jù)程序的邏輯復(fù)雜性以及測試代價等因素,IP經(jīng)確認(rèn)后分為3種情況:表示IP確認(rèn)為缺陷的數(shù)目:IPY(M,A,P)
表示IP確認(rèn)為非缺陷的數(shù)目:IPN(M,A,P)
表示IP不能確定是否缺陷的數(shù)目:IPU(M,A,P)
所以,可得:
IPY(M,A,P)+IPN(M,A,P)+IPU(M,A,P)=IP(M,A,P)4.2基于缺陷模式的軟件測試指標(biāo)分析注意:92準(zhǔn)確率(CR):誤報率(DR):
4.2基于缺陷模式的軟件測試指標(biāo)分析
準(zhǔn)確率(CR):4.2基于缺陷模式的軟件測試指標(biāo)分析93缺陷檢測率(DDR):
自動缺陷檢測率(ADR):
用IPAY(P,A,M)表示不需人工確認(rèn),工具可以自動缺陷的檢測個數(shù)。4.2基于缺陷模式的軟件測試指標(biāo)分析
缺陷檢測率(DDR):4.2基于缺陷模式的軟件測試指標(biāo)分析94計算復(fù)雜性:
在理論上,基于缺陷的軟件測試技術(shù)可以100%的檢測所定義的缺陷模式,但由于缺陷的檢測可以模型化程序的遍歷問題,對于大型程序,全部遍歷雖然可以提高精度,但需要花費大量的時間。因此,該技術(shù)有一個性價比的問題,在時間遍歷過程中,往往都有一定的限制,如在一個函數(shù)內(nèi)、一個類內(nèi)、一個文件內(nèi)等。4.2基于缺陷模式的軟件測試指標(biāo)分析
計算復(fù)雜性:4.2基于缺陷模式的軟件測試指標(biāo)分析95基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述
4.2基于缺陷模式的軟件測試指標(biāo)分析
4.3缺陷模式
4.4基于缺陷模式的軟件測試系統(tǒng)(DTS)基于缺陷模式的軟件測試4.1基于缺陷模式的軟件測試概述964.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式4.4.4缺陷模式4.3缺陷模式4.3.1缺陷模式概述974.3.1缺陷模式概述
缺陷模式是和語言本身相關(guān)的,不同的語言有著不同的缺陷模式。我們以C++語言和Java語言為背景來描述其缺陷模式。將軟件的缺陷模式分為四個層次:
即故障模式漏洞模式缺陷模式規(guī)則模式4.3.1缺陷模式概述缺陷模式是和語98軟件缺陷模式的分類:按缺陷嚴(yán)重程度軟件缺陷模式的分類:按缺陷嚴(yán)重程度991.故障模式:
此類缺陷是故障,一經(jīng)產(chǎn)生,會導(dǎo)致系統(tǒng)出錯。主要有:存儲器泄露模式資源泄漏模式指針使用錯誤模式數(shù)組越界模式非法計算模式使用未初始化變量模式死循環(huán)結(jié)構(gòu)模式死鎖模式4.3.1缺陷模式概述1.故障模式:4.3.1缺陷模式概述1004.3.1缺陷模式概述2.安全漏洞模式:
此類缺陷會給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。主要有:緩沖區(qū)溢出模式被感染的數(shù)據(jù)模式競爭條件模式風(fēng)險操作模式4.3.1缺陷模式概述2.安全漏洞模式:1014.3.1缺陷模式概述3.缺陷模式:
此類缺陷是不應(yīng)該發(fā)生的,它未必會造成系統(tǒng)的錯誤,但可能會隱含某些故障,或者是由初級軟件工程師不理解造成的。主要有:性能缺陷模式:此類缺陷會降低系統(tǒng)的性能疑問代碼模式:讓人費解的代碼4.3.1缺陷模式概述3.缺陷模式:1024.3.1缺陷模式概述4.規(guī)則模式:軟件開發(fā)總要遵循一定的規(guī)則,某個團隊也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。主要有:代碼規(guī)則復(fù)雜性規(guī)則控制流規(guī)則命名規(guī)則可移植性規(guī)則資源規(guī)則4.3.1缺陷模式概述4.規(guī)則模式:1034.缺陷模式4.3.1缺陷模式概述
4.3.2故障模式4.3.3安全漏洞模式4.3.4缺陷模式4.缺陷模式4.3.1缺陷模式概述1044.3.2故障模式
故障模式中給出的故障描述,是程序中可能存在的故障,這些故障一旦被激活,就會使系統(tǒng)發(fā)生錯誤。包括以下幾種故障模式(8種):存儲泄漏的故障模式數(shù)組越界故障的故障模式使用未初始化變量故障模式空指針使用故障非法計算類故障死循環(huán)結(jié)構(gòu)模式資源泄漏故障并發(fā)故障模式4.3.2故障模式故障模式中給出的故障1054.3.2故障模式存儲泄漏的故障模式(MemoryLeakFaultMLF)
內(nèi)存泄漏故障:設(shè)在程序的某處申請了大小為M的空間,凡在程序結(jié)束時M或者M的一部分沒被釋放、或者多次釋放M或M的一部分都是內(nèi)存泄漏故障。MLF有三種形式:
(1)遺漏故障:是指申請的內(nèi)存沒有被釋放。(2)不匹配故障:是指申請函數(shù)和釋放函數(shù)不匹配。(3)不相等的釋放錯誤:是指釋放的空間和申請的空間大小不一樣。分析教材中的例子:例1----例9(9種情況)4.3.2故障模式存儲泄漏的故障模式(MemoryLea1064.3.2故障模式數(shù)組越界故障的故障模式(OBAF) 數(shù)組越界故障:設(shè)某數(shù)組定義為Array[minmax],若引用Array[i]且i<min或i>max都是數(shù)組越界故障。在C++中,若i<0或imax是數(shù)組越界故障。4.3.2故障模式數(shù)組越界故障的故障模式(OBAF)1074.3.2故障模式數(shù)組越界故障的類型分析(3種故障類型):(1)對程序中任何出現(xiàn)Array[i]的地方,都要判斷i的范圍,可能有三種情況:若i是在數(shù)組定義的范圍內(nèi),則是正確的;若i是在數(shù)組定義的范圍外,則是OBAF;若i是不確定的,則Array[i]是否是OBAF則不確定的。(分析教材例4-10和例4-11)(2)字符串拷貝過程中存在的數(shù)組越界故障。
(分析教材例表4-1)(3)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝過程中,多余的數(shù)據(jù)會自動的存放在后面所定義的成員變量中,這種情況數(shù)組并不產(chǎn)生越界錯誤。(分析教材例4-12)4.3.2故障模式數(shù)組越界故障的類型分析(3種故障類型):1084.3.2故障模式3.使用未初始化變量故障模式(UninitializedVariableFault,UVF)
定義:使用未初始化變量故障:存在一個路徑,在該路徑上使用前面沒有被賦初值的變量是使用未初始化變量故障。
(分析教材例4-13、例4-14、例4-15、例4-16、例4-17)4.3.2故障模式3.使用未初始化變量故障模式(Unini1094.3.2故障模式4.空指針使用故障(NULLPointerDereferenceFaultNPDF)
定義:空指針使用故障:引用空指針或給空指針賦值的都是空指針使用故障。(分析教材例4-18、表4-2)4.3.2故障模式4.空指針使用故障(NULLPoint1104.3.2故障模式5.非法計算類故障(IllegalComputingFaultILCF)
定義:非法計算類故障:是指計算機不允許的計算。一旦非法計算類故障產(chǎn)生,系統(tǒng)將強行退出。例如:
除數(shù)為0故障。對數(shù)自變量為0或負數(shù)故障。根號內(nèi)為負數(shù)的故障。4.3.2故障模式5.非法計算類故障(IllegalCo1114.3.2故障模式6.死循環(huán)結(jié)構(gòu)模式(DeadLoopFaultDLF)
定義:在控制流圖中,對任何一個循環(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)。
要分析控制循環(huán)的變量的開始條件、結(jié)束條件、步長變化,檢查該循環(huán)能否結(jié)束,若不能則會形成死循環(huán)。(分析教材例4-19、例4-20、例4-21
)4.3.2故障模式6.死循環(huán)結(jié)構(gòu)模式(DeadLoopF1124.3.2故障模式7.資源泄漏故障(RLF)定義:資源泄漏故障:在Java程序中,當(dāng)一個資源被打開后,如果并不是在所有的可執(zhí)行路徑上都對其進行了顯式的釋放操作,則是一個資源泄漏故障。資源泄漏一般分為4種情況:
簡單泄漏:資源被分配給本地變量,在該變量的有效范圍內(nèi)沒有釋放資源;
異常泄漏:資源被分配給本地變量,在該變量的有效范圍內(nèi)也釋放了資源,但在釋放資源前由于異常拋出,導(dǎo)致資源釋放操作沒有執(zhí)行交叉函數(shù)泄漏:在一個方法內(nèi)分配資源,該資源被傳遞到另外一個方法內(nèi),在另一個方法內(nèi)沒有正常釋放資源;靜態(tài)情況:資源被分配給靜態(tài)變量或其他非本地變量,該變量沒有被正常釋放。分析教材例4-22、例4-23、例4-24、例4-254.3.2故障模式7.資源泄漏故障(RLF)資源泄漏一般分為1134.3.2故障模式8.并發(fā)故障模式 該模式主要是針對程序員對多線程的編碼機制、各種同步方法、Java存儲器模式和java虛擬機的工作機制不清楚,而且由于線程啟動的任意性和不確定性使用戶無法確定所編寫的代碼具體何時執(zhí)行而導(dǎo)致對公共區(qū)域的錯誤使用。
這類模式主要包括:
不正確的同步可能導(dǎo)致死鎖多線程應(yīng)用中方法調(diào)用時機或方式不正確同一變量的雙重驗證相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。分析教材例4-22、例4-23、例4-24、例4-254.3.2故障模式8.并發(fā)故障模式分析教材例4-22、例4114(1)不正確的同步定義:在java程序中,由于對synchronized關(guān)鍵字使用不當(dāng)將造成不正確的同步缺陷。
主要有:
不連續(xù)的同步;對易變域的同步;
set方法被同步了,但get方法卻沒有被同步;方法writeObject同步但其他方法均沒有同步;方法readObject使用了synchronized修飾;靜態(tài)域的不正確初始化;分析教材例中對應(yīng)類型的例題(1)不正確的同步定義:分析教材例中對應(yīng)類型的例題115(2)可能導(dǎo)致死鎖定義:在java中,對鎖的不正確操作可能造成導(dǎo)致死鎖的缺陷。(2)可能導(dǎo)致死鎖定義:116(3)多線程應(yīng)用中方法調(diào)用時機或方式不正確定義:在java中,一些同步方法的不正確調(diào)用將造成該類缺陷。(3)多線程應(yīng)用中方法調(diào)用時機或方式不正確定義:117(4)同一變量的雙重驗證定義:在java中,同一變量的雙重驗證指對一個對象進行了兩次判斷,判斷其是否為空。(4)同一變量的雙重驗證定義:118(5)相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)定義:在java中,互相初始化的類指的是兩個類中分別對對方類的實例進行初始化的代碼。(5)相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)定義:1194.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式
4.3.4缺陷模式4.3缺陷模式4.3.1缺陷模式概述1204.3.3安全漏洞模式
安全漏洞模式為他人攻擊軟件提供可能。而一旦軟件被攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因此,此類漏洞應(yīng)當(dāng)盡量避免。
下面以C++為基礎(chǔ),介紹基于安全漏洞檢測的缺陷模式。主要有:(1)緩沖區(qū)溢出漏洞模式;(2)被污染的數(shù)據(jù)模式;(3)競爭條件(4)風(fēng)險操作4.3.3安全漏洞模式安全漏洞模式為他1214.3.3安全漏洞模式1、緩沖區(qū)溢出(bufferoverflow)漏洞模式 定義:當(dāng)程序要在一個緩沖區(qū)內(nèi)存儲比該緩沖區(qū)的大小還要多的數(shù)據(jù)時,即會產(chǎn)生緩沖區(qū)溢出漏洞。 緩存區(qū)溢出主要有2種類型:
數(shù)據(jù)拷貝造成的緩沖區(qū)溢出;格式化字符串造成的緩沖區(qū)溢出;4.3.3安全漏洞模式1、緩沖區(qū)溢出(bufferov1221、緩沖區(qū)溢出(bufferoverflow)漏洞模式(1)數(shù)據(jù)拷貝造成的緩沖區(qū)溢出
如果數(shù)據(jù)是從外部傳進來的或是在緩沖區(qū)之間進行數(shù)據(jù)復(fù)制,在使用之前沒有進行檢驗,那么,有可能出現(xiàn)安全問題。
教材:例4-47
表4-5
(2)格式化字符串造成的緩沖區(qū)溢出
利用緩沖區(qū)時,若對數(shù)據(jù)長度不加限制,就可能造成溢出。教材:例4-48
表4-61、緩沖區(qū)溢出(bufferoverflow)漏洞模式(1234.3.3安全漏洞模式被污染的數(shù)據(jù)模式(TaintedData)
定義:程序從外部獲取數(shù)據(jù)時,這些數(shù)據(jù)可能含有具有欺騙性或者是不想要的垃圾數(shù)據(jù),如果在使用這些數(shù)據(jù)前不進行合法性檢查則將威脅到程序的安全,造成一個被污染的數(shù)據(jù)缺陷。被污染的數(shù)據(jù)可能會導(dǎo)致程序不按原計劃執(zhí)行,也有可能直接或間接地導(dǎo)致緩沖區(qū)溢出缺陷。
被污染的數(shù)據(jù)模式主要有兩種類型使用的數(shù)據(jù)來自外部的全局變量使用的數(shù)據(jù)來自輸入函數(shù)4.3.3安全漏洞模式被污染的數(shù)據(jù)模式(TaintedD1242被污染的數(shù)據(jù)模式(1)使用的數(shù)據(jù)來自外部的全局變量
使用來自外部的全局變量前應(yīng)先進行合法性檢查。教材:例4-49
(2)使用的數(shù)據(jù)來自輸入函數(shù)教材:例4-50
表4-72被污染的數(shù)據(jù)模式(1)使用的數(shù)據(jù)來自外部的全局變量1254.3.3安全漏洞模式競爭條件(RaceCondition)
定義:
如果程序中有兩種不同的I/O調(diào)用同一文件進行操作,而且這兩種調(diào)用是通過絕對路徑或相對路徑引用文件的,那么就易出現(xiàn)競爭條件問題。在兩種操作進行的間隙,黑客可能改變文件系統(tǒng),那么將會導(dǎo)致對兩個不同的文件操作而不是同一文件進行操作。
這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運行的程序中(例如:數(shù)據(jù)庫和服務(wù)器程序等)。
程序代碼中,針對文件名的一些操作往往會被黑客利用從而造成競爭條件。
教材:例4-51、524.3.3安全漏洞模式競爭條件(RaceConditio1264.3.3安全漏洞模式風(fēng)險操作(RiskyOperation)
定義:如果不恰當(dāng)?shù)厥褂昧四承?biāo)準(zhǔn)庫函數(shù),可能會帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用,就可能會帶來安全隱患。
例如像rand()和random()這樣的隨機數(shù)生成函數(shù),它們在生成偽隨機值的時候表現(xiàn)出來的性能是非常差的,如果用它們來生成默認(rèn)的口令,這些口令將很容易被攻擊者猜測到。
教材中給出了23種類型,每種類型都給出了應(yīng)用實例。例4-53-------例4-794.3.3安全漏洞模式風(fēng)險操作(RiskyOperati127
23種類型及其對應(yīng)實例(1)_spawnvpe函數(shù)使用相對路徑;(例4-53)(2)不可靠的隨機數(shù);(例4-54)(3)可預(yù)測的臨時文件名(例5-55,56,57)(4)危險的外部程序調(diào)用(例5-58,59,60)(5)socke綁定問題(例5-61)(6)使用不可靠的宏(例4-62)(7)使用不可靠的注冊表參數(shù)(例4-63)(8)使用不可靠的參數(shù)(例4-64)
(9)對明確的宏定義使用變量(例4-65)(10)變量作為注冊表參數(shù)(例4-66)(11)使用不可靠的shell命令(例4-67)(12)不充分的路徑(例4-68)23種類型及其對應(yīng)實例(1)_spawnvpe函數(shù)使用相對12823種類型及其對應(yīng)實例(13)不安全的權(quán)限提升(例4-69)(14)使用不可靠的加密算法(例4-70)(15)使用不可靠的進程創(chuàng)建(例4-71)(16)不可靠的資源處理(例4-72)(17)忽略檢查函數(shù)的返回值(例4-73)(18)命名管道的脆弱性(例4-74)
(19)Windows臨時文件的脆弱性(例4-75)(20)以外的內(nèi)存復(fù)制(例4-76)(21)文件存取函數(shù)(例4-77)
(22)不安全的文件操作(例4-78)
(23)暴露絕對路徑(例4-79)23種類型及其對應(yīng)實例(13)不安全的權(quán)限提升(例4-69)1294.3缺陷模式
4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式4.3.4缺陷模式
4.3缺陷模式4.3.1缺陷模式概述1304.3.4缺陷模式缺陷模式主要分為以下幾類:
1、低性能模式:2、代碼國際化模式
3、疑問代碼模式4.3.4缺陷模式缺陷模式主要分為以下幾類:1311低性能模式低性能模式:
該模式導(dǎo)致軟件運行效率低下,因此建議采用更高效的代碼來完成同樣的功能。這類模式主要包括使用低效函數(shù)/代碼、使用多余函數(shù)、Java中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的文件包含、字符串低效操作和有更簡單的運算可以替代等。低性能模式分為以下小類(1)使用低效率的函數(shù)/代碼(10種);(2)使用多余函數(shù)(5種)(3)顯示垃圾回收(4)冗余代碼;(5)頭文件中定義靜態(tài)變量;(6)不必要的文件包含(7)字符串低效操作(8)可以用更簡單的運算替代1低性能模式低性能模式:1321低性能模式(1)使用低效率的函數(shù)/代碼定義:在java程序中,對于一些特定的類、函數(shù)和語法,若沒有使
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑節(jié)能質(zhì)量評估報告
- 五年級下冊數(shù)學(xué)教案-1.4 公因數(shù)、最大公因數(shù) ︳西師大新課標(biāo)
- 年產(chǎn)2億片鎂加鋁咀嚼片項目可行性研究報告建議書
- 中國注射用轉(zhuǎn)移因子行業(yè)投資分析及發(fā)展戰(zhàn)略咨詢報告
- 2025年中國運動衫行業(yè)市場發(fā)展監(jiān)測及投資前景展望報告
- 某房地產(chǎn)商業(yè)樓盤國際廣場項目節(jié)能評估報告
- 五年級下冊數(shù)學(xué)教案-1.1 倍數(shù)和因數(shù) ︳西師大版
- 買賣合同糾紛判決書(2025年版)
- 寵物醫(yī)院獸醫(yī)聘用合同范本
- 2025年電機零部件項目可行性研究報告
- 外科手術(shù)及護理常規(guī)
- 北師大版五年級數(shù)學(xué)下冊教材分析解讀課件完整版
- 學(xué)校開學(xué)教師安全培訓(xùn)
- 出口潛力分析報告
- 晉升的述職報告
- 檔案盒(文件盒)標(biāo)簽?zāi)0?正面、側(cè)面)
- 消防工程施工進度計劃橫道圖+進度網(wǎng)絡(luò)圖
- 微信視頻號運營技巧攻略詳解全套
- 2023CSCO非小細胞肺癌診療指南解讀
- 人教版九年級英語全冊期末復(fù)習(xí)完成句子專項練習(xí)
- 干部選拔任用程序
評論
0/150
提交評論