軟件工程導論複試——一、軟件工程學概述

軟件工程導論複試

本文用書
《軟件工程導論》第六版張海藩、牟永敏 清華大學出版社

一、軟件工程學概述

軟件危機:計算機軟件開發和維護時遇到的一系列嚴重問題

典型表現:

(1) 對軟件開發成本和進度的估計常常很不準確。
(2) 用戶對已完成的軟件不滿意的現象時有發生。
(3) 軟件產品的質量往往是靠不住的。
(4) 軟件常常是不可維護的。
(5) 軟件通常沒有適當的文檔資料。
(6) 軟件成本、軟件維護費在計算機系統總成本中所佔比例逐年上升。
(7) 開發生產率提高的速度遠跟不上計算機應用普及的需求。

爲什麼會產生軟件危機啊?

  • 來自軟件自身的特點:是邏輯部件,缺乏可見性;規模龐大、複雜,修改、維護困難。

  • 軟件開發與維護的方法不當:忽視需求分析;認爲軟件開發等於程序編寫;輕視軟件維護。

  • 供求矛盾將是一個永恆的主題:面對日益增長的軟件需求,人們顯得力不從心

怎麼去解決軟件危機

爲了解決軟件危機,既要有技術措施,又要有必要的組織管理措施。人們可以從其他產業的工程化生產得到啓示,採用工程的概念、原理、技術和方法來開發和維護軟件。

  • 充分吸收和借鑑人類長期以來從事各種工程項目中積累的行之有效的有效原理、概念、技術與方法, 特別是吸取幾十年來人類從事計算機硬件研究和開發的經驗教訓。在開發軟件的過程中努力作到良好的組織,嚴格的管理,相互友好的協作。
  • 推廣在實踐中總結出來的開發軟件的成功的技術和方法,並研究更好、更有效的技術和方法,儘快克服在計算機系統早期發展階段形成的一些錯誤概念和作法。
  • 根據不同的應用領域,開發更好的軟件工具並使用這些工具。將軟件開發各個階段使用的軟件工具集合成一個 整體,形成一個很好的軟件開發支環環境。總之爲了解決軟件危機,既要有技術措施(方法和工具),又要有必要的組織管理措施。

軟件工程

軟件工程是指導計算機軟件開發和維護的一門工程學科。

定義:軟件工程是① 把系統的、規範的、可度量的途徑應用於軟件開發、運行和維護過程,也就是把工程應用於軟件;② 研究①中提到的途徑。

本質特性:

  • 軟件工程關注於大型程序的構造
  • 軟件工程的中心課題是分解問題,控制複雜性
  • 軟件是經常變化的,開發過程中必須考慮軟件將來可能的變化
  • 開發軟件的效率非常重要
  • 和諧地合作是開發軟件的關鍵
  • 軟件必須有效地支持它的用戶
  • 在軟件工程領域中是由具有一種文化背景的人替具有另一種文化背景的人創造產品

基本原理:

  • 用分階段的生命週期計劃嚴格管理
  • 堅持進行階段評審
  • 實行嚴格的產品控制
  • 採用現代程序設計技術
  • 結果應能清楚的審查
  • 開發小組的人員應該少而精
  • 承認不斷改進軟件工程實踐的必要性

軟件工程方法學

軟件工程方法學三要素:方法、工具、過程。

方法:完成軟件開發任務的各項技術方法

工具:運用方法而提供的自動的或半自動的軟件工程支撐環境

過程:過程是爲了獲得高質量的軟件所需要完成的一系列任務框架,規定了完成一系列任務的框架。

方法學:在軟件生命週期過程中使用的一整套技術方法的集合。

使用最廣泛的方法學:傳統方法學、面向對象方法學

傳統方法學:

又稱爲生命週期方法學或者結構化泛型。

採用結構化技術來完成軟件開發的各項任務,並使用適當的軟件工具或軟件工程環境來支持結構化技術的運用。把軟件生命週期的全過程一次劃分爲若干個階段,然後順序地完成每個階段的任務。對於問題的解決類似於隊列的方法,只有隊首出隊才能完成後續人的出隊操作,即只有階段式完成目標並進行嚴格的技術審查和管理複審才能進行下一階段的操作,並把前一階段的結果作爲下一階段的標準。審查的一條主要標準是每個階段完成時都應該交出“最新式”高質量文檔資料,把當前階段所完成的任務以文檔形式詳細說明,如果文檔不完整,即可認爲有某些工作忘記做了,在下一階段開始前應將其補足。(瞭解下)

優點:把軟件生命週期劃分成基幹個階段,每個階段的任務相對獨立,而且比較簡單,便於不同人員分工協作,從而降低了整個軟件開發過程的困難程度。

