摘要:由于重點是要降低你需要在頭腦中同時考慮的項目的數量,所以降低一個給定子程序的復雜度是有價值的。應該把決策點的數量當作一個警示,該警示說明你的某個子程序可能需要重新設計了。
在 PHP 程序中,類、方法(子程序)、函數是最常見的形態,在平時的編程里開發者時常會對代碼的復雜度做度量,簡潔抑或復雜,都是自己憑著主觀意識來評判,經驗豐富的開發者可能會有自己的評判標準,但一些經驗尚淺的開發者寫出來的代碼可能在 Code Review 階段就得返修幾次,因為他們還沒有能對自己的代碼進行質量評測的能力,或者說沒有可以量化的標準給他們參考,那么量化的參考標準是什么呢?
《代碼大全》458頁中有提到一個方法可以幫助開發者度量代碼的復雜度,此方法最先由 Tom McCabe 提出,通過計算子程序中“決策點”的數量來衡量復雜度,步驟如下:
從 1 開始,一直往下通過程序;
一旦遇到以下關鍵字,或者其同類的詞,就加1;(if、while、for、foreach、and、or、&&、||)
給 case 語句中的每一種情況加 1;
舉個例子:
if ((status && done) || (notDone && (numLines >= maxLines))) { // code … }
在這段代碼中,從 1 算起,遇到 if 得 2,&& 得 3,|| 得4,&& 得 5。加起來,這段代碼里總共包含了 5 個決策點。
如何處理復雜度的度量結果計算出決策點的數量以后,你就可以用得到的數值分析你寫的子程序的復雜度了:
0-5 子程序還不錯;
6-10 得想辦法簡化子程序了;
10+ 把子程序的某一部分拆分成另一個子程序并調用它;
把子程序的一部分提取成另一個子程序,不會降低整個程序的復雜度,只是把決策點移到其他地方,但是這樣做可以降低你在同一時間必須關注的復雜度水平。由于重點是要降低你需要在頭腦中同時考慮的項目的數量,所以降低一個給定子程序的復雜度是有價值的。
10 個決策點的上限并不是絕對的。應該把決策點的數量當作一個警示,該警示說明你的某個子程序可能需要重新設計了。
這個方法不是通用的標準,它是可以靈活變通的,上面也提到,決策點的數量不是絕對的,只是一個參考和警示,具體的還得看子程序的邏輯需求,不要死守這個規則。一條情況很多的 case 語句可能會包含超過 10 個的元素。如果硬拆開它可能就是很愚蠢的,這取決于該 case 語句的用途。
還沒有總結出測量標準的開發者可以借鑒下McCabe 的測量方法,相信它能很好的幫助你控制好你的代碼質量。
擴展其他的度量方法:
所用的數據量;
控制結構中的嵌套層數;
代碼行數;
對同一變量的先后引用之間的代碼行數(跨度);
變量生存的代碼行數(生存期);
以及輸入和輸出的量;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21840.html
摘要:設計方案的容易改變這就是所謂的軟件構建的可維護性,可擴展性和靈活性。這也可能表明類型或方法可能難以維護。基于源代碼中不同運算符和操作數的數量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護和演變可維護性度量模塊化設計和模塊化原則OO設計原則:SOLIDOO設計原則:GRASP總結 軟件維護和演變 什么是軟件維護? 軟件工程中的軟件維護是交付后修改軟件產品以糾正故障...
摘要:大綱什么是軟件復用如何衡量可復用性可復用組件的級別和形態源代碼級別復用模塊級別的復用類抽象類接口庫級別的復用包系統級別的復用框架對可復用性的外部觀察類型變化例行分組實施變更代表獨立分解常見行為總結什么是軟件復用軟件復用軟件復用是使用現有軟件 大綱 什么是軟件復用?如何衡量可復用性?可復用組件的級別和形態 源代碼級別復用 模塊級別的復用:類/抽象類/接口 庫級別的復用:API /包 系...
閱讀 1165·2023-04-26 01:35
閱讀 2558·2021-11-02 14:44
閱讀 7682·2021-09-22 15:38
閱讀 2242·2021-09-06 15:11
閱讀 3728·2019-08-30 15:53
閱讀 837·2019-08-29 16:54
閱讀 667·2019-08-26 13:48
閱讀 1780·2019-08-26 13:47