系列索引: 《軟件工程與實踐》第三版 軟件工程課程知識梳理
本章目錄:
本章重難點:
● 瞭解軟件工程的發展和軟件危機
● 掌握軟件工程的概念、內容和原理
● 熟悉軟件生存週期及階段任務
● 掌握常用的軟件開發模型
● 掌握軟件開發準備及Visio2017應用實驗
1.1 軟件工程的發展
1.1.1 軟件危機概述
軟件危機(Software crisis)是指20世紀60年代計算機軟件在研發、運行、維護和管理過程中,出現的一系列嚴重問題的現象。
軟件危機直接導致軟件工程的產生。
=
出現軟件危機最主要的兩個因素就是 開發成本難控制和開發計劃難落實
1.1.2 軟件工程的發展過程
軟件技術的發展 經歷了程序設計階段、程序系統階段、軟件工程階段和創新完善軟件工程4個階段
軟件工程發展 經歷4個重要階段:
1.傳統軟件工程 傳統軟件工程是指軟件工程產生的初期,也稱爲第一代軟件工程。
2.對象工程 對象工程也稱爲第二代軟件工程。20世紀80年代中到90年代,以Smalltalk爲代表的面向對象的程序設計語言相繼推出,使面向對象的方法與技術得到快速發展。
3.過程工程 過程工程也稱爲第三代軟件工程。隨着網絡等高新技術的出現及信息技術的廣泛應用,軟件規模和複雜度不斷增大,開發時間相應持續增長,開發人員的增加,致使軟件工程開發和管理的難度不斷增強。
4.構件工程 構件工程也稱爲第四代軟件工程.90年代起,基於構件(Component)的開發方法取得重要進展,軟件系統的開發可利用已有的可複用構件組裝完成,而無需從頭開始構建,可提高效率和質量、降低成本。
計算機輔助軟件工程簡稱CASE(Computer Aided Software ngineering)將工具和代碼生成器進行集成,爲很多軟件系統提供了可靠的解決方案;
1.2 軟件及軟件工程概述
1.2.1 軟件的概念特點和分類
軟件=程序 + 數據 + 文檔 + 服務
數據則是使程序正常處理信息的數據結構及信息表示;文檔(Document)是與程序開發、維護和使用有關的技術資料。服務主要指對各種軟件用戶的服務,包括提供軟件產品使用說明書、推銷服務及售後技術支持等
軟件分爲系統軟件、支撐軟件(開發環境)和應用軟件等。其中應用軟件常稱爲信息系統主要是指具體的應用系統。
軟件的主要特點
(1) 智能性。軟件是人類智能勞動的產物、代替和延伸。
(2) 抽象性。軟件屬於邏輯實體,無形性和智能性致使軟件難以認識和理解。
(3) 人工方式。軟件的開發、維護及設置管理等方面目前尚未完全脫離手工方式。
(4) 複雜性和系統性。邏輯處理和數據結構及構成等相對複雜
(5) 泛域性。軟件應用很廣泛,在信息化中可服務於各種領域、行業和層面。
(6) 複製性。軟件成本相對比較昂貴,軟件是人類創造性的可複製的特殊產品。
(7) 非損及更新性。軟件不存在物理性磨損和老化問題,但可以退化需要更新升級。
軟件的分類
(1) 按照軟件功能劃分-系統軟件、支撐軟件、應用軟件
(2) 按照軟件規模劃分 (微型、小型、中型、大型、超大型5種)
(3)按照軟件工作方式劃分-實時處理軟件、分時軟件、交互式軟件、批處理軟件
(4)按照軟件服務對象的範圍劃分-項目軟件、產品軟件。
(5)按照軟件運行的終端設備劃分。分爲服務器軟件、計算機軟件、手機軟件、機器人軟件和其他嵌入設備(電子化設備)軟件。
1.2.2 軟件工程的概念、特點和目標
軟件工程(Software Engineering)是軟件開發、運行、維護和引退的系統方法。
軟件工程 = 工程原理 + 技術方法 + 管理技術
軟件工程學科的主要特點是實踐性和發展性,其問題來源並應用於實踐,最終目的是高效高質量低成本 地研發軟件產品。
具體特點: 多學科 多目標 多階段
基本特點: 系統性,工程性,綜合性,學科交叉性
軟件工程的目的是 在規定的時間和開發經費內,開發出滿足用戶需求的、高質量的軟件產品。
其目標是 實現軟件研發與維護的優質高效和自動化。
1.2.3 軟件工程學及其內容和方法
主要內容包括 軟件開發技術和軟件工程管理兩個方面
軟件工程方法學是研發、管理與維護軟件的系統方法,具有方法、工具和過程三個要素,也稱軟件工程三要素:
軟件工程方法
常用軟件工程方法主要分爲7種類型
(1)面向功能方法。也稱爲結構化方法,主要採用結構化技術,包括結構化分析、結構化設計和結構化編程實現,按照軟件的開發過程、結構和順序完成開發任務。
(2)面向數據方法。從目標系統輸入、輸出數據的結構,導出程序框架結構,再補充其他細節,得到完整的程序結構圖。此方法也可與其他方法結合,用於模塊的詳細設計和數據處理等。對輸入輸出數據結構明確的中小型系統很有效,如商用文件表格處理等。
(3)面向對象方法(Object-Oriented Method,OOM)將對象作爲數據和對數據的操作相結合的軟件構件,用對象分解取代了傳統方法的功能分解。基本思想是:對問題領域進行自然的分割,以更接近人類通常思維的方式建立問題領域的模型,以便對客觀的信息實體(事物)進行結構和行爲的模擬,從而使設計的軟件更直接地表現問題的求解過程。
OOM以對象作爲最基本的元素,將所有對象都劃分爲類,是分析和解決問題的核心。OOM要素是對象、類、繼承以及消息通信。 概括爲: 面向對象 = 對象 + 類 + 繼承 + 消息通信
OOM由 OOA(面向對象的分析)、OOD(面向對象設計)和OOP(面向對象的程序設計 / 實現)三部分組成。
(4)面向問題方法(PAM).也稱問題分析法。其基本思想是:以輸入輸出數據結構指導系統的問題分解,經過系統分析逐步綜合。
(5)面向方面的開發方法.(Aspect-Oriented Programming, AOP)是面向對象系統的擴展,在現有的AOP實現技術中,可通過創建Aspect庫或者專用Aspect語言實現面向方面的編程。
(6)基於構件的開發方法.基於構件的開發(Component-Based Development, CBD)或基於構件的軟件工程(Component-Based Software Engineering, CBSE)方法是軟件開發新範型。
軟件複用方式 =分析 + 結構 + 設計 + 程序
(7)可視化方法
總結: 七大方法分別爲: 功能,數據,對象,問題,方面,構件,可視化
軟件研發工具
軟件工具通常由工具(主體)、工具接口和工具用戶接口三部分構成。
軟件工具和軟件開發方法密切相關,是軟件開發的兩大支柱
軟件開發環境
軟件開發環境(Software Development Environment)也稱爲軟件工程環境。“軟件開發環境是相關的一組軟件工具集合,支持一定的軟件開發方法或按照一定的軟件開發模型組織而成”。是包括方法、工具和管理等多種技術的綜合系統。其設計目標是簡化軟件開發過程,提高軟件開發質量和效率。
軟件工程管理概述
軟件工程管理的主要內容包括: (1)組織人員。 (2)計劃管理。 (3)費用管理。 (4)軟件配置管理。
1.2.4 軟件過程及實際開發過程
軟件過程(software process)ISO9000定義爲:“將 輸入轉化爲輸出的一組彼此相關的資源和活動”。
軟件實際開發過程是最重要的軟件過程,主要包括 項目啓動、需求調研分析、設計(概要設計及詳細設計)、編碼(實現)、測試、部署、測試和結束等過程。
1.2.5 軟件工程基本原理及原則
軟件工程的基本原理
軟件工程的基本原則
(1) 選取適宜的開發模型。 (2) 採用合適的設計方法。 (3) 提供高質量的工程支撐。 (4) 重視軟件工程的管理。
1.3 軟件生存週期及任務
1.3.1 軟件生存週期的有關概念
軟件生存週期(Software life cycle)是從開始研發軟件到軟件停止使用的整個過程。也稱爲軟件生命週期或軟件生存期。
可以將一個軟件的生存週期劃分爲市場調研、立項、需求分析、規劃、概要設計、詳細設計、編測程序、單元測試、集成測試、運行、維護這幾個過程,前一過程的終點就是後一過程的起點。
完成階段性工作的標誌稱爲里程碑(Milestone),某些重要的里程碑又稱爲基線(Baseline)。
1.3.2 軟件生存週期的階段劃分
軟件生存週期 階段劃分的原則主要包括:
(1)各階段的任務相對獨立。便於分階段計劃、逐步完成。
(2)同一階段的工作任務性質儘量相同。有利於軟件開發和組織管理,明確開發人員的分工與職責,以便協同工作、保證質量。
1.3.3 軟件生存週期各階段的任務
軟件生存週期組成包括軟件策劃、軟件開發和運行維護三個時期。
軟件生存週期分爲7個階段
1.4 常用軟件開發模型
1.4.1 瀑布模型概述
瀑布模型開發適用於 軟件需求明確,開發技術成熟,工程管理較嚴格 的場合下使用
瀑布模型(Waterfall model)將生存期的 計劃時期、開發時期和運行時期,又細分爲若干個階段:
計劃時期 可分爲問題定義、可行性研究、需求分析3個階段
開發時期 分爲概要設計、詳細設計、軟件實現、軟件測試等階段
運行時期 則需要不斷進行運行維護,需要不斷修改錯誤、排除故障,或以用戶需求、運行環境改變進行改更調整。
圖中的實線箭頭表示開發流程,每個階段順序進行,有時會返工;虛線箭頭表示維護工作的流程,根據不同情況返回到不同的階段進行維護。
瀑布模型開發軟件特點
(1)開發過程的順序性。
瀑布模型開發適用於 軟件需求明確,開發技術成熟,工程管理較嚴格 的場合下使用
(2)統籌兼顧不過早編程。
(3)嚴格要求保證質量。
瀑布模型缺陷 是將 充滿回溯且相互重疊的軟件開發 過程硬性地分爲多個階段,隨着開發軟件規模的增加, 造成的危害大增。爲了描述軟件開發過程中可能回溯 對瀑布模型進行了改進,開發各階段可能循環重複。
1.4.2 快速原型模型概述
快速原型模型最適合於可以先儘快構建成一個原型的應用系統。
1.4.3 增量模型概述
適用於軟件需求不明確、設計方案有一定風險的軟件項目
利用增量模型開發的軟件被作爲一系列的增量構件進行設計、實現、集成和測試,每個構件具有一定功能,並最終能組合成一個具有完整功能軟件的模塊
同瀑布模型之間的本質區別爲:
瀑布模型屬於整體開發模型,規定在開始下一階段工作之前,必須完成前一階段的所有細節。
而增量模型屬於非整體開發模型,可推遲某些階段或所有階段中細節,較早地研發出軟件。
增量模型的缺陷
1.4.4 螺旋模型概述
螺旋模型將 瀑布模型和快速原型模型 結合,強調了其他模型所忽視的風險分析,適合於大型複雜系統
將開發過程劃分爲 制定計劃、風險分析、實施工程和客戶評估四類活動。
螺旋模型沿着螺線進行多次迭代,其迭代過程如圖所示。
螺旋模型的缺陷
不支持軟件重用和多項開發活動集成
1.4.5 噴泉模型概述
適合於利用面向對象技術的軟件開發項目
克服了瀑布模型不支持軟件重用和多項開發活動集成的侷限性。可使開發過程具有迭代性和無間隙性。
噴泉模型是以面向對象的開發方法爲基礎,以用戶需求爲源泉,具有以下7個特點:
1.4.6 基於面向對象的模型
面向對象技術強調了類的創建與封裝,構件重用就是其重要技術之一。基於面向對象的模型,綜合了面向對象和原型方法及重用技術。
1.4.7 軟件開發模型的選定
開發模型與開發方法及工具的關係
應用軟件的開發過程主要包括: 生存週期的系統規劃、需求分析、軟件設計、實現四個階段。
軟件的開發方法多種多樣,結構化方法和面向對象的方法是常用的最基本的開發方法。
軟件的開發模型(生存週期過程模型)與開發方法、開發工具之間的 關係如圖:
軟件開發模型選取
最常用的是瀑布模型和原型模型,在具體選擇模型時需要綜合考慮以下6點:
軟件開發模型的修定
開發模型的選定並非直接照抄照搬、一成不變,有時還需要根據實際開發目標要求進行裁剪、修改、確定和綜合運用。
1.5 本章小結