軟件復雜性


http://student.zjzk.cn/course_ware/software/txt/txt/show.asp?filename=11_3.txt

11.3 軟件復雜性
11.3.1 軟件復雜性的基本概念
    軟件復雜性度量的參數很多,主要有:
    (1) 規模,即總共的指令數,或源程序行數。
    (2) 難度,通常由程序中出現的操作數的數目所決定的量來表示。
    (3) 結構,通常用於程序結構有關的度量來表示。
    (4) 智能度,即算法的難易程度。
    軟件復雜性主要表現在程序的復雜性。程序的復雜性主要指模塊內程序的復雜性。它直接關聯到軟件開發費用的多少、開發周期長短和軟件內部潛伏錯誤的多少。同時它也是軟件可理解性的另一種度量。
要求復雜性度量滿足以下假設:
    (1) 它可以用來計算任何一個程序的復雜性。
    (2) 對於不合理的程序,例如對於長度動態增長的程序,或者對於原則上無法排錯的程序,不應當使用它進行復雜性計算。
    (3) 如果程序中指令條數、附加存儲量、計算時間增多,不會減少程序的復雜性。
11.3.2 軟件復雜性的度量方法
    1. 代碼行度量法
    度量程序的復雜性,最簡單的方法就是統計程序的源代碼行數。此方法的基本考慮是統計一個程序的源代碼行數,並以源代碼行數作為程序復雜性的質量。
    2. McCabe度量法
    McCabe度量法是由Thomas McCabe提出的一種基於程序控制流的復雜性度量方法。McCabe復雜性度量又稱環路度量。它認為程序的復雜性很大程度上取決於程序的復雜性。單一的順序結構最為簡單,循環和選擇所構成的環路越多,程序就越復雜。這種方法以圖論為工具,先畫出程序圖,然后用該圖的環路數作為程序復雜性的度量值。程序圖是退化的程序流程圖。也就是說,把程序流程圖的每一個處理符號都退化成一個結點,原來連接不同處理符號的流線變成連接不同結點的有向弧,這樣得到的有向圖就叫做程序圖。
程序圖僅描述程序內部的控制流程,完全不表現對數據的具體操作分支和循環的具體條件。因此,它往往把一個簡單的IF語句與循環語句的復雜性看成是一樣的,把嵌套的IF語句與CASE的復雜性看成是一樣的。下面給出計算環路復雜性的方法,如圖11-4所示。

根據圖論,在一個強連通的有向圖G中,環的個數V(G)由以下公式給出:

                     V(G)=m-n+2p

其中,V(G)是有向圖G中環路數,m是圖G中弧數,n是圖G中結點數,p是圖G中強連通分量個數。在一個程序中,從程序圖的入口點總能到達圖中任何一個結點,因此,程序總是連通的,但不是強連通的。為了使圖成為強連通圖,從圖的入口點到出口點加一條用虛線表示的有向邊,使圖成為強連通圖。這樣就可以使用上式計算環路復雜性了。
以圖4-11所給出的例子示范,其中,結點數n=6,弧數m=9,p=1,則有

               V(G=m-n+2p=9-6+2=5

    即McCabe環復雜度度量值為5。這里選擇的5個線形無關環路為(abefa),(beb),(abea),(acfa),(abcfa),其他任何環路都是這5個環路的線形組合。
    當分支或循環的數目增加時,程序中的環路也隨之增加,因此,McCabe環復雜度度量值實際上是為軟件測試的難易程度提供一個定量度量的方法,同時也間接表示了軟件的可靠性。實驗表明,源程序中存在的錯誤數以及為了診斷he 糾正這些錯誤所需要的時間與McCabe環復雜度度量值有明顯的關系。
    利用McCabe環復雜度度量值時,有幾點說明。
   (1) 環路復雜度取決於程序控制結構的復雜度。當程序的分支數目或循環數目時其復雜度也增加。環路復雜度與程序中覆蓋的路徑條數有關。
   (2) 環路復雜度是可增加的。例如,模塊A的復雜度為3,模塊B的復雜度為4,則模塊A與模塊B的復雜度是7。
   (3) McCabe建議,對於復雜度超過10的程序,應分成幾個小程序,以減少程序中的錯誤。
   (4) 這種度量的缺點是:
    ①對於不同種類的控制流的復雜度不能區分。
    ②簡單IF語句與循環語句的復雜性同等看待。
    ③嵌套IF語句與簡單CASE的復雜性是一樣的。
    ④模塊間接口當成一個簡單分支一樣處理。
    ⑤一個具有1000行的順序程序與一行語句的復雜性相同。
    盡管McCabe復雜度度量法有許多缺點,但它容易使用,而且在選擇方案和估計排錯費用等方面都是很有效的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM