在軟體工程中,持續整合(ci)是每天將所有開發人員的工作副本合併到乙個共享主線上幾次的實踐。雖然不提倡在一天內多次整合。extreme programming(xp)採取了ci的觀點,然後提倡每天多次繼承——也許一天幾十次。
ci的主要目的是防止整合問題,在xp的早期描述中稱為「整合地獄」。ci並不是作為頻繁整合的一種改進而被普遍接受,因此區分兩者很重要,因為它們的優點存在分歧。
在xp中,ci旨在與通過測試驅動開發實踐編寫的自動化單元測試結合使用。最初,這被認為是在提交到主線之前在開發人員的本地環境中執行並通過所有單元測試。這有助於避免乙個開發人員正在進行的工作破壞另乙個開發人員的副本。在必要時,可以在提交之前禁用部分完整的特性,例如使用特性切換。
稍後對這個概念的闡述引入了構建伺服器,它會定期甚至在每次提交之後自動執行單元測試,並將結果報告給開發人員。構建伺服器的使用(不一定執行單元測試)已經由xp社群之外的一些團隊進行了實踐。現在,許多組織已經採用了ci而沒有採用所有xp。
除了自動化的單元測試,使用ci的組織通常使用構建伺服器來實現一般應用質量控制的連續過程——經常應用的一小部分工作。除了執行單元測試和整合測試,這些流程還執行額外的靜態和動態測試、度量和配置檔案效能、從源**中提取和格式化文件,並促進手動qa流程。這種持續的質量控制應用旨在提高軟體的質量,並減少交付軟體所花費的時間,取代了在完成所有開發後應用質量控制的傳統做法。這與更頻繁地整合以簡化整合的原始思想非常相似,只適用於qa流程。
同樣,通過確保在主線上檢入的軟體始終處於可以部署給使用者的狀態,並使部署過程非常快速,持續交付的實踐進一步擴充套件了ci。
減少風險
一天中進行多次的整合,並做了相應的測試,這樣有利於檢查缺陷,了解軟體的健康狀況,減少假定。
減少重複過程
減少重複的過程可以節省時間、費用和工作量。說起來簡單,做起來難。這些浪費時間的重複勞動可能在我們的專案活動的任何乙個環節發生,包括**編譯、資料庫整合、測試、審查、部署及反饋。通過自動化的持續整合可以將這些重複的動作都變成自動化的,無需太多人工干預,讓人們的時間更多的投入到動腦筋的、更**值的事情上。
任何時間、任何地點生成可部署的軟體
持續整合可以讓您在任何時間發布可以部署的軟體。從外界來看,這是持續整合最明顯的好處,我們可以對改進軟體品質和減少風險說起來滔滔不絕,但對於客戶來說,可以部署的軟體產品是最實際的資產。利用持續整合,您可以經常對源**進行一些小改動,並將這些改動和其他的**進行整合。如果出現問題,專案成員馬上就會被通知到,問題會第一時間被修復。不採用持續整合的情況下,這些問題有可能到交付前的整合測試的時候才發現,有可能會導致延遲發布產品,而在急於修復這些缺陷的時候又有可能引入新的缺陷,最終可能導致專案失敗。
增強專案的可見性
持續整合讓我們能夠注意到趨勢並進行有效的決策。如果沒有真實或最新的資料提供支援,專案就會遇到麻煩,每個人都會提出他最好的猜測。通常,專案成員通過手工收集這些資訊,增加了負擔,也很耗時。持續整合可以帶來兩點積極效果:
(1)有效決策:持續整合系統為專案構建狀態和品質指標提供了及時的資訊,有些持續整合系統可以報告功能完成度和缺陷率。
(2)注意到趨勢:由於經常整合,我們可以看到一些趨勢,如構建成功或失敗、總體品質以及其它的專案資訊。
建立團隊對開發產品的信心
持續整合可以建立開發團隊對開發產品的信心,因為他們清楚的知道每一次構建的結果,他們知道他們對軟體的改動造成了哪些影響,結果怎麼樣
整合學習 未完成
兩大類 序列 boost e.g.adaboost,xgboost 減小偏差 主 並行 bagging e.g.rf 減少方差 主 對特定的資料分布進行學習 re weighting,re sampling 基礎adaboost只適用於二分類 樣本隨機性 自主取樣法63.2 特徵隨機性 隨機森林用到...
未完成作業
分治 1.一元三次方程求解 1015 2.迴圈比賽日程表 3.求方程的根 5.黑白棋子的移動 1310 6.光榮的夢想 2323 7.小車問題 1668 8.方程分f x 的根 9.求逆序對 1198 10.迴圈比賽 11.二分查詢 1135 12.麥森數 1030 動態規劃 挖地雷 取數字問題 搜...
通訊 未完成
網路程式設計對於後端開發來說也是非常重要的一部分,常見的使用案例包含,郵件 web伺服器 rpc等底層通訊模型都離不開通訊。及j a是第乙個從一開始就為網路應用而設計的程式語言,最早的兩個實用j a應用的程式之一就是web瀏覽器,隨著internet的不斷發展,j a成為了唯一適合構建下一代網路應用...