版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
質(zhì)量評審設計評審單元測試測試驗證測試管理
代碼評審質(zhì)量評審質(zhì)量評審設計評審單元測試測試驗證測試管理
代碼評審質(zhì)量評審質(zhì)量評審特點優(yōu)點復雜度分析代碼評價度量代碼結(jié)構(gòu)化化簡LCSAJs質(zhì)量模型質(zhì)量評審特點優(yōu)點復雜度分析代碼評價度量代碼結(jié)構(gòu)化化簡LCSA質(zhì)量評審能力檢查多個代碼復雜性度量元圈復雜度結(jié)點度量LCSAJ控制流(測試路徑)識別死代碼和不可測試代碼提供功能強大的結(jié)構(gòu)化化簡工具結(jié)構(gòu)化程序驗證
將你的代碼化簡到基本復雜度使用工業(yè)標準或自定義質(zhì)量模型提供邊界檢查產(chǎn)生定量評估將所有結(jié)果總結(jié)成頂層的度量指標
清晰性/測試性/維護性提供直觀的報告和代碼可視化工具質(zhì)量評審能力檢查多個代碼復雜性度量元復雜性通常檢查多余的復雜性是非常困難的程序的復雜性并不可怕,但是多余的復雜性會引起軟件出問題復雜性通常檢查多余的復雜性是非常困難的度量元度量元是軟件度量的基礎(chǔ),就象“米”是對長度的度量注意度量結(jié)果本身并不能直接就反應出質(zhì)量好壞在質(zhì)量評審中使用度量源元時,相互的關(guān)聯(lián)是最重要的度量元度量元是軟件度量的基礎(chǔ),就象“米”是對長度的度量質(zhì)量評審–代碼評價度量清晰性系統(tǒng)的可理解性如何可維護性軟件的可維護性如何?可測試性對系統(tǒng)進行測試需要多少工作?質(zhì)量評審–代碼評價度量清晰性可維護性可測試性復雜度度量控制流結(jié)點圈復雜度基本結(jié)點和基本圈復雜度循環(huán)嵌套函數(shù)扇入和扇出不可達性復雜度度量控制流結(jié)點結(jié)點分類跳轉(zhuǎn)分為下列幾類:向上(向后)跳轉(zhuǎn)向下(向前)跳轉(zhuǎn)結(jié)點根據(jù)跳轉(zhuǎn)類型可以分為:下-下結(jié)點上-下結(jié)點上-上結(jié)點153421534215342結(jié)點分類跳轉(zhuǎn)分為下列幾類:153421534215342引起結(jié)點的C結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點: for while switch可利用基本結(jié)點度量消除這些局限性引起結(jié)點的C結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:引起結(jié)點的Ada結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:
IFTHENELSE CASE GOTO Exceptions可利用基本結(jié)點度量消除這些局限性引起結(jié)點的Ada結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:圈復雜度從有向圖G,計算圈復雜度V(G):
V(G)=No.edges(邊數(shù))-No.nodes(節(jié)點數(shù))+2這樣也正確: V(G)=No.predicates(判定節(jié)點數(shù))+1Case結(jié)構(gòu)(有N種選擇)是個例外,計算為N–1 V(G)=No.regions(區(qū)域數(shù))假如G是個連接的平面圖圈復雜度從有向圖G,計算圈復雜度V(G):圈復雜度例子12條邊9個節(jié)點VG=12-9+2=5145236789123456789101112圈復雜度例子145236789123456789101112圈復雜度例子3個判定結(jié)點計算為4case計算為2VG=4+1=53-111圈復雜度例子3-111圈復雜度例子5個區(qū)域VG=532451圈復雜度例子32451結(jié)點和圈復雜度13245此有向圖可表示為右邊兩種程序結(jié)構(gòu)。1452315342V(G)=6-5+2=3V(G)=6-5+2=3Knots=4Knots=1結(jié)點和圈復雜度13245此有向圖可表示為右邊兩種程序結(jié)構(gòu)。1結(jié)點和圈復雜度圈復雜度和結(jié)點度量是互補的兩個指標總之,程序結(jié)構(gòu)化度量量化了軟件的屬性圈復雜度用于表明程序復雜性結(jié)點度量用于表明程序?qū)嵤r附加的復雜性
結(jié)點和圈復雜度圈復雜度和結(jié)點度量是互補的兩個指標循環(huán)的復雜性度量
由流程圖研究源代碼的循環(huán)結(jié)構(gòu)用于度量復雜性和代碼優(yōu)化識別循環(huán)結(jié)構(gòu)不被源代碼結(jié)構(gòu)所影響函數(shù)度量:函數(shù)入口和出口(扇入扇出)循環(huán)總數(shù)循環(huán)最大深度循環(huán)的復雜性度量由流程圖研究源代碼的循環(huán)結(jié)構(gòu)C++OO實現(xiàn)類的數(shù)目子類的數(shù)目每個類的方法繼承深度數(shù)據(jù)成員的數(shù)據(jù)類外的函數(shù)調(diào)用其他Chidamber和Kemerer度量C++OO實現(xiàn)類的數(shù)目程序結(jié)構(gòu)化驗證程序結(jié)構(gòu)化驗證程序結(jié)構(gòu)化驗證通過匹配程序結(jié)構(gòu)模版執(zhí)行結(jié)構(gòu)化驗證,模版使用源代碼基本塊的流程圖表示使用檢查工具自動運行檢查下列結(jié)構(gòu):if-then-endifif-then-else-endifdo-whilewhileforcase可配置成識別其他結(jié)構(gòu)程序結(jié)構(gòu)化驗證通過匹配程序結(jié)構(gòu)模版執(zhí)行結(jié)構(gòu)化驗證,模版使用源程序結(jié)構(gòu)化確認由于使用非正確的結(jié)構(gòu)形式,C語言非常容易產(chǎn)生錯誤:需要
switch,case,default和break語句的case語句if-then語句也容易產(chǎn)生錯誤for循環(huán)結(jié)構(gòu)也容易產(chǎn)生錯誤程序結(jié)構(gòu)化確認由于使用非正確的結(jié)構(gòu)形式,C語言非常容易產(chǎn)生SPV建議如果檢測到非結(jié)構(gòu)化的代碼,這部分代碼應該由程序員重新編寫,這不包括為了解決某些特殊問題而有意使用的非結(jié)構(gòu)化編程除了允許以修改非結(jié)構(gòu)化程序會帶來不必要的復雜為理由以外,建議管理者可以先懷疑任何非結(jié)構(gòu)化編程的使用流程圖看起來很混亂,并不總是意味著代碼是非結(jié)構(gòu)化的。繪制流程圖的算法可能會誤導程序是高度復雜的通常程序的非結(jié)構(gòu)化是由于代碼內(nèi)部錯誤引起的SPV建議如果檢測到非結(jié)構(gòu)化的代碼,這部分代碼應該由程序員重SPV流程圖SPV流程圖,圖形化地顯示設計良好的程序結(jié)構(gòu)中節(jié)點的化簡過程SPV流程圖SPV流程圖,圖形化地顯示設計良好的程序結(jié)構(gòu)中節(jié)代碼評審流程圖
代碼評審流程圖 基本結(jié)點度量將所有的結(jié)構(gòu)化的程序結(jié)構(gòu)進行化簡后,計算剩余的節(jié)點數(shù)就得到基本結(jié)點度量對于一個結(jié)構(gòu)化的程序:基本結(jié)點數(shù)=0基本結(jié)點是非結(jié)構(gòu)化程序引起的復雜性的度量基本結(jié)點度量將所有的結(jié)構(gòu)化的程序結(jié)構(gòu)進行化簡后,計算剩余的節(jié)基本圈復雜度某些結(jié)構(gòu)化的編程結(jié)構(gòu)會引起很高的圈復雜度這個局限性可用基本度量克服定義:EV(G)=V(G)-M
這里M是有唯一入口和出口節(jié)點的子圖G的數(shù)目對于一個結(jié)構(gòu)化的程序:EV(G)=1基本圈復雜度某些結(jié)構(gòu)化的編程結(jié)構(gòu)會引起很高的圈復雜度SPV度量總結(jié)如果一個模塊通過SPV化簡之后是結(jié)構(gòu)化的,它有:基本結(jié)點為0基本圈復雜度為1非結(jié)構(gòu)化的程序含有很高的基本度量值
這兩個度量是對代碼中存在的結(jié)構(gòu)缺陷的度量SPV度量總結(jié)如果一個模塊通過SPV化簡之后是結(jié)構(gòu)化的,它有復雜度分析標準復雜度分析標準違反情況位于代碼評審報告中用于強制源代碼執(zhí)行特定的質(zhì)量特性1C CyclomaticComplexitygreaterthan***2C Procedureisnotreducibleintermsofintervals3C Procedurecontainsessentialknots4C Procedureisnotstructured5C Procedurecontainsinfiniteloop復雜度分析標準復雜度分析標準違反情況LCSAJs
線性代碼序列及跳轉(zhuǎn)LCSAJs
線性代碼序列及跳轉(zhuǎn)LCSAJs維護性度量指標檢測不可達代碼識別不可測試(或不合理)代碼強制用于歐洲安全苛刻性軍用航空電子項目路徑測試的覆蓋度量基礎(chǔ)最高級別的代碼覆蓋率度量LCSAJs維護性度量指標LCSAJ三要素根據(jù)定義和LDRA的代碼重格式化策略,LCSAJs能描述成三要素的形式:1. 起始點 [一個線性代碼序列]2. 結(jié)束點3. 目標點LCSAJ三要素根據(jù)定義和LDRA的代碼重格式化策略,LCSLCSAJ起始點LCSAJs開始于:程序的第一行可執(zhí)行代碼A的第一行可執(zhí)行代碼,A可以是:功能程序方法…任何控制流跳轉(zhuǎn)的目標行:標號else語句endif語句switch語句的子句循環(huán)函數(shù)調(diào)用的返回...LCSAJ起始點LCSAJs開始于:LCSAJ跨度
LCSAJ跨度是程序中的最小分割,任何LCSAJ的線型代碼序列都完全包含在LCSAJ的跨度中 LCSAJ跨度的第一行可以是程序的開始,或者是前面的LCSAJ序列不能到達的那一行 LCSAJ跨度的終止行可以是程序的結(jié)束行,或者是控制流不能經(jīng)過其下一行的代碼行SpanFINISH82else1------------------------------------------------------------------------START83{184mess="HelloThere";185}1START86}2START87}3START88printf("%d%d%d%20s\n",i,j,k,mess);4FINISH89}4------------------------------------------------------------------------STARTFINISH90}1LCSAJ跨度 LCSAJ跨度是程序中的最小分割,任何LCSLCSAJ密度LCSAJ密度是維護性度量元如果某一行代碼作了修改,LCSAJ密度會告訴用戶由于此代碼修改影響到多少條LCSAJ如果密度越高,那么就越會降低對于所有的LCSAJ此改變都是正確的信心,因此必須增加需要的回歸測試數(shù)目Code
“LCSAJ”Lines Densitya=b 2if 2(a==x) 2{ 1b=y; 1} 1print(“ok”); 2LCSAJ密度LCSAJ密度是維護性度量元Code “LC不可達的LCSAJs如果從程序開始沒有任何路徑到達指定的代碼行,那么代碼將被標為不可達(或死代碼)這種現(xiàn)象通常出現(xiàn)在緊跟著goto語句的代碼行中,典型例子如右面最后一行代碼不可達的LCSAJs標記顯示在下面的例子中
ifI=0thengotolabel:endif;
FINISH235gotol6;2---------------------------------------------------------------------236z=5;0UNREACHABLE*****237z=9;0UNREACHABLE*****START238l6:1239z=10;1FINISH240}1不可達的LCSAJs如果從程序開始沒有任何路徑到達指定的代碼不可測試的LCSAJsLCSAJ是一路徑片段,通常在它的線性代碼序列中包含許多條件
如果LCSAJ的執(zhí)行依賴于程序中的某些條件,而且永遠不會滿足這些條件,那么LCSAJ可能是不可測試的(因此是不可執(zhí)行的)不可測試的LCSAJsLCSAJ是一路徑片段,通常在它的線性LCSAJ報告總結(jié)部分詳細的代碼清單:LCSAJs出現(xiàn)的地方源代碼內(nèi)的位置LCSAJ三要素列表
不可達的LCSAJs列表通過追蹤局部的控制流分支,任何不可達的代碼都會在報告中著重顯示LCSAJ報告總結(jié)部分LCSAJ(路徑測試)流程圖
LCSAJ(路徑測試)流程圖 質(zhì)量評審報告質(zhì)量評審報告度量的解釋像大多數(shù)其他的物理度量一樣,度量的大小并不能表明事物的好或者壞通常認為最好要保證函數(shù)符合這樣的度量,這增加了程序的可讀性和可維護性度量的解釋像大多數(shù)其他的物理度量一樣,度量的大小并不能表明事質(zhì)量評審報告顯示復雜度度量和源代碼的信息
顯示函數(shù)級別的復雜度度量和整體源代碼的復雜度度量
許多結(jié)果也能夠以圖形化的方式顯示可用的度量包括:圈復雜度度量源代碼基本塊結(jié)點度量
函數(shù)的入口出口循環(huán)數(shù)目和嵌套深度程序結(jié)構(gòu)化驗證質(zhì)量評審報告顯示復雜度度量和源代碼的信息可用的度量包括:質(zhì)量評審報告質(zhì)量評審報告質(zhì)量評審-質(zhì)量模型質(zhì)量評審-質(zhì)量模型質(zhì)量評審報告
ReformattedCodeInformationforFileTotalreformattedLines,Totalcommentsinref.Code,Executableref.Lines,Non-executableref.Lines
NumberofProcedures,TotalsourceLines,ExpansionFactor.
CommentsAssociatedwithProcedures(%oftotal)TotalComments,CommentsinHeaders,CommentsinDeclarations,CommentsinExecutableCode
BlankLines.
RatioofCommentstoExecutablelines(%)TotalComments/Exe.Lines,HeaderComments/Exe.Lines,DeclarationComments/Exe.Lines,CodeComments/Exe.Lines
Halstead'sMetricsTotalOperators,TotalOperands,UniqueOperators,UniqueOperands
Vocabulary,Length,Volume.
LCSAJandUnreachabilityTotalLCSAJs,ReachableLCSAJs,UnreachableLCSAJs,MaximumLCSAJDensity
UnreachableLines,UnreachableBranches.
FileBasedC++OOMetricsTotalStructuredTypesDeclared,TotalObjectsCreated.
ClassLevelC++OOMetricsObjectsCreated,NumberofDataMembers,NumberofMembers,NumberofChildClasses
ClassLevelOOMetrics-withBaseClassesTotalBaseClasses,TotalDataMembers,TotalMembers,InheritanceDepth
ClassLevelOOMetrics-withBaseClasses(2)質(zhì)量評審報告 ReformattedCodeInform質(zhì)量評審報告包含質(zhì)量評審產(chǎn)生的信息:復雜度標準違反情況詳細報告中有每個函數(shù)的復雜度匯總表質(zhì)量評審報告包含質(zhì)量評審產(chǎn)生的信息:柱狀圖柱狀圖用于圖形化顯示“質(zhì)量度量”的數(shù)目,包括:測試中的文件(單元/模塊)Tbset系統(tǒng)范圍的結(jié)果柱狀圖柱狀圖用于圖形化顯示“質(zhì)量度量”的數(shù)目,包括:Kiviat圖圖形化表示質(zhì)量模型假如源代碼滿足質(zhì)量標準,就顯示為綠色假如源代碼不滿足質(zhì)量標準,就顯示為紅色直觀可視地表示與標準的一致性圖示給出度量元達到的實際值Kiviat圖圖形化表示質(zhì)量模型Kiviat圖的解釋每個度量元都顯示在軸上度量元達到的值都繪制在軸上綠色的區(qū)域表明度量元的值在上邊界和下邊界之間超過邊界的區(qū)域顯示為紅色Kiviat圖的解釋每個度量元都顯示在軸上可用的不同Kiviat圖Kiviat圖可用于:維護性測試性清晰性以整個程序顯示或者以函數(shù)級別顯示C++方面有面向?qū)ο蟮腒iviats圖可用的不同Kiviat圖Kiviat圖可用于:質(zhì)量評審總結(jié)結(jié)論:代碼質(zhì)量可以度量和查看代碼評價度量中包含代碼質(zhì)量度量質(zhì)量報告提供總體度量結(jié)果快速顯示系統(tǒng)的復雜度自動生成有價值的軟件質(zhì)量度量文檔化簡工具幫助減小復雜性質(zhì)量評審總結(jié)結(jié)論:代碼質(zhì)量可以度量和查看代碼評價度量中包含代練習使用.\Testbed\Examples\C_testbed_examples\Testrian目錄下Testrian.c程序做復雜度分析和程序結(jié)構(gòu)化化簡等功能,查看質(zhì)量報告、LCSAJ報告和圖形化顯示質(zhì)量的結(jié)果練習使用.\Testbed\Examples\C_test質(zhì)量評審設計評審單元測試測試驗證測試管理
代碼評審質(zhì)量評審質(zhì)量評審設計評審單元測試測試驗證測試管理
代碼評審質(zhì)量評審質(zhì)量評審特點優(yōu)點復雜度分析代碼評價度量代碼結(jié)構(gòu)化化簡LCSAJs質(zhì)量模型質(zhì)量評審特點優(yōu)點復雜度分析代碼評價度量代碼結(jié)構(gòu)化化簡LCSA質(zhì)量評審能力檢查多個代碼復雜性度量元圈復雜度結(jié)點度量LCSAJ控制流(測試路徑)識別死代碼和不可測試代碼提供功能強大的結(jié)構(gòu)化化簡工具結(jié)構(gòu)化程序驗證
將你的代碼化簡到基本復雜度使用工業(yè)標準或自定義質(zhì)量模型提供邊界檢查產(chǎn)生定量評估將所有結(jié)果總結(jié)成頂層的度量指標
清晰性/測試性/維護性提供直觀的報告和代碼可視化工具質(zhì)量評審能力檢查多個代碼復雜性度量元復雜性通常檢查多余的復雜性是非常困難的程序的復雜性并不可怕,但是多余的復雜性會引起軟件出問題復雜性通常檢查多余的復雜性是非常困難的度量元度量元是軟件度量的基礎(chǔ),就象“米”是對長度的度量注意度量結(jié)果本身并不能直接就反應出質(zhì)量好壞在質(zhì)量評審中使用度量源元時,相互的關(guān)聯(lián)是最重要的度量元度量元是軟件度量的基礎(chǔ),就象“米”是對長度的度量質(zhì)量評審–代碼評價度量清晰性系統(tǒng)的可理解性如何可維護性軟件的可維護性如何?可測試性對系統(tǒng)進行測試需要多少工作?質(zhì)量評審–代碼評價度量清晰性可維護性可測試性復雜度度量控制流結(jié)點圈復雜度基本結(jié)點和基本圈復雜度循環(huán)嵌套函數(shù)扇入和扇出不可達性復雜度度量控制流結(jié)點結(jié)點分類跳轉(zhuǎn)分為下列幾類:向上(向后)跳轉(zhuǎn)向下(向前)跳轉(zhuǎn)結(jié)點根據(jù)跳轉(zhuǎn)類型可以分為:下-下結(jié)點上-下結(jié)點上-上結(jié)點153421534215342結(jié)點分類跳轉(zhuǎn)分為下列幾類:153421534215342引起結(jié)點的C結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點: for while switch可利用基本結(jié)點度量消除這些局限性引起結(jié)點的C結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:引起結(jié)點的Ada結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:
IFTHENELSE CASE GOTO Exceptions可利用基本結(jié)點度量消除這些局限性引起結(jié)點的Ada結(jié)構(gòu)下列編程結(jié)構(gòu)會引起結(jié)點:圈復雜度從有向圖G,計算圈復雜度V(G):
V(G)=No.edges(邊數(shù))-No.nodes(節(jié)點數(shù))+2這樣也正確: V(G)=No.predicates(判定節(jié)點數(shù))+1Case結(jié)構(gòu)(有N種選擇)是個例外,計算為N–1 V(G)=No.regions(區(qū)域數(shù))假如G是個連接的平面圖圈復雜度從有向圖G,計算圈復雜度V(G):圈復雜度例子12條邊9個節(jié)點VG=12-9+2=5145236789123456789101112圈復雜度例子145236789123456789101112圈復雜度例子3個判定結(jié)點計算為4case計算為2VG=4+1=53-111圈復雜度例子3-111圈復雜度例子5個區(qū)域VG=532451圈復雜度例子32451結(jié)點和圈復雜度13245此有向圖可表示為右邊兩種程序結(jié)構(gòu)。1452315342V(G)=6-5+2=3V(G)=6-5+2=3Knots=4Knots=1結(jié)點和圈復雜度13245此有向圖可表示為右邊兩種程序結(jié)構(gòu)。1結(jié)點和圈復雜度圈復雜度和結(jié)點度量是互補的兩個指標總之,程序結(jié)構(gòu)化度量量化了軟件的屬性圈復雜度用于表明程序復雜性結(jié)點度量用于表明程序?qū)嵤r附加的復雜性
結(jié)點和圈復雜度圈復雜度和結(jié)點度量是互補的兩個指標循環(huán)的復雜性度量
由流程圖研究源代碼的循環(huán)結(jié)構(gòu)用于度量復雜性和代碼優(yōu)化識別循環(huán)結(jié)構(gòu)不被源代碼結(jié)構(gòu)所影響函數(shù)度量:函數(shù)入口和出口(扇入扇出)循環(huán)總數(shù)循環(huán)最大深度循環(huán)的復雜性度量由流程圖研究源代碼的循環(huán)結(jié)構(gòu)C++OO實現(xiàn)類的數(shù)目子類的數(shù)目每個類的方法繼承深度數(shù)據(jù)成員的數(shù)據(jù)類外的函數(shù)調(diào)用其他Chidamber和Kemerer度量C++OO實現(xiàn)類的數(shù)目程序結(jié)構(gòu)化驗證程序結(jié)構(gòu)化驗證程序結(jié)構(gòu)化驗證通過匹配程序結(jié)構(gòu)模版執(zhí)行結(jié)構(gòu)化驗證,模版使用源代碼基本塊的流程圖表示使用檢查工具自動運行檢查下列結(jié)構(gòu):if-then-endifif-then-else-endifdo-whilewhileforcase可配置成識別其他結(jié)構(gòu)程序結(jié)構(gòu)化驗證通過匹配程序結(jié)構(gòu)模版執(zhí)行結(jié)構(gòu)化驗證,模版使用源程序結(jié)構(gòu)化確認由于使用非正確的結(jié)構(gòu)形式,C語言非常容易產(chǎn)生錯誤:需要
switch,case,default和break語句的case語句if-then語句也容易產(chǎn)生錯誤for循環(huán)結(jié)構(gòu)也容易產(chǎn)生錯誤程序結(jié)構(gòu)化確認由于使用非正確的結(jié)構(gòu)形式,C語言非常容易產(chǎn)生SPV建議如果檢測到非結(jié)構(gòu)化的代碼,這部分代碼應該由程序員重新編寫,這不包括為了解決某些特殊問題而有意使用的非結(jié)構(gòu)化編程除了允許以修改非結(jié)構(gòu)化程序會帶來不必要的復雜為理由以外,建議管理者可以先懷疑任何非結(jié)構(gòu)化編程的使用流程圖看起來很混亂,并不總是意味著代碼是非結(jié)構(gòu)化的。繪制流程圖的算法可能會誤導程序是高度復雜的通常程序的非結(jié)構(gòu)化是由于代碼內(nèi)部錯誤引起的SPV建議如果檢測到非結(jié)構(gòu)化的代碼,這部分代碼應該由程序員重SPV流程圖SPV流程圖,圖形化地顯示設計良好的程序結(jié)構(gòu)中節(jié)點的化簡過程SPV流程圖SPV流程圖,圖形化地顯示設計良好的程序結(jié)構(gòu)中節(jié)代碼評審流程圖
代碼評審流程圖 基本結(jié)點度量將所有的結(jié)構(gòu)化的程序結(jié)構(gòu)進行化簡后,計算剩余的節(jié)點數(shù)就得到基本結(jié)點度量對于一個結(jié)構(gòu)化的程序:基本結(jié)點數(shù)=0基本結(jié)點是非結(jié)構(gòu)化程序引起的復雜性的度量基本結(jié)點度量將所有的結(jié)構(gòu)化的程序結(jié)構(gòu)進行化簡后,計算剩余的節(jié)基本圈復雜度某些結(jié)構(gòu)化的編程結(jié)構(gòu)會引起很高的圈復雜度這個局限性可用基本度量克服定義:EV(G)=V(G)-M
這里M是有唯一入口和出口節(jié)點的子圖G的數(shù)目對于一個結(jié)構(gòu)化的程序:EV(G)=1基本圈復雜度某些結(jié)構(gòu)化的編程結(jié)構(gòu)會引起很高的圈復雜度SPV度量總結(jié)如果一個模塊通過SPV化簡之后是結(jié)構(gòu)化的,它有:基本結(jié)點為0基本圈復雜度為1非結(jié)構(gòu)化的程序含有很高的基本度量值
這兩個度量是對代碼中存在的結(jié)構(gòu)缺陷的度量SPV度量總結(jié)如果一個模塊通過SPV化簡之后是結(jié)構(gòu)化的,它有復雜度分析標準復雜度分析標準違反情況位于代碼評審報告中用于強制源代碼執(zhí)行特定的質(zhì)量特性1C CyclomaticComplexitygreaterthan***2C Procedureisnotreducibleintermsofintervals3C Procedurecontainsessentialknots4C Procedureisnotstructured5C Procedurecontainsinfiniteloop復雜度分析標準復雜度分析標準違反情況LCSAJs
線性代碼序列及跳轉(zhuǎn)LCSAJs
線性代碼序列及跳轉(zhuǎn)LCSAJs維護性度量指標檢測不可達代碼識別不可測試(或不合理)代碼強制用于歐洲安全苛刻性軍用航空電子項目路徑測試的覆蓋度量基礎(chǔ)最高級別的代碼覆蓋率度量LCSAJs維護性度量指標LCSAJ三要素根據(jù)定義和LDRA的代碼重格式化策略,LCSAJs能描述成三要素的形式:1. 起始點 [一個線性代碼序列]2. 結(jié)束點3. 目標點LCSAJ三要素根據(jù)定義和LDRA的代碼重格式化策略,LCSLCSAJ起始點LCSAJs開始于:程序的第一行可執(zhí)行代碼A的第一行可執(zhí)行代碼,A可以是:功能程序方法…任何控制流跳轉(zhuǎn)的目標行:標號else語句endif語句switch語句的子句循環(huán)函數(shù)調(diào)用的返回...LCSAJ起始點LCSAJs開始于:LCSAJ跨度
LCSAJ跨度是程序中的最小分割,任何LCSAJ的線型代碼序列都完全包含在LCSAJ的跨度中 LCSAJ跨度的第一行可以是程序的開始,或者是前面的LCSAJ序列不能到達的那一行 LCSAJ跨度的終止行可以是程序的結(jié)束行,或者是控制流不能經(jīng)過其下一行的代碼行SpanFINISH82else1------------------------------------------------------------------------START83{184mess="HelloThere";185}1START86}2START87}3START88printf("%d%d%d%20s\n",i,j,k,mess);4FINISH89}4------------------------------------------------------------------------STARTFINISH90}1LCSAJ跨度 LCSAJ跨度是程序中的最小分割,任何LCSLCSAJ密度LCSAJ密度是維護性度量元如果某一行代碼作了修改,LCSAJ密度會告訴用戶由于此代碼修改影響到多少條LCSAJ如果密度越高,那么就越會降低對于所有的LCSAJ此改變都是正確的信心,因此必須增加需要的回歸測試數(shù)目Code
“LCSAJ”Lines Densitya=b 2if 2(a==x) 2{ 1b=y; 1} 1print(“ok”); 2LCSAJ密度LCSAJ密度是維護性度量元Code “LC不可達的LCSAJs如果從程序開始沒有任何路徑到達指定的代碼行,那么代碼將被標為不可達(或死代碼)這種現(xiàn)象通常出現(xiàn)在緊跟著goto語句的代碼行中,典型例子如右面最后一行代碼不可達的LCSAJs標記顯示在下面的例子中
ifI=0thengotolabel:endif;
FINISH235gotol6;2---------------------------------------------------------------------236z=5;0UNREACHABLE*****237z=9;0UNREACHABLE*****START238l6:1239z=10;1FINISH240}1不可達的LCSAJs如果從程序開始沒有任何路徑到達指定的代碼不可測試的LCSAJsLCSAJ是一路徑片段,通常在它的線性代碼序列中包含許多條件
如果LCSAJ的執(zhí)行依賴于程序中的某些條件,而且永遠不會滿足這些條件,那么LCSAJ可能是不可測試的(因此是不可執(zhí)行的)不可測試的LCSAJsLCSAJ是一路徑片段,通常在它的線性LCSAJ報告總結(jié)部分詳細的代碼清單:LCSAJs出現(xiàn)的地方源代碼內(nèi)的位置LCSAJ三要素列表
不可達的LCSAJs列表通過追蹤局部的控制流分支,任何不可達的代碼都會在報告中著重顯示LCSAJ報告總結(jié)部分LCSAJ(路徑測試)流程圖
LCSAJ(路徑測試)流程圖 質(zhì)量評審報告質(zhì)量評審報告度量的解釋像大多數(shù)其他的物理度量一樣,度量的大小并不能表明事物的好或者壞通常認為最好要保證函數(shù)符合這樣的度量,這增加了程序的可讀性和可維護性度量的解釋像大多數(shù)其他的物理度量一樣,度量的大小并不能表明事質(zhì)量評審報告顯示復雜度度量和源代碼的信息
顯示函數(shù)級別的復雜度度量和整體源代碼的復雜度度量
許多結(jié)果也能夠以圖形化的方式顯示可用的度量包括:圈復雜度度量源代碼基本塊結(jié)點度量
函數(shù)的入口出口循環(huán)數(shù)目和嵌套深度程序結(jié)構(gòu)化驗證質(zhì)量評審報告顯示復雜度度量和源代碼的信息可用的度量包括:質(zhì)量評審報告質(zhì)量評審報告質(zhì)量評審-質(zhì)量模型質(zhì)量評審-質(zhì)量模型質(zhì)量評審報告
ReformattedCodeInformationforFileTotalreformattedLines,Totalcommentsinref.Code,Executableref.Lines,Non-executableref.Lines
NumberofProcedures,TotalsourceLines,ExpansionFactor.
CommentsAssociatedwithProcedures(%oftotal)TotalComments,CommentsinHeaders,Com
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《誠信管理》課件
- 《證券投資操作教程》課件
- 《病毒營銷的應用》課件
- 《纖維植物資源》課件
- 單位管理制度合并選集【職工管理】十篇
- 2024標準工程委托合同(28篇)
- 單位管理制度范例選集員工管理篇
- 《監(jiān)理對現(xiàn)場消防安》課件
- 《家庭財富管理》課件
- 《中醫(yī)婦科學》課程標準
- 血常規(guī)報告單
- 寶寶大便觀察及護理課件
- 學校最小應急單元應急預案
- 一年級第一學期口算題(20以內(nèi)口算天天練-15份各100題精確排版)
- 公司月度安全生產(chǎn)綜合檢查表
- 重慶市康德卷2023-2024學年物理高二上期末綜合測試試題含解析
- (銀川市直部門之間交流)2022事業(yè)單位工作人員調(diào)動表
- 七年級音樂下冊 第4單元《北京喜訊到邊寨》課件1 花城版
- 飛行員獻身國防志愿書1000字
- 瓷磚采購投標方案
- 世界國家地區(qū)區(qū)域劃分 Excel對照表 簡
評論
0/150
提交評論