質量之匙:持續集成工具與實踐——專訪Thoughtworks公司Cruise產品經理 Jez Humble

轉載自51testing ,來源地址爲:http://www.51testing.com/html/08/n-82408.html


      專訪Thoughtworks公司Cruise產品經理 Jez Humble

        編者按:CruiseControl:簡稱CC,持續集成工具,主要提供了基 於版本管理工具(如CVS)感知變化或每天定時的持續集成,並提供持續集成報告、Email、Jabber等等方式通知相關負責人,其要求是需要進行日構建的專桉已編寫好全自動的專桉編譯腳本(可基 於Maven或Ant)。

        記者: CruiseControl是一個開源的持續集成工具。那麼開源的CruiseControl,與企業版本的Cruise, 有什麼區別呢?

        Jez:主要有幾個區別,但是最重要的是,Cruise新增了一個“構建管道 ”(“pipeline”)的概念。我們之後會再深入的談,概括來說這個“pipeline”不僅可以運行構建,還可以幫助你把軟件部署到產品環境裏,這是很多公司在部署軟件時都會遇到問題。所以說Cruise不只改進了傳統持續集成工具的不足,而且還能幫助你解決部署到產品環境中時遇到的問題。

        另外,CruiseControl和CruiseControl.NET都比較難用、難設定,所以我們把Cruise設計得更容易使用。Cruise還有另外一些先進的功能,如構建網格(build grid)等,它可以讓你無需太多配置就可以靈活括展,且並行你的持續集成系統。

        記者: Cruise最大的優點是什麼呢?

        Jez:Cruise最大的優點包括我上面所說的先進功能:軟件部署、容易使用和build grid,還有迎合企業用戶需要的驗證與授權(authentication & authorization),和fail-over。當一個agent停止響應時 ,server會自動把工作分配到其他的agent上面去。

        記者:你可以多談一談構建網格(build grid)這個概念嗎?

        Jez:你的軟件產品可能要在不同的platform上(e.g. WindowsLinux, and Solaris)運行,那麼你就需要在幾臺不同的電腦上執行你的構建(build)。

        如果你的build裏面的自動測試會花很長時間,你也可以把這些測試分別放在幾臺電腦上同時運行。

        還有,對較大的公司來講,利用 build grid 來分工的話,幾個部門就可以共用一箇中央管理的server。

        記者:當你們作產品計劃時,你們首先考慮的是什麼?

        Jez:作爲一個商業軟件,我們首先考慮的當然是如何吸引客戶。所以我們必須要開發出一些有吸引力的功能。Cruise一定要容易用,同時也要滿足客戶的需求。Cruise要做到替客戶降低成本,幫助他們順利地部署軟件、把持續集成變成一件簡單的事情。那麼人們就自然會覺得購買Cruise是一個好的投資。

        記者:業界目前已有不少的持續集成工具,怎樣能使Cruise變成持續集成工具中的第一?

        Jez:當然Cruise現在還不是,但這的確是我們的目標。現在CruiseControl是被下載最多的持續集成工具,所以Cruise試圖吸取CruiseControl的優點,再加以改良和創新。

        記者:還有另外的持續集成工具,例如 Atlassian的Bamboo。你可以比較一下Bamboo和Cruise的異同嗎?

        Jez:除了Bamboo,還有不少其他的持續集成工具。我不打算在Cruise 發佈之前去看其他的持續集成工具。比起其他工具開發公司, Thoughtworks的特質就是它是一間諮詢服務公司。在持續集成技術方面,我們有爲很多不同的客戶解決問題的經驗。所以Cruise這個產品的理念,就是去解決我們見過的、實際的問題,而不是去抄襲或模仿其他產品的特性。

        Cruise有一些和Bamboo類似的特性(如build grid),但是最大的區別是,我們的諮詢服務經驗是特有的。
 
        記者:當自動測試越來越多,持續集成的build也會越來越花時間,Cruise怎樣解決這個問題?

        Jez:Cruise的build grid就能縮短build的時間。只要把測試分開,就可以放在幾臺電腦上並行。設定Cruise的agent非常容易;安裝了agent之後,輸入server的IP,agent就會自動加入grid裏面,無須任何配置。

        記者: Cruise是爲企業而設計的軟件,但是敏捷開發(Agile)在一些大公司裏不大能接受。他們覺得如要應用敏捷,要很大、很難的改變。那麼你會怎樣說服他們去改用敏捷開發呢?

        Jez:Thoughtworks很多年以來都在面對這個問題。我們運用敏捷開發,也體驗到敏捷給我們的客戶帶來的好處。但是要改變一個公司的制度是一件非常複雜的事情。Thoughtworks通常從一個小團隊、一個項目開始,利用敏捷手段,解決它所遇到的問題。由上層把敏捷強加到團隊身上是行不通的 。

        Cruise就是這樣的一個工具:它可以幫助你從一個項目開始,逐步地採用敏捷的手段。相比其他敏捷的實踐(如TDD,結對編程),持續集成能讓你看到即時的效果:更快的找到bug,更快的獲得反饋,和更容易地部署軟件。不單是敏捷的團隊,任何團隊都可以從中獲益。

        目前有一些工作流程和發佈管理的工具,但價錢一般都不便宜。Cruise即將發佈的1.0版本針對中小型公司,或一個大公司裏面的中小型團隊,可以把持續集成的好處立刻帶給它們。

        記者:你們開發Cruise的時候,是用什麼工具呢?

        Jez:最初我們用CruiseControl,但三個月前我們就用Cruise作爲我們自己的持續集成工具。

        記者:但是你們用Cruise時,也需要其他工具的配合,比方說測試、版本控制等工具。

        Jez:我們的開發最初用SVN ,但是之後我們看到整個軟件開發業,有開始轉向分佈式版本控制系統的趨勢(Distributed Version Control System, e.g.Git, Mercurial,Bitkeeper),我們選擇了Mercurial。Cruise的1.0版本支持SVN和Mercurial。我們也用Ant, JUnit和Selenium作爲測試和構建的工具。Cruise也支持NUnit和NAnt。

        CruiseControl, CruiseControl.NET,和 CruiseControl.rb是針對各自語言領域設計的工具。Cruise作爲一個企業版軟件,對於.NET, Java和Ruby項目,都是“開箱即用” 。持續集成工具和 Version Control System一樣,是沒有理由硬把它們分開爲SVN.NET、SVN.Ruby等等。

        記者:你可以介紹一下 “構建管道 ”(“pipeline”)的概念嗎?

        Jez:一個 pipeline 基本上就是一個工作流程。一個build通常是從單元測試開始,之後有功能測試,之後還可能有性能測試,之後把它部署到UAT(用戶驗收測試 user acceptance testing)環境作人工測試,再把它部署到staging server,最後部署到產品環境裏。 每一個build都從版本控制系統取到一個版本的代碼,然後通過每一個上述的階段(單元測試、功能測試),這個過程就是一個Pipeline。

        比方說,這個build通過了單元測試,但功能測試失敗。另外的一個build通過了所有測試,可以隨時將它部署。 利用這個pipeline的概念,就可以一目瞭然的看到你開發的軟件的最新動態。

        記者:這麼說來,你在寫實現代碼之前,需要寫很多的測試?

        Jez:不錯,如果你想得到持續集成帶給你所有的好處,是需要寫很多的測試。這個也是持續集成被廣泛接受得比較慢的原因。但是這是值得的;測試可以把你的軟件的質量提高,減低bug的數量,應付變化也可以比較快。這些都是對你的公司有利的。

        不過,就算你沒有很多測試,Cruise也能帶給你很多的得益,因爲它能幫助你把軟件部署的過程自動化,從而減低部署上會遇到的風險。

        記者:我覺得要從CruiseControl上獲得最大的好處,就要test-first(先寫測試)。我覺得它對於部署方面,不是最重要的一環。所以你需要說服人們多寫測試?

        Jez:對,我也同意測試是很重要的,也要對人們多加強調這一點。

        記者:Thoughtworks有一些幫助客戶利用test-first的成功個案,可以跟我們分享嗎?

        Jez:Thoughtworks發表了好幾個個案研究。另外,Thoughtworks最近出版了一部名爲“Thoughtworks Anthology”的書,內容講述我們幫助客戶時用過很多不同的技術和技巧。我們Cruise也會用視頻和播客的形式,來講述Cruise的用法和好處。

        如你所說,認知是很重要的。我們要向人們顯示Cruise和持續集成帶來的好處,要不然他們當然不會花這個力氣。

        記者: Cruise怎樣支持一個項目裏的(在版本控制系統上的)多個分支?

        Jez:一般來說,一個軟件系統有三方面: a)部署-把軟件放在不同的環境上。b)依賴-e.g.兩個模塊都依賴於一個共同的框架。c) 分支。在Cruise Release 1.0,你可以用不同的pipeline來代表不同的分支,比如說把一個pipeline設定爲產品分支,而把另外的pipeline設定爲舊版本的分支。

        記者: Cruise將會在何時發佈?

        Jez:第三季度初。

        記者:在“敏捷中國” 技術大會裏, 會有Cruise的演示嗎?

        Jez:有。我和我的中國同事將會一起演示Cruise。

        記者:聽說Martin Fowler也會出席這次大會,你和他見過面嗎?

        Jez:去年我和我們的中國同事們去了倫敦,和他,還有其他的同事,一起設計Cruise的架構。

        記者: Cruise的開發用了多少時間?

        Jez:我們去年12月開始開發。

        記者:只用了不過半年,也挺快的。

        Jez:這半年間也是非常辛勞的,但同時也非常刺激、非常快。敏捷開發的其中一個好處是可以很快的做出成果,和對客戶的要求作出快捷的反應。我們當然在開發Cruise的時候也用得上敏捷帶來的好處。

        記者:轉到一個比較私人的問題。我知道你讀過音樂學與哲學,這些學科對你的事業有幫助嗎?

        Jez:有,不過不是直接性,是間接性的。Thoughtworks裏有很多人都沒有傳統的計算機學位,而是來自很多不同的背景,不同的國家。同事之間有不同的想法,不同的見解,可以互相學習。Thoughtworks其中一個引以爲傲的地方,就是僱員們的技能比較廣泛,員工不是單單的developer或analyst,那麼互相的交流也比較多。我們覺得這也使Thoughtworks成爲一個工作的好地方。

        記者:你可以列出三個令顧客掏錢包出來買Cruise的理由嗎?

        Jez:首先,Cruise幫助你減低軟件部署的風險;

        其次,易用。很多人都在設定其他的持續集成工具時(包括開源的CruiseControl)遇到困難。還有我們想把持續集成推動成爲一個best practice,讓每一個軟件開發團隊都有機會可以簡單地實踐持續集成。

        再次,Cruise提供一個簡單的中央頁面,讓你看到你的軟件項目的狀況;提高透明度,和令項目更加容易管理。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章