有些事非做不可,并不是為了幸福,而是減緩痛苦,由于不做,則更痛苦――這便是無奈。
夏中義 《文心獨白》
博客又有1陣子沒更新了,最近認真思考了阿里上市的成功的地方:選擇和堅持。其實http://www.vxbq.cn/cxrs/并沒有絕對的對與錯,也沒有絕對的成功與失敗。正如“有些人活著,他已死了”云云,我總是拿對與錯來讓自己選擇,其實就是根本的毛病。決定走1條路,就繼續走下去,終點雖然不知道在哪里,那就縱情享受沿途的風景,和珍惜與身旁的陪伴著的人的分分鐘鐘!
扯得有點遠,回歸主題。之前討論了軟件質量之道的各個方面,但是也都是1些虛話,達不到真實的目的。既然如此,還不如針對上1篇文章結尾部份的流程圖的每一個部份,進行詳細的描寫,到達人人可用的效果,使之發揚光大。
按部就班,首先先說1下各個工具的用處和使用方法,然后再說明如何用Ant進行管理,最后再統1加到CruiseControl中進行調度。
SourceMonitor是1款免費的軟件,運行在Windows平臺下。它可對多種語言寫就的代碼進行度量,包括C、C++、C#、Java、VB、Delphi和HTML,并且針對不同的語言,輸出不同的代碼度量值。
像其他代碼度量工具1樣,SourceMonitor只關注代碼,并為編碼人員提供及時的反饋,它不是1款項目管理工具,不關注項目實行中從功能分析到設計編碼,再到測試這全部進程。
SourceMonitor只是1個“度量”工具,但是通過基本的度量,可以從代碼表面層次發現1些根本的,基礎的問題,所以將其作為介紹的第1個工具,也應當做為最基礎的1個工具來為軟件質量把關。
說到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也被作為1個分支計算。
4. 注釋比例(Percent Lines with Comments)
該值唆使注釋行(包括/*……*/和//……情勢的注釋)占總行數的比例。1般公司會對每一個文檔的header或footer部份進行特殊的聲明注釋,可以再工程屬性中設置過濾,不計算在內。
5. 類個數(Classes)
包括class,struct和template在內的個數。
6. 平均每一個類方法數(Methods per Class)
平均每一個類的方法數,即包括內聯和非內聯的,template函數在內的類方法數除以所有類的個數。
7. 函數個數(Functions)
所有函數的個數。
8. 平均每一個函數包括的語句數目(Average Statements per Method)
總的函數語句數目除以函數數目得到該值。
9. 函數圈復雜度(Function Complexity)
圈復雜度唆使1個函數可履行路徑的數目,以下語句為圈復雜度的值貢獻1:if/else/for/while語句,3元運算符語句,if/for/while判斷條件中的"&&"或“||”,switch語句,后接break/goto/ return/throw/continue語句的case語句,catch/except語句等。對應有最大圈復雜度(Max Complexity)和平均圈復雜度(Avg Complexity)。
10. 函數深度(Block Depth)
函數深度唆使函數中分支嵌套的層數。對應有最大深度(Max Depth)和平均深度(Avg Depth)。
下面介紹如何使用SourceMonitor建立工程,針對不同的Solution活著Project建立Checkpoint。
1. 安裝SourceMonitor,這個不詳細介紹,下載安裝便可。
2. 打開SourceMonitor,建立工程。
3. 選擇語言,并點擊下1步。
4. 為當前工程命名,并選擇工程文件保存路徑。
5. 選擇當前工程要度量解析的文件,可以通過配置文件列表(XML)或指定路徑自動搜索方式添加。
6. 選擇相干的配置,可以直接下1步疏忽,如果有相干需要進行選擇設定。
7. 指定當前Checkpoint的名稱。
8. 查看配置項,并肯定。
9. 確認要度量的文件列表。
10. 工程建立終了,并完成第1個度量點。
11. 雙擊檢查點,查看各個文件的度量值。
12. 雙擊某個文件,查看詳細信息。
這樣,基本的1個工程就建立終了了,其他的功能,例如設置各個指標的默許值,大家可以自己嘗試1下。
由于SourceMonitor是代碼度量最基礎的1個模塊,所以每一個http://www.vxbq.cn都可能會將其作為代碼評測的1個經常使用功能項添加到熟習的編輯器中。這樣每寫完1段代碼,都可以履行檢測1下當前文件是不是滿足度量指標。
1. 設置外部工具。
2. 添加并配置選項
Title: SourceMonitor
Command: 安裝SourceMonitor的目錄
Arguments: /DC++ $(ItemPath)
Initial directory: $(SolutionPath)
3. 添加快捷鍵
選擇剛才添加SourceMonitor是ExternalTools里面第幾個,例如說我剛才添加的位置為第6個,則選擇Command6,并指定快捷鍵(我默許指定為Alt + 1,這個根據個人喜好來,但是盡可能別造成快捷鍵沖突)。
4. 打開某個文件,按快捷鍵履行SourceMonitor,結果就顯示出來了。
由于很多公司都會開發2次語言,來合適自己工具的使用。這類語言可能跟C或某些語言很相似,但是用Visual Studio這類龐大的工具來打開,效力不是很高,所以有可能選擇使用1些輕量級的編輯器,例如說UltraEdit這類,那末添加方法跟Visual Studio類似,以下。
1. 工具欄配置添加新工具。
2. 進行參數設置
名稱: SourceMonitor
命令行: "D:SourceMonitorSourceMonitor.exe" /DC++"%f"
工作目錄: %p
3. 點擊履行,或通過快捷鍵履行。
如果使用其他工具,則可以參考工具的幫助文檔,修改/DC++后的文件名稱參數和工作目錄參數便可。
又到了最后關鍵的1步了,談1下近期的1些感悟吧。有些事情不了解的時候,總會從消極的角度的方面去斟酌問題。
例如說,之前我對多線程不是很了解,我便會極力的保護自己“不懂多線程”這個缺點,從而去從消極的角度及方面評判多線程。但是最近處理大范圍數據文件時(大概2000萬個以上),我卻深深的體會到了多線程的各個方面的優勢,也學會了更多的知識,雖然也寫出了讓大牛們嘲笑的“自旋鎖”代碼,看過《Imperfect C++》關于多線程的那1節后,立馬酡顏了,利用周末的時間,完全修改了這個“問題”。
另外,再接觸這方面的知識時,就會從不同的角度上去理解及思考,也發現了更多更有趣的內容,例如怎樣用C++11的異步,把界面和處理扔到不同的線程中去,又怎樣把Log扔到對應的Log打印窗口中去,真是其樂無窮啊。
上周末,又看了1遍《星際寶貝》,也總結了最近各個不盡人意的方面,發現自己之前實在是太過自我為中心,有很多問題不知道從自己找緣由,而不斷的責備他人(真心的對被我傷害的人說聲對不起)。還是應當時時刻刻警省自己,如果“壞蛋”成份要滿了,那就暫時放下所有的事,“醫治”好了再繼續,不要由于自己而出錯!