- 張海藩《軟件工程導論》(第6版)筆記和課后習題詳解
- 圣才電子書
- 10字
- 2021-06-03 18:30:52
第1章 軟件工程學概述
1.1 復習筆記
一、軟件危機
1軟件危機的介紹
(1)概念
軟件危機是指在計算機軟件的開發和維護過程中所遇到的一系列嚴重問題。
(2)典型表現
①對軟件開發成本和進度的估計不準確。
②用戶對“已完成的”軟件系統不滿意的現象經常發生。
③軟件產品的質量往往靠不住。
④軟件常常是不可維護的。
⑤軟件通常沒有適當的文檔資料。
⑥軟件成本在計算機系統總成本中所占的比例逐年上升。
⑦軟件開發跟不上計算機應用迅速普及深入的趨勢。
【注意】考試中常考查軟件的概念,記住公式:軟件=程序+數據+文檔。
2產生軟件危機的原因
(1)客觀原因
①軟件是計算機系統中的邏輯部件,缺乏“可見性”,因此管理和控制軟件開發過程相當困難。
②軟件維護通常意味著改正或修改原來的設計,因此軟件較難維護。
③軟件規模龐大,而程序復雜性將隨著程序規模的增加而呈指數上升。
(2)主觀原因
①存在與軟件開發和維護有關的許多錯誤認識和做法。
②對用戶要求沒有完整準確的認識就匆忙著手編寫程序。
③開發人員只重視程序而忽視軟件配置的其余成分(文檔和數據等)。
④軟件開發人員輕視維護。
3消除軟件危機的途徑
(1)應該對計算機軟件有一個正確的認識。
(2)應該充分認識到軟件開發是一種組織良好、管理嚴密、各類人員協同配合、共同完成的工程項目。
(3)應該推廣使用在實踐中總結出來的開發軟件的成功的技術和方法,并且研究探索更好更有效的技術和方法。
(4)應該開發和使用更好的軟件工具。
二、軟件工程
1軟件工程的介紹
(1)概念
采用工程的概念、原理、技術和方法來開發與維護軟件,把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來,以經濟地開發出高質量的軟件并有效地維護它,這就是軟件工程。
(2)本質特征
①軟件工程關注于大型程序的構造;
②軟件工程的中心課題是控制復雜性;
③軟件經常變化;
④開發軟件的效率非常重要;
⑤和諧地合作是開發軟件的關鍵;
⑥軟件必須有效地支持它的用戶;
⑦軟件工程領域由具有一種文化背景的人替具有另一種文化背景的人創造產品。
2軟件工程的基本原理
(1)七條基本原理
①用分階段的生命周期計劃嚴格管理;
②堅持進行階段評審;
③實行嚴格的產品控制;
④采用現代程序設計技術;
⑤結果應能清楚地審查;
⑥開發小組的人員應該少而精;
⑦承認不斷改進軟件工程實踐的必要性。
(2)意義
這七條原理是確保軟件產品質量和開發效率的原理的最小集合,它們是互相獨立的,而且是缺一不可的最小集合,然而這七條原理又是相當完備的。
3軟件工程方法學
(1)概念
通常把軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學,也稱為范型。目前使用得最廣泛的軟件工程方法學,分別是傳統方法學和面向對象方法學。
(2)三要素
軟件工程方法學包括3個要素:方法、工具和過程。
(3)傳統方法學(生命周期方法學或結構化范型)
①定義
采用結構化技術(結構化分析、結構化設計和結構化實現)來完成軟件開發的各項任務,并使用適當的軟件工具或軟件工程環境來支持結構化技術的運用。
②優點
a.把軟件生命周期劃分成若干相對獨立、簡單的階段,便于不同人員分工協作,降低開發的困難程度;
b.開發過程中采用科學的管理技術和良好的技術方法,且在每個階段結束之前都進行嚴格的審查,保證了軟件的質量,提高了軟件的可維護性;
c.大大提高了軟件開發的成功率和生產率。
③缺點
a.不適用于軟件規模龐大、或者對軟件的需求是模糊的或會隨時間變化而變化的情況。
b.結構化范型技術把數據和操作人為地分離成兩個獨立的部分,增加了軟件開發與維護的難度。
(4)面向對象方法學
①定義
面向對象方法是一種以數據為主線,把數據和對數據的操作緊密地結合起來的方法。
②要點
a.把對象作為融合了數據及在數據上的操作行為的統一的軟件構件;
b.把所有對象都劃分成類;
c.繼承性;
d.對象彼此間僅能通過發送消息互相聯系。
③與傳統方法學的對比
a.傳統方法學強調自頂向下、逐層分解、順序開發。
b.面向對象方法學強調主動地多次反復迭代地開發,保證了在各項開發活動之間的平滑過渡。
④優點
a.降低了軟件產品的復雜性;
b.提高了軟件的可理解性;
c.簡化了軟件的開發和維護工作;
d.提高了軟件的可重用性。
【注意】常考面向對象方法學的基本特征:類、繼承、封裝、多態。結合第9章掌握其含義和意義。
三、軟件生命周期
1組成
(1)軟件定義
軟件定義時期通常進一步劃分成3個階段,即問題定義、可行性研究和需求分析。
(2)軟件開發
通常由下述4個階段組成:總體設計,詳細設計,編碼和單元測試,綜合測試。其中前兩個階段又稱為系統設計,后兩個階段又稱為系統實現。
(3)運行和維護(軟件維護)
【注意】考題中常設置選項:在詳細設計階段編寫代碼。這是錯誤的,在編碼和單元測試階段才編寫代碼。
2維護活動的分類
①改正性維護;
②適應性維護;
③完善性維護;
④預防性維護。
四、軟件過程
1概念
(1)定義
軟件過程是為了獲得高質量軟件所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。
(2)表示
使用生命周期模型簡潔地描述軟件過程。
2典型軟件過程模型
【注意】考生要著重掌握瀑布模型、快速原型模型、螺旋模型、增量模型、噴泉模型。
(1)瀑布模型
①開發流程
實際的瀑布模型是帶“反饋環”的,如圖1-1所示(圖中實線箭頭表示開發過程,虛線箭頭表示維護過程)。
圖1-1 實際的瀑布模型
【注意】傳統的瀑布模型沒有圖中的反饋環。
②特點
第一,階段間具有順序性和依賴性;
第二,推遲實現的觀點;
第三,質量保證的觀點。
③瀑布模型的優缺點
a.優點
第一,可強迫開發人員采用規范的方法;
第二,嚴格地規定了每個階段必須提交的文檔;
第三,要求每個階段交出的所有產品都必須經過質量保證小組的仔細驗證;
第四,對文檔的約束,使軟件維護變得容易一些,且能降低軟件預算。
b.缺點
第一:瀑布模型是由文檔驅動的。
第二:缺乏對于需求變更和項目變化的適應性。
(2)快速原型模型
①開發流程
如圖1-2所示(圖中實線箭頭表示開發過程,虛線箭頭表示維護過程)。
圖1-2 快速原型模型
②優點
快速原型模型是不帶反饋環的。
【注意】快速原型模型彌補了瀑布模型不適用于需求動態變更的缺點,其本質是“快速”。
(3)增量模型
①開發步驟
增量模型也稱為漸增模型,如圖1-3所示。
圖1-3 增量模型
②原理
把軟件產品作為多個增量構件來設計、編碼、集成、測試,開發人員一個構件接一個構件地向用戶提交產品。
③優點
a.能在較短時間內向用戶提交可完成部分工作的產品。
b.逐步增加產品功能可以使用戶有較充裕的時間學習和適應新產品。
④技術難點
a.要求軟件體系結構必須是開放的。
b.增量模型本身是自相矛盾的。
c.增量模型的靈活性很容易退化為邊做邊改模型,從而使軟件過程的控制失去整體性。
⑤風險更大的增量模型
圖1-4是一種風險更大的增量模型。
圖1-4 風險更大的增量模型
【注意】每個增量構件的開發采用瀑布模型。
(4)螺旋模型
①基本思想
可以把它看作在每個階段之前都增加了風險分析過程的快速原型模型,如圖1-5所示。
圖1-5 簡化的螺旋模型
②原理
完整的螺旋模型如圖1-6所示。
圖1-6 完整的螺旋模型
③應用
螺旋模型主要適用于內部開發的大規模軟件項目。
④優點
a.有利于已有軟件的重用,有助于把軟件質量作為軟件開發的一個重要目標;
b.減少了過多測試(浪費資金)或測試不足(產品故障多)所帶來的風險;
c.在螺旋模型中維護只是模型的另一個周期,在維護和開發之間并沒有本質區別。
⑤缺點
螺旋模型是風險驅動的。要求軟件開發人員具有豐富的風險評估經驗和這方面的專門知識。
(5)噴泉模型
①開發流程
圖1-7所示的噴泉模型,是典型的面向對象的軟件過程模型之一。
圖1-7 噴泉模型
②特點
a.噴泉模型是一種以用戶需求為動力,以對象為驅動的模型,主要用于描述面向對象的軟件開發過程。
b.體現了面向對象軟件開發過程迭代和無縫的特性。
(6)Rational統一過程(RUP)
①RUP軟件開發生命周期
RUP軟件開發生命周期是一個二維的面向對象的生命周期模型,如圖1-8所示。圖中縱軸代表核心工作流,橫軸代表時間。
圖1-8 RUP軟件開發生命周期
②核心工作流
如上圖縱軸所示,由上至下有九個核心工作流,前六個為核心過程工作流程,后三個為核心支持工作流程。
③工作階段
a.初始階段。
b.精化階段。
c.構建階段。
d.移交階段。
④特點
a.采用迭代和漸增的方式開發軟件。
b.具有多功能性和廣泛適用性。
(7)敏捷過程
敏捷過程能夠較好地適應商業競爭環境下對小型項目提出的有限資源和有限開發時間的約束。敏捷過程中最重要的是極限編程。
(8)極限編程
①極限編程的整體開發過程
圖1-9描述了極限編程的整體開發過程。
圖1-9 XP項目的整體開發過程
②極限編程的迭代過程
圖1-10描述了極限編程的迭代開發過程。
圖1-10 XP迭代開發過程
③特點
a.以極限編程為代表的敏捷過程,具有對變化和不確定性的更快速、更敏捷的反應特性;
b.在快速的同時仍然能夠保持可持續的開發速度。
(9)微軟過程
①微軟軟件生命周期
微軟過程把軟件生命周期劃分成五個階段,圖1-11描繪了生命周期的階段及每個階段的主要里程碑。
圖1-11 微軟軟件生命周期階段劃分和主要里程碑
②微軟過程模型
a.定義
圖1-12描繪了微軟過程的生命周期模型。
圖1-12 微軟過程的生命周期模型
b.特點
第一,適用于商業環境下具有有限資源和有限開發時間約束的項目;
第二,微軟過程也有某些不足之處,例如,對方法、工具和產品等方面的論述不如RUP和敏捷過程全面,人們對它的某些準則本身也有不同意見。