
- 軟體工程教程
- 軟體工程主頁
- 軟體工程概述
- 軟體開發生命週期
- 軟體專案管理
- 軟體需求
- 軟體設計基礎
- 分析與設計工具
- 軟體設計策略
- 軟體使用者介面設計
- 軟體設計複雜性
- 軟體實現
- 軟體測試概述
- 軟體維護
- CASE工具概述
- 軟體 - 考試題及答案
- 軟體工程 - 考試題及答案
軟體工程概述
讓我們首先了解軟體工程的含義。這個術語由兩個片語成:軟體和工程。
軟體不僅僅是程式程式碼。程式是可以執行的程式碼,用於某種計算目的。軟體被認為是可執行程式程式碼、相關庫和文件的集合。針對特定需求而製作的軟體稱為軟體產品。
工程另一方面,是關於使用明確定義的科學原理和方法開發產品。

軟體工程是與使用明確定義的科學原理、方法和程式開發軟體產品相關的工程分支。軟體工程的結果是高效可靠的軟體產品。
定義
IEEE將軟體工程定義為:
(1) 對軟體的開發、執行和維護應用系統化、規範化、可量化的方法;即對軟體應用工程。
(2) 對如上所述方法的研究。
德國計算機科學家Fritz Bauer將軟體工程定義為:
軟體工程是為了經濟地獲得可靠並在實際機器上高效工作的軟體而建立和使用健全的工程原理。
軟體演化
使用軟體工程原理和方法開發軟體產品的過程稱為軟體演化。這包括軟體的初始開發及其維護和更新,直到開發出滿足預期需求的所需軟體產品。

演化始於需求收集過程。之後,開發人員建立預期軟體的原型,並在軟體產品開發的早期階段向用戶展示以獲取反饋。使用者提出更改建議,在此基礎上,連續的更新和維護也會不斷變化。這個過程改變了原始軟體,直到完成所需的軟體。
即使使用者已經擁有所需的軟體,不斷發展的技術和不斷變化的需求也迫使軟體產品做出相應的改變。從頭開始重新建立軟體並一一滿足需求是不可行的。唯一可行且經濟的解決方案是更新現有軟體,使其符合最新的需求。
軟體演化定律
Lehman提出了軟體演化的定律。他將軟體分為三類:
- S型(靜態型) - 這種軟體嚴格按照定義的規範和解決方案工作。解決方案和實現方法在編碼之前都已完全理解。S型軟體最不容易發生變化,因此是最簡單的。例如,用於數學計算的計算器程式。
- P型(實用型) - 這種軟體包含一系列程式。它由程式能夠執行的確切操作來定義。在這種軟體中,可以描述規範,但解決方案並非立即可見。例如,遊戲軟體。
- E型(嵌入型) - 這種軟體與現實世界的環境需求密切相關。這種軟體具有高度的演化性,因為現實世界的情況中存在各種法律、稅收等方面的變化。例如,線上交易軟體。
E型軟體演化
Lehman提出了E型軟體演化的八大定律:
- 持續變化 - E型軟體系統必須持續適應現實世界的變化,否則它將逐漸變得越來越無用。
- 複雜性增加 - 隨著E型軟體系統的演化,除非採取措施維持或降低其複雜性,否則其複雜性往往會增加。
- 熟悉性守恆 - 必須不惜一切代價保留對軟體的熟悉程度或關於其開發方式、為何以這種特定方式開發等的知識,以實施系統更改。
- 持續增長 - 為了解決某個業務問題而設計的E型系統,其實施更改的大小會根據業務生活方式的變化而增長。
- 質量下降 - 除非嚴格維護並適應不斷變化的操作環境,否則E型軟體系統的質量會下降。
- 反饋系統 - E型軟體系統構成多環、多級反饋系統,必須將其視為多環、多級反饋系統才能成功地進行修改或改進。
- 自調節 - E型系統演化過程是自調節的,產品和過程測量的分佈接近正態分佈。
- 組織穩定性 - 在E型系統的整個生命週期中,平均有效的全球活動率是不變的。
軟體正規化
軟體正規化指的是在設計軟體時採取的方法和步驟。今天已經提出了許多方法並且正在使用中,但是我們需要了解這些正規化在軟體工程中的地位。這些正規化可以組合成各種類別,儘管它們彼此包含。

程式設計正規化是軟體設計正規化的子集,而軟體設計正規化又是軟體開發正規化的子集。
軟體開發正規化
這種正規化被稱為軟體工程正規化,其中應用了所有與軟體開發相關的工程概念。它包括各種研究和需求收集,這有助於構建軟體產品。它包括:
- 需求收集
- 軟體設計
- 程式設計
軟體設計正規化
這種正規化是軟體開發的一部分,包括:
- 設計
- 維護
- 程式設計
程式設計正規化
這種正規化與軟體開發的程式設計方面密切相關。這包括:
- 編碼
- 測試
- 整合
軟體工程的必要性
軟體工程的必要性源於使用者需求和軟體執行環境的高變化率。
- 大型軟體 - 建造一堵牆比建造一座房子或建築物更容易,同樣,隨著軟體規模的擴大,工程必須介入,賦予其科學的過程。
- 可擴充套件性 - 如果軟體過程不是基於科學和工程概念,那麼重新建立新軟體將比擴充套件現有軟體更容易。
- 成本 - 正如硬體行業已經展示了其技能,大規模製造已經降低了計算機和電子硬體的價格。但是,如果未採用適當的過程,軟體成本仍然很高。
- 動態特性 - 軟體不斷發展和適應的特性很大程度上取決於使用者工作環境。如果軟體的特性一直在變化,則需要對現有軟體進行新的增強。這就是軟體工程發揮良好作用的地方。
- 質量管理 - 更好的軟體開發過程能夠提供更好、更優質的軟體產品。
優秀軟體的特性
軟體產品可以透過其提供的功能以及易用性來評價。該軟體必須在以下方面令人滿意:
- 執行方面
- 過渡方面
- 維護
設計精良的軟體應具有以下特性:
執行方面
這告訴我們軟體在執行中的表現如何。它可以透過以下方面來衡量:
- 預算
- 可用性
- 效率
- 正確性
- 功能性
- 可靠性
- 安全性
- 安全性
過渡方面
當軟體從一個平臺遷移到另一個平臺時,這方面非常重要。
- 可移植性
- 互操作性
- 可重用性
- 適應性
維護
這方面簡要介紹了軟體在不斷變化的環境中維持自身能力如何。
- 模組化
- 可維護性
- 靈活性
- 可擴充套件性
簡而言之,軟體工程是計算機科學的一個分支,它使用明確定義的工程概念來生產高效、耐用、可擴充套件、符合預算和按時交付的軟體產品。