成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何度量程序的復(fù)雜度

Kosmos / 790人閱讀

摘要:由于重點(diǎn)是要降低你需要在頭腦中同時(shí)考慮的項(xiàng)目的數(shù)量,所以降低一個(gè)給定子程序的復(fù)雜度是有價(jià)值的。應(yīng)該把決策點(diǎn)的數(shù)量當(dāng)作一個(gè)警示,該警示說明你的某個(gè)子程序可能需要重新設(shè)計(jì)了。

在 PHP 程序中,類、方法(子程序)、函數(shù)是最常見的形態(tài),在平時(shí)的編程里開發(fā)者時(shí)常會(huì)對(duì)代碼的復(fù)雜度做度量,簡(jiǎn)潔抑或復(fù)雜,都是自己憑著主觀意識(shí)來評(píng)判,經(jīng)驗(yàn)豐富的開發(fā)者可能會(huì)有自己的評(píng)判標(biāo)準(zhǔn),但一些經(jīng)驗(yàn)尚淺的開發(fā)者寫出來的代碼可能在 Code Review 階段就得返修幾次,因?yàn)樗麄冞€沒有能對(duì)自己的代碼進(jìn)行質(zhì)量評(píng)測(cè)的能力,或者說沒有可以量化的標(biāo)準(zhǔn)給他們參考,那么量化的參考標(biāo)準(zhǔn)是什么呢?

《代碼大全》458頁(yè)中有提到一個(gè)方法可以幫助開發(fā)者度量代碼的復(fù)雜度,此方法最先由 Tom McCabe 提出,通過計(jì)算子程序中“決策點(diǎn)”的數(shù)量來衡量復(fù)雜度,步驟如下:

從 1 開始,一直往下通過程序;

一旦遇到以下關(guān)鍵字,或者其同類的詞,就加1;(if、while、for、foreach、and、or、&&、||)

給 case 語句中的每一種情況加 1;

舉個(gè)例子:

if ((status && done) || (notDone && (numLines >= maxLines))) {
    // code … 
}

在這段代碼中,從 1 算起,遇到 if 得 2,&& 得 3,|| 得4,&& 得 5。加起來,這段代碼里總共包含了 5 個(gè)決策點(diǎn)。

如何處理復(fù)雜度的度量結(jié)果

計(jì)算出決策點(diǎn)的數(shù)量以后,你就可以用得到的數(shù)值分析你寫的子程序的復(fù)雜度了:

0-5 子程序還不錯(cuò);

6-10 得想辦法簡(jiǎn)化子程序了;

10+ 把子程序的某一部分拆分成另一個(gè)子程序并調(diào)用它;

把子程序的一部分提取成另一個(gè)子程序,不會(huì)降低整個(gè)程序的復(fù)雜度,只是把決策點(diǎn)移到其他地方,但是這樣做可以降低你在同一時(shí)間必須關(guān)注的復(fù)雜度水平。由于重點(diǎn)是要降低你需要在頭腦中同時(shí)考慮的項(xiàng)目的數(shù)量,所以降低一個(gè)給定子程序的復(fù)雜度是有價(jià)值的。

10 個(gè)決策點(diǎn)的上限并不是絕對(duì)的。應(yīng)該把決策點(diǎn)的數(shù)量當(dāng)作一個(gè)警示,該警示說明你的某個(gè)子程序可能需要重新設(shè)計(jì)了。

這個(gè)方法不是通用的標(biāo)準(zhǔn),它是可以靈活變通的,上面也提到,決策點(diǎn)的數(shù)量不是絕對(duì)的,只是一個(gè)參考和警示,具體的還得看子程序的邏輯需求,不要死守這個(gè)規(guī)則。一條情況很多的 case 語句可能會(huì)包含超過 10 個(gè)的元素。如果硬拆開它可能就是很愚蠢的,這取決于該 case 語句的用途。

還沒有總結(jié)出測(cè)量標(biāo)準(zhǔn)的開發(fā)者可以借鑒下McCabe 的測(cè)量方法,相信它能很好的幫助你控制好你的代碼質(zhì)量。

擴(kuò)展

其他的度量方法:

所用的數(shù)據(jù)量;

控制結(jié)構(gòu)中的嵌套層數(shù);

代碼行數(shù);

對(duì)同一變量的先后引用之間的代碼行數(shù)(跨度);

變量生存的代碼行數(shù)(生存期);

以及輸入和輸出的量;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21840.html

相關(guān)文章

  • 第6章:可維護(hù)性軟件構(gòu)建方法 6.1可維護(hù)性度量和構(gòu)造原則

    摘要:設(shè)計(jì)方案的容易改變這就是所謂的軟件構(gòu)建的可維護(hù)性,可擴(kuò)展性和靈活性。這也可能表明類型或方法可能難以維護(hù)?;谠创a中不同運(yùn)算符和操作數(shù)的數(shù)量的合成度量。對(duì)修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護(hù)和演變可維護(hù)性度量模塊化設(shè)計(jì)和模塊化原則OO設(shè)計(jì)原則:SOLIDOO設(shè)計(jì)原則:GRASP總結(jié) 軟件維護(hù)和演變 什么是軟件維護(hù)? 軟件工程中的軟件維護(hù)是交付后修改軟件產(chǎn)品以糾正故障...

    chanjarster 評(píng)論0 收藏0
  • 第5章:可復(fù)用性軟件構(gòu)建方法 5.1可復(fù)用性度量,形態(tài)和外部觀察

    摘要:大綱什么是軟件復(fù)用如何衡量可復(fù)用性可復(fù)用組件的級(jí)別和形態(tài)源代碼級(jí)別復(fù)用模塊級(jí)別的復(fù)用類抽象類接口庫(kù)級(jí)別的復(fù)用包系統(tǒng)級(jí)別的復(fù)用框架對(duì)可復(fù)用性的外部觀察類型變化例行分組實(shí)施變更代表獨(dú)立分解常見行為總結(jié)什么是軟件復(fù)用軟件復(fù)用軟件復(fù)用是使用現(xiàn)有軟件 大綱 什么是軟件復(fù)用?如何衡量可復(fù)用性?可復(fù)用組件的級(jí)別和形態(tài) 源代碼級(jí)別復(fù)用 模塊級(jí)別的復(fù)用:類/抽象類/接口 庫(kù)級(jí)別的復(fù)用:API /包 系...

    mengera88 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<