「個人TDD實踐」系列之CI持續集成
寫在前面:html
個人TDD實踐這幾篇文章主要是圍繞測試驅動開發所展開的,其中涵蓋了一小部分測試理論,更多的則是關注工具的使用及環境的搭建,作到簡單實踐先行,後理論專精的目的。服務器
TDD實踐系列文章:框架
1.TDD概念篇jsp
2.CI持續集成ide
3.SVN架設篇工具
4.UnitTest單元測試單元測試
CI(Continuous Integration)持續集成,最重要的服務對象是TDD,它是一個集合概念,包括自動構建build項目,自動分析代碼,自動測試,自動郵件報告,自動預編譯檢查,自動發佈等等,這些都圍繞一箇中心詞「Auto」,固然它不能幫您自動完成代碼 :)。全部這些操做,直接解放了項目管理者,每日構建集成(Build every day)將會很大程度上提升項目的穩定性,代碼的健壯性及隨時反饋。學習
持續集成經典定義:www.martinfowler.com/articles/continuousIntegration.html測試
持續集成是一種能讓團隊成員友好「集成」(integrate)工做的軟件開發實踐,一般每一個人最少每日「集成」一次,也就是說天天都要進行大量的「集成」(multiple integrates per day)。每一次集成都被自動構建器(automated build including test)儘量快的檢測集成錯誤。許多團隊開發者發現,這種方法極大的下降了團隊簡集成的問題,並且能讓團隊更快的開發出有凝聚力,結協力的軟件(cohesive software)。 ui
--- Martin Fowler
持續集成拓撲圖:
從實用性角度來講,持續集成避免了由於某人忽然發生的Bug,致使團隊的人員必須等待這個Bug被修復,持續集成每日集成則大大下降了這種事情發生的機率或者控制在一個合理發生Bug的時間內(一個工做日)。
2.1. 可能出現的問題:
2.1.1. 增長了維護CI的成本:起初多是要在配置環境上花費些功夫,但比起使用效率上以及代碼健壯性控制上,則CI更有意義。
2.1.2. 需求更改過於頻繁,功能複雜:TDD開發的一個原則是「儘量用最簡單的代碼完成一個需求,不添加額外的功能,若是需求改變,則讓測試部經過,而後重構,即不要一次完成未來可能的任務,只注重當前」。
2.1.3. 增長軟硬件成本和團隊學習曲線(Study Curve):同第一條定律,學習曲線則可根據團隊狀況逐漸深化。
2.1.4. 團隊成員將不得不編寫測試和構建項目:有了這些團隊成員能夠只關注編寫代碼和調試代碼,比起修復那些被測試人員發現的bug,更多的利用了Coder的我的才能。(囉嗦一句,本人曾深受過那些莫名其妙的bug所帶來的危害,有些仍是因爲其餘人的改動致使的,這樣不得不F11跟蹤代碼來理解Bug產生的流程,絕大多數時刻是極其痛苦的。)
2.1.5. 舊項目是否能用CI: 即便舊項目中沒有單元測試,也能夠用CI中的源代碼管理等諸多功能。這裏除非有絕對的意義,不然也不建議在舊代碼的基礎上補充單元測試。
2.2. 應用CI的優點:
2.2.1. 下降軟件風險提升軟件的質量:測試代碼覆蓋率越高,提供的穩定性就越高,建議代碼覆蓋率80%以上,所謂的二八原則?!
2.2.2. 加強項目的透明度:集成服務器持續的反饋集成信息,包括集成是否成功,Bug修復的時間,修復Bug的時間等。
2.2.3. 迅速構建:更快的發現問題,以及要求構建時間平均在1.9分鐘左右。
3.1. 源文件管理系統(Source file control system):SVN ,TFS(VSS),Github。。。。
具體內容請參考,本系列的其餘文章:請返回文章前言
3.2. 持續集成服務端(平臺):
3.2.1. TFS Server:微軟一體化解決方案。
3.2.2. TeamCity:近些年流行起來的CI集成平臺,由JetBrains維護。
3.2.3. CruiseControl.Net: 老舊的平臺,腳本配置,06年更新過一回。
3.3. 單元測試工具:
MSTest,NUnit
具體內容請參考,本系列的其餘文章:請返回文章前言
3.4. 代碼分析工具:
FxCop,StyleCop,Ncover
具體內容請參考,本系列的其餘文章:請返回文章前言
3.5. 其餘工具:
SandCastle文檔構建,Mock框架,Inject框架
具體內容請參考,本系列的其餘文章:請返回文章前言
本節主要敘述幾種持續集成服務端的搭建及其中一些小的細節上的說明,因爲時間緣由,沒有更深層次的說明更多的功能特性,這確實是不足之處,待從此有時間補充。
a) 介紹:Thoughtworks旗下產品,免費,需配置腳本文件。
官網:http://confluence.public.thoughtworks.org/display/CC/Understanding+the+alternatives+to+CruiseControl
b) 安裝步驟:
i. 下載CCnet:http://sourceforge.net/projects/ccnet/?source=dlp
ii. 點擊安裝包,進行默認安裝。
iii. 安裝完以後,若是是默認安裝的話,在%Program Files%\CruiseControl.NET\server,找到文件ccnet.config並用記事本打開並編輯。
iv. 網上有不少配置文件,以下是個人配置文件,
c) 手動運行:在安裝程序中啓動CruiseControl.Net,驗證是否成功。
d) 日誌文件在:D:\CI\ArtifactWork\buildlogs目錄下。
e) 查看相關記錄:http://localhost/ccnet(前提是請安裝IIS)
f) 客戶端使用CCTry 獲取反饋。
a) 介紹:簡而言之,小項目免費,大項目付費。Web配置代替腳本配置。
官網:http://www.jetbrains.com/teamcity/
拓撲圖:
b) 安裝步驟:
i. 下載:http://www.jetbrains.com/teamcity/download/download_thanks.jsp
ii. 默認安裝。(需更改端口防止衝突,選擇user account登陸)
iii. Web配置:
1. 配置視頻:http://www.jetbrains.com/teamcity/documentation/demos/installation_new/index.html
http://www.jetbrains.com/teamcity/documentation/userguide.jsp
2. TeamCity在線文檔:http://confluence.jetbrains.com/display/TCD8/Configuring+General+Settings
3. 登陸配置網頁進行相關設置,http://localhost:8011/login.html(安裝時,更改了端口號爲8011防止衝突)
3.1. 點擊 Create New Project
3.2. 點擊 Create build configuration。(也可先建立一個子項目,而後再新建一個配置)
3.3. 點擊左上角的 Create and attach new VCS root, 而後VCS 類型選擇SVN,以下配置:
3.4. 保存以後,繼續配置:
選擇自動構建的方式:選擇Microsoft Visual Studio,也可選擇其餘的構建器,如MSBuild。
3.5. 增長一個Build Feature,這裏可暫時不選擇,直接跳過此步驟:點擊網頁右側的導航欄,選擇第4步。
3.6. 在導航中點擊第5步:Build trigger
3.7. 這裏已經完成了基本配置,更多高級選項請參考TeamCity官方資料。
a) 介紹:與VS2010集成,一體化解決方案,固然沒有免費的午飯。
官網:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx
拓撲圖:
b) 安裝步驟:
請參見:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx
《Continuous Integration IN .NET》 Marcin Kawalerowicz