軟件工程是高等院校計算機相關(guān)學科各專業(yè)的專業(yè)基礎(chǔ)課,其研究范圍非常廣泛。《軟件工程理論及應用/普通高等教育“十二五”規(guī)劃教材》從實用的角度出發(fā),在系統(tǒng)講解軟件工程理論和方法的同時,注重結(jié)合實例,分析軟件工程技術(shù)與工具的綜合應用;在強調(diào)傳統(tǒng)的結(jié)構(gòu)化方法的同時,著重介紹面向?qū)ο蠓椒ā?/span>
《軟件工程理論及應用/普通高等教育“十二五”規(guī)劃教材》共分10章,包括軟件產(chǎn)品、軟件過程、項目管理和軟件項目計劃、項目進度安排及跟蹤、軟件工程的需求工程、軟件設(shè)計、面向?qū)ο蟮姆治龇椒ā⒚嫦驅(qū)ο笤O(shè)計、面向?qū)ο鬁y試和軟件維護工程。
《軟件工程理論及應用/普通高等教育“十二五”規(guī)劃教材》將理論知識與實踐案例相結(jié)合,便于教學與應用,文字通俗易懂,概念清晰,實例豐富,實用性強,并配有習題!盾浖こ汤碚摷皯/普通高等教育“十二五”規(guī)劃教材》可作為高等院校計算機類專業(yè)軟件工程相關(guān)課程的教材,也可作為軟件開發(fā)人員的參考書。
前言
第1章 軟件產(chǎn)品
1.1 軟件的發(fā)展
1.1.1 軟件產(chǎn)業(yè)
1.1.2 軟件的競爭
1.2 軟件危機與軟件工程
1.2.1 軟件特征
1.2.2 軟件工程
1.2 -3軟件應用
1.2.4 軟件語言
1.2.5 軟件文檔
1.3 軟件生存周期模型
1.3.1 瀑布模型
1.3.2 快速原型模型
1.3.3 螺旋模型
1.3.4 噴泉模型和其他模型
1.4 軟件工程工具及環(huán)境
本章小結(jié)
習題
第2章 軟件過程
2.1 軟件過程規(guī)范
2.2 軟件過程成熟度模型
2.2.1 初始級
2.2.2 可重復級
2.2.3 已定義級
2.2.4 已管理級
2.2.5 優(yōu)化級
2.3 軟件過程管理案例
本章小結(jié)
習題
第3章 項目管理和軟件項目計劃
3.1 對估算的觀察
3.2 項目計劃目標
3.3 軟件范圍
3.4 軟件項目估算
3.5 項目管理實驗
本章小結(jié)
習題
第4章 項目進度安排及跟蹤
4.1 人員與工作量之間的關(guān)系
4.2 為軟件項目定義任務集合
4.2.1 嚴格度
4.2.2 定義適應準則
4.2.3 計算任務集合選擇因子的值
4.3 主要任務的求精
4.4 進度安排
4.5 軟件項目計劃案例
本章小結(jié)
習題
第5章 軟件工程的需求工程
5.1 軟件工程需求分析案例
5.2 需求分析的基本內(nèi)容
5.2.1 需求分析的必要性
5.2.2 需求分析的原則
5.2.3 需求的類型
5.2.4 需求分析的方法
5.3 結(jié)構(gòu)化分析的技巧
5.3.1 創(chuàng)建實體一關(guān)系圖
5.3.2 創(chuàng)建數(shù)據(jù)流模型
5.3.3 加工規(guī)范化
5.3.4 數(shù)據(jù)字典
5.3.5 其他分析方法概述
本章小結(jié)
習題
第6章 軟件設(shè)計
6.1 設(shè)計和軟件質(zhì)量
6.2 軟件設(shè)計的演化
6.3 設(shè)計目標與任務
6.4 設(shè)計概念
6.4.1 抽象
6.4.2 求精
6.4.3 模塊化
6.4.4 軟件體系結(jié)構(gòu)
6.4.5 控制層次
6.4.6 結(jié)構(gòu)劃分
6.4.7 數(shù)據(jù)結(jié)構(gòu)
6.4.8 信息隱藏與局部化
6.5 有效的模塊設(shè)計案例
6.5.1 模塊獨立性
6.5.2 內(nèi)聚
6.5.3 耦合
本章小結(jié)
習題
第7章 面向?qū)ο蟮姆治龇椒?/span>
7.1 面向?qū)ο蠓治龈攀?/span>
7.1.1 常用的00A方法
7.1.2 OOA模型
7.2 領(lǐng)域分析
7.2.1 復用和領(lǐng)域分析
7.2.2 領(lǐng)域分析過程
7.2.3 面向?qū)ο蠓治瞿P偷念悓俪煞?/span>
7.3 OOA過程
7.3.1 用例
7.3.2 類一責任一協(xié)作者建模
7.3.3 定義結(jié)構(gòu)和層次
7.3.4 定義主題和子系統(tǒng)
7.4 對象一關(guān)系模型
7.5 對象一行為模型
本章小結(jié)
習題
第8章 面向?qū)ο笤O(shè)計
8.1 面向?qū)ο笙到y(tǒng)的設(shè)計
8.1.1 OOD概述
8.1.2 統(tǒng)一的OOD方法
8.2 系統(tǒng)設(shè)計過程
8.2.1 劃分分析模型
8.2.2 并發(fā)性和子系統(tǒng)分配
8.2.3 任務管理構(gòu)件
8.2.4 人機界面構(gòu)件
8.2.5 數(shù)據(jù)管理構(gòu)件
8.2.6 資源管理構(gòu)件
8.2.7 子系統(tǒng)間通信
8.3 對象設(shè)計過程
8.3.1 對象描述
8.3.2 設(shè)計算法和數(shù)據(jù)結(jié)構(gòu)
8.3.3 程序構(gòu)件與接口
8.4 設(shè)計模式
8.4.1 描述設(shè)計模式
8.4.2 在設(shè)計中使用設(shè)計模式
本章小結(jié)
習題
第9章 面向?qū)ο鬁y試
9.1 OOA和OOD模型的正確性
9.2 OOA和OOD的測試
9.3 OO軟件的測試案例設(shè)計的影響
9.3.1 OO概念的測試用例設(shè)計的含義
9.3.2 傳統(tǒng)測試案例設(shè)計方法的可用性
9.3.3 基于故障的測試
9.4 在類級別可用的測試方法
9.4.1 對OO類的測試
9.4.2 系統(tǒng)測試
本章小結(jié)
習題
第10章 軟件維護工程
10.1 軟件維護案例介紹
10.2 軟件維護概述
10.2.1 軟件維護的類型
10.2.2 軟件維護的困難
10.2.3 軟件維護的費用
10.2.4 軟件維護的方式
10.3 軟件系統(tǒng)的維護
10.3.1 概述
10.3.2 軟件維護的過程
10.3.3 軟件維護技術(shù)
10.3.4 影響維護工作量的因素
10.3.5 軟件維護的策略
10.3.6 維護成本
本章小結(jié)
習題
參考文獻
這個階段要回答的關(guān)鍵問題是:“對于上一個階段所確定的問題有可行的解決辦法嗎?”為了回答這個問題,系統(tǒng)分析員需要進行一次大大壓縮和簡化了的系統(tǒng)分析和設(shè)計過程,也就是在較抽象的高層次上進行的分析和設(shè)計過程?尚行匝芯繎摫容^簡短,這個階段的任務不是具體解決問題,而是研究問題的范圍,探索這個問題是否值得去解,是否有可行的解決辦法?尚行匝芯康慕Y(jié)果是使部門負責人做出是否繼續(xù)進行這項工程的決定的重要依據(jù),一般來說,只有投資可能取得較大經(jīng)濟效益的那些工程項目才值得繼續(xù)進行下去。可行性研究以后的那些階段將需要投入更多的人力物力。及時終止不值得投資的工程項目可以避免更大的浪費。
可行性研究的目的不是解決問題,而是確定問題“是否值得去解決”。怎樣達到這個目的?當然不能靠主觀猜想,而是要靠客觀分析。系統(tǒng)分析員必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標是否現(xiàn)實,以及系統(tǒng)完成后所能帶來的效益是否大到值得投資開發(fā)這個系統(tǒng)的程度。
首先需要進一步分析和澄清問題定義。在問題定義階段初步確定的規(guī)模和目標,如果是正確的就進一步加以肯定;如果有錯誤就應該及時改正;如果對目標系統(tǒng)有任何約束和限制,也必須把它們清楚地列舉出來。在澄清了問題定義之后,系統(tǒng)分析員應該導出系統(tǒng)的邏輯模型。然后從系統(tǒng)邏輯模型出發(fā),探索若干種可供選擇的主要解法(即系統(tǒng)實現(xiàn)方案)。對每種解法,系統(tǒng)分析員都應該仔細研究它的可行性,一般說來,至少應該從3個方面研究每種解法的可行性;①技術(shù)可行性,即使用現(xiàn)有的技術(shù)能實現(xiàn)這個系統(tǒng)嗎?②經(jīng)濟可行性,即這個系統(tǒng)的經(jīng)濟效益能超過它的開發(fā)成本嗎?③操作可行性,即系統(tǒng)的操作方式在這個用戶組織內(nèi)行得通嗎?
必要時還應該從法律、社會效益等更廣泛的方面研究每種解法的可行性。系統(tǒng)分析員應該為每個可行的解法制訂一個粗略的實現(xiàn)進度。
可行性研究最根本的任務是對以后的行動方針提出建議。如果問題沒有可行的解,系統(tǒng)分析員應該建議停止這項開發(fā)工程,以避免時間、資源、人力和金錢的浪費;如果問題有可行的解,分析員應該推薦一個較好的解決方案,并且為工程制定一個初步的計劃?尚行匝芯啃枰臅r間長短取決于工程的規(guī)模。一般說來,可行性研究的成本只是預期工程總成本的5%~10%。
需求分析階段的任務仍然不是具體地解決問題,而是準確地確定“為了解決這個問題,目標系統(tǒng)必須做什么”,主要是確定目標系統(tǒng)必須具備哪些功能。用戶了解他們所面對的問題,知道必須做什么,但通常不能完整準確地表達出他們的要求,更不知道怎樣利用計算機解決他們的問題;軟件開發(fā)人員知道怎樣用軟件實現(xiàn)人們的要求,但是對特定用戶的具體要求并不完全清楚。因此,系統(tǒng)分析員在需求分析階段必須和用戶密切配合,充分交流信息,以得出經(jīng)過用戶確認的系統(tǒng)邏輯模型。通常用數(shù)據(jù)流圖、數(shù)據(jù)字典和簡要的算法表示系統(tǒng)的邏輯模型。在需求分析階段確定的系統(tǒng)邏輯模型是以后設(shè)計和實現(xiàn)目標系統(tǒng)的基礎(chǔ),因此必須準確完整地體現(xiàn)用戶的要求。這個階段的一項重要任務,是用正式文檔準確地記錄對目標系統(tǒng)的需求,即《需求分析規(guī)格說明書》。
3.系統(tǒng)設(shè)計
系統(tǒng)設(shè)計階段必須回答的關(guān)鍵問題是:“概括地說,應該怎樣實現(xiàn)目標系統(tǒng)?”系統(tǒng)設(shè)計的主要任務是進行總體設(shè)計和詳細設(shè)計?傮w設(shè)計又稱為概要設(shè)計。首先,應該設(shè)計出實現(xiàn)目標系統(tǒng)的幾種可能的方案。通常至少應該設(shè)計出低成本、中等成本和高成本3種方案。軟件工程師應該用適當?shù)谋磉_工具描述每種方案,分析每種方案的優(yōu)缺點,并在充分權(quán)衡每種方案利弊的基礎(chǔ)上推薦一個最佳方案。此外,還應該制訂出實現(xiàn)最佳方案的詳細計劃。如果客戶接受所推薦的方案,則應進一步完成下一項主要任務。總體設(shè)計工作確定了解決問題的策略及目標系統(tǒng)中應包含的程序,但是,怎樣設(shè)計這些程序呢?軟件設(shè)計的_條基本原理就是,程序應該模塊化,也就是說,一個程序應該由若干個規(guī)模適中的模塊按合理的層次結(jié)構(gòu)組織而成。因此,總體設(shè)計的另一項主要任務就是設(shè)計程序的體系結(jié)構(gòu),也就是確定程序由哪些模塊組成以及模塊問的關(guān)系。
總體設(shè)計階段以比較抽象概括的方式提出了解決問題的辦法。詳細設(shè)計階段即程序?qū)崿F(xiàn)的任務就是把解法具體化,也就是回答“應該怎樣具體地實現(xiàn)這個系統(tǒng)呢?”這個關(guān)鍵問題。這個階段的任務還不是編寫程序,而是設(shè)計出程序的詳細規(guī)格說明。詳細規(guī)格說明的作用類似于其他工程領(lǐng)域中工程師經(jīng)常使用的工程藍圖,應該包含必要的細節(jié)。程序員可以根據(jù)詳細規(guī)格說明寫出實際的程序代碼。
4.程序?qū)崿F(xiàn)
程序?qū)崿F(xiàn)也被稱為模塊設(shè)計,開發(fā)人員在這個階段將詳細地設(shè)計每個模塊,并確定實現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。
這個階段的關(guān)鍵任務是寫出正確的容易理解、容易維護的程序模塊,具體包括編碼和單元測試。程序員應該根據(jù)目標系統(tǒng)的性質(zhì)和實際環(huán)境,選取一種適當?shù)母呒壋绦蛟O(shè)計語言(必要時用匯編語言),把詳細設(shè)計的結(jié)果翻譯成使用選定的語言書寫的程序,并應仔細測試編寫的每一個模塊。
5.測試確認
這個階段的關(guān)鍵任務是通過各種類型的測試及調(diào)試,使軟件達到預定的要求。最基本的測試是集成測試和驗收測試。所謂集成測試是根據(jù)設(shè)計的軟件結(jié)構(gòu),把經(jīng)過單元測試檢驗的模塊按某種選定的策略裝配起來,在裝配過程中對程序進行必要的測試。所謂驗收測試則是按照需求規(guī)格說明書的規(guī)定,由用戶對目標系統(tǒng)進行驗收,必要時還可以再通過現(xiàn)場測試或平行運行等方法對目標系統(tǒng)進一步測試檢驗。為了使用戶能夠積極參加驗收測試,并且在系統(tǒng)投入生產(chǎn)性運行以后能夠正確有效地使用這個系統(tǒng),通常需要以正式的或非正式的方式對用戶進行培訓。通過對軟件測試結(jié)果進行分析,可以預測軟件的可靠性;反之,根據(jù)對軟件可靠性的要求,用戶也可以決定測試和調(diào)試過程什么時候結(jié)束。軟件測試人員應該用正式的文檔資料把測試計劃、詳細測試方案以及實際測試結(jié)果保存下來,作為軟件配置的一個組成部分。
……