《软件工程导论》第一章
一、軟件工程學概述
1.1軟件危機
1、為了更有效地開發與維護軟件,軟件工作者在20世紀60年代后期開始認真研究消除軟件危機的途徑,從而逐漸形成了一門新興的工程學科——計算機軟件工程學(通常簡稱為“軟件工程”)
2、1968年北大西洋公約組織的計算機科學家在西德召開國際會議,討論軟件危機問題,在這次會議正式提出并使用了“軟件工程”這個名詞,一門新興的工程學科就此誕生了。
3、軟件危機的定義: 軟件危機是指在計算機的開發和維護過程中所遇到的一系列嚴重問題。
4、概括地說,軟件危機包含下述兩方面問題:
- 如何開發軟件,以滿足社會對軟件日益增長的需求。
- 如何更有效地維護數量不斷膨脹的已有軟件。
5、 軟件危機的典型表現:
- 對軟件開發成本和進度的估計常常很不準確;
- 用戶對“已完成的”軟件系統不滿意的現象經常發生;
- 軟件產品的質量往往靠不住;
- 軟件常常是不可維護的;
- 軟件通常沒有適當的文檔資料;
- 軟件成本在計算機系統總成本中所占比例逐年上升;
- 軟件開發生產率提高的速度,遠遠跟不上計算機應用迅速普及深入的趨勢。
6、 產生軟件危機的原因:
- 客觀原因
1.軟件不同于硬件,它是計算機系統中的邏輯部分而非物理部分;
2.軟件較難維護;
3.軟件不同于一般程序,它的一個顯著特點是規模龐大,而且程序復雜性將隨著程序規模增加而呈指數上升。 - 主觀原因
1.忽視軟件需求分析的重要性;
2.錯誤的認為軟件開發就是寫程序;
3.輕視軟件維護;
7、詳細設計是決定編碼質量的關鍵;做好軟件定義時期的工作,是降低軟件成本提高軟件質量的關鍵;編寫程序所需的工作量只占軟件開發全部工作量的10%-20%;測試占40%-50%;實際上用于軟件維護的費用占軟件總費用的55%-70%;軟件工程學的一個重要目標就是提高軟件的可維護性,減少軟件維護的代價。
8、 消除軟件危機的途徑:
- 首先應該對計算機軟件有一個正確的認識,軟件是程序、數據及相關文檔的完整集合;
- 必須充分吸取和借鑒前人行之有效的原理、概念、技術和方法;
- 推廣使用在實踐中成功的技術和方法;
- 開發和使用更好的軟件工具;
- 既要有技術措施(方法和工具),又要有必要的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好地開發和維護計算機軟件的一門新興學科。
1.2軟件工程
1、軟件工程是指導計算機軟件開發和維護的一門工程學科,該學科的目的是生產出能按期交付的、在預算范圍內的、滿足用戶需求的、質量合格的軟件產品。
2、軟件工程的本質特性:
- 軟件工程關注于大型程序的構造;
- 軟件工程的中心課題是控制復雜性;
- 軟件經常變化;
- 開發軟件的效率非常重要;
- 和諧地合作是開發軟件的關鍵;
- 軟件必須有效地支持它的用戶;
- 在軟件工程領域中通常由具有一種文化背景的人替具有另一種文化背景的人創造產品。
3、 軟件工程的基本原理:
- 用分階段的生命周期計劃嚴格管理;
- 堅持進行階段評審;
- 實行嚴格的產品控制;
- 采用現代程序設計技術;
- 結果應能清楚地審查;
- 開發小組的人員應該少而精;
- 承認不斷改進軟件工程實踐的必要性。
8、通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學,也稱為泛型。
9、軟件工程方法學包含3個要素:方法、工具 和 過程。
10、傳統方法學也稱為生命周期方法學或結構化范型,其特點是:
- 采用結構化技術完成軟件開發的各項任務。
- 把軟件生命周期劃分成若干個階段,如何順序地完成每個階段的任務。
- 每一個階段的開始和結束都有嚴格的標準,對于任何兩個相鄰的階段而言,前一階段的結束標準就是后一個階段的開始標準。
- 在每一個階段結束之前都必須正式嚴格的技術審查和管理復審。
11、傳統方法學的優點:
- 把軟件生命周期劃分成若干個階段,每個階段的任務相對獨立,而且比較簡單,便于不同人員協作。
- 使軟件開發工程的全過程以一種有條不紊的方式進行,保證了軟件的質量。特別是提高了軟件的可維護性。
- 采用生命周期方法學可以大大提高軟件開發的成功率,軟件開發的生產率也能明顯提高。
12、傳統方法學的缺點:
- 當軟件規模龐大,或者對軟件的需求是模糊的或會隨時間變化而變化的時候,使用傳統方法學開發軟件往往不成功。
13、面向對象方法學
??面向對象方法把數據和行為看成是同等重要的,它是一種以數據為主線,把數據和對數據的操作緊密地結合起來的方法。
- 把對象作為融合了數據及在數據上的操作行為的統一的軟件構件。
- 把所有對象都劃分成類。
- 按照父類與子類的關系,把若干給相關類組成一個層次結構的系統。
- 對象彼此間僅能通過發送消息互相聯系。
優點: 降低了軟件產品的復雜性,提高了軟件的可理解性,簡化了軟件的開發和維護工作,促進了軟件重用。
1.3軟件生命周期
1、軟件生命周期由軟件定義、軟件開發和運行維護(也稱軟件維護)3個時期組成,每個時期又進一步劃分成若干個階段。
2、一個軟件從定義、開發、使用和維護,直到最終被廢棄,要經歷一個漫長的時期,通常把軟件經歷的這個漫長的時期稱為生命周期。
3、軟件定義時期的任務是:確定軟件開發工程必須完成的總目標(問題定義);確定工程的可行性(可行性分析);導出實現工程目標應該采用的策略及系統必須完成的功能(需求分析);估計完成該項工程需要的資源和成本,并且制定工程進度表。軟件定義時期通常進一步劃分成3個階段,即問題定義、可行性分析和需求分析。
4、開發時期具體設計和實現在前一個時期定義的軟件,它通常由下述4個階段組成:總體設計、詳細設計、編碼和單元測試,綜合測試。其中前兩個階段又稱為系統設計,后兩個階段又稱為系統實現。
5、維護時期的主要任務是使軟件持久地滿足用戶的需求,每一次維護活動本質都是一次壓縮和簡化了的定義和開發過程。
6、下面簡要介紹軟件生命周期每個階段的基本任務。
- 問題定義:“要解決的問題是什么?”
- 可行性研究:“對于上一階段所確定的問題有行得通的解決辦法嗎?”進行一次大大壓縮和簡化了的系統分析和設計過程,也就是在較抽象的高層次上進行的分析和設計過程。可行性研究應該比較簡短,這個階段的任務不是具體解決問題,而是研究問題的范圍,探索這個問題是否值得去解,是否有可行的解決方案。(可行性研究報告)
- 需求分析:“為了解決這個問題,目標系統必須做什么”,主要是確定目標系統必須具備哪些功能。通常用數據流圖、數據字典和簡要的算法表示系統的邏輯模型。(需求規格說明書)
- 總體設計:“概括地說,應該怎樣實現目標系統?”總體設計又稱概要設計。軟件設計的一條基本原理就是,程序應該模塊化,也就是說,一個程序應該由若干個規模適中的模塊按合理的層次結構組織而成。因此,總體設計的另一項主要任務就是設計程序的體系結構,也就是確定程序由哪些模塊組成以及模塊間的關系。(總體設計說明書)
- 詳細設計:“應該怎樣具體地實現這個系統呢?”也稱為模塊設計,詳細的設計每個模塊,確定實現模塊功能所需要的算法和數據結構。(詳細設計說明書)
- 編碼和單元測試:這個階段的關鍵任務是寫出正確的容易理解、容易維護的程序模塊。(程序清單和單元測試報告)
- 綜合測試:關鍵任務是通過各種類型的測試(及相應的調試)使軟件達到預定的要求。最基本的測試是集成測試和驗收測試。把測試計劃則是按照規格說明書的規定(通常在需求分析階段確定),由用戶(或在用戶積極參加下)對目標系統進行驗收。
- 軟件維護:關鍵任務是通過各種必要的維護活動使系統持久地滿足用戶的需要。4類維護活動:改正性維護、適應性維護、完善性維護、預防性維護。
1.4軟件過程
1、定義:軟件過程是為了獲得高質量軟件所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。
2、系統是相互關聯或相互作用的一組要素。
3、過程定義了運用方法的順序、應該交付的文檔資源,為保證軟件質量和協調變化所需求采取的管理措施以及標志軟件開發各個階段任務完成的里程碑。
4、生命周期模型規定了把生命周期劃分成哪些階段及各個階段的執行順序,因此,也成為過程模型。瀑布模型與快速原型模型的主要區別是獲取用戶需求的方法不同。
5、各大模型的特點、優點及缺點、應用范圍:
瀑布模型: 傳統軟件工程方法學的軟件過程,基本上可以用瀑布模型來描述。
特點:
- 階段間具有順序性和依賴性。
- 推遲實現的觀點。
- 質量保證的觀點。
優點:
- 強迫開發人員采用規范的技術方法。
- 嚴格地規定了每個階段必須提交的文檔。
- 每個階段前必須正式進行嚴格的技術審查和管理復查。
- 受文檔約束,使軟件維護容易一些,瀑布模型的成功在很大程度上是由于它基本上是一種文檔驅動的模型。
缺點:
- 在可運行的軟件產品交付給用戶之前,用戶只能通過文檔來了解未來的產品是什么樣的。
- 開發人員和用戶之間缺乏有效的溝通,很可能導致最終開發出的軟件產品不能真正滿足用戶的需求。
應用范圍:
- 在開發過程中需求無或很少變化。
- 分析設計人員對應用領域很熟悉。
- 低風險項目。
- 用戶使用環境很穩定。
- 開發工作對用戶參與要求低。
快速原型模型: 第一步是快速建立一個反映用戶主要需求的原型系統,讓用戶在計算機上試用它,通過實踐來了解目標系統的概貌。
優點:
- 通常能滿足用戶的真實需求。
- 軟件產品的開發過程基本上是線性順序過程。
- 開發人員通過建立原型系統已經學到了許多東西。
- 縮短了開發周期,加快了進程,降低成本。
缺點:
- 快速建立的系統結構和連續修改,可能導致產品質量低下。
應用范圍:
- 適用于那些不能預先確切定義需求的軟件系統的開發。
- 適用于那些項目組成員不能很好的交流或者通信的情況下。
注: 軟件產品一旦交付給用戶使用之后,維護便開始了。
?? 快速原型的本質是“快速”。
增量模型: 瀑布模型的改進,增量模型也稱為漸增模型。使用增量模型時,第一個增量構件往往實現軟件的基本需求,提供最核心的功能。當把新構件集成導現有軟件中時,所形成的產品必須是可測試的。
優點:
- 能在較短時間內向用戶提交可完成部分工作的產品。
- 人員分配靈活,剛開始不用投入大量人力資源。
- 逐步增加產品功能,從而使用戶有效充裕的時間和適應新產品,減少一個全新軟件給用戶帶來的沖擊。
缺點:
- 在把每個新的增量構件集成到現有軟件體系結構中時,必須不破壞原來已經開發出的產品。
- 從某種意義上說,增量模型本身是自相矛盾的。它一方面要求開發人員把軟件看作一個整體,另一方面又要求開發人員把軟件看作構件序列,每個構件本質上都獨立于另外一個構件。除非開發人員有足夠的技術能力協調好這一明顯的矛盾,否則用增量模型開發出的產品可能并不令人滿意。
- 使用這種方法將冒構件無法集成到一起的風險,除非密切地監控整個開發過程,否則整個開發過程,否則整個工程可能毀于一旦。
應用范圍:
- 進行已有產品升級或新版本開發,增量模型是非常適合的。
- 對完成期限嚴格要求的產品,可以使用增量模型。
- 對所開發的領域比較熟悉而且已有原型系統,增量模型也是非常適合的。
螺旋模型: 快速原型和瀑布模型的結合。基本思想是使用原型及其他方法來盡量降低風險。理解這種模型的一個簡便方法,是它看作在每個階段之前都增加了風險分析過程的快速原型模型。
優點:
- 有利于已有軟件的重用。
- 有助于把軟件質量作為軟件開發的一個重要目標。
- 減少了過多測試或測試不足所帶來的風險。
- 軟件維護與軟件開發沒有本質區別。
缺點:
- 需要軟件開發人員具有豐富的風險評估經驗和這方面的專門知識,否則將出現真正的風險。
應用范圍:
- 主要適用于內部開發的大規模軟件項目。
注: 小規模用瀑布模型。
噴泉模型: “噴泉”這個詞體現了面向對象軟件開發過程迭代和無縫的特性。 適用于面向對象的軟件開發。
==統一過程模型:==是基于統一建模語言(UML)的面向對象軟件開發過程模型。
附: 思考題以及個人答案:
1、軟件是什么?
??軟件是計算機程序、所用的數據及有關文檔的集合。可以說:軟件=程序+數據+文檔。
2、為什么說軟件是創意產品?
??軟件具有知識性的特點,其表現在創意為王、知識產品、無磨損、開發投入大復制零成本、傳播速度快。
3、軟件工程中有哪些角色?
??項目經理、產品經理、分析設計師、程序員、測評師、實施、維護、培訓師、銷售等。
4、軟件的特點都有哪些表現?
??軟件的特點:知識性、社會性、復雜性、不可見性、硬件性、規模越來越大
這些特點可能使軟件在開發、使用和維護中留下隱患,導致軟件危機。
- 軟件的知識性表現在創意為王、知識產品、無磨損、開發投入大復制零成本、傳播速度快。
- 軟件的社會性表現在由人開發、為人所用、人的社會性帶入軟件、不同人的思想行為影響軟件。
- 軟件的復雜性表現在需求越來越復雜、解決方案越來越復雜、工具越來越復雜、質量控制越來越難。
- 軟件的不可見性表現在沒有運行時看不見摸不著、運行時內部處理不可見、描述起來不方便、不形象、不直觀。
- 軟件的硬件性表現在軟件的運行與硬件的關系密切、與硬件環境的相關性非常高、不同硬件中的軟件許多都互不通用。
5、什么是軟件危機?
??軟件危機是指在計算機的開發和維護過程中所遇到的一系列嚴重問題。
6、軟件危機的表現有哪些?
??軟件危機的典型表現:
- 對軟件開發成本和進度的估計常常很不準確;
- 用戶對“已完成的”軟件系統不滿意的現象經常發生;
- 軟件產品的質量往往靠不住;
- 軟件常常是不可維護的;
- 軟件通常沒有適當的文檔資料;
- 軟件成本在計算機系統總成本中所占比例逐年上升;
- 軟件開發生產率提高的速度,遠遠跟不上計算機應用迅速普及深入的趨勢。
7、如何消除軟件危機?
??消除軟件危機的途徑:
- 首先應該對計算機軟件有一個正確的認識,軟件是程序、數據及相關文檔的完整集合;
- 必須充分吸取和借鑒前人行之有效的原理、概念、技術和方法;
- 推廣使用在實踐中成功的技術和方法;
- 開發和使用更好的軟件工具;
- 既要有技術措施(方法和工具),又要有必要的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好地開發和維護計算機軟件的一門新興學科。
12、軟件工程主要哪幾種方法?
??面向過程方法、面向數據方法、面向對象方法、形式化方法
13、軟件工程每種方法的特點?分別適用什么樣的軟件開發?
??面向過程方法:面向過程的方法 : 面向過程需求分析、面向過程設計、面向過程編程、面向過程測試、面向過程維護、面向過程管理。面向過程的方法,又稱為面向功能的方法,或稱為結構化方法。
- 特點:程序的執行過程,不由用戶控制,完全由程序員控制。
- 優點:簡單實用。
- 缺點:企圖用有窮的方法(枚舉法)來描述無窮的(隨機的)信息世界,所以不能完全描述信息世界;維護困難。
- 適用場合:大型工程計算,實時數據跟蹤處理,各種自動化控制系統,以及系統軟件實現等領域。
??面向數據的方法:面向元數據的方法,是建設數據庫和數據倉庫的基本方法。
??內容:1.數據位于信息系統的中心。2.由元數據構成的數據模型是穩定的。3.對元數據的處理方法是可變的。4.企業信息系統的核心是數據模型。5.系統的實現方法主要是面向對象。
- 特點:程序的執行過程,有時由程序員控制,有時由用戶控制。
- 優點:適合數據層設計與實現。
- 缺點:實現窗口界面較困難。
- 適用場合:互聯網絡時代,完全由用戶交互控制程序執行過程的應用軟件和系統軟件的開發。
??面向對象方法:面向對象需求分析、面向對象設計、面向對象編程、面向對象測試、面向對象維護、面向對象管理。
??面向對象方法=對象+類+繼承+消息
- 特點:(1)程序的執行過程,不由程序員控制,完全由用戶控制。
???(2)分析設計時面向類,編程時面向對象。 - 優點:用無窮的方法來描述無窮的(隨機的)信息世界,所以能完全描述信息世界;易于維護。·
- 缺點:較難掌握。
- 適用場合:以關系數據庫管理系統為支撐環境的信息系統建設。
??形式化方法:數學方法:用數據的語言描述、推導、驗證。
- 優點::嚴謹,無二義性,驗證結果可靠。
- 不足:對于不能夠形式化的大型、復雜軟件不適用。
- 適用場合:對安全性要求極高,不容許出錯的軟件系統,如軍事、醫藥、交通等領域。
14、如何延長軟件的生命周期?
15、有哪些常見的軟件過程模型?
??瀑布模型、原型模型、增量模型、螺旋模型、噴泉模型、統一過程、敏捷過程等。
總結
以上是生活随笔為你收集整理的《软件工程导论》第一章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谨防!黑客是这样偷窥你的智能手机
- 下一篇: 【可视化】数据仓库与数据挖掘大作业