




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 基于缺陷模式的軟件測(cè)試基于缺陷模式的軟件測(cè)試4.1 基于缺陷模式的軟件測(cè)試概述基于缺陷模式的軟件測(cè)試概述 4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 4.3 缺陷模式缺陷模式 4.4 基于缺陷模式的軟件測(cè)試系統(tǒng)(基于缺陷模式的軟件測(cè)試系統(tǒng)(DTS) 4.1 基于缺陷模式的軟件測(cè)試概述基于缺陷模式的軟件測(cè)試概述缺陷模式必須滿足下列幾個(gè)條件:缺陷模式必須滿足下列幾個(gè)條件: n該模式下的缺陷是符合實(shí)際的。該模式下的缺陷是符合實(shí)際的。n基于該模式的缺陷數(shù)目是可以容忍的。基于該模式的缺陷數(shù)目是可以容忍的。1.該模式下的缺陷是可以測(cè)試的。該模式下的缺陷是可以測(cè)試的。
2、采用該種方式實(shí)現(xiàn)測(cè)試,首先必須建立一種可以采用該種方式實(shí)現(xiàn)測(cè)試,首先必須建立一種可以使用的模型(模式),稱為使用的模型(模式),稱為缺陷模式缺陷模式?;谌毕菽J降能浖y(cè)試概述基于缺陷模式的軟件測(cè)試概述基于模式的軟件測(cè)試技術(shù)具有的特點(diǎn)基于模式的軟件測(cè)試技術(shù)具有的特點(diǎn)(5條條):n針對(duì)性強(qiáng)針對(duì)性強(qiáng):如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且:如果說某種模式的缺陷是經(jīng)常發(fā)生的,并且在被測(cè)軟件中是存在的,則面向缺陷的測(cè)試可以檢測(cè)出在被測(cè)軟件中是存在的,則面向缺陷的測(cè)試可以檢測(cè)出此類缺陷。此類缺陷。n基于缺陷模式的軟件測(cè)試技術(shù)往往基于缺陷模式的軟件測(cè)試技術(shù)往往能發(fā)現(xiàn)其他測(cè)試技術(shù)能發(fā)現(xiàn)其他測(cè)試技術(shù)難以發(fā)現(xiàn)的
3、故障難以發(fā)現(xiàn)的故障,如內(nèi)存泄漏缺陷,空指針引用缺陷。,如內(nèi)存泄漏缺陷,空指針引用缺陷。n工具工具自動(dòng)化程度高自動(dòng)化程度高以及以及測(cè)試效率高測(cè)試效率高。n缺陷定位準(zhǔn)確:缺陷定位準(zhǔn)確:對(duì)測(cè)試所發(fā)現(xiàn)的缺陷能夠準(zhǔn)確定位。對(duì)測(cè)試所發(fā)現(xiàn)的缺陷能夠準(zhǔn)確定位。1.易學(xué)、易使用:易學(xué)、易使用:對(duì)一般的對(duì)一般的IT專業(yè)專科以上的畢業(yè)生,該專業(yè)專科以上的畢業(yè)生,該測(cè)試方法一般經(jīng)過數(shù)天的培訓(xùn)即可掌握其使用方法。測(cè)試方法一般經(jīng)過數(shù)天的培訓(xùn)即可掌握其使用方法。 缺陷模式 經(jīng)過傳統(tǒng)軟件測(cè)試后,殘留在軟件中的缺陷一般都是小概率、開發(fā)人員疏忽造成的。我們對(duì)8類軟件故障的測(cè)試實(shí)踐表明,經(jīng)過嚴(yán)格的傳統(tǒng)軟件測(cè)試,殘留在軟件中的故障密
4、度為12個(gè)故障/10KLOC,而沒有經(jīng)過嚴(yán)格測(cè)試的軟件,其故障密度一般在510個(gè)故障/10KLOC,而這些故障一旦發(fā)生,往往會(huì)導(dǎo)致系統(tǒng)崩潰。軟件缺陷模式就是經(jīng)過理論分析、實(shí)踐總結(jié)歸納出來的,我們目前將其分為故障、漏洞、疑問和規(guī)則模式。這是基于缺陷模式測(cè)試的核心技術(shù)之一。缺陷模式的概念(1) 缺陷模式的定義缺陷模式的定義 缺陷模式是缺陷的語法或語義特征的抽象,具有一缺陷模式是缺陷的語法或語義特征的抽象,具有一定代表性或者會(huì)造成嚴(yán)重后果定代表性或者會(huì)造成嚴(yán)重后果 。(2) 缺陷模式中缺陷產(chǎn)生的原因缺陷模式中缺陷產(chǎn)生的原因 ? 疏忽:缺陷模式中的缺陷一般是由開發(fā)人員疏疏忽:缺陷模式中的缺陷一般是由開
5、發(fā)人員疏忽造成的。由于涉及可能多條路徑、多個(gè)約束條件,忽造成的。由于涉及可能多條路徑、多個(gè)約束條件,疏忽往往是不可避免的。這類缺陷往往都是和路徑或疏忽往往是不可避免的。這類缺陷往往都是和路徑或多個(gè)約束條件相關(guān)的。多個(gè)約束條件相關(guān)的。 ? 不理解:缺陷模式中的缺陷也可能是由于開發(fā)人不理解:缺陷模式中的缺陷也可能是由于開發(fā)人員對(duì)程序語言本身不理解造成的。如對(duì)某些規(guī)則不了員對(duì)程序語言本身不理解造成的。如對(duì)某些規(guī)則不了解、對(duì)某些語言現(xiàn)象不理解都可能會(huì)產(chǎn)生缺陷。解、對(duì)某些語言現(xiàn)象不理解都可能會(huì)產(chǎn)生缺陷。(3)缺陷模式中缺陷的特點(diǎn):? 一般都是非功能性的缺陷一般都是非功能性的缺陷? 路徑敏感的缺陷一般都是
6、有由疏忽造成的路徑敏感的缺陷一般都是有由疏忽造成的? 路徑不敏感的缺陷一般疏忽或不理解造成的路徑不敏感的缺陷一般疏忽或不理解造成的? 在大量工程軟件的測(cè)試結(jié)果統(tǒng)計(jì)中,模式中的缺陷是會(huì)存在在大量工程軟件的測(cè)試結(jié)果統(tǒng)計(jì)中,模式中的缺陷是會(huì)存在于大多數(shù)的軟件中,并且有一定發(fā)生概率。這個(gè)概率要大于于大多數(shù)的軟件中,并且有一定發(fā)生概率。這個(gè)概率要大于人們?nèi)萑痰姆秶藗內(nèi)萑痰姆秶?4) 軟件缺陷模式中的缺陷發(fā)生密度軟件缺陷模式中的缺陷發(fā)生密度? 在以往的對(duì)在以往的對(duì)N個(gè)軟件測(cè)試活動(dòng)中,該類缺陷的總個(gè)個(gè)軟件測(cè)試活動(dòng)中,該類缺陷的總個(gè)數(shù)除以數(shù)除以N個(gè)軟件的總行數(shù)個(gè)軟件的總行數(shù)1000,稱為該類缺陷,稱為該類
7、缺陷的缺陷密度,用缺陷個(gè)數(shù)的缺陷密度,用缺陷個(gè)數(shù)/KLOC表示,表示,N越大,其越大,其缺陷密度統(tǒng)計(jì)的準(zhǔn)確性就越高。缺陷密度統(tǒng)計(jì)的準(zhǔn)確性就越高。(5) 缺陷模式的分類缺陷模式的分類按缺陷產(chǎn)生后的嚴(yán)重程度:按缺陷產(chǎn)生后的嚴(yán)重程度:故障模式、安全漏洞模式、疑問代碼模式和規(guī)則模故障模式、安全漏洞模式、疑問代碼模式和規(guī)則模式式(6) 缺陷模式分類缺陷模式分類按是否是路徑敏感按是否是路徑敏感? 是路徑敏感:需要人工確認(rèn)是路徑敏感:需要人工確認(rèn)? 路徑不敏感:不需要人工確認(rèn)路徑不敏感:不需要人工確認(rèn)作用及意義n軟件缺陷模式與測(cè)試是軟件測(cè)試領(lǐng)域中一種新型的軟件測(cè)試技術(shù)n 主要面向軟件的非功能性缺陷,可以檢測(cè)
8、一般軟件測(cè)試技術(shù)中難以檢測(cè)的軟件缺陷n 與面向過程的軟件測(cè)試具有很好的互補(bǔ)性 基于缺陷模式的測(cè)試技術(shù)與已往的軟件測(cè)試n有很大的不同,檢測(cè)精度與效率比較高,測(cè)試成本低軟件缺陷模式 缺陷發(fā)生機(jī)理:疏忽、二義性、不理解、遺漏 分類:故障、安全漏洞、疑問代碼、規(guī)則 語法與語義定義:給出基于語言的缺陷定義 缺陷新模式研究:論文、工具、實(shí)踐、推理 缺陷模式數(shù)據(jù)庫:核心技術(shù)之一,不斷增補(bǔ) 嵌入式軟件缺陷模式研究:適合嵌入式特點(diǎn)4.1 基于缺陷模式的軟件測(cè)試概述基于缺陷模式的軟件測(cè)試概述 4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 4.3 缺陷模式缺陷模式 4.4 基于缺陷模式的軟件
9、測(cè)試系統(tǒng)(基于缺陷模式的軟件測(cè)試系統(tǒng)(DTS)第第4章章 基于缺陷模式的軟件測(cè)試基于缺陷模式的軟件測(cè)試4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 設(shè)設(shè)P是待測(cè)程序,將缺陷模式是待測(cè)程序,將缺陷模式M分成類:分成類: M=M1,M2,Mn, 每類分成種每類分成種: Mi=Mi1,Mi2,MiL, 從從P中計(jì)算出和中計(jì)算出和M相匹配的檢查點(diǎn)的集合相匹配的檢查點(diǎn)的集合: IP=IP1,IP2,IPm, 可以定義如下技術(shù)指標(biāo):可以定義如下技術(shù)指標(biāo): (1)漏報(bào)率)漏報(bào)率(ER) (2) 準(zhǔn)確率準(zhǔn)確率(CR) (3)誤報(bào)率)誤報(bào)率(DR) (4)缺陷檢測(cè)率)缺陷檢測(cè)率(DDR)
10、: (5)自動(dòng)缺陷檢測(cè)率)自動(dòng)缺陷檢測(cè)率(ADR): (6)計(jì)算復(fù)雜性)計(jì)算復(fù)雜性4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析n漏報(bào)率漏報(bào)率(ER): 設(shè)設(shè)P是程序,是程序,M是缺陷模式,是缺陷模式,A是算法,是算法, IP(M,A,P)是)是IP總的數(shù)目,總的數(shù)目, 由于測(cè)試算法實(shí)現(xiàn)過程中的不同假設(shè),會(huì)導(dǎo)致由于測(cè)試算法實(shí)現(xiàn)過程中的不同假設(shè),會(huì)導(dǎo)致 IP(M,A,P)不同。)不同。 漏報(bào)率定義為:漏報(bào)率定義為:| ),(| ),(),(|PMIPPMIPPAMIPErrorRatio4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析注意:注意: 理論上
11、,在給定理論上,在給定M和和P之后,之后, IP(M,P)是確定的,但在實(shí)際中很難是確定的,但在實(shí)際中很難得到得到IP(M,P)。假設(shè)不同的測(cè)試工具算法為:。假設(shè)不同的測(cè)試工具算法為: A1,A2,An ,則通則通常用常用 表示表示IP(M,P)。 對(duì)于每個(gè)對(duì)于每個(gè)IP通常需要人工去判斷高通常需要人工去判斷高IP是否真的是缺陷,根據(jù)是否真的是缺陷,根據(jù)程序的邏輯復(fù)雜性以及測(cè)試代價(jià)等因素,程序的邏輯復(fù)雜性以及測(cè)試代價(jià)等因素,IP經(jīng)確認(rèn)后分為經(jīng)確認(rèn)后分為3種情況:種情況: 表示表示IP確認(rèn)為缺陷的數(shù)目確認(rèn)為缺陷的數(shù)目: IPY(M,A,P) 表示表示IP確認(rèn)為確認(rèn)為非非缺陷的數(shù)目缺陷的數(shù)目: IP
12、N(M,A,P) 表示表示IP不能確定不能確定是否缺陷的數(shù)目是否缺陷的數(shù)目: IPU(M,A,P) 所以,可得:所以,可得: IPY(M,A,P)+ IPN(M,A,P) +IPU(M,A,P)= IP(M,A,P)n1ii)P,A,M(IPn準(zhǔn)確率準(zhǔn)確率(CR): n誤報(bào)率誤報(bào)率(DR): 4.2基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 ),(),(),(PAMIPPAMIPPAMIPioCorrectRatUY),(),(PAMIPPAMIPioDistortRatNn缺陷檢測(cè)率缺陷檢測(cè)率(DDR): n自動(dòng)缺陷檢測(cè)率自動(dòng)缺陷檢測(cè)率(ADR): 用用IPAY(P,A,M
13、)表示不需人工確認(rèn),工具)表示不需人工確認(rèn),工具可以自動(dòng)缺陷的檢測(cè)個(gè)數(shù)可以自動(dòng)缺陷的檢測(cè)個(gè)數(shù)。4.2基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 ),(),(PAMIPPAMIPctingRatioDefectDeteYn計(jì)算復(fù)雜性:計(jì)算復(fù)雜性: 在理論上,基于缺陷的軟件測(cè)試技術(shù)在理論上,基于缺陷的軟件測(cè)試技術(shù)可以可以100%的檢的檢測(cè)所定義的缺陷模式測(cè)所定義的缺陷模式, 但由于缺陷的檢測(cè)可以模型化程序的遍歷問題,對(duì)于但由于缺陷的檢測(cè)可以模型化程序的遍歷問題,對(duì)于大型程序,全部遍歷雖然可以提高精度,但需要花費(fèi)大量大型程序,全部遍歷雖然可以提高精度,但需要花費(fèi)大量的時(shí)間。的時(shí)間。
14、 因此,該技術(shù)有一個(gè)因此,該技術(shù)有一個(gè) 性價(jià)比性價(jià)比 的問題,在時(shí)間遍歷過的問題,在時(shí)間遍歷過程中,往往都有一定的限制,如在一個(gè)函數(shù)內(nèi)、一個(gè)類內(nèi)、程中,往往都有一定的限制,如在一個(gè)函數(shù)內(nèi)、一個(gè)類內(nèi)、一個(gè)文件內(nèi)等。一個(gè)文件內(nèi)等。4.2基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 基于缺陷模式的軟件測(cè)試基于缺陷模式的軟件測(cè)試n4.1 基于缺陷模式的軟件測(cè)試概述基于缺陷模式的軟件測(cè)試概述 n4.2 基于缺陷模式的軟件測(cè)試指標(biāo)分析基于缺陷模式的軟件測(cè)試指標(biāo)分析 n4.3 缺陷模式缺陷模式 n4.4 基于缺陷模式的軟件測(cè)試系統(tǒng)(基于缺陷模式的軟件測(cè)試系統(tǒng)(DTS)4.3 缺陷模式缺陷模式
15、 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.4.4 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 缺陷模式缺陷模式是和語言本身相關(guān)的,不同的語言有著不同是和語言本身相關(guān)的,不同的語言有著不同的缺陷模式。的缺陷模式。 我們以我們以C+語言和語言和Java語言語言為背景來描述其缺陷模式。為背景來描述其缺陷模式。 將軟件的缺陷模式分為四個(gè)層次:將軟件的缺陷模式分為四個(gè)層次: 即故障模式即故障模式 漏洞模式漏洞模式 缺陷模式缺陷模式 規(guī)則模式規(guī)則模式軟件缺陷模式的分類:按缺陷嚴(yán)重程度軟件缺陷模式的分類:按缺陷嚴(yán)重程度1. 故
16、障模式故障模式: 此類缺陷是故障,一經(jīng)產(chǎn)生,會(huì)導(dǎo)致系統(tǒng)出錯(cuò)。此類缺陷是故障,一經(jīng)產(chǎn)生,會(huì)導(dǎo)致系統(tǒng)出錯(cuò)。主要有主要有:n存儲(chǔ)器泄露模式存儲(chǔ)器泄露模式n資源泄漏模式資源泄漏模式n指針使用錯(cuò)誤模式指針使用錯(cuò)誤模式n數(shù)組越界模式數(shù)組越界模式n非法計(jì)算模式非法計(jì)算模式n使用未初始化變量模式使用未初始化變量模式n死循環(huán)結(jié)構(gòu)模式死循環(huán)結(jié)構(gòu)模式n死鎖模式死鎖模式 4.3.1 缺陷模式概述缺陷模式概述4.3.1 缺陷模式概述缺陷模式概述2. 安全漏洞模式:安全漏洞模式: 此類缺陷會(huì)給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。此類缺陷會(huì)給系統(tǒng)留下安全隱患,為攻擊該系統(tǒng)開了綠燈。主要有:主要有:n緩沖區(qū)溢出模式緩沖區(qū)
17、溢出模式n被感染的數(shù)據(jù)模式被感染的數(shù)據(jù)模式n競爭條件模式競爭條件模式n風(fēng)險(xiǎn)操作模式風(fēng)險(xiǎn)操作模式4.3.1 缺陷模式概述缺陷模式概述3. 缺陷模式:缺陷模式: 此類缺陷是不應(yīng)該發(fā)生的,它未必會(huì)造成系統(tǒng)的錯(cuò)誤,此類缺陷是不應(yīng)該發(fā)生的,它未必會(huì)造成系統(tǒng)的錯(cuò)誤,但可能會(huì)隱含某些故障,或者是由初級(jí)軟件工程師不理解但可能會(huì)隱含某些故障,或者是由初級(jí)軟件工程師不理解造成的。造成的。主要有:主要有:n性能缺陷模式:此類缺陷會(huì)降低系統(tǒng)的性能性能缺陷模式:此類缺陷會(huì)降低系統(tǒng)的性能n疑問代碼模式:讓人費(fèi)解的代碼疑問代碼模式:讓人費(fèi)解的代碼4.3.1 缺陷模式概述缺陷模式概述4.規(guī)則模式:規(guī)則模式: 軟件開發(fā)總要遵循
18、一定的規(guī)則,某個(gè)團(tuán)隊(duì)也有一些軟件開發(fā)總要遵循一定的規(guī)則,某個(gè)團(tuán)隊(duì)也有一些開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。開發(fā)規(guī)則,違反這些規(guī)則也是不允許的。主要有:主要有:n代碼規(guī)則代碼規(guī)則n復(fù)雜性規(guī)則復(fù)雜性規(guī)則n控制流規(guī)則控制流規(guī)則n命名規(guī)則命名規(guī)則n可移植性規(guī)則可移植性規(guī)則n資源規(guī)則資源規(guī)則4. 缺陷模式缺陷模式4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.2 故障模式故障模式 故障模式故障模式中給出的故障描述,是程序中可能中給出的故障描述,是程序中可能存在的故障,這些故障一旦被激活,就會(huì)使系統(tǒng)存在的故障
19、,這些故障一旦被激活,就會(huì)使系統(tǒng)發(fā)生錯(cuò)誤。發(fā)生錯(cuò)誤。 包括以下幾種故障模式(包括以下幾種故障模式(8種):種):n存儲(chǔ)泄漏的故障模式存儲(chǔ)泄漏的故障模式n數(shù)組越界故障的故障模式數(shù)組越界故障的故障模式n使用未初始化變量故障模式使用未初始化變量故障模式n空指針使用故障空指針使用故障n非法計(jì)算類故障非法計(jì)算類故障n死循環(huán)結(jié)構(gòu)模式死循環(huán)結(jié)構(gòu)模式n資源泄漏故障資源泄漏故障n并發(fā)故障模式并發(fā)故障模式4.3.2 故障模式故障模式n存儲(chǔ)泄漏的故障模式(存儲(chǔ)泄漏的故障模式(Memory Leak Fault MLF)內(nèi)存泄漏故障:內(nèi)存泄漏故障:設(shè)在程序的某處申請(qǐng)了大小為設(shè)在程序的某處申請(qǐng)了大小為M的空間,的空間,
20、凡在程序結(jié)束時(shí)凡在程序結(jié)束時(shí)M或者或者M(jìn)的一部分沒被釋放、或者多次釋的一部分沒被釋放、或者多次釋放放M或或M的一部分都是內(nèi)存泄漏故障。的一部分都是內(nèi)存泄漏故障。MLF有三種形式:有三種形式: (1)遺漏故障:是指申請(qǐng)的內(nèi)存沒有被釋放。)遺漏故障:是指申請(qǐng)的內(nèi)存沒有被釋放。 (2)不匹配故障:是指申請(qǐng)函數(shù)和釋放函數(shù)不匹配。)不匹配故障:是指申請(qǐng)函數(shù)和釋放函數(shù)不匹配。 (3)不相等的釋放錯(cuò)誤:是指釋放的空間和申請(qǐng)的空間大小不一樣。)不相等的釋放錯(cuò)誤:是指釋放的空間和申請(qǐng)的空間大小不一樣。分析教材中的例子:例分析教材中的例子:例1-例例9(9種情況種情況)4.3.2 故障模式故障模式n數(shù)組越界故障的
21、故障模式(數(shù)組越界故障的故障模式(OBAF) 數(shù)組越界故障:數(shù)組越界故障:設(shè)某數(shù)組定義為設(shè)某數(shù)組定義為Arraymin max,若引,若引用用Arrayi且且imax都是數(shù)組越界故障。在都是數(shù)組越界故障。在C+中,中,若若i0或或i max是數(shù)組越界故障。是數(shù)組越界故障。4.3.2 故障模式故障模式數(shù)組越界故障的類型分析(數(shù)組越界故障的類型分析(3種故障類型):種故障類型):(1)對(duì)程序中任何出現(xiàn))對(duì)程序中任何出現(xiàn)Arrayi的地方,都要判斷的地方,都要判斷i的范圍,可能有三種情況:的范圍,可能有三種情況:n若若i是在數(shù)組定義的范圍內(nèi),則是正確的;是在數(shù)組定義的范圍內(nèi),則是正確的;n若若i是在
22、數(shù)組定義的范圍外,則是是在數(shù)組定義的范圍外,則是OBAF;n若若i是不確定的,則是不確定的,則Arrayi是否是是否是OBAF則不確定的。則不確定的。 (分析教材例(分析教材例4-10和例和例4-11)(2)字符串拷貝過程中存在的數(shù)組越界故障)字符串拷貝過程中存在的數(shù)組越界故障 。 (分析教材例表(分析教材例表4-1)(3)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝)在結(jié)構(gòu)類型中,由于結(jié)構(gòu)體中的成員變量是連續(xù)存放的,在數(shù)組的拷貝過程中,多余的數(shù)據(jù)會(huì)自動(dòng)的存放在后面所定義的成員變量中,這種情過程中,多余的數(shù)據(jù)會(huì)自動(dòng)的存放在后面所定義的成員變量中,這種情況數(shù)組并不產(chǎn)生越界錯(cuò)誤。
23、況數(shù)組并不產(chǎn)生越界錯(cuò)誤。 (分析教材例(分析教材例4-12)4.3.2 故障模式故障模式3使用未初始化變量故障模式使用未初始化變量故障模式(Uninitialized Variable Fault,UVF) 定義:定義: 使用未初始化變量故障:存在一個(gè)路徑,在該路徑上使用使用未初始化變量故障:存在一個(gè)路徑,在該路徑上使用前面沒有被賦初值的變量是使用未初始化變量故障。前面沒有被賦初值的變量是使用未初始化變量故障。 (分析教材例(分析教材例4-13、例、例4-14、例、例4-15 、例例4-16 、例、例4-17 )4.3.2 故障模式故障模式4空指針使用故障空指針使用故障(NULL Pointe
24、r Dereference Fault NPDF) 定義定義: 空指針使用故障:引用空指針或給空指針賦值的都是空空指針使用故障:引用空指針或給空指針賦值的都是空指針使用故障。指針使用故障。(分析教材例(分析教材例4-18、表、表4-2 )4.3.2 故障模式故障模式5非法計(jì)算類故障非法計(jì)算類故障(Illegal Computing Fault ILCF)定義定義: 非法計(jì)算類故障:是指計(jì)算機(jī)不允許的計(jì)算。非法計(jì)算類故障:是指計(jì)算機(jī)不允許的計(jì)算。 一旦非法計(jì)算類故障產(chǎn)生,系統(tǒng)將強(qiáng)行退出。一旦非法計(jì)算類故障產(chǎn)生,系統(tǒng)將強(qiáng)行退出。 例如:例如: 除數(shù)為除數(shù)為0故障。故障。 對(duì)數(shù)自變量為對(duì)數(shù)自變量為0
25、或負(fù)數(shù)故障?;蜇?fù)數(shù)故障。 根號(hào)內(nèi)為負(fù)數(shù)的故障。根號(hào)內(nèi)為負(fù)數(shù)的故障。4.3.2故障模式故障模式6死循環(huán)結(jié)構(gòu)模式死循環(huán)結(jié)構(gòu)模式(Dead Loop Fault DLF)定義:定義: 在控制流圖中在控制流圖中,對(duì)任何一個(gè)循環(huán)結(jié)構(gòu)對(duì)任何一個(gè)循環(huán)結(jié)構(gòu),包括包括: FOR語句中的死循環(huán)結(jié)構(gòu);語句中的死循環(huán)結(jié)構(gòu); WHILE語句中的死循環(huán)結(jié)構(gòu);語句中的死循環(huán)結(jié)構(gòu); DO-WHILE語句中的死循環(huán)結(jié)構(gòu);語句中的死循環(huán)結(jié)構(gòu); GOTO語句中的死循環(huán)結(jié)構(gòu);語句中的死循環(huán)結(jié)構(gòu); 函數(shù)循環(huán)調(diào)用造成的死循環(huán)結(jié)構(gòu)函數(shù)循環(huán)調(diào)用造成的死循環(huán)結(jié)構(gòu)。 要分析控制循環(huán)的變量的開始條件、結(jié)束條件、步長變化,檢查要分析控制循環(huán)的變量的
26、開始條件、結(jié)束條件、步長變化,檢查該循環(huán)能否結(jié)束,若不能則會(huì)該循環(huán)能否結(jié)束,若不能則會(huì)形成死循環(huán)形成死循環(huán)。(分析教材例(分析教材例4-19、例、例4-20、例、例4-21 )4.3.2故障模式故障模式7資源泄漏故障資源泄漏故障(RLF)定義:定義: 資源泄漏故障:在資源泄漏故障:在Java程序中,當(dāng)一個(gè)資源被打開后,如程序中,當(dāng)一個(gè)資源被打開后,如果并不是在所有的可執(zhí)行路徑上都對(duì)其進(jìn)行了顯式的釋放操果并不是在所有的可執(zhí)行路徑上都對(duì)其進(jìn)行了顯式的釋放操作,則是一個(gè)資源泄漏故障。作,則是一個(gè)資源泄漏故障。資源泄漏一般分為資源泄漏一般分為4種情況:種情況: 簡單泄漏:簡單泄漏:資源被分配給本地變量
27、,在該變量的有效范圍內(nèi)沒有釋放資源;資源被分配給本地變量,在該變量的有效范圍內(nèi)沒有釋放資源; 異常泄漏異常泄漏:資源被分配給本地變量,在該變量的有效范圍內(nèi)也釋放了資源,:資源被分配給本地變量,在該變量的有效范圍內(nèi)也釋放了資源,但在釋放資源前由于異常拋出,導(dǎo)致資源釋放操作沒有執(zhí)行但在釋放資源前由于異常拋出,導(dǎo)致資源釋放操作沒有執(zhí)行 交叉函數(shù)泄漏:交叉函數(shù)泄漏:在一個(gè)方法內(nèi)分配資源,該資源被傳遞到另外一個(gè)方法內(nèi),在一個(gè)方法內(nèi)分配資源,該資源被傳遞到另外一個(gè)方法內(nèi),在另一個(gè)方法內(nèi)沒有正常釋放資源;在另一個(gè)方法內(nèi)沒有正常釋放資源; 靜態(tài)情況靜態(tài)情況:資源被分配給靜態(tài)變量或其他非本地變量,該變量沒有被正
28、常:資源被分配給靜態(tài)變量或其他非本地變量,該變量沒有被正常釋放。釋放。分析教材例分析教材例4-22、例、例4-23、例、例4-24、例、例4-254.3.2故障模式故障模式8. 并發(fā)故障模式并發(fā)故障模式 該模式主要是針對(duì)程序員對(duì)該模式主要是針對(duì)程序員對(duì)多線程的編碼機(jī)制多線程的編碼機(jī)制、各種、各種同同步方法步方法、Java存儲(chǔ)器模式和存儲(chǔ)器模式和java虛擬機(jī)的工作機(jī)制不清楚,虛擬機(jī)的工作機(jī)制不清楚,而且由于線程啟動(dòng)的任意性和不確定性使用戶無法確定所編而且由于線程啟動(dòng)的任意性和不確定性使用戶無法確定所編寫的代碼具體何時(shí)執(zhí)行而導(dǎo)致對(duì)公共區(qū)域的錯(cuò)誤使用。寫的代碼具體何時(shí)執(zhí)行而導(dǎo)致對(duì)公共區(qū)域的錯(cuò)誤使用
29、。 這類模式主要包括:這類模式主要包括:n 不正確的同步不正確的同步n 可能導(dǎo)致死鎖可能導(dǎo)致死鎖n多線程應(yīng)用中方法調(diào)用時(shí)機(jī)或方式不正確多線程應(yīng)用中方法調(diào)用時(shí)機(jī)或方式不正確n 同一變量的雙重驗(yàn)證同一變量的雙重驗(yàn)證n 相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)等。分析教材例分析教材例4-22、例、例4-23、例、例4-24、例、例4-25(1)不正確的同步)不正確的同步定義:定義: 在在java程序中,由于對(duì)程序中,由于對(duì)synchronized關(guān)鍵字使用關(guān)鍵字使用不當(dāng)將造成不正確的同步缺陷。不當(dāng)將造成不正確的同步缺陷。 主要有:主要有: 不連續(xù)的同步;不連續(xù)的同
30、步; 對(duì)易變域的同步;對(duì)易變域的同步; set方法被同步了,但方法被同步了,但get方法卻沒有被同步;方法卻沒有被同步; 方法方法writeObject同步但其他方法均沒有同步;同步但其他方法均沒有同步; 方法方法readObject使用了使用了synchronized修飾;修飾; 靜態(tài)域的不正確初始化;靜態(tài)域的不正確初始化;分析教材例中對(duì)應(yīng)類型的例題分析教材例中對(duì)應(yīng)類型的例題(2)可能導(dǎo)致死鎖)可能導(dǎo)致死鎖定義:定義: 在在java中,對(duì)鎖的不正確操作可能造成導(dǎo)致死鎖的中,對(duì)鎖的不正確操作可能造成導(dǎo)致死鎖的缺陷缺陷。(3)多線程應(yīng)用中方法調(diào)用時(shí)機(jī)或方式不正確)多線程應(yīng)用中方法調(diào)用時(shí)機(jī)或方式不
31、正確定義:定義: 在在java中,一些同步方法的不正確調(diào)用將造成該類中,一些同步方法的不正確調(diào)用將造成該類缺陷缺陷。(4)同一變量的雙重驗(yàn)證)同一變量的雙重驗(yàn)證定義: 在java中,同一變量的雙重驗(yàn)證指對(duì)一個(gè)對(duì)象進(jìn)行了兩次判斷,判斷其是否為空。(5)相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù))相互初始化的類和臨界區(qū)內(nèi)調(diào)用阻塞函數(shù)定義: 在java中,互相初始化的類指的是兩個(gè)類中分別對(duì)對(duì)方類的實(shí)例進(jìn)行初始化的代碼。4.3 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.3 安全漏洞模式安全
32、漏洞模式 安全漏洞模式安全漏洞模式為他人攻擊軟件提供可能。而一旦軟件被為他人攻擊軟件提供可能。而一旦軟件被攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因攻擊成功,系統(tǒng)就可能發(fā)生癱瘓,所造成的危害較大,因此,此類漏洞應(yīng)當(dāng)盡量避免。此,此類漏洞應(yīng)當(dāng)盡量避免。 下面以下面以C+為基礎(chǔ),介紹基于安全漏洞檢測(cè)的缺陷模式。主要有:為基礎(chǔ),介紹基于安全漏洞檢測(cè)的缺陷模式。主要有: (1)緩沖區(qū)溢出漏洞模式;)緩沖區(qū)溢出漏洞模式; (2)被污染的數(shù)據(jù)模式;)被污染的數(shù)據(jù)模式; (3)競爭條件)競爭條件 (4) 風(fēng)險(xiǎn)操作風(fēng)險(xiǎn)操作4.3.3 安全漏洞模式安全漏洞模式1 、緩沖區(qū)溢出(、緩沖區(qū)溢出(buffer
33、 overflow)漏洞模式)漏洞模式 定義:定義:當(dāng)程序要在一個(gè)緩沖區(qū)內(nèi)存儲(chǔ)比該緩沖區(qū)當(dāng)程序要在一個(gè)緩沖區(qū)內(nèi)存儲(chǔ)比該緩沖區(qū)的大小還要多的數(shù)據(jù)時(shí),即會(huì)產(chǎn)生緩沖區(qū)溢出漏洞。的大小還要多的數(shù)據(jù)時(shí),即會(huì)產(chǎn)生緩沖區(qū)溢出漏洞。 緩存區(qū)溢出主要有緩存區(qū)溢出主要有2種類型:種類型:n 數(shù)據(jù)拷貝造成的緩沖區(qū)溢出;數(shù)據(jù)拷貝造成的緩沖區(qū)溢出;n格式化字符串造成的緩沖區(qū)溢出格式化字符串造成的緩沖區(qū)溢出;1 、緩沖區(qū)溢出(、緩沖區(qū)溢出(buffer overflow)漏洞模式)漏洞模式(1) 數(shù)據(jù)拷貝造成的緩沖區(qū)溢出數(shù)據(jù)拷貝造成的緩沖區(qū)溢出 如果數(shù)據(jù)是從外部傳進(jìn)來的或是在緩沖區(qū)之間進(jìn)行數(shù)據(jù)復(fù)制,如果數(shù)據(jù)是從外部傳進(jìn)來
34、的或是在緩沖區(qū)之間進(jìn)行數(shù)據(jù)復(fù)制,在使用之前沒有進(jìn)行檢驗(yàn),那么,有可能出現(xiàn)安全問題。在使用之前沒有進(jìn)行檢驗(yàn),那么,有可能出現(xiàn)安全問題。 教材:例教材:例4-47 表表4-5 (2)格式化字符串造成的緩沖區(qū)溢出格式化字符串造成的緩沖區(qū)溢出 利用緩沖區(qū)時(shí),若對(duì)數(shù)據(jù)長度不加限制,就可能造成溢出。利用緩沖區(qū)時(shí),若對(duì)數(shù)據(jù)長度不加限制,就可能造成溢出。 教材:例教材:例4-48 表表4-64.3.3 安全漏洞模式安全漏洞模式n被污染的數(shù)據(jù)模式被污染的數(shù)據(jù)模式(Tainted Data) 定義定義:程序從外部獲取數(shù)據(jù)時(shí),這些數(shù)據(jù)可能含有具有欺騙性程序從外部獲取數(shù)據(jù)時(shí),這些數(shù)據(jù)可能含有具有欺騙性或者是不想要的垃
35、圾數(shù)據(jù),或者是不想要的垃圾數(shù)據(jù),如果在使用這些數(shù)據(jù)前不進(jìn)行合法性檢查如果在使用這些數(shù)據(jù)前不進(jìn)行合法性檢查則將威脅到程序的安全則將威脅到程序的安全,造成一個(gè)被污染的數(shù)據(jù)缺陷。,造成一個(gè)被污染的數(shù)據(jù)缺陷。 被污染的數(shù)據(jù)可能會(huì)導(dǎo)致程序不按原計(jì)劃執(zhí)行,也有可能直接或被污染的數(shù)據(jù)可能會(huì)導(dǎo)致程序不按原計(jì)劃執(zhí)行,也有可能直接或間接地導(dǎo)致間接地導(dǎo)致緩沖區(qū)溢出缺陷緩沖區(qū)溢出缺陷。 被污染的數(shù)據(jù)模式主要有兩種類型被污染的數(shù)據(jù)模式主要有兩種類型n 使用的數(shù)據(jù)來自外部的全局變量使用的數(shù)據(jù)來自外部的全局變量n 使用的數(shù)據(jù)來自輸入函數(shù)使用的數(shù)據(jù)來自輸入函數(shù)2 被污染的數(shù)據(jù)模式被污染的數(shù)據(jù)模式(1)使用的數(shù)據(jù)來自外部的全局
36、變量)使用的數(shù)據(jù)來自外部的全局變量 使用來自外部的全局變量前應(yīng)先進(jìn)行合法性檢查使用來自外部的全局變量前應(yīng)先進(jìn)行合法性檢查。 教材:例教材:例4-49 (2) 使用的數(shù)據(jù)來自輸入函數(shù)使用的數(shù)據(jù)來自輸入函數(shù) 教材:例教材:例4-50 表表4-74.3.3 安全漏洞模式安全漏洞模式n競爭條件競爭條件(Race Condition) 定義定義: 如果程序中有兩種不同的如果程序中有兩種不同的I/O調(diào)用同一文件進(jìn)行操作,而調(diào)用同一文件進(jìn)行操作,而且這兩種調(diào)用是通過絕對(duì)路徑或相對(duì)路徑引用文件的,那么就易出現(xiàn)且這兩種調(diào)用是通過絕對(duì)路徑或相對(duì)路徑引用文件的,那么就易出現(xiàn)競爭條件競爭條件問題。在兩種操作進(jìn)行的間隙
37、,黑客可能改變文件系統(tǒng),那問題。在兩種操作進(jìn)行的間隙,黑客可能改變文件系統(tǒng),那么將會(huì)導(dǎo)致對(duì)兩個(gè)不同的文件操作而不是同一文件進(jìn)行操作。么將會(huì)導(dǎo)致對(duì)兩個(gè)不同的文件操作而不是同一文件進(jìn)行操作。 這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運(yùn)行的程這種典型的問題發(fā)生在用戶擁有不同的權(quán)限運(yùn)行的程序中序中(例如:數(shù)據(jù)庫和服務(wù)器程序等例如:數(shù)據(jù)庫和服務(wù)器程序等)。 程序代碼中,針對(duì)文件名的一些操作往往會(huì)被黑客利用從而造程序代碼中,針對(duì)文件名的一些操作往往會(huì)被黑客利用從而造成競爭條件。成競爭條件。 教材:例教材:例4-51、524.3.3 安全漏洞模式安全漏洞模式n風(fēng)險(xiǎn)操作(風(fēng)險(xiǎn)操作(Risky Operation
38、) 定義定義:如果不恰當(dāng)?shù)厥褂昧四承?biāo)準(zhǔn)庫函數(shù),可能會(huì):如果不恰當(dāng)?shù)厥褂昧四承?biāo)準(zhǔn)庫函數(shù),可能會(huì)帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用帶來安全隱患。甚至在某些情況下,某些函數(shù)一經(jīng)被使用, 就可能會(huì)帶來安全隱患。就可能會(huì)帶來安全隱患。 例如像例如像rand()和和random()這樣的隨機(jī)數(shù)生成函數(shù)這樣的隨機(jī)數(shù)生成函數(shù),它們它們?cè)谏蓚坞S機(jī)值的時(shí)候表現(xiàn)出來的性能是非常差的在生成偽隨機(jī)值的時(shí)候表現(xiàn)出來的性能是非常差的, 如果用如果用它們來生成默認(rèn)的口令它們來生成默認(rèn)的口令, 這些口令將很容易被攻擊者猜測(cè)到。這些口令將很容易被攻擊者猜測(cè)到。 教材中給出了教材中給出了23種類型,每種類型都
39、給出了應(yīng)用實(shí)例。種類型,每種類型都給出了應(yīng)用實(shí)例。 例例4-53-例例4-79 23種類型及其對(duì)應(yīng)實(shí)例種類型及其對(duì)應(yīng)實(shí)例(1)_spawnvpe函數(shù)使用相對(duì)路徑;(例函數(shù)使用相對(duì)路徑;(例4-53)(2)不可靠的隨機(jī)數(shù);(例不可靠的隨機(jī)數(shù);(例4-54)(3)可預(yù)測(cè)的臨時(shí)文件名(例)可預(yù)測(cè)的臨時(shí)文件名(例5-55,56,57)(4)危險(xiǎn)的外部程序調(diào)用(例)危險(xiǎn)的外部程序調(diào)用(例5-58,59,60)(5)socke綁定問題(例綁定問題(例5-61)(6)使用不可靠的宏(例)使用不可靠的宏(例4-62)(7)使用不可靠的注冊(cè)表參數(shù)(例)使用不可靠的注冊(cè)表參數(shù)(例4-63)(8)使用不可靠的參數(shù)(
40、例)使用不可靠的參數(shù)(例4-64) (9) 對(duì)明確的宏定義使用變量(例對(duì)明確的宏定義使用變量(例4-65)(10)變量作為注冊(cè)表參數(shù)(例)變量作為注冊(cè)表參數(shù)(例4-66)(11)使用不可靠的)使用不可靠的shell命令(例命令(例4-67)(12)不充分的路徑(例)不充分的路徑(例4-68)23種類型及其對(duì)應(yīng)實(shí)例種類型及其對(duì)應(yīng)實(shí)例(13)不安全的權(quán)限提升(例)不安全的權(quán)限提升(例4-69)(14)使用不可靠的加密算法(例)使用不可靠的加密算法(例4-70)(15)使用不可靠的進(jìn)程創(chuàng)建(例)使用不可靠的進(jìn)程創(chuàng)建(例4-71)(16)不可靠的資源處理(例)不可靠的資源處理(例4-72)(17)忽略
41、檢查函數(shù)的返回值(例)忽略檢查函數(shù)的返回值(例4-73)(18)命名管道的脆弱性(例命名管道的脆弱性(例4-74) (19)Windows臨時(shí)文件的脆弱性(例臨時(shí)文件的脆弱性(例4-75)(20)以外的內(nèi)存復(fù)制(例)以外的內(nèi)存復(fù)制(例4-76)(21)文件存取函數(shù)(例)文件存取函數(shù)(例4-77) (22)不安全的文件操作(例不安全的文件操作(例4-78) (23)暴露絕對(duì)路徑(例暴露絕對(duì)路徑(例4-79)4.3 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.4 缺陷模式缺陷模式缺
42、陷模式主要分為以下幾類:缺陷模式主要分為以下幾類: 1 、低性能模式、低性能模式: 2 、代碼國際化模式、代碼國際化模式 3 、疑問代碼模式、疑問代碼模式1 低性能模式低性能模式 低性能模式低性能模式: 該模式導(dǎo)致軟件運(yùn)行效率低下,因此建議采用更高效的代碼來完成該模式導(dǎo)致軟件運(yùn)行效率低下,因此建議采用更高效的代碼來完成同樣的功能。這類模式主要包括使用低效函數(shù)同樣的功能。這類模式主要包括使用低效函數(shù)/代碼、使用多余函數(shù)、代碼、使用多余函數(shù)、Java中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的中顯式垃圾回收、冗余代碼、頭文件中定義的靜態(tài)變量、不必要的文件包含、字符串低效操作和有更簡單
43、的運(yùn)算可以替代等。文件包含、字符串低效操作和有更簡單的運(yùn)算可以替代等。低性能模式分為以下小類低性能模式分為以下小類 (1)使用低效率的函數(shù))使用低效率的函數(shù)/代碼(代碼(10種);種); (2)使用多余函數(shù)()使用多余函數(shù)(5種)種) (3)顯示垃圾回收)顯示垃圾回收 (4)冗余代碼;)冗余代碼; (5)頭文件中定義靜態(tài)變量;)頭文件中定義靜態(tài)變量; (6) 不必要的文件包含不必要的文件包含 (7) 字符串低效操作字符串低效操作 (8)可以用更簡單的運(yùn)算替代)可以用更簡單的運(yùn)算替代1 低性能模式低性能模式 (1)使用低效率的函數(shù))使用低效率的函數(shù)/代碼代碼 定義:定義:在在java程序中,對(duì)于
44、一些特定的類、函數(shù)和語法,若沒有使程序中,對(duì)于一些特定的類、函數(shù)和語法,若沒有使用合適的方法,將造成性能下降,此類缺陷為使用低效函數(shù)、代碼缺用合適的方法,將造成性能下降,此類缺陷為使用低效函數(shù)、代碼缺陷。陷。該類缺陷主要包括以下(該類缺陷主要包括以下(10種);種); 判定字符串為空的方法的使用;判定字符串為空的方法的使用; 在邏輯表達(dá)式中使用了非短路運(yùn)算符;在邏輯表達(dá)式中使用了非短路運(yùn)算符; 使用低效的類型構(gòu)造器;使用低效的類型構(gòu)造器; 不必要的包裝類實(shí)例化;不必要的包裝類實(shí)例化; 產(chǎn)生隨機(jī)整數(shù)產(chǎn)生隨機(jī)整數(shù) 在多個(gè)類之間復(fù)制很大的字符串常量在多個(gè)類之間復(fù)制很大的字符串常量 循環(huán)中的字符串連接
45、循環(huán)中的字符串連接 未定義為靜態(tài)的內(nèi)部類未定義為靜態(tài)的內(nèi)部類 未聲明為靜態(tài)屬性;未聲明為靜態(tài)屬性; 調(diào)用低效的調(diào)用低效的.url比較方法比較方法教材例4-80-4-871 低性能模式低性能模式:(2)使用多余函數(shù))使用多余函數(shù) 定義定義:在:在java中,若調(diào)用了一些不必要的函數(shù),中,若調(diào)用了一些不必要的函數(shù),而造成性能下降,則此類缺陷為使用多余函數(shù)缺陷。而造成性能下降,則此類缺陷為使用多余函數(shù)缺陷。該類缺陷主要包括以下該類缺陷主要包括以下(5種)種) 同一鎖的同步方法調(diào)用;同一鎖的同步方法調(diào)用; 沒有必要的方法調(diào)用;沒有必要的方法調(diào)用; 調(diào)用了不必要的調(diào)用了不必要的getClass()方法;
46、方法; 參數(shù)為常數(shù)的數(shù)學(xué)方法;參數(shù)為常數(shù)的數(shù)學(xué)方法; 字符串變量調(diào)用字符串變量調(diào)用toString()教材例4-88-4-91(3)顯示垃圾回收)顯示垃圾回收 定義定義:在:在java中,垃圾回收是很耗費(fèi)資源的,顯示地調(diào)中,垃圾回收是很耗費(fèi)資源的,顯示地調(diào)用垃圾回收機(jī)制會(huì)導(dǎo)致應(yīng)用的性能急劇下降,此類缺陷為用垃圾回收機(jī)制會(huì)導(dǎo)致應(yīng)用的性能急劇下降,此類缺陷為垃圾回收缺陷。垃圾回收缺陷。1 低性能模式低性能模式:教材例4-921 低性能模式低性能模式:(4)冗余代碼)冗余代碼 定義定義:在:在java中,存在從未使用過的方法或?qū)僦?,存在從未使用過的方法或?qū)傩?,或存在從未使用讀取過的局部變量,則此性,
47、或存在從未使用讀取過的局部變量,則此類缺陷為冗余代碼缺陷類缺陷為冗余代碼缺陷1 低性能模式低性能模式:(5)頭文件中定義靜態(tài)變量)頭文件中定義靜態(tài)變量 定義定義:頭文件中定義的函數(shù)或變量被聲明為靜態(tài)的,即:頭文件中定義的函數(shù)或變量被聲明為靜態(tài)的,即包含該頭文件的任一文件都比較并復(fù)制一份該對(duì)象,這樣包含該頭文件的任一文件都比較并復(fù)制一份該對(duì)象,這樣無疑明顯增加了可執(zhí)行文件的大小。無疑明顯增加了可執(zhí)行文件的大小。教材例4-931 低性能模式低性能模式: (6)不必要的文件包含不必要的文件包含 定義定義:一個(gè)文件包含了另一個(gè)頭文件卻沒有使用該頭文:一個(gè)文件包含了另一個(gè)頭文件卻沒有使用該頭文件中的任何符號(hào),這種缺陷會(huì)增加編譯的時(shí)間。件中的任何符號(hào),這種缺陷會(huì)增加編譯的時(shí)間。教材例4-941 低性能模式低性能模式:(7)字符串低效操作字符串低效操作 定義定義:循環(huán)中的字符串連接。在循環(huán)里用:循環(huán)中的字符串連接。在循環(huán)里用“+”做做String變量的連接。變量的連接。教材例4-95(8)可以用更簡單運(yùn)算替代 例:i=i+1-i+ i=i-1-i-2 代碼國際化模式代碼國際化模式 該模式主要是在對(duì)語言進(jìn)行國際化的該模式主要是在對(duì)語言進(jìn)行國際化的過程中,可能造成
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024人工智能安全標(biāo)準(zhǔn)與風(fēng)險(xiǎn)評(píng)估預(yù)警
- 儲(chǔ)能電站系統(tǒng)基礎(chǔ)培訓(xùn)
- 林下經(jīng)濟(jì)施工方案
- 合同范本補(bǔ)償合同
- 吃奶魚合伙合同范例
- 行業(yè)主管工作總結(jié)的實(shí)施進(jìn)度計(jì)劃
- 品牌內(nèi)容營銷的成功實(shí)踐計(jì)劃
- 發(fā)展幼兒自信心的教育活動(dòng)計(jì)劃
- 人事部內(nèi)部流程再造計(jì)劃
- 企業(yè)文化建設(shè)的實(shí)施計(jì)劃
- 部編版(2024)三年級(jí)道德與法治上冊(cè)第12課《生活離不開規(guī)則》教學(xué)課件
- 書法測(cè)評(píng)基礎(chǔ)理論知識(shí)單選題100道及答案解析
- 2024年新課標(biāo)卷高考化學(xué)試卷試題真題答案詳解(精校打印版)
- 音頻功率放大器的設(shè)計(jì)與實(shí)現(xiàn)
- 2024年高等教育文學(xué)類自考-01210對(duì)外漢語教學(xué)法考試近5年真題集錦(頻考類試題)帶答案
- 《長江流域》習(xí)題課件
- 廠房鋼結(jié)構(gòu)施工組織設(shè)計(jì)
- 部編四下語文《千年夢(mèng)圓在今朝》公開課教案教學(xué)設(shè)計(jì)【一等獎(jiǎng)】
- 2024年教師編制考試教育理論綜合基礎(chǔ)知識(shí)復(fù)習(xí)題庫及答案(共300題)
- 部編版三年級(jí)《習(xí)作我做了一項(xiàng)小實(shí)驗(yàn)》教案
- 外墻粉刷施工安全協(xié)議書
評(píng)論
0/150
提交評(píng)論