缺點:當軟件規模龐大時,或者對軟件的需求是模糊的或會承受時間而變化的時候,開發出的軟件往往不成功;而且維護起來仍然很困難。

面向對象方法學

四個要點:

(1)面向對象的軟件系統是由對象組成的,軟件中的任何元素都是對象,複雜的軟件對象由比較簡單的對象組合而成。

(2)把所有對象都劃分成各種對象類(簡稱爲類,class),每個對象類都定義了一組數據和一組方法。數據用於表示對象的靜態屬性,是對象的狀態信息。

(3)按照子類(或稱爲派生類)與父類(或稱爲基類)的關係,把若干個對象類組成一個層次結構的系統(也稱爲類等級)。

(4)對象彼此之間僅能通過傳遞消息互相聯繫。

優點:降低了軟件產品的複雜性;提高了軟件的可理解性;簡化了軟件的開發和維護工作;促進了軟件重用。

軟件生命週期

定義時期:問題定義、可行性研究、需求分析

開發時期:總體設計、詳細設計、編碼、單元測試、綜合測試

維護時期

軟件過程

軟件過程是爲了獲得高質量軟件所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。

瀑布模型

特點:

  • 階段間具有順序性和依賴性(必須等前一階段做完才能開始下一階段)
  • 推遲實現的觀點(在進行設計之後才考慮編碼,設計階段不考慮實現)
  • 質量保證的特點(每個階段必須完成規定的文檔,在每個階段結束前都要對所完成的文檔進行評審)

優點:

  • 可強迫開發人員爲項目提供了按階段劃分的檢查點。
  • 當前一階段完成後,開發者只需要去關注後續階段。
  • 可在迭代模型中應用瀑布模型。
  • 它提供了一個模板,這個模板使得分析、設計、編碼、測試和支持的方法可以在該模板下有一個共同的指導。

缺點:

  • 各個階段的劃分完全固定,階段之間產生大量的文檔,極大地增加了工作量。
  • 由於開發模型是線性的,用戶只有等到整個過程的末期才能見到開發成果,從而增加了開發風險。
  • 通過過多的強制完成日期和里程碑來跟蹤各個項目階段。
  • 瀑布模型的突出缺點是不適應用戶需求的變化。
img

快速原型模型

快速原型模型是快速建立起來的可以再計算機上運行的程序,它所能完成的功能往往是最終產品能完成的功能的一個子集。他可以讓用戶快速試用原型系統並給出意見。

優點:

  • 克服瀑布模型的缺點,更好地滿足用戶的需求並減少由於軟件需求不明確帶來的項目開發風險。
  • 適合預先不能確切定義需求的軟件系統的開發。

缺點

  • 不適合大型系統的開發(適合開發小型的、靈活性高的系統)。
  • 前提要有一個展示性的產品原型,因此在一定程度上可能會限制開發人員的創新。

增量模型

增量模型也稱漸增模型。使用增量模型開發軟件時,把軟件產品作爲一系列的增量構件來設計、編碼、集成和測試。每個構件由多個相互作用的模塊構成,並且能夠完成特定的功能

使用增量模型時,第一個增量構件往往實現軟件的基本需求,提供最核心的功能

把軟件產品分解成增量構件時,唯一必須遵守的約束條件是,當把新構件集成到現有構件中時,所形成的產品必須是可測試的

優點:

  • 能在較短的時間內向用戶提交可完成部分工作的產品
  • 將待開發的軟件系統模塊化,可以分批次地提交軟件產品,使用戶可以及時瞭解軟件項目的進展
  • 以組件爲單位進行開發降低了軟件開發的風險。一個開發週期內的錯誤不會影響到整個軟件系統
  • 開發順序靈活。開發人員可以對組件的實現順序進行優先級排序,先完成需求穩定的核心組件。當組件的優先級發生變化時,還能及時地對實現順序進行調整

缺點:

  • 由於各個構件是逐漸併入已有的軟件體系結構中的,所以加入構件必須不破壞已構造好的系統部分,這需要軟件具備開放式的體系結構
  • 在開發過程中,需求的變化是不可避免的。增量模型的靈活性可以使其適應這種變化的能力大大優於瀑布模型和快速原型模型,但也很容易退化爲邊做邊改模型,從而是軟件過程的控制失去整體性
  • 如果增量包之間存在相交的情況且未很好處理,則必須做全盤系統分析,這種模型將功能細化後分別開發的方法較適應於需求經常改變的軟件開發過程

螺旋模型

可以理解爲每個階段增加了風險分析的快速原型模型。在進行下一階段的原型開發時,首先進行風險分析(錢夠不夠了?競爭對手什麼水平了?)

