在上一章中了解到如何將構(gòu)建與部署腳本化瘤睹,腳本通常都是幫助我們進(jìn)行構(gòu)建杠览,測(cè)試,部署和發(fā)布應(yīng)用的所有自動(dòng)化命令集研底。并且在項(xiàng)目中腳本系統(tǒng)應(yīng)該是一等公民。而本章的內(nèi)容在之前的章節(jié)都有所提及透罢,但是本章會(huì)更加詳細(xì)的討論如何創(chuàng)建有效的提交階段和高效的提交測(cè)試榜晦。
提交階段流程
當(dāng)有人向版本控制系統(tǒng)的主干上提交了一次變更后,持續(xù)集成服務(wù)器會(huì)發(fā)現(xiàn)這次變更羽圃,并將代碼簽出乾胶,執(zhí)行一系列的任務(wù),包括:
- 編譯
- 創(chuàng)建能部署在所有環(huán)境的二進(jìn)制包
- 執(zhí)行必要的分析朽寞,檢查代碼庫(kù)的健康狀況
- 創(chuàng)建部署流水線(xiàn)的后續(xù)階段需要使用的其他產(chǎn)物
提交階段的原則和實(shí)踐
提交階段的首要目標(biāo)是要么創(chuàng)建可部署的產(chǎn)物识窿,要么快速失敗并將失敗原因通知給團(tuán)隊(duì),下面列出建立高效提交階段的原則和實(shí)踐愁憔。
1.提供快速有用的反饋
2.何時(shí)令提交失敗
3.精心對(duì)待提交階段
4.讓開(kāi)發(fā)人員也也擁有所有權(quán)
5.在超大項(xiàng)目團(tuán)隊(duì)中指定一個(gè)構(gòu)建負(fù)責(zé)人
提交階段的結(jié)果
與部署流水線(xiàn)的所有階段一樣腕扶,提交階段既有輸入也有輸出,輸入是源代碼吨掌,輸出是二進(jìn)制包和報(bào)告。產(chǎn)生的報(bào)告包括測(cè)試結(jié)果和代碼庫(kù)的分析報(bào)告脓恕。分析報(bào)告可能包括測(cè)試覆蓋率膜宋,圈復(fù)雜度,復(fù)制粘貼分析炼幔,輸入輸出分析秋茫。
而我們提交階段的所有輸出都會(huì)存放在制品庫(kù)中,一般來(lái)說(shuō)大家都會(huì)直接想到版本控制系統(tǒng)乃秀,但這并不是我們最好的選擇肛著,這樣我們的硬盤(pán)容量會(huì)被快速的占領(lǐng)。我們可以使用持續(xù)集成服務(wù)器所自帶的制品庫(kù)進(jìn)行存放跺讯。
提交測(cè)試套件的原則與重要實(shí)踐
測(cè)試套件中占最多的應(yīng)該是單元測(cè)試枢贿,因?yàn)樗粻砍锻獠肯到y(tǒng)的調(diào)用,能夠及時(shí)反饋刀脏,測(cè)試覆蓋率可達(dá)80%局荚。
1.避免用戶(hù)界面
2.使用依賴(lài)注入
3.避免使用數(shù)據(jù)庫(kù)
4.在單元測(cè)試中避免異步
5.使用測(cè)試替身
總結(jié)
我的疑惑
- 根據(jù)之前的章節(jié),提交至版本控制系統(tǒng)的代碼都應(yīng)該是正確可運(yùn)行的,那這個(gè)時(shí)候持續(xù)集成服務(wù)器發(fā)現(xiàn)變更后耀态,簽出代碼會(huì)跑測(cè)試么轮傍?還有必要么?首装,其中我覺(jué)得測(cè)試下代碼覆蓋率创夜,圈復(fù)雜度是有必要。
- 構(gòu)建不應(yīng)該是系統(tǒng)自動(dòng)的一個(gè)行為仙逻,為什么會(huì)有一個(gè)較差的構(gòu)建系統(tǒng)會(huì)導(dǎo)致系統(tǒng)停止驰吓,是不是說(shuō)構(gòu)建也可以人為的來(lái)設(shè)計(jì)?
- 圈復(fù)雜度
谷歌結(jié)果:在軟件測(cè)試的概念里桨醋,圈復(fù)雜度用來(lái)衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度棚瘟,數(shù)量上表現(xiàn)為獨(dú)立現(xiàn)行路徑條數(shù),即合理的預(yù)防錯(cuò)誤所需測(cè)試的最少路徑條數(shù)
復(fù)制粘貼分析
谷歌了沒(méi)有找到合適的解釋?zhuān)瑐€(gè)人理解是對(duì)項(xiàng)目中代碼的相似性做以分析喜最。輸入輸出分析是怎么進(jìn)行分析的
依賴(lài)注入和內(nèi)存數(shù)據(jù)庫(kù)
樁技術(shù)和模擬技術(shù)是如何區(qū)分的偎蘸,個(gè)人理解樁技術(shù)就是聲明一個(gè)靜可用數(shù)據(jù)。