軟體品質之道:SourceMonitor,之道sourcemonitor

來源:互聯網
上載者:User

軟體品質之道:SourceMonitor,之道sourcemonitor

有些事非做不可,並非為了幸福,而是緩解痛苦,因為不做,則更痛苦——這便是無奈。

夏中義 《文心獨白》

 

1 引子

部落格又有一陣子沒更新了,最近認真思考了阿里上市的成功之處:選擇和堅持。其實人生並沒有絕對的對與錯,也沒有絕對的成功與失敗。正如“有些人活著,他已經死了”云云,我總是拿對與錯來讓自己選擇,其實就是根本的錯誤。決定走一條路,就繼續走下去,終點雖然不知道在哪裡,那就盡情享受沿途的風景,以及珍惜與身邊的陪伴著的人的分分鐘鐘!

扯得有點遠,迴歸主題。之前討論了軟體品質之道的各個方面,但是也都是一些虛話,達不到真正的目的。既然如此,還不如針對上一篇文章結尾部分的流程圖的每個部分,進行詳細的描述,達到人人可用的效果,使之發揚光大。

循序漸進,首先先說一下各個工具的用途以及使用方法,然後再說明如何用Ant進行管理,最後再統一加到CruiseControl中進行調度。

 

2 SourceMonitor簡介

SourceMonitor是一款免費的軟體,運行在Windows平台下。它可對多種語言寫就的代碼進行度量,包括C、C++、C#、Java、VB、Delphi和HTML,並且針對不同的語言,輸出不同的程式碼度量值。

像其他程式碼度量工具一樣,SourceMonitor只關注代碼,並為編碼人員提供及時的反饋,它不是一款專案管理工具,不關注項目實施中從功能分析到設計編碼,再到測試這整個過程。

SourceMonitor只是一個“度量”工具,但是通過基本的度量,可以從代碼錶面層次發現一些根本的,基礎的問題,所以將其作為介紹的第一個工具,也應當成為最基礎的一個工具來為軟體品質把關。

 

3 SourceMonitor度量值

說到SourceMonitor的度量,對於不同的語言提供不同方面的度量,這裡僅針對C++進行介紹,其提供了以下幾方面的度量。(關於其他語言,請參考SourceMonitor的協助文檔Explanation of Language Metrics章節)

1. 總行數(Lines)

包括空行在內的程式碼數。

2. 語句數(Statements)

在C++中,語句是以分號結尾的。分支語句if,迴圈語句for、while,跳躍陳述式goto都被計算在內,預先處理語句#include、#define和#undef也被計算在內,對其他的預先處理語句則不作計算,在#else和#endif、#elif和#endif之間的語句將被忽略。

3. 分支語句比例(Percent Branch Statements)

該值表示分支語句占語句數目的比例,這裡的“分支語句”指的是使程式不順序執行的語句,包括if、else、for、while、break、continue、goto、switch、case、default和return。需要注意的是,do不被計算在內,因為其對應的while已經計算了。另外,異常處理的catch也被作為一個分支計算。

4. 注釋比例(Percent Lines with Comments)

