上乙個帖子「軟體工程高階之每日構建[0]:概述」提到說每日構建是一種很牛x的軟體工程手段。本帖子就來說說它到底有多牛x。為了加深大夥兒的印象,我先來說一些陳年往事。
話說上世紀末,我還在一家小公司幹活,並參與開發了乙個c++的專案。當時公司的流程是:開發人員寫好**,自己編譯好,丟給測試人員測試;測試人員如果發現bug,口頭通知開發人員改;開發人員改好bug,再丟給測試人員測試......
★案例1(開發的混亂)
有一天,開發組的小頭目找來程式設計師甲。
>>小頭目:你負責的xx功能完成了沒有?
>>程式設計師甲:早做完啦!
>>小頭目:那測試人員甲怎麼說一直沒看到xx功能?
>>程式設計師甲:不會吧!我去瞧瞧。
若干分鐘後,程式設計師甲回來。
>>程式設計師甲:不好意思,編譯好的exe我只發給了測試人員乙,忘記發給測試人員甲了。
>>小頭目:!@#$%^&*(此處省略15字)
★案例2(測試的混亂)
另一天剛上班。
>>測試人員甲:今天的xx.exe怎麼一執行就崩潰?
>>測試人員乙:有嗎?我這兒好好的呀!
>>測試人員甲:真見鬼!我找開發問一下。
經過若干分鐘打聽,知道xx.exe是程式設計師丙負責,於是找來程式設計師丙。
>>測試人員甲:為啥你做的xx.exe一執行就崩潰?
>>程式設計師丙:有這回事?!讓我看看你的環境。
程式設計師丙在測試人員甲的機器上研究了n刻鐘後。
>>程式設計師丙:你是豬腦啊,你沒有更新***.dll,害我浪費這麼長時間!
>>測試人員甲:你才是豬腦!我怎麼知道xx.exe會用到***.dll?
然後兩人開始對罵......
★案例3(整合的混亂)
臨近專案交付了,開發人員都在忙著改bug,測試人員都在忙著複測bug,沒有人手準備安裝包,於是安裝包的製作一直拖到專案交付的前一天才開始搞。製作安裝包本身倒是很快,半天就搞定。但是......
>>小頭目:做好的安裝包應該沒什麼問題吧?
>>測試人員丙:呃,這個,這個......好像裝出來的軟體沒法執行,直接崩潰了。
>>小頭目:偶的神啊!還愣著幹嘛,快去查原因!!!今天不搞定大家不許回家!!!
然後開發和測試通力協作,經過艱苦卓絕的努力,到了午夜時分,終於發現:有個dll是debug版本......
有同學可能會問:為啥平時測試的時候沒發現這個問題捏?因為平時團隊裡面都使用debug版本,方便assert斷言。到了作安裝包那天,照道理應該統 一編譯release版本,但是有個傢伙遺漏了,所以混了乙個debug版本的dll在裡面。等安裝完執行程式時,該dll動態載入失敗,所以程式就崩潰 鳥。
我上面說的這些情形,到今天為止,還在很多公司內部上演。那為啥每日構建能搞定上面這些問題捏?且聽我細細道來:
★針對「開發的混亂」
對於每日構建的流程,開發人員只要負責提交**到**庫中。不需要挨個給測試人員提供編譯後的二進位制檔案。因此案例1的問題(漏給測試檔案)迎刃而解。
★針對「測試的混亂」
在開發階段,由於測試拿到的程式都是自動編譯出來的,因此保證了所有測試人員拿到的是統一的執行程式,並且這個程式和**庫中最新的**是相對應的。
在測試階段,每乙個開發人員修復了bug之後,都必須把改過的**提交到**庫,測試人員才會拿到改過bug的二進位制程式。如果某個開發人員改了bug但是不提交**,那麼在測試人員看來,相當於他的bug一直沒有改,因此他的bug就一直不會被關閉。
所以案例2的情況也不會出現。
★針對「整合的混亂」
對於每日構建來說,每天都會產生安裝包(或者安裝光碟的iso映象)。也就是說,從專案開始開發的那天起,每天都在進行整合(這就是傳說中的持續整合)。因此,整合的問題,在一開始就會暴露出來,而不用等到專案後期。
其實每日構建的好處除了上述三點(這三點我認為比較重要),還有其它很多,大夥兒可以自己再琢磨一下。後面乙個帖子,我把每日構建需要的準備工作介紹一下。
構建之法 現代軟體工程 閱讀筆記1
軟體團隊的模式 主治醫師模式 明星模式 社群模式 業餘劇團模式 秘密團隊 團隊 交響樂團模式 爵士樂模式 功能團隊模式官僚模式 開發流程 寫了再改模式 瀑布模型 瀑布模型的各種變形 rup統一流程 老闆驅動的流程 漸進交付的流程 tsp的原則 敏捷流程的步驟 1 找出完成產品需要做的事情 2 決定當...
《現代軟體工程構建之法》之五點疑惑
正如 一百個人心中有一百個哈姆萊特 一樣,每個人看一書的理解和想法都是不一樣的 現代軟體工程構造之法 主要講述了什麼是軟體工程 軟體工程在社會企業中的典型案例 軟體工程師的職業發展。讀完 現代軟體工程構造之法 我有以下五點疑惑 1.我們應當怎麼選擇不同的開發流程才能開發出適應這個時代的軟體呢?時代在...
物件導向和軟體工程 團隊作業1
團隊名稱 帥比一群 團隊合照 團隊專案描述 專案名稱 cc 專案功能 該專案可以根據使用者提供的身高,體重計算出該使用者每天所需的卡路里,同時還可以根據使用者提供的每天吃的食物,從而計算出攝入的卡路里。來幫助使用者判斷每天攝入卡路里是否超標。隊員介紹 隊長 田玉 學號 1800802065 程式設計...