這是單元測(cè)試系列文章第一篇,完整的系列內(nèi)容:
深入單元測(cè)試系列之一,軟件測(cè)試的歷史
深入單元測(cè)試系列之二,TDD和單元測(cè)試
深入單元測(cè)試系列之三稻据,Junit5和Mockito
深入單元測(cè)試系列之四,測(cè)試的度量
深入單元測(cè)試系列之五买喧,持續(xù)集成和持續(xù)交付
軟件測(cè)試是在軟件的發(fā)展過(guò)程中逐漸產(chǎn)生和成熟的捻悯,要了解單元測(cè)試,也不得不從軟件測(cè)試說(shuō)起淤毛,只有了解一件事物的過(guò)去和歷史背景今缚,才能站在更高的視角去看待這個(gè)世界。
1962年6月22日9點(diǎn)26分低淡,在弗羅里達(dá)州的卡納維拉爾角火箭發(fā)射基地姓言,隨著一聲巨響,Atlas號(hào)火箭點(diǎn)火成功騰空而起蔗蹋,它裝載著水手一號(hào)探測(cè)器準(zhǔn)備送入太空何荚。發(fā)射站的工作人員緊張地盯著監(jiān)控中心的屏幕,因巡航系統(tǒng)故障火箭已經(jīng)偏離了正常的軌道猪杭,工作人員切換到了備用雷達(dá)餐塘,切換之后發(fā)現(xiàn)一處BUG導(dǎo)致雷達(dá)無(wú)法正常運(yùn)行,偏離越來(lái)越遠(yuǎn)皂吮,第293秒戒傻,安全主管做出決定税手,摧毀該火箭,又一聲巨響稠鼻,Atlas瞬時(shí)化為一團(tuán)火球冈止,造價(jià)約1850美元的設(shè)備付之一炬。在此之前候齿,相同的系統(tǒng)已經(jīng)成功發(fā)射過(guò)兩次,沒(méi)有出現(xiàn)問(wèn)題闺属,是因?yàn)閷?dǎo)航系統(tǒng)正常而未啟動(dòng)備用雷達(dá)系統(tǒng)慌盯,而這一次是切換到有問(wèn)題的雷達(dá)系統(tǒng)了。一個(gè)月之后亚皂,該BUG被修復(fù),水手二號(hào)發(fā)射成功国瓮。
歷史總在不停地重演,大約從1995年開(kāi)始乃摹,成千上萬(wàn)的程序員忙著升級(jí)程序,解決千年蟲(chóng)問(wèn)題孵睬,將原本設(shè)計(jì)成兩位的年份轉(zhuǎn)換為四位的年份。2011年掰读,捷豹被迫召回2006年-2010年期間出廠的柴油動(dòng)力車(chē),因?yàn)檐浖毕葑柚寡埠较到y(tǒng)關(guān)閉蹈集,發(fā)動(dòng)機(jī)停下來(lái)才能關(guān)閉巡航控制。
1957年拢肆,Charles L Baker在IBM工作期間,讀到一本書(shū)《Digital Computer Programming》獲得靈感善榛,提出了Debugging和Testing進(jìn)行區(qū)分的觀點(diǎn),這是首次將測(cè)試作為軟件開(kāi)發(fā)中的獨(dú)立活動(dòng)的里程碑移盆,他為此寫(xiě)文章講述了他在項(xiàng)目中的應(yīng)用,在此之前通常認(rèn)為軟件的測(cè)試就是Debugging咒循。
1979年绞愚,經(jīng)典之作《The Art of Software Testing》問(wèn)世,作者Glenford J. Myers颖医,當(dāng)時(shí)同樣在IBM工作位衩,曾經(jīng)參與過(guò)System360的研發(fā)工作,他提出了關(guān)于測(cè)試的核心觀點(diǎn):測(cè)試是為了發(fā)現(xiàn)程序中錯(cuò)誤而執(zhí)行程序的過(guò)程熔萧。在書(shū)中探討了代碼檢查糖驴、代碼評(píng)審、測(cè)試用例的設(shè)計(jì)佛致、模塊測(cè)試贮缕、系統(tǒng)測(cè)試、調(diào)試等測(cè)試相關(guān)的話題俺榆,至今廣泛流傳感昼。
1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)局發(fā)布“Guideline for Lifecycle Validation, Verification and Testing of Computer Software”罐脊,明確定義了測(cè)試的兩個(gè)活動(dòng):
Verification: Are we building the product right
Validation: Are we building the right product
軟件測(cè)試工程在這個(gè)時(shí)期得到了快速的發(fā)展定嗓,軟件測(cè)試正作為一門(mén)獨(dú)立的,專業(yè)的萍桌,具有影響力的工程學(xué)發(fā)展起來(lái)了宵溅,出現(xiàn)測(cè)試經(jīng)理、測(cè)試分析師等職稱梗夸,越來(lái)越多的測(cè)試會(huì)議和活動(dòng)開(kāi)展了层玲,也有越來(lái)越多的文章和刊物出版。這個(gè)時(shí)期反症,軟件測(cè)試不再是程序驗(yàn)證的過(guò)程辛块,而是貫穿軟件生命周期的活動(dòng),包含從需求铅碍、設(shè)計(jì)润绵、單元測(cè)試、集成胞谈、驗(yàn)收等過(guò)程尘盼。
2001年2月,在美國(guó)猶他州的雪鳥(niǎo)度假村烦绳,有17個(gè)中年男性匯聚一堂卿捎,本來(lái)邀請(qǐng)了一位女士,但是沒(méi)有到場(chǎng)径密。他們?cè)谲浖袠I(yè)都有二三十年的經(jīng)驗(yàn)午阵,可謂是業(yè)界頂級(jí)專家,有計(jì)算機(jī)科學(xué)家,有軟件公司CEO底桂,有極限編程XP之父植袍,有Scrum之父,還有重構(gòu)之父等籽懦。這些人對(duì)軟件開(kāi)發(fā)的現(xiàn)狀深惡痛絕于个,他們雖然觀點(diǎn)各異,但都希望改變低效的暮顺、重量級(jí)的、高度儀式化的軟件開(kāi)發(fā)過(guò)程捶码,比如瀑布方法宙项,找到一個(gè)輕量而高效的方法尤筐。他們激烈討論了兩天洞就,在頭腦風(fēng)暴中不斷擦出思想的火花旬蟋,最終排除萬(wàn)難達(dá)成一致,簽署了影響軟件行業(yè)二十年的《敏捷宣言》冕碟。一石激起千層浪匆浙,宣言發(fā)布后,簇?fù)碚卟粩嗵羰笕瞬粩嘣诿艚菪缘幕A(chǔ)上實(shí)踐和改進(jìn)迎捺,產(chǎn)生了大量提升軟件開(kāi)發(fā)效率的方法和工具查排。
個(gè)體和互動(dòng)?高于 流程和工具
工作的軟件?高于 詳盡的文檔
客戶合作?高于 合同談判
響應(yīng)變化?高于 遵循計(jì)劃
也就是說(shuō),盡管右項(xiàng)有其價(jià)值范舀,我們更重視左項(xiàng)的價(jià)值
作為歷史的見(jiàn)證者和推動(dòng)者,這段歷史在Bob大叔(Robert C. Martin)的書(shū)《敏捷整潔之道》中有更詳細(xì)的描述聪全。宣言下方的署名第一個(gè)Kent Beck就是極限編程和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的創(chuàng)始人辅辩,在Java流行之前玫锋,他對(duì)Smalltalk編程語(yǔ)言造詣?lì)H深,著有《Smalltalk Best Practice Patterns》一書(shū)谦炬,并寫(xiě)出了Smalltalk的測(cè)試框架SUnit节沦。
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的測(cè)試先行甫贯,重構(gòu),以及小步前進(jìn)等理念極大的提高了軟件開(kāi)發(fā)的質(zhì)量赔桌,得到廣泛的支持渴逻。測(cè)試已經(jīng)變成了軟件開(kāi)發(fā)的一部分裸卫,測(cè)試不僅僅是事后的驗(yàn)證,還需要在開(kāi)發(fā)階段就要提前預(yù)防茧泪,通過(guò)重構(gòu)防止質(zhì)量變差队伟,代碼腐化幽勒。 通過(guò)自動(dòng)化和持續(xù)集成等工具,做到變更即測(cè)試顷霹,時(shí)刻保證軟件的可工作和可用击吱,達(dá)到快速交付的目標(biāo)。例如在Facebook朵纷,沒(méi)有專門(mén)的測(cè)試人員袍辞,自動(dòng)化測(cè)試案例是由開(kāi)發(fā)人員完成搅吁,我還專門(mén)聯(lián)系了一個(gè)在Facebook的前同事進(jìn)行了確認(rèn)落午,他們團(tuán)隊(duì)就沒(méi)有專職測(cè)試人員。歷史一次次證明,沒(méi)有不變更的需求盐类,總會(huì)有測(cè)試不出來(lái)的生產(chǎn)問(wèn)題呛谜,那么盡早的開(kāi)始測(cè)試,盡早發(fā)現(xiàn)問(wèn)題猫妙,上線之后的風(fēng)險(xiǎn)也就越小割坠,修復(fù)的成本也就越低妒牙。
隨著云計(jì)算、微服務(wù)敢朱、DevOps、AI等工具和技術(shù)的發(fā)展孝常,軟件的規(guī)模越來(lái)越復(fù)雜精续,已經(jīng)不是幾臺(tái)服務(wù)器就可以獨(dú)立運(yùn)行起來(lái)的系統(tǒng)了箍铲,可能是成百上千的微服務(wù)構(gòu)成的龐大的復(fù)雜系統(tǒng),不僅僅包含了應(yīng)用軟件洛巢,還包括底層的基礎(chǔ)設(shè)置稿茉,各種依賴的服務(wù)漓库,未來(lái)的軟件測(cè)試也勢(shì)必進(jìn)化,在效率渺蒿、智能化茂装、安全性等方面需要更多關(guān)注少态。
下一篇文章將講解TDD的實(shí)踐彼妻,敬請(qǐng)關(guān)注豆茫。