軟件開發與攀巖運動

Creative Commons License
本作品採用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議 進行許可。

 

【本文成文於2004年6月,曾作爲公司內部資料使用。日前重拾舊文,感慨頗多。時至今日,文中的部分內容已經過時(如頻繁測試的概念已經被測試驅動開發所取代),但作爲軟件開發工作流程的通俗版仍有一定的價值,希望對涉足軟件開發領域的新人能有所幫助。】

逐漸變大的BUG!

在軟件系統的開發過程中,不管是系統的全部生命週期,還是一個模塊的開發過程。貫穿其中的軟件問題往往有逐步擴大的趨勢。

系統開發過程中的BUG
需求分析時的BUG 設計時的BUG 編碼時的BUG 發佈時的BUG
編碼過程中的BUG
編碼初期發現的BUG 編碼過程中發現的BUG 編碼後期發現的BUG

與此同時,令我們感到困惑的是,隨着BUG的逐漸變大,尋找和消滅這些BUG的難度也隨之變大。也就是說,越到後期,其危險性也越大。尤其是在編碼過程中發現的BUG,如果在編碼後期發現錯誤,那將是我們程序員的災難!想一想在30分鐘內完成的代碼我們將用一天的時間尋找其中的BUG。這對我們的身心將是多麼大的考驗!那麼如何在編碼過程中避免這種BUG逐漸變大的趨勢呢?

攀巖運動

攀巖是一項充滿刺激的運動,爲了不使你在攀巖過程中有個三長兩短,安全裝備是必要的。那麼攀巖活動中我們需要使用哪些工具,注意哪些問題呢?

最高峯:
最高峯就是攀巖的目標,這幾乎是第一要素,我們不可能在巖壁上胡亂爬吧!

大地:
我們生命的保障,也是冒險活動的起始點。

攀登點:
攀巖過程的每一步我們都在尋找下一個攀登點。攀登點是穩定的,所謂一步一個腳印。攀登點間隔不易過小,否則則有停滯不前的趨勢;攀登點間隔不易過大,否則將有很大的風險。

鐵釺和安全繩:
我們每攀登幾步,就應該在巖壁上打上一個鐵釺,並將安全繩固定在上邊。如果我們在攀爬過程中失足,還好有剛剛固定的鐵釺保護,我們可以從最後一個鐵釺處重新向上攀爬。如果我們在攀巖過程中忘記使用鐵釺,一旦失足,那…

在攀巖過程中,每爬一步,離目標就越近一步,但我們的危險就越大。這跟軟件開發是不是很象呢?在攀巖活動中,有很多工具和措施保護我們遠離危險,軟件開發是否有相似的工具和措施呢?

軟件開發——程序員的攀巖活動

常規的開發流程

下圖是我們常見的軟件開發流程,讓我們看看它與攀巖活動是否有相似的地方?

 

式樣書與最高峯

作爲軟件開發的第一要素,式樣書的重要性怎樣形容都不過分。它是我們軟件開發的最高峯,我們的所有活動都以式樣書爲準。大型系統的式樣書主要以用例說明爲主;模塊開發的式樣書主要以函數說明爲主。

 

原型與大地

任何軟件系統都有一個原型,這就是我們軟件開發的大地。它是基礎,是我們行動的指南。在大型系統中原型意味着架構,它是綜合測試的基礎;在模塊開發中原型意味着測試環境,它是單元測試的基礎。

 

頻繁測試與攀登點

軟件開發是一個充滿創造性的工作,每一步都充滿了不穩定的因素。和攀登點的概念相似,我們在開發過程中的攀登點必須準確、間隔必須適中。準確性可由測試完成,而間隔適中意味着頻繁。頻繁測試可以達到降低風險的目的,也是避免BUG變大的首要手段。要想實施頻繁測試,單元測試將起主導作用。

 

版本管理與鐵釺

在攀巖運動中,鐵釺起着至關重要的作用。它首先是一個攀登點,其次它比攀登點更穩定。在軟件開發過程中,版本管理與鐵釺起着異曲同工的作用。在軟件開發過程中,只要軟件功能達到一定的穩定性之後,就應將其導入到版本庫中。也就是說在版本庫中存放的版本都是相對穩定的版本。這裏所謂的“穩定”有兩個含意:經過單元測試沒有BUG;實現了某個功能。

 

類似攀巖的開發流程

回過頭來,我們再看一下上面提到的軟件開發流程圖,這一次讓我們變換一下觀察的角度。如下圖,這樣看是否覺得軟件開發更像攀巖呢?

 

來,讓我們攀巖去…

要想玩轉我們的攀巖活動。下面的一系列技能是我們首先要掌握的:

  • 式樣書的寫法(用例說明、函數說明…)

設計人員要會寫式樣書,開發人員要會看式樣書。式樣書的格式在項目組內必須統一,至於內容的質量嗎,就要靠SQA了。

  • 測試用例的編寫方法(單元測試、綜合測試)

理論聯繫實際是重要的。

  • 版本管理工具的使用方法(VSS、CVS以及其它)

這是我們的鐵釺!是各位開發人員必須掌握的工具。

  • 單元測試工具的使用方法(CppUnit、JUnit以及其它)

想做攀巖高手嗎?拿起單元測試的武器吧!另外,原則就象法律一樣,是很有權威的。我們的攀巖活動也有幾個原則,必須遵守:

  • 先建立原型(基礎架構或測試環境)、再編寫功能代碼;
  • 頻繁測試——寫一點兒代碼,測試一下;
  • 功能代碼未穩定之前不能導入版本庫。

“攀巖模式”

統一軟件開發過程(RUP)提出的軟件開發模式是:用例驅動、以架構爲中心、迭代和增量的。是否和我們的攀巖活動(式樣書驅動、原型爲中心、頻繁測試與版本管理)相似呢?我們可以將“攀巖模式”作爲RUP的通俗版加以理解。

 


原文地址:http://darxin.info/archives/2010/04/24/91afada3/
歡迎訪問 阿笨兔德的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章