本書以項目為載體,以任務驅動的方式介紹軟件開發中各階段所需的知識、技術、方法、工具、開發過程,直至項目完成。
本書圍繞軟件開發能力的培養組織內容,全書共8章,內容如下:第1章,介紹軟件、軟件開發、軟件項目管理等相關概念,重點介紹軟件開發中容易混淆的一些概念并為后續學習做知識準備;第2和第3章,介紹傳統的軟件開發方法,適合軟件開發初學者學習;第4和第5章,介紹面向對象的開發方法,利于讀者掌握目前流行的面向對象軟件開發方法與工具;第6章,介紹軟件的實現,包括編碼與測試,只有通過測試的軟件,其編碼才能告一段落;第7章,介紹軟件的維護;第8章,介紹本書軟件項目完整的開發過程,可作為軟件設計文檔范本。
第1章 軟件開發與管理概述 (1)
1.1 軟件與軟件開發概述 (1)
1.1.1 程序、軟件與系統 (1)
1.1.2 軟件開發的特征 (3)
1.2 軟件開發 (5)
1.2.1 軟件開發過程 (5)
1.2.2 軟件開發方法學和軟件工程 (9)
1.3 軟件項目管理內容 (10)
1.3.1 軟件項目管理 (11)
1.3.2 軟件質量管理 (13)
1.3.3 軟件過程質量保證體系 (15)
小結 (17)
習題 (18)
實訓:制定某項目進度計劃 (19)
第2章 進行需求分析了解用戶需求 (20) 第1章 軟件開發與管理概述 (1)
1.1 軟件與軟件開發概述 (1)
1.1.1 程序、軟件與系統 (1)
1.1.2 軟件開發的特征 (3)
1.2 軟件開發 (5)
1.2.1 軟件開發過程 (5)
1.2.2 軟件開發方法學和軟件工程 (9)
1.3 軟件項目管理內容 (10)
1.3.1 軟件項目管理 (11)
1.3.2 軟件質量管理 (13)
1.3.3 軟件過程質量保證體系 (15)
小結 (17)
習題 (18)
實訓:制定某項目進度計劃 (19)
第2章 進行需求分析了解用戶需求 (20)
2.1 軟件需求概述 (20)
2.1.1 需求分析任務 (21)
2.1.2 需求分析過程 (21)
2.1.3 需求管理 (23)
2.1.4 軟件需求分析從問題定義開始 (24)
2.2 需求分析方法與分析模型 (25)
2.2.1 需求分析與建模方法 (25)
2.2.2 需求分析模型 (25)
2.3 用傳統方法建立系統數據模型 (26)
2.3.1 數據模型(E-R圖)的建立 (26)
2.3.2 E-R圖簡述 (29)
2.3.3 數據字典 (30)
2.4 用傳統方法建立系統功能模型 (30)
2.4.1 系統功能模型(數據流圖)的建立 (31)
2.4.2 數據流圖簡述 (31)
2.4.3 功能模型簡述 (32)
2.4.4 功能模型的文字描述 (33)
2.5 建立系統動態模型 (33)
2.6 需求說明書及書寫重點 (35)
小結 (36)
習題 (36)
實訓:對“學生管理系統”進行需求分析與建模 (37)
第3章 基于需求分析進行軟件設計 (40)
3.1 軟件設計 (40)
3.1.1 軟件設計概述 (40)
3.1.2 軟件設計與編碼 (42)
3.1.3 軟件設計的內容 (43)
3.2 項目設計案例 (44)
3.2.1 從E-R模型進行數據庫設計 (44)
3.2.2 概要設計(軟件結構設計) (45)
3.3 軟件模塊的詳細設計 (48)
3.3.1 詳細設計的任務 (49)
3.3.2 詳細設計的工具 (49)
3.4 軟件設計原則 (54)
3.4.1 模塊與模塊獨立性 (54)
3.4.2 模塊的耦合性 (55)
3.4.3 模塊的內聚性 (55)
3.4.4 模塊的規模、大小適中原則 (56)
3.4.5 信息隱藏和局部化的原則 (57)
3.4.6 抽象性的原則 (57)
3.5 軟件設計說明書 (58)
3.5.1 軟件概要設計說明書大綱 (58)
3.5.2 軟件詳細設計說明書大綱 (58)
小結 (59)
習題 (59)
實訓一:對“學生管理系統”進行軟件概要設計 (60)
實訓二:對“學生管理系統”進行詳細設計 (61)
第4章 用對象的觀點與方法進行分析建模 (64)
4.1 概述 (64)
4.2 從業務描述出發建立系統的用例模型 (65)
4.2.1 建立系統用例模型 (66)
4.2.2 確定系統的用例 (67)
4.2.3 用例之間的關系 (68)
4.2.4 描述用例 (69)
4.3 從用例的交互中識別實體建立對象模型 (71)
4.3.1 識別類與對象 (71)
4.3.2 確定類的屬性 (73)
4.3.3 確定類之間的聯系 (73)
4.4 類與類之間的“關系” (74)
4.4.1 關聯關系 (74)
4.4.2 泛化關系 (75)
4.4.3 依賴和細化關系 (76)
4.4.4 確定關聯 (77)
4.5 從用例的交互中識別交互細節建立動態模型 (77)
4.5.1 建立順序圖 (78)
4.5.2 通過順序圖描述實體間的動態行為 (79)
4.5.3 通過順序圖等動態模型分析與確定類的行為 (79)
小結 (81)
習題 (81)
實訓:用面向對象的方法進行需求分析與建模 (81)
第5章 用面向對象的觀點和方法設計軟件 (84)
5.1 面向對象軟件設計概述 (84)
5.1.1 包圖 (85)
5.1.2 數據庫設計 (85)
5.1.3 軟件架構和類兩個層面的設計 (85)
5.2 高層軟件體系結構設計 (86)
5.2.1 軟件體系結構設計概況 (86)
5.2.2 軟件體系結構設計內容 (86)
5.3 底層類的設計 (87)
5.3.1 系統各部件類的設計及其層次 (87)
5.3.2 業務領域類的設計 (88)
5.3.3 類設計 (89)
5.3.4 使用MVC設計模式 (90)
5.4 面向對象軟件開發過程及最佳做法 (91)
小結 (93)
習題 (93)
實訓:用面向對象的方法進行軟件設計 (93)
第6章 按照軟件設計進行編程實現并測試 (95)
6.1 軟件編碼概述 (95)
6.1.1 從軟件設計過渡到軟件編碼 (95)
6.1.2 程序設計方法 (96)
6.1.3 常見計算機程序設計語言 (97)
6.1.4 常用軟件開發工具 (100)
6.1.5 選擇計算機程序設計語言并建立軟件開發環境 (102)
6.1.6 制定程序編碼規范 (102)
6.1.7 制定編程的過程標準 (103)
6.2 程序編碼過程 (104)
6.2.1 迭代、增量的開發過程 (104)
6.2.2 選擇某種MVC開發模式的工具編碼 (104)
6.2.3 通過迭代開發直至滿足用戶需求 (105)
6.3 按照用戶需求和軟件設計測試軟件 (106)
6.3.1 軟件測試概述 (106)
6.3.2 軟件測試階段 (108)
6.3.3 軟件測試用例設計案例 (110)
小結 (116)
習題 (116)
實訓:對“學生管理系統”進行實現并測試 (117)
第7章 通過軟件維護不斷滿足用戶的需求 (118)
7.1 軟件維護概述 (118)
7.1.1 軟件維護原因 (118)
7.1.2 軟件維護類型 (119)
7.1.3 軟件維護中的常見問題 (120)
7.1.4 軟件維護策略 (120)
7.2 軟件維護的過程 (121)
7.2.1 維護組織 (122)
7.2.2 維護報告 (122)
7.2.3 維護過程 (122)
7.2.4 維護記錄 (123)
7.2.5 維護評價 (124)
7.3 提高軟件的可維護性 (124)
7.3.1 軟件的可維護性 (124)
7.3.2 軟件可維護性的量化 (124)
7.3.3 提高可維護性的方法 (125)
7.3.4 軟件維護的副作用 (126)
7.4 軟件維護相關文檔 (126)
7.4.1 軟件問題報告 (127)
7.4.2 軟件維護申請報告 (127)
7.4.3 軟件維護報告 (129)
7.4.4 軟件用戶意見反饋及滿意度調查 (129)
7.5 實施軟件維護 (130)
7.5.1 維護機構 (130)
7.5.2 維護流程 (131)
7.5.3 維護評價 (131)
7.5.4 維護成本 (132)
小結 (132)
習題 (132)
實訓:設計一套結構化維護過程及文檔格式 (133)
第8章 物流系統開發分析與設計案例 (134)
8.1 引言 (134)
8.2 項目概述 (135)
8.3 需求分析 (135)
8.3.1 業務描述 (135)
8.3.2 用例建模 (135)
8.3.3 用例交互實體建模——對象模型(實體類圖) (136)
8.3.4 功能分析 (137)
8.3.5 交互細節的建模—動態模型 (138)
8.4 軟件設計 (138)
8.4.1 功能模塊設計 (138)
8.4.2 軟件架構設計(基于JavaEE) (139)
8.4.3 實體類的設計 (141)
8.4.4 數據庫設計 (141)
8.5 軟件模塊設計與實現 (144)
8.5.1 送貨員信息管理模塊 (144)
8.5.2 接單管理模塊 (146)
8.5.3 接送貨管理模塊 (147)
8.5.4 倉儲與分揀管理模塊 (148)
8.5.5 結算管理模塊 (152)
小結 (153)
附錄A 計算機軟件開發文件編制指南(GB/T8567—1988) (154)
附錄B UML簡介 (171)
術語表 (173)
參考文獻 (174)
教育部十六號文件《關于全面提高高等職業教育教學質量的若干意見》明確指出要“加強素質教育,增強學生的職業能力,加大課程建設與改革的力度”。本書嘗試摒棄傳統軟件工程的學科性教學,圍繞軟件開發需要的職業能力培養,組織與設計教學內容。
傳統的軟件教學重點在知識與技術教學,其不足主要表現在:概念與理論知識多、力求知識理論體系的完善;軟件開發技術、方法的教學針對性不強;每個軟件開發階段在過渡時技術上顯得脫節;教學內容對程序編碼的指導作用不明顯等。所以,學生難以理解與領悟其中的內容,特別在實際操作上難以做到學以致用。另外,軟件開發與管理模式靈活多樣,知識體系龐大,要完整掌握難度大。
針對上述問題,筆者在進行教學內容設計時,分析高職學生的特點,以軟件開發專業人才應知應會的知識、能力作為培養目標,并圍繞這些目標進行教學內容的設計。本書教學內容的設計具有以下特點:
內容的取舍以實用為原則,為職業能力培養目標服務。
以軟件開發過程典型工作任務為重點,力爭在技術上連貫。
教學情境的設計深入淺出,以任務驅動的形式組織教學,使學生容易消化。
加強各階段教學內容在技術層面的銜接,突出了軟件設計到編碼技術上的過渡。
內容組織中,體現了“項目導向、任務驅動”的教學。突出展現了軟件開發引導案例的技術連貫及其實現,再通過它突出體現軟件開發的重要理論知識。
整個教學內容以一個項目(物流系統)為載體,將軟件開發的理論、方法、工具、開發過程等融為一體。最后一章還提供這些案例的完整文檔,讓讀者(特別是軟件專業的學生)能掌握軟件開發報告的編寫。
軟件開發過程主要有需求分析、軟件設計、編碼與測試、軟件維護等活動,它們構成了軟件開發過程的主要任務階段。但是這些活動之間的組織不是簡單線性的,它們之間的組織關系非常靈活,有多種經典模式。這就是為什么這些內容在實際開發中難以被掌握的原因。
軟件開發各重要階段的教學,就是本課程的教學重點內容,其實它們又是教學難點內容。這些教學內容及它們在技術層面的過渡往往被以前的教材忽略,或連貫性不強。本書以項目為導向,通過任務驅動組織這些內容,從而解決了上述重點與難點的教學內容及銜接問題。
另外,本書的組織利于軟件開發人員的學習。比如第1~3章,目的是培養學生了解軟件開發過程,讓初學者知道軟件是如何開發的,使學生掌握軟件編碼前的一些概念,并掌握傳統需求分析、軟件設計的過程與基本方法。而后續第4、5章是面向對象的方法,學生在已學習需求分析和軟件設計的基礎上,采用流行的面向對象的方法進行需求、設計與建模,并體現了面向對象的設計向面向對象編碼技術上的過渡。第6章介紹了軟件的編碼與實現,在軟件的編碼過程中,測試非常重要,只有通過測試才能得到實用軟件。第7章介紹了軟件使用中的維護。第8章則通過一個軟件開發案例,綜合應用前面介紹的面向對象軟件開發方法,介紹軟件開發的過程及文檔的編寫。
本書條理清晰、內容實用、技術連貫;書中內容的表述力爭做到深入淺出,使易混淆的概念、方法等容易被理解與掌握。本書內容的過渡在技術上連貫,體現了“項目導向、任務驅動”的教學,利于培養學生的軟件開發能力。本書內容有助于軟件開發其他課程的學習與借鑒。
本書由廣東科學技術職業學院的牛德雄、龍立功擔任主編,其中,第1章、第4章、第5章由牛德雄、龍立功編寫;第2章、第3章由楊葉芬編寫;第6章由熊君麗編寫;第7章由扶卿妮編寫;第8章由牛德雄、施茂航編寫。另外,魏云柯設計了本書所用到的圖,移動中心數學企業頂峰公司參與了教材內容的設計。在此一并表示感謝。
為了方便教師教學,本書配有電子教學課件及相關資源,請有此需要的教師登錄華信教育資源網(www.hxedu.com.cn)免費注冊后下載,如有問題,可在網站留言板留言或與電子工業出版社聯系(E-mail:hxedu@phei.com.cn)。
目前,國內外關于軟件工程、軟件開發與管理方面的資料非常多,新理論、新技術層出不窮。如何更好地取舍與組織適合高職學生教學的內容需要不斷探索。由于時間倉促,書中難免存在疏漏和不足,懇請同行專家和讀者能給予批評和指正。
編 者