對軟件工程的認識
軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科。它涉及到程序設計語言、數據庫、軟件開發工具、系統平臺、標準、設計模式等方面。軟件工程是應用計算機科學、數學、邏輯學及管理科學等原理,開發軟件的工程。
軟件工程借鑒傳統工程的原則、方法,以提高質量、降低成本和改進算法。其中,計算機科學、數學用於構建模型與算法,工程科學用於制定規範、設計範型(paradigm)、評估成本及確定權衡,管理科學用於計劃、資源、質量、成本等管理。比較認可的一種定義認為:軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。軟件是由計算機程序和程序設計的概念發展演化而來的,是在程序和程序設計發展到一定規模並且逐步商品化的過程中形成的。軟件開發經歷了程序設計階段、軟件設計階段和軟件工程階段的演變過程。
自1970年起,軟件開發進入了軟件工程階段。由於“軟件危機”的產生,迫使人們不得不研究、改變軟件開發的技術手段和管理方法。從此軟件產生進入了軟件工程時代。此階段的特定是:硬件已向巨型化、微型化、網絡化和智能化四個方向發展,數據庫技術已成熟並廣泛應用,第三代、第四代語言出現;第一代軟件技術:結構化程序設計在數值計算領域取得優異成績;第二代軟件技術:軟件測試技術、方法、原理用於軟件生產過程;第三代軟件技術:處理需求定義技術用於軟件需求分析和描述。
軟件工程的目標是:在給定成本、進度的前提下,開發出具有適用性、有效性、可修改性、可靠性、可理解性、可維護性、可重用性、可移植性、可追蹤性、可互操作性和滿足用戶需求的軟件產品。追求這些目標有助於提高軟件產品的質量和開發效率,減少維護的困難。
(1)適用性:軟件在不同的系統約束條件下,使用戶需求得到滿足的難易程度。
(2)有效性:軟件系統能最有效的利用計算機的時間和空間資源。各種軟件無不把系統的時/空開銷作為衡量軟件質量的一項重要技術指標。很多場合,在追求時間有效性和空間有效性時會發生矛盾,這時不得不犧牲時間有效性換取空間有效性或犧牲空間有效性換取時間有效性。時/空折衷是經常采用的技巧。
(3)可修改性:允許對系統進行修改而不增加原系統的復雜性。它支持軟件的調試和維護,是一個難以達到的目標。
(4)可靠性:能防止因概念、設計和結構等方面的不完善造成的軟件系統失效,具有挽回因操作不當造成軟件系統失效的能力。
(5)可理解性:系統具有清晰的結構,能直接反映問題的需求。可理解性有助於控制系統軟件復雜性,並支持軟件的維護、移植或重用。
(6)可維護性:軟件交付使用後,能夠對它進行修改,以改正潛伏的錯誤,改進性能和其它屬性,使軟件產品適應環境的變化等。軟件維護費用在軟件開發費用中占有很大的比重。可維護性是軟件工程中一項十分重要的目標。
(7)可重用性:把概念或功能相對獨立的一個或一組相關模塊定義為一個軟部件。可組裝在系統的任何位置,降低工作量。
(8)可移植性:軟件從一個計算機系統或環境搬到另一個計算機系統或環境的難易程度。
(9)可追蹤性:根據軟件需求對軟件設計、程序進行正向追蹤,或根據軟件設計、程序對軟件需求的逆向追蹤的能力。
(10)可互操作性:多個軟件元素相互通信並協同完成任務的能力。
軟件工程的原則是指圍繞工程設計、工程支持以及工程管理在軟件開發過程中必須遵循的原則。
軟件工程的原則有以下四項基本原則:
選取適宜開發範型
該原則與系統設計有關。在系統設計中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經常需要權衡。因此,必須認識需求定義的易變性,采用適宜的開發範型予以控制,以保證軟件產品滿足用戶的要求。
采用合適的設計方法。
在軟件設計中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應性等特征。合適的設計方法有助於這些特征的實現,以達到軟件工程的目標。
提供高質量的工程支持
“工欲善其事,必先利其器”。
在軟件工程中,軟件工具與環境對軟件過程的支持頗為重要。軟件工程項目的質量與開銷直接取決於對軟件工程所提供的支撐質量和效用。
對軟件工程的認識