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