天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

持續(xù)集成之“測試三角形與分段構(gòu)建策略原則”

  在《戲說Checkin Dance》一文中,咱們說到:Joe的團隊實施了帶有令牌的持續(xù)集成提交流程紀律。由于每個人都做本地構(gòu)建進行驗證后再提交,所以持續(xù)集成平臺上的構(gòu)建結(jié)果比較穩(wěn)定,每天持續(xù)集成服務(wù)器上的構(gòu)建最多只有一兩次失敗(常見的原因是忘記提交某個文件而導(dǎo)致失敗,和因本地環(huán)境配置與平臺環(huán)境配置不一致而導(dǎo)致失敗),但一般都能在30分鐘內(nèi)修復(fù)。隨著項目的進 行,新功能不斷地增加,自動化測試用例也越積越多。由于不做任何修改,本地構(gòu)建腳本就會運行所有自動化測試用例,所以本地構(gòu)建的運行時間也越來越長。團隊里有人開始抱怨,“每次提交代碼前,運行本地構(gòu)建都超過15分鐘,這樣太浪費時間。我們可否把那些不太重要的測試拿出去,不再運行了?”

  一、自動化測試黃金三角形

  作為團隊的技術(shù)負責人,Joe把大家叫到一起,就這個問題進行了專門的討論。

  “我們不能放棄運行這些測試。”Alice說道,“在我前一個項目中,我們就是這么做的,結(jié)果,這些花精力寫的測試都作廢了。”

  “那是為什么呢?”?Bob問道。

  Alice回答道:“因為并不經(jīng)常運行這些測試,隨著功能的修改,有些測試的邏輯就不再是正確的了。而當再次運行發(fā)現(xiàn)這類問題時,通常的結(jié)果就是把這個測試刪掉,因為修復(fù)這個測試的工作量太大了。”

  “那持續(xù)運行所有測試的話,等待的時間太長了,也是一種浪費呀。”Bob說道。

  此時,作為團隊技術(shù)負責人的Joe說話了。“讓我們先分析一下,到底有哪些什么原因讓我們的測試在這么短的時間里就變成需要這么長時間了呢?”

  “功能增加的多了,測試自然就多了唄。”

  “功能增加了,自動化測試數(shù)據(jù)的準備工作也多了,需要的時間當然就長了。”

  “現(xiàn)在我們的測試中有很多地方需要測試在原地等待結(jié)果返回,所以等待時間也挺長的。”

  “大家還有沒有其它原因?”Joe追問道。

  大家沉默了一會兒,Bob說道:“好象主要就這些原因吧”。

  “那好吧。功能多而導(dǎo)致測試多這是好事兒,說明我們大家都非常重視我們的自動化測試。對于‘測試準備時間變長’這個問題可以理解,因為我們的產(chǎn)品越來越復(fù)雜了。對于‘結(jié)果返回的等待問題‘嘛,需要具體問題,具體分析。前幾天,我看到一個‘測試黃金三角形’,講的就是自動化測試中各類測試的應(yīng)具有的比例關(guān)系,對我很有啟發(fā)。我在白板上畫一下吧。”于是,Joe走到白板前,將這個測試黃金三角形畫了下來,如圖1所示。

  然后,Joe將這個圖形解釋了一下。原來,這個三角形講的就是單元測試、集成測試和驗收測試的關(guān)系。首先,左邊向上的箭頭表示,越高層次的測試維護成本越高,運行時間越長。因此,對于單個測試來說,單元測試運行最快,維護最容易,而集成測試次之,驗收測試則最高。每類測試的面積代表著該測試的數(shù)量?,F(xiàn)在,業(yè)界有很多種工具支持單元測試,因此它的編寫及維護成本相對其它兩種測試來說較低,應(yīng)使用單元測試對代碼做盡可能多的測試覆蓋。一般來說,單元測試覆蓋率達到70~80%是比較理想的狀態(tài)。

  接著,Joe問了大家一個問題:“我們產(chǎn)品中的這些自動化測試屬于哪一類測試?”

  Alice說道:“那要看你怎么定義單元測試中的這個單元。”

  “根據(jù)WikiPedia上的定義,一個單元是指應(yīng)用程序中最小可測試的部分。既然我們使用面向?qū)ο蟮拈_發(fā)語言C++,那么單元測試的粒度應(yīng)該是類中的一個方法吧。而且,通常來說,如果一個測試包括以下任何一個情形,它就不是一個單元測試:(1) 需要連接數(shù)據(jù)庫;(2) 需要網(wǎng)絡(luò)通信;(3) 需要與文件系統(tǒng)打交道;(4) 不能和其它單元測試同時運行;(5) 需要對環(huán)境進行一些配置(如編輯配置文件)才能運行它。”Joe回答道。

  “要是這么說的話,我們的測試中,一部分是模塊集成測試,一部分是驗收測試,只有一小部分算是單元測試。我們的測試集合正好是一個倒三角。”Bob邊說,邊在白板上畫了出來,如圖2所示。

  “既然高層次上的測試(集成測試和驗收測試)維護量比較大,今后我們應(yīng)該加入更多的低層次測試(單元測試),對于關(guān)鍵功能進行集成測試和驗收測試。如果對于測試用例具有等價性的話,我們應(yīng)該用低層次測試來實現(xiàn)。這樣我們就會達到自動化測試的黃金三角狀態(tài)啦。”Joe邊說邊在白板上筆劃著,如圖3所示。

  “我同意你說法,但是仍舊沒有解決我們目前遇到的問題。如何解決我們現(xiàn)在本地構(gòu)建時間太長的問題呢?”Alice有點兒不耐煩地問道。

  二、分階段構(gòu)建?

  “這還不容易,Martin Folwer(敏捷宣言的創(chuàng)造者之一)已經(jīng)給出了一個解決方案,那就是兩階段構(gòu)建(Secondary Build)。也就是說,我們可以把那些運行比較慢,時間比較長且基本上不會失敗的自動化測試用例挑選出來,組成一個新的測試集,在第二階段運行,可以叫做‘二級構(gòu)建階段’。剩余的測試集仍舊放在第一個階段運行,我們可以把第一個階段叫做‘提交構(gòu)建階段’。”Joe回答道。

  “那什么時間運行這兩個階段的構(gòu)建呢?”Bob問道。

  “提交階段構(gòu)建當然就是在我們每個人提交之后就運行啦。而且在我們提交之前,作為本地驗證集合,在我們開發(fā)環(huán)境上也要運行同樣的提交構(gòu)建。一般來說,本地構(gòu)建和提交構(gòu)建最好都在五分鐘內(nèi)完成,最長也不要超過十分鐘,否則開發(fā)人員就不愿意花時間做頻繁地代碼提交啦。另外,一旦提交階段構(gòu)建成功以后,就馬上自動觸發(fā)第二階段構(gòu)建。而我們開發(fā)人員在持續(xù)集成服務(wù)器上的提交階段構(gòu)建成功以后,就可以繼續(xù)進行其它的工作啦。”Joe說道,“我們原來的六步提交圖就變成這個樣子了。”說著,Joe拿起白板筆就畫了出來,如圖4所示。

  “不對,這里有問題!持續(xù)集成強調(diào)盡早反饋。如果把測試分成兩個階段了,那反饋周期不是加長了 嗎?”Bob反駁道。

  Joe 點點頭,說道:“你說的沒有錯。但是,根據(jù)我們現(xiàn)有的軟硬件資源條件,我們目前還無法通過增加資源的方式來縮短所有測試運行的時間。所以我們必須在質(zhì)量與速度之前做出平衡。這也是我為什么要把那些不易出錯的自動化測試集合放在第二階段構(gòu)建的原因,這樣可以降低但不能完全解除第二階段構(gòu)建失敗的風險。所以, 這也要求我們大家當?shù)诙A段構(gòu)建失敗時,也要找人盡快把它解決,并且把相關(guān)的測試再次放回提交測試階段中運行,或者在提交測試階段加入新的測試來補充。” 

  Alice此時插話,問道:“既然第二階段構(gòu)建不常失敗,為什么我們不定時運行它,比如每天晚上運行一次呢?這樣不是更節(jié)省資源嗎?另外,如果第二階段構(gòu)建運行得慢,那它不是一直都落后嗎?”

  “因為每次提交階段構(gòu)建成功以后就觸發(fā)第二階段構(gòu)建,這樣無論如何都比每天晚上運行一次的更多的反饋。因為每天晚上運行一次的話,如果出了問題,我們只能在第二天早上才能發(fā)現(xiàn)。對于你的第二個問題,我畫一張圖來解釋。”Joe找了一張大白紙,在上面開始畫了起來。

  一會兒功夫,幾個示意圖就畫好了。看到這幾個示意圖以后,大家恍然大悟。如圖5所示。從圖中我們可以看到:

  1. 當版本123的第二階段構(gòu)建被觸發(fā)并正在運行,Alice又提交了一次,觸發(fā)了版本124的提交構(gòu)建;
  2. 當版本124的提交構(gòu)建完成之后,由于版本123的第二階段構(gòu)建仍在運行,所以不再觸發(fā)第二階段構(gòu)建;
  3. 當版本125的提交構(gòu)建完成時,版本123的第二階段構(gòu)建仍舊在運行,所以也不觸發(fā)第二階段構(gòu)建;
  4. 當版本126提交構(gòu)建正在運行時,版本123的第二階段構(gòu)建剛完成,此時由于版本125的提交階段構(gòu)建是一個最近 成功完成的提交構(gòu)建,所以持續(xù)集成服務(wù)器就會啟動該版本的第二階段構(gòu)建,而忽略版本124的提交構(gòu)建。

  “那根據(jù)我們持續(xù)集成紀律,誰的提交讓構(gòu)建失敗,就由誰來修復(fù)。如果版本125的第二階段構(gòu)建失敗了,就包括版本124和125兩次提交的變更,由誰來修復(fù)呢?”Bob接著問道。

  “這個好辦,由這兩個提交人一起負責修復(fù)。如果想確切找到誰的提交有問題,還可以手動觸發(fā)版本124的第二次構(gòu)建。假如構(gòu)建成功,說明版本125有問題,假如構(gòu)建失敗,說明問題在版本124就引入了。”Alice搶著說道。

  討論到這里,團隊成員都達成了共識:(1) 開始加強單元測試的力度;(2) 在反饋速度和反饋質(zhì)量之間做出折衷,使用二級構(gòu)建構(gòu)建的方式。

  整個產(chǎn)品的開發(fā)非常順利,馬上就要進行版本發(fā)布了。團隊還會遇到什么問題呢?他們是如何解決的呢?請聽下回分解。

