構建服務器是用來構建應用的專用機器。構建服務器通常稱為持續集成服務器;這兩個理念有點不同,但是它們通常都綁定在同一臺服務器上。開發人員每次添加新代碼,添加內容會通知到構建服務器。服務器會相應得從代碼倉庫里pull新代碼,從頭構建,并且運行所有單元測試。最終結果是包含當前所有最新代碼的干凈構建。
技術經理有時質疑構建服務器沒用,因為似乎單個開發人員通過在本地機器上構建也能達到相同的結果。但是,構建服務器和開發人員自行構建方案相比有幾個重要優勢。
受控、獨立、可重復
構建服務器確保只有合適的代碼進入構建。開發人員在其本地機器上使用新的軟件產品,工具庫或者其他工具。安裝和卸載這些工具可能會留下
一些DLL,它們可能會被誤用到構建里。這會導致通常會遇到的那句話:“但是這個在我的機器上能構建。”沒有檢查的源碼也經常會聽到這句話。有了專用構建服務器時,如果在build服務器上無法構建,就一定是什么地方出問題了。
另一個構建服務器能防范的錯誤根源是創建一個發布構建,而不是調試構建。測試中,開發人員可能會構建包含額外嵌入信息的代碼來輔助調試。這樣的信息減緩執行速度,并且增加了應用的大小,但是在解決問題時又不可或缺。構建服務器能夠被配置來以發布模式構建應用,這時會移除所有的調試信息,使得應用足夠小并且足夠快。構建還能輕松擴展,為多種目標硬件構建,比如32或者64bit。
強制執行單元測試
強制執行單元測試是構建服務器的另一個職責。開發人員在提交代碼時很容易忘記運行單元測試,或者在變化很小時覺得不需要運行完整的單元測試。構建服務器能夠強制驗證單元測試是否成功,如果在構建過程中任何單元測試失敗了,甚至會拒絕開發人員添加的代碼。
應用通常要求更多時間和數據敏感的測試,稱為集成測試。這些測試以某種方式和周圍環境交互,通常會從數據庫查詢數據。一般來說,這些測試要求數據庫服務器上存在著一些特別的數據集,以支撐測試通過。
不僅僅要求特別的設置,這些測試還通常需要很長的運行時間。正確配置的持續集成服務器能夠存儲一個測試數據庫,其中配置好了合適的數據,然后運行集成測試。花費大量時間的測試可以安排在下班時間運行。
保證代碼質量
構建服務器提供了中央控制點來衡量代碼質量。在構建時,可以生成測試覆蓋率指標及其他代碼質量度量,提供進度和質量的增量分析。甚至可以在覆蓋率下降到某個百分比時拒絕代碼的更新。
QA團隊的集中測試位置
構建服務器的一大優勢不僅僅有利于開發人員。有了可用的構建服務器,QA團隊能夠準確了解需要測試的是哪個版本。他們還通過引入自動化測試工具來流水線自己的工作流。