《21世紀高等學校規(guī)劃教材·軟件工程·軟件工程基礎與實用教程:基于架構(gòu)與MVC模式的一體化開發(fā)》是一本將軟件工程基礎理論與現(xiàn)代企業(yè)級開發(fā)技術(shù)相結(jié)合而誕生的軟件工程實用教程。全書分為上下兩篇。上篇是軟件工程基礎篇,系統(tǒng)地介紹了軟件開發(fā)必須遵循的軟件工程基本原理和開發(fā)方法,包括軟件的需求、設計、實現(xiàn)、維護等開發(fā)過程和項目管理;下篇是體現(xiàn)本書特色的應用篇,介紹了應用企業(yè)級軟件架構(gòu)和MVC設計模式等現(xiàn)代開發(fā)技術(shù)進行軟件開發(fā)過程,即基于架構(gòu)與MVC模式的一體化開發(fā)方法。一體化開發(fā)方法是本書的核心內(nèi)容,它一方面是指從分析、設計到實現(xiàn)全程遵循MVC模式,而不僅僅指某個開發(fā)階段:另一方面是指架構(gòu)與MVC模式的相互結(jié)合,架構(gòu)可使得MVC的應用走向簡單化、實用化。在一體化的基礎上進而介紹了一種正交設計方法,它可以輕松處理復雜領域問題的解耦,將軟件結(jié)構(gòu)按MVE三大空間進行隔離設計,然后采用組裝方式,以兩大裝配將MVE三大空間聯(lián)系為一個軟件整體。正交設計具有很強的規(guī)律性、可操作性。本書在最后介紹了一體化開發(fā)的應用案例,該案例不僅體現(xiàn)了一體化的具體應用,也展示了軟件開發(fā)從抽象到細化的真實過程,讓讀者深入理解軟件工程的一系列重要思想。
《21世紀高等學校規(guī)劃教材·軟件工程·軟件工程基礎與實用教程:基于架構(gòu)與MVC模式的一體化開發(fā)》可以作為計算機或軟件工程等相關(guān)專業(yè)的本科生、研究生的教材,同時也可作為軟件開發(fā)領域的各類專業(yè)人員的參考書。
《21世紀高等學校規(guī)劃教材·軟件工程·軟件工程基礎與實用教程:基于架構(gòu)與MVC模式的一體化開發(fā)》特點:教學目標明確,注重理論與實踐的結(jié)合;教學方法法靈活,培養(yǎng)學生自主學習的能力;教學內(nèi)容先進,加強對畢業(yè)設計的指導作用;教學模式完善,提供配套的教學資源解決方案。
這是一本基于軟件工程原理、結(jié)合現(xiàn)代技術(shù)的軟件開發(fā)實用教程。軟件工程本是一門實踐性非常強的學科,但是很多初學者在學習軟件工程課程以后依舊感到茫然,面對實際項目不知所措。另外,對于一些現(xiàn)代技術(shù)的學習和應用沒有上升到軟件工程的高度去理解和認識。本書以掌握軟件工程基本原理為指導應用,應用要與現(xiàn)代技術(shù)相結(jié)合的目標來講解軟件工程,全書分為上、下兩篇:上篇為基礎篇,系統(tǒng)地介紹了軟件開發(fā)必須遵循的軟件工程基本原理和開發(fā)方法;下篇為應用篇,首先對企業(yè)級軟件架構(gòu)和MVC設計模式等現(xiàn)代開發(fā)技術(shù)進行介紹,然后講述由此帶來的開發(fā)方法上的變化及在軟件工程中的使用。
近幾年,諸如微軟的.NET、Sun的J2EE等軟件架構(gòu)技術(shù)在企業(yè)級軟件開發(fā)中得到廣泛應用,使得軟件開發(fā)效率、質(zhì)量、維護性、成功率得到空前的提高,其商業(yè)價值得到IT業(yè)界的認可,以至在業(yè)界形成了洶涌的應用浪潮。
軟件行業(yè)發(fā)展的一個特殊規(guī)律是技術(shù)催生方法學,就是先使用技術(shù)后講究方法。如20世紀60年代,出現(xiàn)了FORTRAN、COBOL、Lisp等過程性高級語言[1],直到20世紀70年代,隨著BASIC、Pascal、C的廣泛應用,誕生了結(jié)構(gòu)化的程序設計方法學。到20世紀80年代C++已經(jīng)廣泛應用,而到20世紀90年代,面向?qū)ο蟮拈_發(fā)方法OOA和OOD才趨于普及和成熟;仡櫼酝,方法學的誕生比技術(shù)的興起延時5~10年。架構(gòu)技術(shù)與基于架構(gòu)的開發(fā)方法也面臨這樣的窘境,一方面企業(yè)開發(fā)在大量應用架構(gòu),另一方面它的開發(fā)方法還沒有規(guī)范。目前在技術(shù)層面推進上,有關(guān)架構(gòu)的技術(shù)書籍隨處可見,這些書籍和作者在技術(shù)推廣方面功不可沒;高等教育的課堂教學,以及適應就業(yè)需求“揭竿而起”的就業(yè)培訓也是把“熱點”集中在架構(gòu)的編程技術(shù)層面。然而,在基于架構(gòu)技術(shù)的方法學層面上的教學和教材還不多見。在很多軟件工程的經(jīng)典教材中,甚至在面向21世紀的新教材中還是停留在傳統(tǒng)的面向?qū)ο箝_發(fā)方法上,主要講述經(jīng)典的Booch方法、Coad-Yourdon方法、Ivar Jacobson的OOSE方法、James Rumbaugh的OMT[2][3]。有些先進的教材中介紹了統(tǒng)一方法,但也不是基于架構(gòu)的,面對今天的架構(gòu)它們顯得能力不足。試想一下,如果基于架構(gòu)的技術(shù)卻采用OMT方法開發(fā),結(jié)果是把簡單的事情復雜化,適得其反,架構(gòu)所帶來的降低開發(fā)難度的好處將蕩然無存。
本書參考了許多開發(fā)團隊的成功經(jīng)驗,結(jié)合作者在應用架構(gòu)方面的研究和工程實踐,在方法學的層面,介紹有關(guān)架構(gòu)與MVC模式統(tǒng)一起來在軟件的分析、設計、實現(xiàn)的開發(fā)過程中具體的應用方法和步驟,也就是本書副標題“基于架構(gòu)與MVC模式的一體化開發(fā)”。為完整體現(xiàn)一體化開發(fā)方法的應用,在第13章介紹了一個教師和學生都熟悉的“畢業(yè)設計流程管理系統(tǒng)”案例。盡管該案例采用J2EE架構(gòu),但它同樣適合其他架構(gòu)。
一體化開發(fā)的核心思想是:從系統(tǒng)分析開始就在按MVC(更準確地說是MVE)劃分,直到設計、實現(xiàn)和維護的全過程乃至開發(fā)團隊的組建都遵循MVC的理念(分離+協(xié)作)。一體化開發(fā)的目的是:先進的開發(fā)方法要與先進的技術(shù)相適應,降低開發(fā)難度,解放生產(chǎn)力。
上篇共有 10 章,本書一改傳統(tǒng)的講述方式,在講述內(nèi)容與章節(jié)上做了重大調(diào)整。由于結(jié)構(gòu)化與面向?qū)ο蟮姆治龊驮O計遵循的原理、基礎是相同的,把軟件分析和軟件設計基礎部分單獨抽取出來,然后分別從結(jié)構(gòu)化、面向?qū)ο髢蓚層次講述從分析到設計。讀者要重點理解和掌握第 7 章的“面向?qū)ο髲姆治龅皆O計”;A篇也包括軟件測試和維護的內(nèi)容,第10章介紹了軟件項目管理。
下篇是本書具有特色的應用篇,也是體現(xiàn)本書從實用出發(fā)的核心內(nèi)容:應用架構(gòu)與MVC設計模式相結(jié)合的一體化開發(fā)方法。
第11章就是作為一體化開發(fā)的基礎篇,對架構(gòu)與MVC模式從基本概念開始直到它們?nèi)绾芜_到統(tǒng)一做了系統(tǒng)的介紹。比如讀者想追根尋源地了解這樣的系列問題:什么是架構(gòu)?企業(yè)為什么采用架構(gòu)?架構(gòu)給軟件開發(fā)提供了什么?如何使用?架構(gòu)為什么分層?分為多少層?每層起什么作用?……什么是設計模式?什么是MVC設計模式?MVC分層與架構(gòu)分層有何區(qū)別和聯(lián)系?等等。理解這些概念將有助于加深對架構(gòu)、設計模式方面的理解。為了讓初學者容易理解,本書盡量避免使用晦澀的學術(shù)性用語,而是采用通俗、形象的語言來解釋概念,引用生活中熟悉的例子加以印證。對于從其他學習中已建立了一些基本概念、有一定基礎的讀者,閱讀本部分內(nèi)容來系統(tǒng)疏理一下思路也將大有裨益。11.3節(jié)具體地介紹了一個常用的企業(yè)架構(gòu)J2EE;另外,為開闊讀者眼界,在11.4節(jié)對企業(yè)集成架構(gòu)SOA、SCA進行了介紹,在11.7節(jié)介紹了開源框架SSH在MVC模式中的使用。11.6節(jié)是第11章的核心內(nèi)容,在以架構(gòu)與MVC的基本概念為鋪墊下,重點從原理上敘述了架構(gòu)分層與MVC模式分層的區(qū)別和聯(lián)系,找到了它們之間的共同點,也就是演奏了基于架構(gòu)與MVC模式一體化開發(fā)的前奏曲。此外,為了幫助讀者更好地理解MVC的特征,也對事件驅(qū)動模式和觀察者模式做了一定的介紹。
第12章是本書的核心內(nèi)容,介紹一體化開發(fā)過程的基本原理、具體實施。第12章實際就是軟件開發(fā)從面向過程到面向?qū)ο笤偕A達到的第三個層次:面向架構(gòu)從分析到設計。一體化一方面指架構(gòu)的分層與MVC分層的統(tǒng)一,架構(gòu)與MVC設計模式是天作之合,架構(gòu)解決體系結(jié)構(gòu)設計難題,MVC 解決領域結(jié)構(gòu)設計的困擾;另一方面指從需求分析、概要設計、詳細設計到編碼實現(xiàn)全過程始終遵循MVC的思想。這種一體化方法使得軟件開發(fā)從對客觀抽象到具體實現(xiàn)的逐步精化過程具有很強的簡便性、規(guī)律性、可操作性。它對于軟件工程初學者不再虛無縹緲,對于軟件分析師、設計師乃至程序員在實際工作中都具有很好的參考價值。在領域問題軟件結(jié)構(gòu)設計方面,結(jié)合MVC的事件響應管理模型,介紹了正交設計方法。該方法首先在水平方向按軟件體系結(jié)構(gòu)層找出每個事件的層間的依賴關(guān)系即執(zhí)行鏈,然后按垂直方向分為V(Viewer)、M(Model)、E(Entity)三大結(jié)構(gòu)進行分層設計。這種正交設計方法克服了傳統(tǒng)的對象識別和對象設計上的困難。在界面和事件的命令組織設計方面也采用了正交設計方法,使得繁雜的設計工作變得井然有序。
第13章是一體化開發(fā)方法的應用案例。案例采用Java EE架構(gòu),讀者可以完整體驗基于架構(gòu)的從分析到設計的過程遵循一體化開發(fā)方法。為節(jié)省篇幅,案例中對于內(nèi)容不同但如法炮制的部分做了大幅削減。
參考本書提供的一體化方法和實際案例,讀者將從技術(shù)層面提升到方法學層面來理解和使用架構(gòu);幫助讀者領悟到架構(gòu)給方法學所帶來的進步;通過與讀者分享案例來學習這種軟件開發(fā)方法,體驗由難變易、由繁變簡、逐步精化、有章可循,走向簡單化、條理化、規(guī)范化的可貴提升。
為了理解架構(gòu)與MVC的關(guān)系,本書介紹了很多有關(guān)架構(gòu)方面的知識,同時也介紹了常用的架構(gòu) J2EE 和 SSH 框架,并以代碼的形式介紹了相關(guān)例子。但本書是以理解 MVC模型為出發(fā)點,而不是系統(tǒng)性地講解編程技術(shù)和技巧。如果閱讀代碼部分有困難,或者想要從具體編程上有待提高的讀者還要參閱其他相關(guān)資料。
很多讀者在學習軟件工程課程之后,感到空洞茫然,面對實際問題無所適從;也有些讀者在應用具體的技術(shù)之中缺乏軟件工程的思想,對技術(shù)的理解陷入片面,技術(shù)發(fā)揮受到局限。本書意在學習軟件工程和架構(gòu)技術(shù)之間搭建一個橋梁。本來軟件工程和架構(gòu)技術(shù)之間存在著天然的聯(lián)系,但是由于課程設置、教學目標或因教學對象不同,造成兩者知識的斷裂。因此,本書對單獨學習軟件工程或單獨學習架構(gòu)編程各自存在的不足進行了彌合,可以作為這兩門知識的雙向理解,最終將兩門知識融合在一起,提升對軟件開發(fā)的理解和解決問題的能力。本書可以作為本科的專業(yè)課教材,同時也是畢業(yè)設計極好的參考資料;本書也適合研究生深入學習和研究架構(gòu)的基礎教材;本書對那些在工作崗位上需要進一步理解架構(gòu)、理解開發(fā)方法的從業(yè)者也有很好的幫助。
盡管本書在編著過程中力求內(nèi)容精煉、語言準確,但由于時間倉促和作者水平所限,疏漏與不足之處在所難免,歡迎廣大讀者批評指正。
馬云吉、王莉、孫學波、張文宇、李迎春、郭秋、張秀梅、張曉霞、蘆明、王博等老師參加了本書的編寫和校對工作,在此表示感謝。
作 者
2012年7月于遼寧科技大學
上篇 軟件工程基礎篇
第1章 軟件工程概述
1.1 軟件的概念
1.1.1 軟件和軟件產(chǎn)品
1.1.2 軟件產(chǎn)品的類型
1.2 軟件的發(fā)展與軟件危機的產(chǎn)生
1.2.1 軟件的發(fā)展過程
1.2.2 軟件危機
1.2.3 軟件危機的表現(xiàn)
1.3 解決軟件危機的途徑
1.4 軟件工程的定義
1.5 軟件工程的內(nèi)容
1.5.1 從計算機科學視角看軟件工程
1.5.2 從工程視角看軟件工程
1.5.3 從管理視角看軟件工程
1.5.4 從基本原理視角看軟件工程
1.6 軟件發(fā)展的新階段與新問題
1.6.1 軟件發(fā)展的第4階段和第5階段
1.6.2 以面向?qū)ο鬄榛A的面向架構(gòu)技術(shù)
1.6.3 以業(yè)務單元為基礎的面向服務架構(gòu)SOA
1.6.4 以軟件作為服務的應用模式
1.7 軟件工程的演變發(fā)展
1.7.1 從軟件技術(shù)到軟件工程
1.7.2 從傳統(tǒng)軟件工程到現(xiàn)代軟件工程
1.7.3 從軟件工程學到軟件經(jīng)濟學
1.7.4 從軟件工程應用到教學
本章小結(jié)
習題
第2章 軟件過程
2.1 軟件過程概述
2.1.1 軟件過程定義
2.1.2 軟件過程的活動集合
2.1.3 軟件過程貫穿軟件工程方法論
2.2 軟件過程與軟件生存周期
2.2.1 軟件生存周期
2.2.2 軟件生存周期與軟件過程的關(guān)系
2.3 軟件過程與軟件工程
2.3.1 工程是管理過程的
2.3.2 軟件過程是軟件工程的子集
2.4 軟件開發(fā)模型
2.4.1 瀑布模型
2.4.2 快速原型模型
2.4.3 增量模型
2.4.4 螺旋模型
2.4.5 統(tǒng)一過程RUP
2.4.6 敏捷開發(fā)與極限編程
2.4.7 關(guān)于RUP與XP之爭
2.5 軟件過程與開發(fā)方法
2.5.1 軟件開發(fā)的本質(zhì)與開發(fā)方法
2.5.2 面向過程開發(fā)方法
2.5.3 面向?qū)ο箝_發(fā)方法
2.5.4 面向組件開發(fā)方法
2.5.5 面向服務開發(fā)方法
2.5.6 開發(fā)方法進步帶來的思考
2.6 軟件過程改進與CMM
2.6.1 過程改進SPI
2.6.2 軟件能力成熟度模型SW-CMM
本章小結(jié)
習題
第3章 軟件計劃
3.1 軟件計劃櫬述
3.2 問題定義
3.3 可行性分析
3.3.1 可行性分析概要介紹
3.3.2 可行性分析的方法
3.3.3 可行性分析工具之SFD
3.3.4 可行性分析之業(yè)務建模
……
下篇 軟件工程實用篇
參考文獻
本書特色
教學建議
跋