日構(gòu)建是一項(xiàng)非常基礎(chǔ)的軟件開(kāi)發(fā)實(shí)踐,遺憾的是,并沒(méi)有多少組織真正意識(shí)到它的好處。通過(guò)本章的討論,你可以知道日構(gòu)建對(duì)軟件開(kāi)發(fā)的意義,了解日構(gòu)建的基本情況以及如何著手進(jìn)行日構(gòu)建。
什么是軟件開(kāi)發(fā)的有效管理
在一個(gè)全國(guó)性的銀行中,是什么保證復(fù)雜的資金清算的正確性的呢?每天,各個(gè)地方的網(wǎng)點(diǎn)在結(jié)束營(yíng)業(yè)之前,需要保證賬目、資金、票據(jù)的平衡;這些網(wǎng)點(diǎn)的數(shù)據(jù)不斷的匯集,在每一個(gè)匯集點(diǎn)上都要保證賬目余額的平衡,最終完成一個(gè)銀行的一天的結(jié)算。天天如此,就像是一部設(shè)計(jì)精巧的機(jī)器一樣運(yùn)作不息。不僅銀行是這樣,任何一個(gè)企業(yè)都是如此。一個(gè)小雜貨鋪的老板,也知道每天算算賬,看看今天是賺是賠。這些行為已經(jīng)成為了工作的一部分,甚至成為了一種習(xí)慣。
軟件開(kāi)發(fā)也是一樣的,必須找到一種方法,來(lái)衡量每天的工作,保證每天的工作能夠有效的持續(xù)下去,最終把軟件開(kāi)發(fā)的過(guò)程變成一種內(nèi)在的過(guò)程。這種方法就稱為日構(gòu)建或是持續(xù)集成。
為什么需要日構(gòu)建
日構(gòu)建和持續(xù)集成是類似的,對(duì)開(kāi)放源碼熟悉的人應(yīng)該都知道Nightly Build。而持續(xù)集成這個(gè)詞來(lái)自XP方法,它的頻率可以比日構(gòu)建更高,可以做到幾分鐘就進(jìn)行一次集成,故而由此得名。在本文中,我們只討論日構(gòu)建,而要將日構(gòu)建轉(zhuǎn)換為持續(xù)集成是非常容易的。事實(shí)上,并沒(méi)有規(guī)定持續(xù)集成必須是以分鐘為單位進(jìn)行的,如果你愿意,以一周為單位進(jìn)行持續(xù)集成也是可行的。這樣區(qū)分的目的是為了更好的使用日構(gòu)建或是持續(xù)集成技術(shù):至少以天為單位,頻率越高,效果則越好。
那么,什么是日構(gòu)建呢?我們傳統(tǒng)開(kāi)發(fā)軟件的流程一般是這樣,理解領(lǐng)域問(wèn)題,然后分配任務(wù),由不同的人負(fù)責(zé)不同的軟件部件,在開(kāi)發(fā)完成之后,再把各人的部件整合起來(lái),形成完整的軟件。這個(gè)思路看起來(lái)并沒(méi)有什么問(wèn)題,但是在實(shí)踐中卻問(wèn)題多多。
首先,這種方式適合開(kāi)發(fā)人員之間工作彼此沒(méi)有交集的情況,以前這種現(xiàn)象很常見(jiàn),但是現(xiàn)在,隨著軟件規(guī)模的擴(kuò)大、分工合作的加深,開(kāi)發(fā)人員間的相互依賴程度越來(lái)越高,這種清晰的職責(zé)劃分已經(jīng)變得越來(lái)越難了。
其次,在軟件集成時(shí),往往會(huì)出現(xiàn)各種各樣的問(wèn)題,可是卻很難發(fā)現(xiàn)到底問(wèn)題在哪里?公說(shuō)公有理,婆說(shuō)婆有理。每個(gè)人的代碼都沒(méi)有問(wèn)題,結(jié)合到一起就出現(xiàn)大量的問(wèn)題。
所以日構(gòu)建就將平時(shí)難得一見(jiàn)的集成工作轉(zhuǎn)換成頻繁進(jìn)行的一件工作,從而使得原先如同噩夢(mèng)般的集成變成了一件簡(jiǎn)單的工作。這也是很容易理解的,如果集成工作幾個(gè)月才進(jìn)行一次,誰(shuí)能夠記起幾個(gè)月前的細(xì)節(jié)呢?但是如果集成以天,甚至以分鐘為單位進(jìn)行,排除bug就變成一件很容易的事情了。
日構(gòu)建范例
現(xiàn)在的時(shí)間是下午的17:00,馬上就到日構(gòu)建的時(shí)間了。團(tuán)隊(duì)里四名程序員中的三位已經(jīng)將自己的源代碼和測(cè)試代碼提交到了一臺(tái)名為宙斯的機(jī)器上,這臺(tái)機(jī)器將負(fù)責(zé)對(duì)代碼進(jìn)行日構(gòu)建。在他們提交代碼之前,已經(jīng)通過(guò)了本機(jī)上的構(gòu)建,并完成了測(cè)試。剩下的一位程序員似乎碰到了麻煩,他的代碼出現(xiàn)了一些問(wèn)題,他現(xiàn)在需要編寫(xiě)更多的測(cè)試來(lái)完善測(cè)試網(wǎng)??磥?lái)時(shí)間來(lái)不及了,他只能夠在明天再做提交了。由于他的代碼沒(méi)有和其他人產(chǎn)生依賴,所以遲些提交也沒(méi)有關(guān)系,不過(guò)他在下個(gè)工作日的時(shí)候必須仔細(xì)的將最新的源代碼檢出到本地,在版本控制工具的幫助下,這項(xiàng)工作是很簡(jiǎn)單的。
17:10,宙斯終于開(kāi)始了構(gòu)建的過(guò)程。他從代碼源中檢出最新代碼,然后開(kāi)始編譯,構(gòu)建,并執(zhí)行了所有的測(cè)試,從控制臺(tái)界面上,日構(gòu)建的負(fù)責(zé)人(其中的一位程序員)似乎看到了有部分的測(cè)試沒(méi)有通過(guò),他對(duì)剩下的人說(shuō),似乎有麻煩了。測(cè)試完成之后,將會(huì)從代碼中生成所有的API文檔,并進(jìn)行代碼分析和測(cè)試覆蓋率分析,最新測(cè)試報(bào)告和各種其它的報(bào)告都將會(huì)發(fā)布到Web上。
最后。完成構(gòu)建的軟件和相關(guān)的資料已經(jīng)成功的發(fā)布了,時(shí)鐘指向17:18。"現(xiàn)在只是項(xiàng)目的早期,到了中后期,至少還需要20分鐘的時(shí)間",老鳥(niǎo)程序員告訴沒(méi)有經(jīng)驗(yàn)的程序員,并讓大家去看看測(cè)試結(jié)果。一個(gè)程序員邊嘟囔,邊看log日志,"我在本機(jī)都已經(jīng)測(cè)試過(guò)了呀,怎么會(huì)有錯(cuò)呢。"檢查結(jié)果發(fā)現(xiàn)是環(huán)境問(wèn)題,配置文件被人改動(dòng)了。看來(lái),集成過(guò)程中仍然少不了沖突的問(wèn)題,只不過(guò),這些問(wèn)題可以被很快的發(fā)現(xiàn),并很快的得以解決。
以上是一個(gè)典型的日構(gòu)建過(guò)程,日構(gòu)建的過(guò)程是完全自動(dòng)化的,通過(guò)預(yù)先定義好的指令,機(jī)器將按照指令順序執(zhí)行完所有的構(gòu)建步驟。日構(gòu)建中涉及的步驟是可選的。
日構(gòu)建的價(jià)值
可能有些人認(rèn)為日構(gòu)建過(guò)于浪費(fèi)時(shí)間,但是實(shí)際上,比起最后除錯(cuò)的成本來(lái)說(shuō),日構(gòu)建成本是微不足道的。當(dāng)然,在企業(yè)中建立日構(gòu)建制度確實(shí)需要花費(fèi)不少的時(shí)間,但從長(zhǎng)遠(yuǎn)來(lái)看,這絕對(duì)是值得的。
從表面上看,日構(gòu)建能夠減少最終的排錯(cuò)成本,但這僅僅是日構(gòu)建最基本的價(jià)值。實(shí)際上,日構(gòu)建更為關(guān)鍵的作用是能夠引入日構(gòu)建的制度。這是什么意思呢?日構(gòu)建的思路將會(huì)為軟件企業(yè)的開(kāi)發(fā)流程帶來(lái)變化:開(kāi)發(fā)人員將會(huì)在日構(gòu)建的制度下更加頻繁的協(xié)作,開(kāi)發(fā)進(jìn)度一目了然,軟件的質(zhì)量也會(huì)更加的穩(wěn)定。
軟件開(kāi)發(fā)本身就是一項(xiàng)強(qiáng)調(diào)溝通和協(xié)作的活動(dòng)。但是在日常的活動(dòng)中,常常出現(xiàn)阻礙溝通的情況,例如需要溝通的雙方不在同一個(gè)地理位置、噪聲、溝通雙方的意愿等等。因此在軟件管理中需要提供一種方法,來(lái)鼓勵(lì)人們進(jìn)行溝通。日構(gòu)建就是其中的一種方法(但它并不是唯一的方法)。每一次的構(gòu)建將會(huì)涉及到團(tuán)隊(duì)中的所有成員,因此溝通是少不了的,在日構(gòu)建實(shí)踐的驅(qū)動(dòng)下,每位開(kāi)發(fā)人員都朝著最終的目的-"成功的構(gòu)建"努力。
在Alistair Cockburn的敏捷軟件開(kāi)發(fā)的第三章中,詳細(xì)的闡述了團(tuán)隊(duì)溝通和協(xié)作中的相關(guān)問(wèn)題。例如溝通的實(shí)質(zhì),影響溝通的各種因素,以及如何克服他們。最后,他還論述了如何促進(jìn)團(tuán)隊(duì)的溝通,來(lái)打造一支成功的團(tuán)隊(duì)。
在日構(gòu)建的驅(qū)動(dòng)下,項(xiàng)目的進(jìn)度將會(huì)變得非常的明顯。每一天的構(gòu)建結(jié)果將會(huì)通過(guò)某個(gè)渠道發(fā)布出來(lái),團(tuán)隊(duì)和團(tuán)隊(duì)的老板可以看到軟件現(xiàn)在的樣子,項(xiàng)目的完成情況,出現(xiàn)的問(wèn)題等等。這些信息構(gòu)成了軟件開(kāi)發(fā)的基本信息。不但可以清晰地描述出項(xiàng)目進(jìn)度,也為管理人員安排計(jì)劃提供了基礎(chǔ)數(shù)據(jù)的支持。有了基本的量化數(shù)據(jù),軟件開(kāi)發(fā)才不是靠拍腦袋出成果的。
日構(gòu)建的最后一個(gè)價(jià)值是提供了整合性。目前軟件開(kāi)發(fā)中并沒(méi)有一種統(tǒng)一的管理軟件,未來(lái)似乎也很難做到,因?yàn)椴煌能浖M織差異很大。在開(kāi)發(fā)過(guò)程中,一些有價(jià)值的實(shí)踐被加入、集成到日構(gòu)建的過(guò)程中,在日構(gòu)建的推動(dòng)下,這些優(yōu)秀實(shí)踐很容易成為開(kāi)發(fā)過(guò)程的一部分。在文章倡導(dǎo)的另一個(gè)優(yōu)秀實(shí)踐-測(cè)試驅(qū)動(dòng)開(kāi)發(fā)實(shí)踐,就很容易集成到日構(gòu)建中來(lái)。事實(shí)上,軟件測(cè)試是非常重要的,它已經(jīng)成為日構(gòu)建成功的判別因素。
選擇日構(gòu)建還是持續(xù)集成
雖然日構(gòu)建和持續(xù)集成的本質(zhì)是相同的,但是他們?cè)诩傻念l率方面的差異也導(dǎo)致了一些管理上的差異:
首先,日構(gòu)建樹(shù)立了一個(gè)明確的以工作日為單位的小目標(biāo),團(tuán)隊(duì)的目的就是為了使代碼能夠通過(guò)每天的構(gòu)建。開(kāi)發(fā)人員在明確的目標(biāo)的指導(dǎo)下,往往能夠發(fā)揮出很高的效率。持續(xù)集成則將這個(gè)頻率變得更小,只要你的代碼提交到代碼庫(kù)中,立刻就會(huì)檢驗(yàn)?zāi)愕某晒?,如果有?wèn)題,你必須立刻排除,否則,要么集成的過(guò)程無(wú)法繼續(xù),要么出錯(cuò)的開(kāi)發(fā)人員的信箱被集成過(guò)程中的警告信息所填滿。這種做法對(duì)團(tuán)隊(duì)的要求要更高一些。對(duì)于剛剛開(kāi)始接觸日構(gòu)建的團(tuán)隊(duì)來(lái)說(shuō),可能會(huì)手忙腳亂。
其次,日構(gòu)建有一條非常明確的分界線,開(kāi)發(fā)工作要么是完成,要么是沒(méi)有完成,不存在第三種狀態(tài)。
日構(gòu)建的基礎(chǔ)實(shí)踐
日構(gòu)建的基礎(chǔ)包括三個(gè)實(shí)踐:自動(dòng)構(gòu)建、統(tǒng)一代碼源和集成測(cè)試。
● 自動(dòng)構(gòu)建
自動(dòng)構(gòu)建的思路是通過(guò)腳本語(yǔ)言,而不是通過(guò)在IDE環(huán)境中點(diǎn)擊構(gòu)建按鈕來(lái)完成項(xiàng)目的構(gòu)建過(guò)程。日構(gòu)建需要不斷的進(jìn)行集成的工作,如果手工來(lái)完成這項(xiàng)工作,既費(fèi)時(shí),效果又不好。所以更聰明的做法是把這件工作給自動(dòng)化。在早期的Unix環(huán)境中,都是采用Make編寫(xiě)相應(yīng)的腳本來(lái)完成構(gòu)建的過(guò)程。隨著先進(jìn)的IDE 環(huán)境的發(fā)展,慢慢的人們就不愿意再編寫(xiě)Make腳本了??墒乾F(xiàn)在,為了自動(dòng)構(gòu)建的目標(biāo),我們需要回歸到手工編寫(xiě)Make腳本的歷史上去。應(yīng)該說(shuō),IDE環(huán)境中的構(gòu)建方式側(cè)重于個(gè)人開(kāi)發(fā),而自動(dòng)構(gòu)建則側(cè)重于團(tuán)隊(duì)開(kāi)發(fā)
自動(dòng)構(gòu)建目標(biāo)就是通過(guò)一個(gè)簡(jiǎn)單的命令就能夠全部的構(gòu)建過(guò)程。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛(ài)好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書(shū)、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過(guò)深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評(píng)論 查看完整評(píng)論 | |