螺旋模型是風險驅動的,需要相當豐富的風險評估經驗和專門知識,否則風險更大;主要適用於內部開發的大規模軟件項目,隨着過程的進展演化,開發者和用戶能夠更好的識別和對待每一個演化級別上的風險;隨着迭代次數的增加,工作量加大,軟件開發成本增加 。

優點:

  • 設計上的靈活性,可以在項目的各個階段進行變更
  • 以小的分段來構建大型系統,使成本計算變得簡單容易。
  • 客戶始終參與每個階段的開發,保證了項目不偏離正確方向以及項目的可控性。
  • 隨着項目推進,客戶始終掌握項目的最新信息 , 從而他或她能夠和管理層有效地交互。
  • 客戶認可這種公司內部的開發方式帶來的良好的溝通和高質量的產品。

缺點:

很難讓用戶確信這種演化方法的結果是可以控制的。建設週期長,而軟件技術發展比較快,所以經常出現軟件開發完畢後,和當前的技術水平有了較大的差距,無法滿足當前用戶需求。

噴泉模型

​ 噴泉模型主要用於面向對象的軟件項目,軟件的某個部分通常被重複多次,相關對象在每次迭代中隨之加入漸進的軟件成分。各活動之間無明顯邊界,例如設計和實現之間沒有明顯的邊界,這也稱爲“噴泉模型的無間隙性”。由於對象概念的引入,表達分析、設計及實現等活動只用對象類和關係,從而可以較容易地實現活動的迭代和無間隙。

在這裏插入圖片描述

優點:

噴泉模型不像瀑布模型那樣,需要分析活動結束後纔開始設計活動,設計活動結束後纔開始編碼活動。該模型的各個階段沒有明顯的界限,開發人員可以同步進行開發。其優點是可以提高軟件項目開發效率,節省開發時間,適應於面向對象的軟件開發過程。

缺點:

由於噴泉模型在各個開發階段是重疊的,因此在開發過程中需要大量的開發人員,因此不利於項目的管理。此外這種模型要求嚴格管理文檔,使得審覈的難度加大,尤其是面對可能隨時加入各種信息、需求與資料的情況。

RUP(Rational 統一過程)

RUP強調採用迭代和檢查的方式來開發軟件,整個項目開發過程由多個迭代過程組成。在每次迭代中只考慮系統的一部分需求,針對這部分需求進行分析、設計、實現、測試和部署等工作,每次迭代都是在系統已完成部分的基礎上進行的,每次給系統能夠增加一些新的功能,如此循環往復地進行下去,直至完成最終項目。(基本上現在的軟件都是這麼來的)

優點:提高了團隊生產力,在迭代的開發過程、需求管理、基於組建的體系結構、可視化軟件建模、驗證軟件質量及控制軟件變更等方面、針對所有關鍵的開發活動爲每個開發成員提供了必要的準則、模版和工具指導,並確保全體成員共享相同的知識基礎。它建立了簡潔和清晰的過程結構,爲開發過程提供較大的通用性。

缺點:RUP只是一個開發過程,並沒有涵蓋軟件過程的全部內容,例如它缺少關於軟件運行和支持等方面的內容,此外,他沒有支持多項目的開發結構,這在一定程度上降低了在開發組織內大範圍實現重用的可能性。

敏捷過程

特點:

  • 個體和交互勝過過程和工具
  • 可以工作的軟件勝過面面俱到的文檔
  • 客戶合作勝過合同談判
  • 相應變化勝過遵循計劃

課後習題

1、軟件危機:在軟件開發和維護中遇到的一系列問題。

表現:

(1) 對軟件開發成本和進度的估計常常很不準確。
(2) 用戶對已完成的軟件不滿意的現象時有發生。
(3) 軟件產品的質量往往是靠不住的。
(4) 軟件常常是不可維護的。
(5) 軟件通常沒有適當的文檔資料。
(6) 軟件成本、軟件維護費在計算機系統總成本中所佔比例逐年上升。
(7) 開發生產率提高的速度遠跟不上計算機應用普及的需求。

爲什麼:

  • 來自軟件自身的特點:是邏輯部件,缺乏可見性;規模龐大、複雜,修改、維護困難。
  • 軟件開發與維護的方法不當:忽視需求分析;認爲軟件開發等於程序編寫;輕視軟件維護。
  • 供求矛盾將是一個永恆的主題:面對日益增長的軟件需求,人們顯得力不從心

2、您開玩笑呢?又不是隻有編碼錯誤!萬一你這一開始就設計錯了,您編碼再他媽牛逼也白瞎啊。給您一個圖自己感受下。

點擊查看源網頁

