|
撰/看場人
如果你沒有聽過軟件工程(Software Engineering),那就要認真了解它了。它是電腦業界目前最重要的課題之一。筆者撰寫本文亦是希望可以推廣它。 本文目錄軟件工程是甚麼? 軟件工程(Software Engineering)是一門工程專業,它探討了如何有效地設計、開發、維護軟件系統。它使用來自電腦科學、項目管理學等的技術和方法,並改善了軟件的質素和開發者的生產力。 依目前軟件工程的發展,它籠統地包含工具(如OOD、CASE、UML)、紀律、正規方法(指套用其他工程學般的正規嚴格開發方法)、過程(軟件開發的標準程序,如CMM)與專業守則(如業界道德、條款等)等幾個項目。 為何需要軟件工程? 軟件規模和成本不斷上升 舊時的軟件開發方法已經不敷應用了 軟件的複雜性不斷上升 軟件功能需求的上升開始比軟件開發的速度還要快 軟件錯誤的影響 經典例子:美國太空總署前往金星的太空船,因為原碼中打錯字,而整船報銷了 軟件的不斷演進 60年代指出的軟件危機(Software Crisis),說明了業界經常出現軟件的要求增長遠快於軟件開發速度,引致軟件業成本不斷上升,質素卻不斷不降。 欠缺量度軟件質素的方法 我們需要建立量度軟件開發成本和質素的方法,並有效建立軟件開發程序
由此可見,一套有系統的工程方法,對於軟件業的健康發展是十分重要的。 典型軟件生命週期的例子 - Waterfall Life Cycle Model 所謂軟件生命週期,就是軟件開發程序的模型。當中典型例子的開發模型就是Waterfall Model,當然我們已經有其他更好的模型(事實上Waterfall Model亦已被認為在很多方面也乏善足陳),不過Waterfall也能反映開發軟件的重要步驟和階段,是故我們在此引在例子。(按:這一系列文章的其他部份並不是以Waterfall Model為基礎,請注意) 用家需求分析和規格 (Requirement Analysis and Specification) 定義"What is the problem",定清用家需求,並建立文件說明。 系統設計 (Design) 定義"How to solve the problem",設計出解決用家需求的系統,包括了Architectural Design和Detailed Design。 編碼和模組測試 (Coding and Unit Testing) 將系統分割成不同模組,並各自進行編碼和測試。 整合和系統測試 (Integration and System Testing) 將所有模組整合成完整系統並作最後測試。 發行及維護 (Delivery and Maintenance) 將產品發行或給用戶運行,並開始進行維護,包括修正性、調整性和改良性的維護。

圖一:Waterfall Life Cycle Model 關於軟件開發的種種 平均來說,需求分析和設計階段約佔了軟件開發成本的40%,編碼佔了約20%,測試佔了40%。所以單靠好的編程技巧並不等於好的軟件工程技巧;不過,好的編程技巧也有助你學習好的軟件工程技巧。 愈晚期的軟件開發過程,修正軟件的成本就愈貴。然而人們最忽略的卻正是需求分析和規格文件的重要性。 以下是一個諷刺性的軟件生命週期,雖然是玩味性質,卻也反映了業界的典型問題: 熱情 覺醒 頭痛 「問責」 找無辜者開刀 無功者得到表揚和榮譽
軟件工程與其他工程的分別 和土木工程等大有不同,軟件工程來自電腦科學,所研究的系統主要是離散系統(Discrete Systems)而不是連續系統(Continuous Systems)。於是當系統出現輕微改變時,離散系統可能會出現非常大的落差,做成軟件工程系統的通常都比較不穩定。這是SE比一般工程學更難掌握的原因之一。 另外,軟件工程是人力集中、智慧型的工業,不能像其他工程般可以遵循高度系統化和規範化的程序。軟件工程是管理人才資源的藝術,所以讓軟件業踏上工程化的道路比任何其他工程學都要難走。 小結 在本章,你可了解到軟件工程大概是甚麼。總括來說,軟件工程就是要發展更有效及更有質素地開發軟件的方法。套用天藍創立人間的一句戲言:問「你想要個怎樣的軟件?」答「好和沒有BUG!」,這反映了用家甚至連自己想要甚麼東西也不知道,可見軟件工程要解決的,絕不是個簡單的問題。筆者建議大家也閱讀 Wikipedia上的相關資訊,它介紹了軟件工程的歷史、與其他學科的關係等等。 
圖二:軟件開發的「經典情況」(按圖放大) 在下一章,我們會討論軟件的本質,以及甚麼是一套優良軟件的條件。 資料參考
相關連結:
- 軟件工程 (Wikipedia)
- 參考書 (Amazon)
- 軟件工程入門(二)
- 軟件工程入門(三)
相關文件:
- 圖一:Waterfall Life Cycle Model
- 圖二:軟件開發的「經典情況」
- 圖二:軟件開發的「經典情況」(放大)
發表日期:2005-02-04
|
|
|