軟件工程基礎
1. 概述
1.1 軟件的生存週期
- 可行性分析和項目開發計劃
- 需求分析
- 概要設計
- 詳細設計
- 編碼
- 測試
- 維護
2. 軟件過程模型
-
瀑布模型。將軟件生存週期的各個部分順序連接劃分爲若干個階段。
-
增量模型
對瀑布模型的基本成分進行分版本迭代。每一個需求分段爲一個增量產品,每個增量產品可以分別開發。
-
演化模型
快速開發一個簡單的產品,通過市場的驗證和用戶的反饋,優化產品的需求和開發方向。演化模型可分爲原型模型和螺旋模型等。- 原型模型
- 螺旋模型
- 原型模型
-
噴泉模型
3. 軟件開發方法
- 結構化方法
- Jackson方法
- 原型方法
- 面向對象方法
- 敏捷方法
敏捷方法的總體目標是“儘可能早地、持續地對有價值的產品的交付”使客戶滿意。
3.1 敏捷方法
- 極限編程(XP)
極限編程由四部分組成,彼此相互依賴、關聯,並通過行爲貫穿整個軟件生存週期。
(一)四大價值觀:溝通、簡單性、反饋和勇氣
(二)五個原則:快速反饋、簡單性假設、逐步修改、提倡更改和優質工作。
(三)12個最佳實踐:計劃遊戲(快速制定計劃、隨着細節的不斷變化而完善)、小型發佈、隱喻、簡單設計、測試先行、重構、結對編程、集體代碼所有制、繼續集成、每週工作40小時、現場客戶和編碼標準。 - 水晶法(Crystal)
每一個不同的項目都需要一套不同的策略、約定和方法論。 - 並列爭球法(Scrum)
把每30天的一次迭代稱爲一個“衝刺”,並按需求的優先級來實現產品。多個自組織和自治的小組並行的遞增實現產品。協調通過簡短的日常會議來進行,就像橄欖球中的“並列爭球”。 - 自適應軟件開發(ASD)
ASD有6個基本原則:有一個使命作爲指導;特徵被視爲客戶價值的關鍵點;過程中的等待很重要,重做和做同樣關鍵;變化不是改正而是對軟件開發實際情況的調整;確定的交付時間迫使開發者認證考慮每個版本的關鍵需求;風險控制。
4. 成本估算方法
估算軟件開發所需成本、時間和工作量。常用估算方法有三種:
- 基於已經完成的類似項目進行估算。
- 基於分解技術進行估算。包括問題分解和過程分解。問題分解是把問題分解爲多個小問題來估算。過程分解是把軟件開發過程(分析、設計、編碼、測試)進行分解估算。
- 基於經驗估算模型的估算。典型的經驗估算模型有IBM估算模型、COCOMO估算模型、Putnam估算模型。
多個估算模型可以組合使用,提高估算精度。
- 自頂向下估算方法
- 自底向上估算方法
- 差別估算方法
- 其他估算方法
- COCOMO模型
- COCOMOII模型
- Putnam模型
5. 進度管理
5.1 進度管理的基本原則
- 劃分
- 相互依賴性
- 時間分配
- 工作量確認
- 確定責任
- 明確輸出結果
- 確定里程碑
5.2 進度安排
採用圖示的方法展示項目的進展情況。圖中需包含:
(1)各個任務計劃的開始時間和完成時間
(2)各個任務的完成標誌
(3)各個任務與參與的工作人數,各個任務與工作量之間的銜接情況
(4)完成各個任務所需的物理資源和數據資源
進度安排的常用圖形有甘特圖(Gantt)和項目計劃評審技術圖(PERT)。
- Gantt圖。
- PERT圖
鬆弛時間爲0的事件流是完成項目的關鍵路徑。如下圖的關鍵事件流是1-2-3-4-6-8-10-11。
6. 軟件項目的組織
軟件項目組織有三條原則
- 儘早落實責任
- 減少交流接口
- 責任均衡
組織結構的模式
- 按項目劃分模式
- 按職能劃分模式
- 矩陣模式
程序設計小組的組織方式
- 主程序員制小組。一名主程序員負責小組技術活動,分配任務,協調技術問題,必要時完成程序的關鍵部分。
- 民主制小組。小組各成員地位平等,有組長,但是工作目標和決策都是由全體成員集體決定,相互合作。
- 層次式小組。組長領導若干高級程序員,每個高級程序員領導若干程序員。
7. 軟件質量管理
7.1 ISO/IEC 9126軟件質量模型
7.2 Mc Call軟件質量模型
8. 軟件配置管理
8.1 基線
基線是軟件生存週期中各個階段的的一個特定點。用來工作劃分,用作檢查點用來檢查各階段的完成情況。
8.2 軟件配置項
- 系統規格說明書
- 軟件項目實施計劃
- 軟件需求規格說明書
- 軟件設計規格說明書(數據設計,體系結構設計、模塊設計、接口設計、對象描述)
- 源代碼清單
- 測試計劃和過程、測試用例和測試結果記錄
- 操作和安裝手冊
- 可執行程序
- 數據庫描述
- 用戶手冊
- 維護文檔(如軟件問題報告、維護請求、工程編程次序)
- 軟件工程標準
- 項目開發小結
8.3 版本控制
軟件的版本升級,使用文檔記錄各個版本的時間、更新內容,功能特點等。
8.4 變更控制
軟件工程過程中某一階段的變更加以控制和管理,保持修改信息,把信息傳遞到下一階段。
9. 風險管理
略
10. 軟件複雜性度量
10.1 McCabe度量法