3、軟件工程

什麼是?軟件工程是指導計算機軟件開發和維護的一門學科

定義:1、把系統的、規範的、可度量的途徑應用到軟件開發、運行、維護中。2、研究1中提到的途徑

怎麼解決軟件危機:

  • 對計算機軟件有一個正確的認識(軟件≠程序)

  • 必須充分認識到軟件開發不是某種個體勞動的神祕技巧,而應該是一種組織良好、管理嚴密、各類人員協同配合、共同完成的工程項目

  • 推廣使用在實踐中總結出來的開發軟件的成功技術和方法

  • 開發和使用更好的軟件工具。

4、結構化泛型與面向對象泛型

結構化泛型又稱爲生命週期方法學或者結構化泛型。

他是把軟件開發過程分爲了若干個階段,每個階段十分獨立,必須順序的完成各個階段。上一個階段的文檔就是下一個階段開始的文檔。

優點:把軟件生命週期劃分成基幹個階段,每個階段的任務相對獨立,而且比較簡單,便於不同人員分工協作,從而降低了整個軟件開發過程的困難程度。

缺點:當軟件規模龐大時,或者對軟件的需求是模糊的或會承受時間而變化的時候,開發出的軟件往往不成功;而且維護起來仍然很困難。

面向對象方法學

四個要點:

(1)面向對象的軟件系統是由對象組成的,軟件中的任何元素都是對象,複雜的軟件對象由比較簡單的對象組合而成。

(2)把所有對象都劃分成各種對象類(簡稱爲類,class),每個對象類都定義了一組數據和一組方法。數據用於表示對象的靜態屬性,是對象的狀態信息。

(3)按照子類(或稱爲派生類)與父類(或稱爲基類)的關係,把若干個對象類組成一個層次結構的系統(也稱爲類等級)。

(4)對象彼此之間僅能通過傳遞消息互相聯繫。

優點:降低了軟件產品的複雜性;提高了軟件的可理解性;簡化了軟件的開發和維護工作;促進了軟件重用。

6、軟件過程

軟件過程是爲了獲得高質量軟件所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。

他是軟件工程方法學三個組成部分的一部分

7、軟件生命週期模型

軟件生命週期模型是跨越整個生存期的系統開發、運作和維護所實施的全部過程、活動和任務的結構框架。

特點前面有寫

8、因爲使用面向對象方法學開發軟件時,各個階段都使用統一的概念和表示符號,因此,整個開發過程都是吻合一致的,或者說是無縫連接的,這自然就很容易實現各個開發步驟的反覆多次迭代,達到認識的逐步深化,而噴泉模型則很好的體現了面向對象軟件開發過程迭代和無縫的特性。

9、優點:提高了團隊生產力,在迭代的開發過程、需求管理、基於組建的體系結構、可視化軟件建模、驗證軟件質量及控制軟件變更等方面、針對所有關鍵的開發活動爲每個開發成員提供了必要的準則、模版和工具指導,並確保全體成員共享相同的知識基礎。它建立了簡潔和清晰的過程結構,爲開發過程提供較大的通用性。

缺點:RUP只是一個開發過程,並沒有涵蓋軟件過程的全部內容,例如它缺少關於軟件運行和支持等方面的內容,此外,他沒有支持多項目的開發結構,這在一定程度上降低了在開發組織內大範圍實現重用的可能性。

10、RUP適用項目
大型的需求不斷變化的複雜軟件系統項目

11、敏捷過程適用範圍

適用於商業競爭環境下對小型項目提出的有限資源和有限開發時間的約束

12、微軟開發適用範圍 適用於商業環境下具有有限資源和有限開發時間約束的項目的軟件過程模式

9、優點:提高了團隊生產力,在迭代的開發過程、需求管理、基於組建的體系結構、可視化軟件建模、驗證軟件質量及控制軟件變更等方面、針對所有關鍵的開發活動爲每個開發成員提供了必要的準則、模版和工具指導,並確保全體成員共享相同的知識基礎。它建立了簡潔和清晰的過程結構,爲開發過程提供較大的通用性。

缺點:RUP只是一個開發過程,並沒有涵蓋軟件過程的全部內容,例如它缺少關於軟件運行和支持等方面的內容,此外,他沒有支持多項目的開發結構,這在一定程度上降低了在開發組織內大範圍實現重用的可能性。

10、RUP適用項目
大型的需求不斷變化的複雜軟件系統項目

11、敏捷過程適用範圍

適用於商業競爭環境下對小型項目提出的有限資源和有限開發時間的約束

12、微軟開發適用範圍 適用於商業環境下具有有限資源和有限開發時間約束的項目的軟件過程模式

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