it知識庫持續(xù)集成之“測試三角形與分段構(gòu)建策略原則”,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美午夜精品一区二区蜜桃 | 亚洲字幕久久 | 欧美午夜精品A片一区二区HD | 国产精品一区二区欧美视频 | 天美传媒麻豆精品 | 国产AV国片精品无套内谢无码 | CHINESE老阿姨免费视频 | 狠狠人妻久久久久久综合九色 | 国产精品久久久精品a级小说 | av天堂影音先锋在线 | 俄罗斯15一16处交 | 天美麻豆成人AV精品视频 | 天天爽夜夜爽 | 巨大乳hdbbw 巨爆乳中文字幕爆乳区 | 国产精品九九九久久九九 | 国产99青草全福视在线 | 人妻熟妇乱又伦精品视频中文字幕 | 嫩草影院永久在线一二三四 | 久久性生大片免费观看性 | 失禁 调教 刺激 哭喊男男 | 精品视频免费在线 | 后入内射国产一区二区 | 又粗又大又爽又黄的免费视频 | 女同给老师下媚药 | 蜜芽一二三区 | 快播理伦片 | 国产亚洲精品在浅麻豆 | 欧美肥婆性生活 | 午夜免费体验30分 | 久久99国产综合精品AV蜜桃 | 同桌别揉我奶了嗯啊 | 偷拍亚洲色自拍 | 国产精品99久久久精品无码 | 无限资源在线看影院免费观看 | 久久热免费观看视频 | 小SB几天没做SAO死了H | 强壮的公次次弄得我高潮韩国电影 | 两个人的视频免费 | 国产深夜福利视频在线 | 欧美一夜爽爽爽爽爽爽 | 69精品国产人妻蜜桃国产毛片 |