計算機學科——軟件工程

       軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科。它涉及到程序設計語言、數據庫、軟件開發工具、系統平臺、標準、設計模式等方面。

基本介紹

軟件工程一直以來都缺乏一個統一的定義,很多學者、組織機構都分別給出了自己的定義:

BarryBoehm:運用現代科學技術知識來設計並構造計算機程序及爲開發、運行和維護這些程序所必需的相關文件資料。

IEEE:在軟件工程術語彙編中的定義:軟件工程是:1.將系統化的、嚴格約束的、可量化的方法應用於軟件的開發、運行和維護,即將工程化應用於軟件;2.在1中所述方法的研究

FritzBauer:在NATO會議上給出的定義:建立並使用完善的工程化原則,以較經濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法。

《計算機科學技術百科全書》:軟件工程是應用計算機科學、數學、邏輯學及管理科學等原理,開發軟件的工程。軟件工程借鑑傳統工程的原則、方法,以提高質量、降低成本和改進算法。其中,計算機科學、數學用於構建模型與算法,工程科學用於制定規範、設計範型(paradigm)、評估成本及確定權衡,管理科學用於計劃、資源、質量、成本等管理。

比較認可的一種定義認爲:軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。

內涵:

一、軟件工程過程是指爲獲得軟件產品,在軟件工具的支持下由軟件工程師完成的一系列軟件工程活動,包括以下四個方面:

1、P(Plan)——軟件規格說明。規定軟件的功能及其運行時的限制。

2、D(DO)——軟件開發。開發出滿足規格說明的軟件。

3、C(Check)——軟件確認。確認開發的軟件能夠滿足用戶的需求。

4、A(Action)——軟件演進。軟件在運行過程中不斷改進以滿足客戶新的需求。

二、從軟件開發的觀點看,它就是使用適當的資源(包括人員,軟硬件資源,時間等),爲開發軟件進行的一組開發活動,在活動結束時輸入(即用戶的需求)轉化爲輸出(最終符合用戶需求的軟件產品)。三個階段:定義階段:可行性研究初步項目計劃、需求分析; 開發階段:概要設計、詳細設計、實現、測試;運行和維護階段:運行、維護、廢棄原則:1、抽象;2、信息隱蔽;3、模塊化;4、局部化;5、確定性;6,一致性;7、完備性;8、可驗證性

發展過程

       軟件是由計算機程序和程序設計的概念發展演化而來的,是在程序和程序設計發展到一定規模並且逐步商品化的過程中形成的。軟件開發經歷了程序設計階段、軟件設計階段和軟件工程階段的演變過程。

程序設計階段

       程序設計階段出現在1946年~1955年。此階段的特點是:尚無軟件的概念,程序設計主要圍繞硬件進行開發,規模很小,工具簡單,無明確分工(開發者和用戶),程序設計追求節省空間和編程技巧,無文檔資料(除程序清單外),主要用於科學計算。

軟件設計階段

       軟件設計階段出現在1956年~1970年。此階段的特點是:硬件環境相對穩定,出現了“軟件作坊”的開發組織形式。開始廣泛使用產品軟件(可購買),從而建立了軟件的概念。隨着計算機技術的發展和計算機應用的日益普及,軟件系統的規模越來越龐大,高級編程語言層出不窮,應用領域不斷拓寬,開發者和用戶有了明確的分工,社會對軟件的需求量劇增。但軟件開發技術沒有重大突破,軟件產品的質量不高,生產效率底下,從而導致了“軟件危機”的產生。

軟件工程階段

       自1970年起,軟件開發進入了軟件工程階段。由於“軟件危機”的產生,迫使人們不得不研究、改變軟件開發的技術手段和管理方法。從此軟件產生進入了軟件工程時代。此階段的特定是:硬件已向巨型化、微型化、網絡化和智能化四個方向發展,數據庫技術已成熟並廣泛應用,第三代、第四代語言出現;第一代軟件技術:結構化程序設計在數值計算領域取得優異成績;第二代軟件技術:軟件測試技術、方法、原理用於軟件生產過程;第三代軟件技術:處理需求定義技術用於軟件需求分析和描述。

基本目標

       軟件工程的目標是:在給定成本、進度的前提下,開發出具有適用性、有效性、可修改性、可靠性、可理解性、可維護性、可重用性、可移植性、可追蹤性、可互操作性和滿足用戶需求的軟件產品。追求這些目標有助於提高軟件產品的質量和開發效率,減少維護的困難。

(1)適用性:軟件在不同的系統約束條件下,使用戶需求得到滿足的難易程度。

(2)有效性:軟件系統能最有效的利用計算機的時間和空間資源。各種軟件無不把系統的時/空開銷作爲衡量軟件質量的一項重要技術指標。很多場合,在追求時間有效性和空間有效性時會發生矛盾,這時不得不犧牲時間有效性換取空間有效性或犧牲空間有效性換取時間有效性。時/空折衷是經常採用的技巧。

(3)可修改性:允許對系統進行修改而不增加原系統的複雜性。它支持軟件的調試和維護,是一個難以達到的目標。

(4)可靠性:能防止因概念、設計和結構等方面的不完善造成的軟件系統失效,具有挽回因操作不當造成軟件系統失效的能力。

(5)可理解性:系統具有清晰的結構,能直接反映問題的需求。可理解性有助於控制系統軟件複雜性,並支持軟件的維護、移植或重用。

(6)可維護性:軟件交付使用後,能夠對它進行修改,以改正潛伏的錯誤,改進性能和其它屬性,使軟件產品適應環境的變化等。軟件維護費用在軟件開發費用中佔有很大的比重。可維護性是軟件工程中一項十分重要的目標。

(7)可重用性:把概念或功能相對獨立的一個或一組相關模塊定義爲一個軟部件。可組裝在系統的任何位置,降低工作量。

(8)可移植性:軟件從一個計算機系統或環境搬到另一個計算機系統或環境的難易程度。

(9)可追蹤性:根據軟件需求對軟件設計、程序進行正向追蹤,或根據軟件設計、程序對軟件需求的逆向追蹤的能力。

(10)可互操作性:多個軟件元素相互通信並協同完成任務的能力。

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