團(tuán)隊開發(fā)的一個方面就是在將所有的改動合并到中心資料庫之前,允許單獨(dú)的開發(fā)者在本地編寫并構(gòu)建(build)有特色的代碼。開發(fā)者可以在本地測試與調(diào)試最新的版本,并且可以保證他們所有的工作代碼可以與其他同事的協(xié)同工作,他們可以手動測試這些代碼,但是更好的辦法就是將這一過程自動化并且提供即時反饋,其中一個非常優(yōu)秀的解決方案就是持續(xù)集成。
持續(xù)集成
對于應(yīng)用軟件開發(fā)團(tuán)隊而言,有很多提高產(chǎn)品質(zhì)量和效率的思想,其中的一種思想就是被稱作持續(xù)集成的方法,持續(xù)集成的一個前提就是即時反饋。持續(xù)集成的一種最簡單的形式就是由一個開發(fā)者完成所有的工作,因為所有的改變都是立即可見的,因此,單個開發(fā)者在他們出現(xiàn)問題的時候就能知道這個問題的存在,當(dāng)同樣的方法應(yīng)用到團(tuán)隊環(huán)境中,實時方式就會成為一個問題。
持續(xù)集成最大的特色在于當(dāng)開發(fā)者提交他們工作的時候 ,可以減少其他開發(fā)者用于檢測bug的時間,而往往非常難以追蹤到由這些bug所導(dǎo)致的問題的根源,因為問題通常是由于集成了新的代碼所致,因集成而出現(xiàn)的bug可能在出現(xiàn)問題之前已經(jīng)被嵌入到代碼中很久了,與其花費(fèi)時間去追蹤這些bug還不如花在別的項目上,關(guān)鍵是要盡早地發(fā)現(xiàn)問題。
在持續(xù)集成方法的幫助下,絕大部分bug可以在引入代碼的時候被發(fā)現(xiàn),因為這些“嫌疑犯”(開發(fā)者的代碼)是在他們提交新代碼之后才出現(xiàn)了錯誤,所以更加明顯。因此,少花些時間在追蹤這些錯誤上,開發(fā)者就能有更多的時間解決他們自己的問題,最終的結(jié)果是生產(chǎn)效率的提高,但這種方法也依賴于構(gòu)建新版本的頻率,從而向開發(fā)人員提供有價值的反饋。
何時進(jìn)行構(gòu)建(build)?
我還記得多年前曾工作過的項目,進(jìn)行一次構(gòu)建需要大量的時間和精力,要提醒開發(fā)人員遞交他們的代碼,而且手動的構(gòu)建過程非常緊張,很自然的,當(dāng)對開發(fā)團(tuán)隊的代碼進(jìn)行構(gòu)建的時候,錯誤就搖頭擺尾地出現(xiàn)了,追蹤這些問題是需要時間的,并且希望能沿著正確的方向去解決問題,這樣才能獲得成功,而這一過程所需的時間往往導(dǎo)致了構(gòu)建次數(shù)的減少,但是,多次構(gòu)建更易于從持續(xù)集成中受益。
如果您想知道一個成功構(gòu)建的條件是什么,答案視乎您的項目和環(huán)境而決定,但是我經(jīng)常將它定義為所有的源文件都成功編譯、部署并且一系列測試都在系統(tǒng)中獲得成功,您需要一系列工具來實現(xiàn)這些工作,雖然自動測試(automated testing)并不是必需的,但是我強(qiáng)烈推薦這種方法。
工具
以下是在.NET環(huán)境中建立與運(yùn)行持續(xù)集成方法所必需的幾本工具列表:
·源代碼控制:這允許多個程序員通過提交、調(diào)出和添加新文件對應(yīng)用軟件代碼的協(xié)同工作,Visual SourceSafe是一種流行的選擇,但還有很多更好的選擇,比如Subversion,IBM's Rational ClearCase,CVS和SourceGear Vault。
·編譯器:您可以使用.NET框架的命令行編譯器、Visual Studio .NET或其他的集成開發(fā)環(huán)境。
·持續(xù)集成服務(wù)器:這是構(gòu)建過程的主要控制器,它負(fù)責(zé)監(jiān)控為程序員提交代碼使用的源代碼資源庫,當(dāng)加入新的代碼時,最新的版本將被取回,構(gòu)建過程也就取消了,持續(xù)集成過程的最后一步是通過電子郵件、網(wǎng)頁等形式向整個團(tuán)隊通報構(gòu)建的狀態(tài)。有很多工具都可以實現(xiàn)這一步驟,我比較喜歡CruiseControl.NET,另一個選擇是免費(fèi)的Draco.NET,您需要一個專門的服務(wù)器來實現(xiàn)這一步驟。
·自動構(gòu)建工具:用于源代碼的自動構(gòu)建的工具是必不可少的,免費(fèi)的NAnt是一個很棒的選擇,或者您可以使用一個程序生成工具,如果您使用的是CruiseControl.NET的最新版本,則可以和Visual SourceSafe直接對話,這樣就不需要像NAnt這樣的自動構(gòu)建工具了。
·選擇性單元測試:在集成階段應(yīng)用單元測試可以幫助驗證正常工作的代碼,一個非常出色的工具是NUnit,它是免費(fèi)的而且在網(wǎng)上有大量的相關(guān)信息。
注意:安裝與設(shè)置這些工具的內(nèi)容已經(jīng)超出了這篇文章的范圍,但是每個產(chǎn)品的網(wǎng)絡(luò)社區(qū)所提供的文檔中包含了您使用這些產(chǎn)品所需的信息。
您準(zhǔn)備好使用持續(xù)集成了么?
持續(xù)集成并不是針對缺陷代碼的靈丹妙藥,但它絕對可以釋放出您寶貴的時間去應(yīng)付更緊張的問題,開發(fā)人員依然需要編寫強(qiáng)壯的代碼并進(jìn)行良好的單元測試,另外,代碼應(yīng)該按照規(guī)則進(jìn)行提交(我建議每日提交),然而,使用持續(xù)集成可以幫助您驗證代碼、測試、設(shè)計等的質(zhì)量,持續(xù)集成能幫助您節(jié)省出原本用于構(gòu)建的時間,但您需要一些時間去設(shè)置和管理專門用于持續(xù)集成的服務(wù)器。
新聞熱點
疑難解答