| 在硬件的可靠性設(shè)計中,有一條基本原則“簡單就是可靠”。這個原則同樣也適合軟件,與功能的增多或增強相伴的是不斷升級與補丁,F(xiàn)在已經(jīng)有若干種軟件復(fù)雜性的度量方法可供參考,其中McCabe QA是比較出色和實用的方法,它能夠計算出多種軟件復(fù)雜度,由此可對軟件進行檢查、分析和查明那些可能導(dǎo)致錯誤的代碼。 復(fù)雜度 70年代,軟件系統(tǒng)已經(jīng)變得極其復(fù)雜,無論是開發(fā)還是維護都是一項成本高昂的工作。人們意識到必須使軟件模塊化,以便于開發(fā)、測試和維護。為此,成立于1976的McCabe&Associates公司開發(fā)出了McCabe Cyclomatic Complexity Metric(圈復(fù)雜度)技術(shù)對軟件進行結(jié)構(gòu)測試。Metric以軟件復(fù)雜度測量的數(shù)目為基礎(chǔ),能幫助工程師識別難于測試和維護的模塊,圈復(fù)雜度已經(jīng)成為評估軟件質(zhì)量的一個重要標(biāo)準(zhǔn)。人們可以用圈復(fù)雜度對軟件的復(fù)雜度和質(zhì)量進行衡量,來安排工程進度,在成本、進度和性能之間尋求平衡。 復(fù)雜度的種類 有模塊、類和程序三類復(fù)雜度。模塊復(fù)雜度包含了關(guān)于模塊的復(fù)雜度信息;類復(fù)雜度是針對那些使用McCabe面向?qū)ο筇匦缘某绦?它包含了關(guān)于類的復(fù)雜度信息;程序復(fù)雜度包含了關(guān)于程序的復(fù)雜度信息。 集成復(fù)雜度報告 對應(yīng)于三種復(fù)雜度的是三種復(fù)雜度報告。如果一個報告的復(fù)雜度信息不只一種,那么就把這些復(fù)雜度信息組合成新的報告。 集成復(fù)雜度信息只收集一個部件及其下級的信息。例如:如果一個程序級報告包含一個類復(fù)雜度,那么只報告組成程序的類的信息,而不包含類組成的信息。 McCabe復(fù)雜度 McCabe復(fù)雜度是對軟件結(jié)構(gòu)進行嚴(yán)格的算術(shù)分析得來的,實質(zhì)上是對程序拓撲結(jié)構(gòu)復(fù)雜性的度量,明確指出了任務(wù)復(fù)雜部分。McCabe復(fù)雜度包括:圈復(fù)雜度、基本復(fù)雜度、模塊設(shè)計復(fù)雜度、設(shè)計復(fù)雜度、集成復(fù)雜度、行數(shù)、規(guī)范化復(fù)雜度、全局?jǐn)?shù)據(jù)復(fù)雜度、局部數(shù)據(jù)復(fù)雜度、病態(tài)數(shù)據(jù)復(fù)雜度。 McCabe復(fù)雜度的用途 在軟件工程中,有三種使用McCabe復(fù)雜性度量的方式。 作為測試的輔助工具。McCabe復(fù)雜性度量的結(jié)果等于通過一個子程序的路徑數(shù),因而需要設(shè)計同樣多的測試案例以覆蓋所有的路徑。如果測試案例數(shù)小于復(fù)雜性數(shù),則有三種情況一是需要更多的測試;二是某些判斷點可以去掉;三是某些判斷點可用插入式代碼替換。 作為程序設(shè)計和管理指南。在軟件開發(fā)中,需要一種簡單的方式指出可能出問題的子程序。保持子程序簡單的通用方法是設(shè)置一個長度限制,例如50行或2頁,但這實際上是在缺乏測試簡明性的有效方法時無可奈何的替代方法。不少人認為McCabe度量就是這樣一種簡明性度量。但是要注意,McCabe度量數(shù)大的程序,不見得結(jié)構(gòu)化就不好。例如,Case語句是良結(jié)構(gòu)的,但可能有很大的McCabe度量數(shù)(依賴于語句中的分支數(shù)),這可能是由于問題和解決方案所固有的復(fù)雜性所決定的。使用者應(yīng)當(dāng)自己決定如何使用McCabe度量所提供的信息。 作為網(wǎng)絡(luò)復(fù)雜性度量的一種方法。Hall和Preiser提出了一種組合網(wǎng)絡(luò)復(fù)雜性度量,用于度量可能由多個程序員組按模塊化原理建立的大型軟件系統(tǒng)的復(fù)雜性。他們提出的組合度量公式為 式中 C1,...,Ck是各個模塊的復(fù)雜性;CN是網(wǎng)絡(luò)復(fù)雜性;W1和W2為權(quán)值。 McCabe復(fù)雜度即可用于度量各個模塊的復(fù)雜性,也可用于度量網(wǎng)絡(luò)復(fù)雜性。 Cyclomatic Complexity (v(G))圈復(fù)雜度 圈復(fù)雜度是用來衡量一個模塊判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為獨立路徑的條數(shù),即合理的預(yù)防錯誤所需測試的最少路徑條數(shù),圈復(fù)雜度大說明程序代碼可能質(zhì)量低且難于測試和維護,經(jīng)驗表明,程序的可能錯誤和高的圈復(fù)雜度有著很大關(guān)系。 計算方法 節(jié)點是程序中代碼的最小單元,邊代表節(jié)點間的程序流。如果一個模塊流程圖有e條邊n個節(jié)點,它的圈復(fù)雜度V(G)=e-n+2,典型的V(G)max=10。圖1中示例的圈復(fù)雜度是2。 優(yōu)點 避免軟件中的錯誤傾向;指出極復(fù)雜模塊,這樣的模塊也許可以進一步細化;度量測試計劃,確定測試重點;在開發(fā)過程中通過限制程序邏輯,指導(dǎo)測試過程;指出將要測試的區(qū)域;幫助測試人員確定測試和維護對象;與所用的高級程序設(shè)計語言類型無關(guān)。 應(yīng)用 圈復(fù)雜度指出為了確保軟件質(zhì)量應(yīng)該檢測的最少基本路徑的數(shù)目。在實際中,測試每一條路經(jīng)是不現(xiàn)實的,測試難度隨著路徑的增加而增加。但測試基本路徑對衡量代碼復(fù)雜度的合理性是很必要的。McCabe & Associates建議圈復(fù)雜度到10,因為高的圈復(fù)雜度使測試變得更加復(fù)雜而且增大了軟件錯誤產(chǎn)生的概率。 提示: 圈復(fù)雜度度量是測量在一個軟件模塊中的分 |