深入單元測試系列之一軟件測試的歷史

這是單元測試系列文章第一篇,完整的系列內容:

深入單元測試系列之一,軟件測試的歷史
深入單元測試系列之二,TDD和單元測試
深入單元測試系列之三,Junit5和Mockito
深入單元測試系列之四,測試的度量
深入單元測試系列之五,持續(xù)集成和持續(xù)交付

軟件測試是在軟件的發(fā)展過程中逐漸產生和成熟的,要了解單元測試,也不得不從軟件測試說起,只有了解一件事物的過去和歷史背景,才能站在更高的視角去看待這個世界。

1962年6月22日9點26分,在弗羅里達州的卡納維拉爾角火箭發(fā)射基地,隨著一聲巨響,Atlas號火箭點火成功騰空而起,它裝載著水手一號探測器準備送入太空。發(fā)射站的工作人員緊張地盯著監(jiān)控中心的屏幕,因巡航系統故障火箭已經偏離了正常的軌道,工作人員切換到了備用雷達,切換之后發(fā)現一處BUG導致雷達無法正常運行,偏離越來越遠,第293秒,安全主管做出決定,摧毀該火箭,又一聲巨響,Atlas瞬時化為一團火球,造價約1850美元的設備付之一炬。在此之前,相同的系統已經成功發(fā)射過兩次,沒有出現問題,是因為導航系統正常而未啟動備用雷達系統,而這一次是切換到有問題的雷達系統了。一個月之后,該BUG被修復,水手二號發(fā)射成功。

歷史總在不停地重演,大約從1995年開始,成千上萬的程序員忙著升級程序,解決千年蟲問題,將原本設計成兩位的年份轉換為四位的年份。2011年,捷豹被迫召回2006年-2010年期間出廠的柴油動力車,因為軟件缺陷阻止巡航系統關閉,發(fā)動機停下來才能關閉巡航控制。

1957年,Charles L Baker在IBM工作期間,讀到一本書《Digital Computer Programming》獲得靈感,提出了Debugging和Testing進行區(qū)分的觀點,這是首次將測試作為軟件開發(fā)中的獨立活動的里程碑,他為此寫文章講述了他在項目中的應用,在此之前通常認為軟件的測試就是Debugging。

1979年,經典之作《The Art of Software Testing》問世,作者Glenford J. Myers,當時同樣在IBM工作,曾經參與過System360的研發(fā)工作,他提出了關于測試的核心觀點:測試是為了發(fā)現程序中錯誤而執(zhí)行程序的過程。在書中探討了代碼檢查、代碼評審、測試用例的設計、模塊測試、系統測試、調試等測試相關的話題,至今廣泛流傳。


1983年,美國國家標準局發(fā)布“Guideline for Lifecycle Validation, Verification and Testing of Computer Software”,明確定義了測試的兩個活動:

Verification: Are we building the product right
Validation: Are we building the right product

軟件測試工程在這個時期得到了快速的發(fā)展,軟件測試正作為一門獨立的,專業(yè)的,具有影響力的工程學發(fā)展起來了,出現測試經理、測試分析師等職稱,越來越多的測試會議和活動開展了,也有越來越多的文章和刊物出版。這個時期,軟件測試不再是程序驗證的過程,而是貫穿軟件生命周期的活動,包含從需求、設計、單元測試、集成、驗收等過程。

2001年2月,在美國猶他州的雪鳥度假村,有17個中年男性匯聚一堂,本來邀請了一位女士,但是沒有到場。他們在軟件行業(yè)都有二三十年的經驗,可謂是業(yè)界頂級專家,有計算機科學家,有軟件公司CEO,有極限編程XP之父,有Scrum之父,還有重構之父等。這些人對軟件開發(fā)的現狀深惡痛絕,他們雖然觀點各異,但都希望改變低效的、重量級的、高度儀式化的軟件開發(fā)過程,比如瀑布方法,找到一個輕量而高效的方法。他們激烈討論了兩天,在頭腦風暴中不斷擦出思想的火花,最終排除萬難達成一致,簽署了影響軟件行業(yè)二十年的《敏捷宣言》。一石激起千層浪,宣言發(fā)布后,簇擁者不斷,后人不斷在敏捷宣言的基礎上實踐和改進,產生了大量提升軟件開發(fā)效率的方法和工具。

個體和互動?高于 流程和工具
工作的軟件?高于 詳盡的文檔
客戶合作?高于 合同談判
響應變化?高于 遵循計劃
也就是說,盡管右項有其價值,我們更重視左項的價值

敏捷軟件開發(fā)宣言

作為歷史的見證者和推動者,這段歷史在Bob大叔(Robert C. Martin)的書《敏捷整潔之道》中有更詳細的描述。宣言下方的署名第一個Kent Beck就是極限編程和測試驅動開發(fā)的創(chuàng)始人,在Java流行之前,他對Smalltalk編程語言造詣頗深,著有《Smalltalk Best Practice Patterns》一書,并寫出了Smalltalk的測試框架SUnit。

測試驅動開發(fā)的測試先行,重構,以及小步前進等理念極大的提高了軟件開發(fā)的質量,得到廣泛的支持。測試已經變成了軟件開發(fā)的一部分,測試不僅僅是事后的驗證,還需要在開發(fā)階段就要提前預防,通過重構防止質量變差,代碼腐化。 通過自動化和持續(xù)集成等工具,做到變更即測試,時刻保證軟件的可工作和可用,達到快速交付的目標。例如在Facebook,沒有專門的測試人員,自動化測試案例是由開發(fā)人員完成,我還專門聯系了一個在Facebook的前同事進行了確認,他們團隊就沒有專職測試人員。歷史一次次證明,沒有不變更的需求,總會有測試不出來的生產問題,那么盡早的開始測試,盡早發(fā)現問題,上線之后的風險也就越小,修復的成本也就越低。

隨著云計算、微服務、DevOps、AI等工具和技術的發(fā)展,軟件的規(guī)模越來越復雜,已經不是幾臺服務器就可以獨立運行起來的系統了,可能是成百上千的微服務構成的龐大的復雜系統,不僅僅包含了應用軟件,還包括底層的基礎設置,各種依賴的服務,未來的軟件測試也勢必進化,在效率、智能化、安全性等方面需要更多關注。

下一篇文章將講解TDD的實踐,敬請關注。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 想學習單元測試無從下手,本文對以最易懂的方式介紹單元測試。 若有錯漏,煩請斧正。轉載請注明出處。作者:程序引力 |...
    程序引力閱讀 959評論 0 8
  • 最關鍵價值 :業(yè)務知識、對客戶的理解和把握、對客戶的溝通單元測試 :開發(fā)人員完成集成測試 :主要測試接口項...
    適當車閱讀 399評論 1 2
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學已經沒多少時間了。班主任說已經安排了三個家長分享經驗。 放學鈴聲...
    飄雪兒5閱讀 7,868評論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    余生動聽閱讀 10,918評論 0 11
  • 在妖界我有個名頭叫胡百曉,無論是何事,只要找到胡百曉即可有解決的辦法。因為是只狐貍大家以訛傳訛叫我“傾城百曉”,...
    貓九0110閱讀 3,728評論 7 3

友情鏈接更多精彩內容