《軟件工程實例教程》以培養(yǎng)應用型軟件人才為目標,全面系統(tǒng)地闡述了軟件工程的基本概念、原理和典型方法。全書突出4個特點:第一,從始至終貫穿案例教學的思想,提高讀者的學習興趣;第二,內(nèi)容新穎實用,介紹廠軟件模式、xml、代碼重構(gòu)等內(nèi)容在軟件工程中的應用;第三,可操作性強,讀者可參照書中給出的模板和案例,構(gòu)建自己的應用;第四,通過對反面案例的點評,幫助讀者深刻地領(lǐng)會軟件工程的原理和規(guī)范,促使讀者在實際工程中自覺應用軟件下程的方法,自覺遵守軟件工程規(guī)范。
《軟件工程實例教程》適合作為高等院!败浖こ獭闭n程的教材或參考書,書中給出了大量的表格和模板,可作為軟件公司的培訓教材使用,對具有一定實踐經(jīng)驗的軟件工程人員也有很好的參考價值。
本書歷經(jīng)兩年多的時間,今天終于完成了。
軟件工程方面的教材已經(jīng)非常多了,本書以培養(yǎng)應用型軟件人才為目標,突出4個特點: 第一,突出案例教學,從始至終貫穿了生活實例和軟件項目的案例,幫助讀者理解軟件工程的內(nèi)容、掌握軟件工程的方法,靈活應用到實際的軟件工程項目之中。第二,內(nèi)容新穎實用,軟件工程本身強調(diào)不斷改進和完善過程,因此本書充實了軟件模式、可擴展標記語言、代碼重構(gòu)等內(nèi)容,并介紹了這些內(nèi)容在軟件工程中的應用。第三,可操作性強,在介紹分析和設計方法時,給出了詳細的步驟,使初學者可以參照具體的步驟,盡快掌握并應用書中介紹的方法。第四,不僅告訴讀者應該怎么做才是好的,還告訴了讀者什么是不好的,為什么不好,以幫助讀者深刻地領(lǐng)會軟件工程的原理和規(guī)范,促使讀者在實際工程中自覺應用軟件工程方法,自覺遵守軟件工程規(guī)范。
“軟件工程”任重而道遠,我們應該從兩個方面理解“軟件工程”: 一方面是把“軟件項目”或“軟件產(chǎn)品”的開發(fā)和維護工作當成一個工程去做,也就是說,作為一個“軟件工程”的建設者和管理者,我們應該強調(diào)規(guī)劃、設計、實施和驗收過程的規(guī)范化和文檔化;另一方面把“軟件工程”作為一門學科,深入研究這門學科存在的問題,找出解決問題的方法,設計解決問題的過程,發(fā)明解決問題的工具。
本書共分為14章,第1章介紹軟件工程概述,從軟件危機的現(xiàn)象入手,介紹經(jīng)典案例,并且進行詳細的點評,由此引起讀者對軟件危機的重視,對軟件工程的渴望。接著介紹軟件的特點,講述軟件工程的基本原理、研究的主要內(nèi)容,以及軟件工程的發(fā)展歷史。為了讓讀者對軟件工程學科有一個完整的認識,第1章還介紹了軟件工程學科的知識體系,最后介紹了軟件工程師的職業(yè)素質(zhì)和從業(yè)要注意的十大問題。第2章介紹軟件過程,結(jié)合生活事例講述了軟件過程的基本概念和主要活動,介紹了幾個主要軟件過程模型的特點。第3章介紹軟件工程管理,通過剖析一個項目經(jīng)理的工作案例,介紹了軟件項目管理的主要內(nèi)容和方法,特別強調(diào)了人員管理、項目計劃、配置管理和質(zhì)量管理的內(nèi)容,通過有趣的小故事把枯燥的質(zhì)量管理內(nèi)容變得鮮活一些,使讀者感悟到軟件質(zhì)量是軟件工程的基本保證。第4章介紹需求工程,特別強調(diào)需求在軟件工程中的重要地位,\軟\件\工\程\實\例\教\程\ /前 言/ 介紹了需求的類別、高質(zhì)量需求的特征,分析了影響需求的因素,闡述了需求獲取的方法,最后重點介紹了應對需求變更的方法。第5~6章介紹傳統(tǒng)的結(jié)構(gòu)化分析和設計方法及步驟,結(jié)構(gòu)化方法中常用的數(shù)據(jù)流程圖、實體關(guān)系圖、狀態(tài)轉(zhuǎn)換圖、數(shù)據(jù)字典和軟件結(jié)構(gòu)圖、判定表等技術(shù)在許多實際項目中仍然在使用,即使是在面向?qū)ο蠓椒ㄖ,某些局部也還是要用到結(jié)構(gòu)化的技術(shù),因此,本書還是把結(jié)構(gòu)化方法作為一個主要內(nèi)容進行了詳細的講述。第7~9章全面介紹了面向?qū)ο蠡A、面向?qū)ο蠼<夹g(shù)、面向?qū)ο蠓治龊驮O計方法。根據(jù)以往在教學中遇到的問題,以一個例子作為引導,剖析結(jié)構(gòu)化方法存在的問題,并且以相同的案例分別用結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄟM行分析和設計,使初學者能夠體會兩種方法的特點。書中把面向?qū)ο蠓治龊驮O計的過程分解為可操作的步驟,使初學者可以仿照書中的案例和步驟,快速掌握面向?qū)ο蠓治龊驮O計方法,解決實際的軟件工程問題。
第10章軟件界面設計,介紹了軟件界面設計的原則、要素和設計規(guī)范。結(jié)合實際項目的用戶界面進行了設計點評,指出界面設計存在的問題,用這些反面案例幫助讀者加深理解界面設計的原則。
第11至第13章分別介紹軟件編碼、軟件測試和軟件維護。在軟件編碼一章重點介紹了軟件編碼規(guī)范和良好的編程風格,簡要介紹了通過軟件重構(gòu)手段保持軟件結(jié)構(gòu)清晰、簡潔和規(guī)范的方法。軟件測試一章的篇幅較大,因為我們發(fā)現(xiàn)軟件測試環(huán)節(jié)在實際工程中越來越受到重視,并且很多計算機專業(yè)的畢業(yè)生走出校門后的第一份工作或多或少都與測試相關(guān),因此,我們在講述測試概念和方法的基礎上,更加強調(diào)測試計劃、測試策略和測試過程的實用化。軟件維護通常對在校本科學生來說確實體會不到它的重要性,但是對實際的系統(tǒng)運維部門來說又非常需要軟件維護的相關(guān)資料,針對這些問題,第13章軟件維護,以理論與實踐相結(jié)合的方針,在介紹維護理論的基礎上,介紹了軟件維護的內(nèi)容、流程和實用的報表模板,便于系統(tǒng)運維人員參考和使用。
第14章介紹如何編寫軟件文檔,分析了目前軟件文檔編寫和管理中存在的具體問題,詳細介紹了主要軟件文檔的作用和內(nèi)容,講述了如何寫好軟件文檔的具體方法,最后給出了一些軟件文檔模板,供讀者寫作時參考。
本人自1985年在北京航空航天大學計算機系讀碩士研究生期間開始學習軟件工程。1988至1993年在大學從事軟件工程教學,這期間對軟件工程的理解還只是停留在書本上,基本上是照本宣科。幸運的是1994年至2001年在軟件公司里主持參與了國內(nèi)多個大型軟件項目的設計和開發(fā),特別是與IBM、Motorola等知名的軟件公司合作,經(jīng)歷了由理論-實踐-再體會理論-再次回到實踐中檢驗-總結(jié)提高理論的過程,對軟件工程有了比較深刻的理解。
本書的第5、6和10章由方英蘭老師編寫,第14章由段建勇老師編寫,其余章節(jié)由吳潔明老師編寫。在編寫過程中參與了教育部“高等學校計算機科學與技術(shù)專業(yè)核心課程內(nèi)容實施方案研究”項目中的“軟件工程課程研究”組的工作,該項目的負責人是北京工業(yè)大學的蔣宗禮教授,還有清華大學的劉強教授、浙江大學的陳越教授。大家一起交流軟件工程教學和實踐的經(jīng)驗,討論存在的問題和困惑。該項目組根據(jù)科學型、工程型和應用型計算機專業(yè)人才的培養(yǎng)目標,給出了“軟件工程課程內(nèi)容實施方案”。本書的內(nèi)容組織基本上符合該實施方案的要求。
在此非常感謝上述各位教授,他們給予我許多的靈感。另外歷運偉、李鵬、高振安、朱銀濤、許士賓等研究生也參與了書稿的錄入和文字檢查工作。在此對所有幫助本書出版作出貢獻的朋友和家人表示感謝!
由于時間關(guān)系和篇幅的限制,特別是本人水平有限,書中一定存在許多問題和不足,真誠地希望讀者能夠提出寶貴的意見和建議,幫助我們逐步完善本書的內(nèi)容。清華大學出版社網(wǎng)站(www.tup.com.cn)提供本書的PPT課件、文檔模板電子版、課程實驗指導資料。
吳潔明2010年6月于北京
第1章 軟件工程概述
1.1 軟件危機
1.2 軟件工程
1.3 軟件工程學科知識體系
1.4 軟件工程師職業(yè)道德
練習1
第2章 軟件過程
2.1 軟件過程的概念
2.2 幾個典型的軟件過程模型
2.3 迭代與遞增
2.4 rup軟件開發(fā)過程
2.5 敏捷開發(fā)
練習2
第3章 軟件工程管理
3.1 人員組織與管理
3.2 軟件規(guī)模與成本估算
3.3 軟件開發(fā)計劃與控制
3.4 軟件配置管理
3.5 軟件質(zhì)量管理
練習3
第4章 需求工程
4.1 需求工程的概念
4.2 確定系統(tǒng)目標和范圍
4.3 需求獲取方法
4.4 需求分析的任務
4.5 需求分析的原則
4.6 定義軟件的質(zhì)量屬性
4.7 需求優(yōu)先級
4.8 需求驗證技術(shù)
4.9 需求管理
練習4
第5章 結(jié)構(gòu)化需求分析
5.1 結(jié)構(gòu)化分析的主要技術(shù)
5.2 結(jié)構(gòu)化分析方法的實現(xiàn)步驟
5.3 編寫需求規(guī)格說明書
5.4 結(jié)構(gòu)化分析案例
練習5
第6章 結(jié)構(gòu)化軟件設計
6.1 軟件設計的概念
6.2 軟件設汁原則和影響設計的因素
6.3 結(jié)構(gòu)化設計方法
6.4 小型圖書館圖書信息管理系統(tǒng)軟件結(jié)構(gòu)設計
6.5 優(yōu)化軟件結(jié)構(gòu)
6.6 數(shù)據(jù)設計
6.7 詳細設計
6.8 設計復查
練習6
第7章 面向?qū)ο蠡A
7.1 從一個例子看結(jié)構(gòu)化方法的問題
7.2 面向?qū)ο蟮母拍?nbsp;
7.3 面向?qū)ο箝_發(fā)的方法簡介
7.4 uml語言
7.5 用例圖
7.6 活動圖
7.7 狀態(tài)圖
7.8 交互圖
7.9 類圖
7.10 配置圖
7.11 組件圖
練習7
第8章 面向?qū)ο蠓治?nbsp;
8.1 面向?qū)ο蠓治龈攀?nbsp;
8.2 建立用例模型
8.3 建立對象模型
8.4 構(gòu)造動態(tài)模型
8.5 評審分析模型
8.6 面向?qū)ο蟮男枨蠓治鲆?guī)格說明書
練習8
第9章 面向?qū)ο笤O計
9.1 面向?qū)ο蟮脑O計概念
9.2 面向?qū)ο蟮脑O計原則--類設計原則
9.3 xml在軟件設計中的應用
9.4 基于uml的面向?qū)ο笤O計過程
9.5 面向?qū)ο笤O計規(guī)格說明書
練習9
第10章 用戶界面設計
10.1 界面設計原則
10.2 界面設計
10.3 用戶界面評價
10.4 用戶界面設計案例分析
練習10
第11章 軟件編碼
11.1 程序設計語言
11.2 良好的編程實踐
11.3 軟件編碼規(guī)范
11.4 代碼重構(gòu)
練習11
第12章 軟件測試
12.1 軟件測試基本概念
12.2 軟件測試過程
12.3 軟件測試計劃
12.4 測試用例設計和測試執(zhí)行
12.5 單元測試
12.6 集成測試
12.7 系統(tǒng)測試
12.8 驗收測試
12.9 界面測試
12.10 面向?qū)ο蟮臏y試
12.11 軟件測試工具
練習12
第13章 軟件交付與維護
13.1 軟件維護概念
13.2 維護過程
13.3 提高軟件的可維護性
練習13
第14章 如何編寫軟件開發(fā)文檔
14.1 軟件文檔的作用和要求
14.2 軟件文檔的種類和提供時機
14.3 軟件文檔的編寫步驟
14.4 如何寫好軟件文檔
14.5 文檔管理
14.6 軟件工程標準
14.7 幾個常用軟件文檔的模板
練習14
參考文獻