該值指示注釋行(包括/*……*/和//……形式的注釋)佔總行數的比例。一般公司會對每個文檔的header或者footer部分進行特殊的聲明注釋,可以再工程屬性中設定過濾,不計算在內。

5. 類個數(Classes)

包括class,struct和template在內的個數。

6. 平均每個類方法數(Methods per Class)

平均每個類的方法數,即包括內聯和非內聯的,template函數在內的類方法數除以所有類的個數。

7. 函數個數(Functions)

所有函數的個數。

8. 平均每個函數包含的語句數目(Average Statements per Method)

總的函數語句數目除以函數數目得到該值。

9. 函數循環複雜度(Function Complexity)

循環複雜度指示一個函數可執行路徑的數目,以下語句為循環複雜度的值貢獻1:if/else/for/while語句,三元運算子語句,if/for/while判斷條件中的"&&"或“||”,switch語句,後接break/goto/ return/throw/continue語句的case語句,catch/except語句等。對應有最大循環複雜度(Max Complexity)和平均循環複雜度(Avg Complexity)。

10. 函數深度(Block Depth)

函數深度指示函數中分支嵌套的層數。對應有最大深度(Max Depth)和平均深度(Avg Depth)。

 

4 SourceMonitor實戰

下面介紹如何使用SourceMonitor建立工程,針對不同的Solution活著Project建立Checkpoint。

1. 安裝SourceMonitor,這個不詳細介紹,下載安裝即可。

2. 開啟SourceMonitor,建立工程。


3. 選擇語言,並點擊下一步。


4. 為當前工程命名,並選擇工程檔案儲存路徑。


5. 選擇當前工程要度量解析的檔案,可以通過設定檔列表(XML)或者指定路徑自動搜尋方式添加。


6. 選擇相關的配置,可以直接下一步忽略,如果有相關需要進行選擇設定。



7. 指定當前Checkpoint的名稱。


8. 查看配置項,並確定。


9. 確認要度量的檔案清單。


10. 工程建立完畢,並完成第一個度量點。


11. 雙擊檢查點,查看各個檔案的度量值。


12. 雙擊某個檔案,查看詳細資料。


這樣,基本的一個工程就建立完畢了,其他的功能,例如設定各個指標的預設值,大家可以自己嘗試一下。

 

5 配置SourceMonitor到編輯器內

由於SourceMonitor是程式碼度量最基礎的一個模組,所以每個程式員都可能會將其作為代碼評測的一個常用功能項添加到熟悉的編輯器中。這樣每寫完一段代碼,都可以執行檢測一下當前檔案是否滿足度量指標。


5.1 Visual Studio設定

1. 設定外部工具。


2. 添加並配置選項


Title: SourceMonitor

Command: 安裝SourceMonitor的目錄

Arguments: /DC++ $(ItemPath)

Initial directory: $(SolutionPath)

3. 添加快速鍵


選擇剛才添加SourceMonitor是ExternalTools裡面第幾個,例如說我剛才添加的位置為第六個,則選擇Command6,並指定快速鍵(我預設指定為Alt + 1,這個根據個人喜好來,但是盡量別造成快速鍵衝突)。


4. 開啟某個檔案,按快速鍵執行SourceMonitor,結果就顯示出來了。



5.2 UltraEdit設定

由於很多公司都會開發二次語言,來適合自己工具的使用。這種語言可能跟C或者某些語言很相似,但是用Visual Studio這種龐大的工具來開啟,效率不是很高,所以有可能選擇使用一些輕量級的編輯器,例如說UltraEdit這種,那麼添加方法跟Visual Studio類似,如下。

1. 工具列配置添加新工具。


2. 進行參數設定


名稱: SourceMonitor

命令列: "D:\SourceMonitor\SourceMonitor.exe" /DC++"%f"

工作目錄: %p

3. 點擊執行,或者通過快速鍵執行。

 

5.3 其他工具設定

如果使用其他工具,則可以參考工具的協助文檔,修改/DC++後的檔案名稱參數以及工作目錄參數即可。

 

6 進一步思考

又到了最後關鍵的一步了,談一下近期的一些感悟吧。有些事情不瞭解的時候,總會從消極的角度的方面去考慮問題。

例如說,以前我對多線程不是很瞭解,我便會極力的保護自己“不懂多線程”這個缺點,從而去從消極的角度及方面評判多線程。但是最近處理大規模資料檔案時(大概2000萬個以上),我卻深深的體會到了多線程的各個方面的優勢,也學會了更多的知識,雖然也寫出了讓大牛們嘲笑的“自旋鎖”代碼,看過《Imperfect C++》關於多線程的那一節後,立馬臉紅了,利用周末的時間,徹底修改了這個“問題”。

另外,再接觸這方面的知識時,就會從不同的角度上去理解及思考,也發現了更多更有趣的內容,例如怎麼用C++11的非同步,把介面和處理扔到不同的線程中去,又怎樣把Log扔到對應的Log列印視窗中去,真是其樂無窮啊。

上周末,又看了一遍《星際寶貝》,也總結了最近各個不盡人意的方面,發現自己以前實在是太過自我為中心,有很多問題不知道從自己找原因,而不斷的責備別人(真心的對被我傷害的人說聲對不起)。還是應該時時刻刻警醒自己,如果“壞蛋”成分要滿了,那就暫時放下所有的事,“治療”好了再繼續,不要因為自己而犯錯!



sourceMonitor怎使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.