第一章 概 述
主要內容:
軟體?軟體的特點?軟體的分類?電腦軟體的發展
軟體危機?表現?原因?克服的方法?
軟體工程?七條基本原理?
軟體過程?軟體的生命週期?
軟體過程模型?
軟體開發方法
軟體工具與軟體開發環境
要求 :
(1)識記:軟體、軟體的特點?軟體工程?
(2)領會:軟體危機的出現,表現?原因?克服的方法,軟體生命週期各階段任務,軟體工程方法學及常見軟體過程模型。
1.1 軟體
定義: 軟體 == 程式 + 資料 + 文檔
1.資料:程式加工處理的對象。包括資料的表示、組織與儲存。
資料 == 初始化資料 + 測試資料
2.文檔(document) :開發、使用和維護程式所需的圖文資料 。
文檔 == 開發文檔 + 管理文檔。
3.程式(program) :能完成預定功能和效能的指令集合。
4.軟體和程式的區別
程式只是完整軟體產品的一部分。
編寫程式只是軟體開發過程資料中的一個階段,一般來說,其工作量僅僅是軟體開發全部工作量的10%-20%
軟體的特點
抽象性:邏輯實體。可記錄。但看不到(Intangible),開發過程可視化程度低,開發結果難以直觀表示。
可複製性:與開發成本相比,複製成本很低
無折舊
受硬體制約
未完全擺脫手工工藝
開發費用高
軟體分類
1、按適用範圍分:
定製軟體(Custom Software)項目軟體
通用軟體(Generic Software)產品軟體。
2、按軟體功能分:
系統軟體;應用軟體;支撐軟體
3、按軟體體繫結構分
案頭軟體;布式軟體; 並行軟體
4、按規模分:
(1) 小型軟體(1--5人年);(2) 中型軟體(5--50人年)
(3) 大型軟體(50人年以上)。
5、按工作方式分:
(1)即時軟體;(2) 分時軟體;(3) 互動式軟體;
(4) 批處理軟體;(5) 嵌入式軟體(Embedded Software)。
電腦軟體發展的三個時期
1. 早期時代(60年代中期之前)程式設計階段
硬體通用,軟體專用;程式規模小,編寫者和使用者為同一人(同組人)。
2. 第二代(60年代中期-70年代中期)程式系統階段
出現“軟體作坊”、產品軟體;“個體化”開發方法。
3. 第三代(70年代中期之後)軟體工程階段
軟體開發成為一門新興的工程學科——軟體工程。
1.2 軟體危機
一、軟體危機的產生
20世紀60年代中期以後,一些開發大型軟體系統的要求提了出來。
然而軟體技術的進步一直未能滿足形勢發展的需要,在大型軟體的開發過程中出現了複雜程度高、研製周期長、正確性難以保證的三大難題。
遇到的問題找不到解決辦法,致使問題堆積起來,形成了人們難以控制的局面,出現了所謂的“軟體危機”。
二、軟體危機的定義
軟體危機是指在電腦軟體的開發和維護過程中所遇到的一系列嚴重問題。
主要是兩個問題:
1. 如何開發軟體,怎樣滿足對軟體的日益增長的需求。
2. 如何維護數量不斷膨脹的已有軟體
三、軟體危機的主要表現
1. 對軟體開發成本和進度的估計不準確,甚至開發過程就夭折
2. 不滿足需求,使用者不滿意的現象經常發生
3. 軟體品質不高、可靠性差
4.缺乏適當的文檔資料,軟體常常不可維護、錯誤難以改正。
5. 軟體成本占系統總成本的比例逐年上升
6. 軟體開發速度跟不上電腦發展速度,軟體生產率低,不能滿足需要。
四、產生軟體危機的原因
與軟體本身的特點有關,軟體是邏輯產品,開發進度、成本難以估計
缺乏或不完整、不一致的文檔給維護帶來困難
使用者對軟體需求的描述往往不夠精確,有遺漏,有二義
軟體開發人員對需求的理解與使用者的本來願望有差異,在軟體開發過程中,或多或少地採用了錯誤的方法和技術。對使用者需求沒有完整準確的認識,就匆忙著手編寫程式。
大型軟體項目需多人協同完成,缺乏管理經驗
缺乏有力的方法學和工具的支援
軟體項目的特殊性和人類智力的局限性
五、解決軟體危機的途徑
1. 技術措施
消除錯誤的概念和做法
使用更好的軟體開發方法和開發工具
2. 組織管理措施
軟體開發不是某種個體勞動的神秘技巧,而應該是一種組織良好、管理嚴密、各類人員協同配合、共同完成的工程項目。
1.3 軟體工程
一、什麼是軟體工程
軟體工程(Software Engineering)是在克服60年代末所出現的“軟體危機”的過程中逐漸形成與發展的。
軟體工程是指導電腦軟體開發和維護的工程學科。它採用工程的概念、原理、技術和方法來開發與維護軟體,把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。
二、軟體工程的目標
軟體工程的目標是在給定成本、進度的前提下,開發出具有可修改性、有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可追蹤性和可互通性並滿足使用者需求的軟體產品。
四、軟體工程研究的範疇
軟體管理技術:包括計劃、組織、控制、領導和激勵等。
軟體工程三要素: 方法、工具和過程
五、軟體工程的本質特性
關注大型程式的構造
中心課題是控制軟體固有的複雜性
應對需求變更
提高軟體開發和維護的效率
提倡有紀律的過程
最終目的是使客戶滿意
痛點是對問題域的認識和描述
1.4 軟體過程與軟體生存期
一、軟體生存周期
軟體的生存周期(Software Life Cycle):軟體產品或軟體系統從設計、投入使用到被淘汰的全過程。
軟體生存周期一般分為:軟體定義程式(問題定義、可行性研究、需求分析)、軟體開發(總體設計、詳細設計、編碼和單元測試、綜合測試)、軟體維護等三個時期。
二、軟體過程(Software process)
軟體過程:是軟體生存周期中的一系列相關的過程。過程是活動的集合,活動是任務的集合。它規定了完成各項任務的步驟。
軟體過程有三層含義:
個體含義,即指軟體產品或系統在生存周期中的某一類活動的集合,如軟體開發過程,軟體管理過程等;
整體含義,即指軟體產品或系統在所有上述含義下的軟體過程的總體;
工程含義,即指解決軟體過程的工程,它應用軟體工程的原則、方法來構造軟體過程模型,並結合軟體產品的具體要求進行執行個體化,以及在使用者環境下的運作,以此進一步提高軟體生產率,降低成本。
能力成熟度等級模型CMM
CMM(Capability Maturity Model)即能力成熟度等級模型,用於評價軟體機構的軟體流程能力成熟度等級的模型。
CMM提供了一個成熟度等級架構: 1級-初始級、 2級-可重複級、 3級-已定義級、 4級-已管理級和5級-最佳化級。
CMMI能力成熟度等級模型整合模型為每個學科的組合都提供兩種標記法: 階段式模型和連續式模型
1.5軟體開發模型 (Software Development Model)
軟體開發模型是描述軟體開發過程中各種活動如何執行的模型。因此又稱為軟體過程模型或軟體生存周期模型。
典型的軟體過程模型有:
瀑布模型(waterfall model)
演化模型(evolutionary model)
增量模型(incremental model)
原型模型(prototyping model)
螺旋模型(spiral model)
噴泉模型(water fountain model)
基於構件的開發模型(component-based development model)
形式方法模型(formal methods model)
1.5 軟體開發方法
軟體開發的目標是要在規定的投資和時間內,開發出符合使用者的需求,高品質的軟體,為此需要有成功的開發方法。
軟體開發方法可分為兩大類:
面向過程的開發方法
結構化開發方法
面向資料結構的開發方法
原型化開發方法
物件導向的開發方法