- 面向對象技術與工具(第2版)
- 陳文宇等編著
- 1643字
- 2018-12-27 18:06:48
1.2 軟件與軟件工程過程
“軟件工程”是在軟件生產中采用工程化的方法,采用一系列科學的、現代化的方法技術來開發軟件。這種工程化的思想貫穿了軟件開發和維護的全過程。
為了進一步學習有關軟件工程的方法和技術,先介紹軟件、軟件生存期及軟件工程過程這幾個重要的概念。
1.2.1 軟件的概念和特點
1.軟件
“軟件(Software)就是程序,開發軟件就是編寫程序”,這是一個錯誤的觀念。這種錯誤觀點的長期存在,影響了軟件工程的正常發展。
事實上,正如Boehm指出的:軟件是程序及開發、使用和維護程序所需的所有文檔。它由應用程序、系統程序、面向用戶的文檔和面向開發者的文檔4部分構成。
2.軟件的特點
① 軟件是一種邏輯實體,不是具體的物理實體。
② 軟件產品的生產主要是研制。
③ 軟件具有“復雜性”,其開發和運行常受到計算機系統的限制。
④ 軟件成本昂貴,其開發方式目前尚未完全擺脫手工生產方式。
⑤ 軟件不存在磨損和老化問題,但存在退化問題。
圖1-1給出了硬件失效率曲線,它是一個U形曲線(即浴盆曲線),這表明硬件隨著使用時間的增加,失效率急劇上升。

圖1-1 硬件失效率曲線
圖1-2描述了軟件失效率曲線,它沒有U形曲線的右半翼,這表明軟件隨著使用時間的增加,失效率降低,因為軟件不存在磨損和老化問題,但存在退化問題。

圖1-2 軟件失效率曲線
3.軟件生存期
軟件生命周期(SDLD)是指一個從用戶需求開始,經過開發、交付使用,在使用中不斷地增補修訂,直至軟件報廢的全過程,亦稱軟件生存期(Life Cycle)。
GB 8567中規定,軟件生命周期分為7個階段。
① 可行性研究和項目開發計劃。可行性研究和項目開發計劃階段必須要回答的問題是“要解決的問題是什么”。
② 需求分析。需求分析階段的任務不是具體地解決問題,而是準確地確定“軟件系統必須做什么”,確定軟件系統必須具備哪些功能。
③ 概要設計。概要設計就是設計軟件的結構,該結構由哪些模塊組成,這些模塊的層次結構是怎樣的,這些模塊的調用關系是怎樣的,每個模塊的功能是什么。同時還要設計該項目的應用系統的總體數據結構和數據庫結構,即應用系統要存儲什么數據,這些數據是什么樣的結構,它們之間有什么關系等。
④ 詳細設計。詳細設計階段就是為每個模塊完成的功能進行具體描述,要把功能描述變為精確的、結構化的過程描述。
⑤ 編碼。編碼階段就是把每個模塊的控制結構轉換成計算機可接受的程序代碼,即寫成以某特定程序設計語言表示的“源程序清單”。
⑥ 測試。測試是保證軟件質量的重要手段,其主要方式是在設計測試用例的基礎上檢驗軟件的各個組成部分。測試分為模塊測試、組裝測試和確認測試。
⑦ 維護。軟件維護是軟件生存期中時間最長的階段。已交付的軟件投入正式使用后,便進入軟件維護階段,它可以持續幾年甚至幾十年。
在大部分文獻中,將生存周期劃分為五個階段,即要求定義、設計、編碼、測試及維護。其中,要求定義階段包括可行性研究和項目開發計劃、需求分析,設計階段包括概要設計和詳細設計。
為了描述軟件生存期的活動,提出了多種生存期模型,如瀑布模型、循環模型、演化模型、螺旋模型等。
1.2.2 軟件工程過程
按照IEEE計算機學會和ACM聯合推出的軟件工程知識體系(Software Engineering Body Knowledge,SWEBOK),將軟件工程過程(Software Engineering Process)知識域(Knowledge Areas)劃分為6個知識子域:基本概念、過程基礎設施、過程度量、過程定義、定性分析和過程實施與變更。也就是說,軟件工程過程是指在軟件工具的支持下,所進行的一系列軟件工程活動。通常包括以下4類基本過程。
① 軟件規格說明:規定軟件的功能及其運行環境。
② 軟件開發:產生滿足規格說明的軟件。
③ 軟件確認:確認軟件能夠完成客戶提出的要求。
④ 軟件演進:為滿足客戶的變更要求,軟件必須在使用的過程中演進。
軟件工程過程具有可理解性、可見性(過程的進展和結果可見)、可靠性、可支持性(易于使用CASE工具支持)、可維護性、可接受性(為軟件工程師的接受)、開發效率和健壯性(抵御外部意外錯誤的能力)等特性。
如圖1-3所示,在軟件工程的三要素中,軟件工程過程將人員、規程與方法、工具和管理有機地結合起來,形成一個能有效控制軟件開發質量的運行機制。

圖1-3 軟件工程過程
- Implementing VMware Horizon 7(Second Edition)
- 多媒體CAI課件設計與制作導論(第二版)
- Java高手真經(高級編程卷):Java Web高級開發技術
- Java Web基礎與實例教程
- JAVA程序設計實驗教程
- Oracle從入門到精通(第5版)
- Node.js全程實例
- ScratchJr趣味編程動手玩:讓孩子用編程講故事
- PrimeFaces Blueprints
- Android Development Tools for Eclipse
- MyBatis 3源碼深度解析
- JQuery風暴:完美用戶體驗
- Learning Kotlin by building Android Applications
- Android智能手機APP界面設計實戰教程
- 算法精解:C語言描述