《21世纪高等学校规划教材·软件工程·软件工程基础与实用教程:基于架构与MVC模式的一体化开发》是一本将软件工程基础理论与现代企业级开发技术相结合而诞生的软件工程实用教程。全书分为上下两篇。上篇是软件工程基础篇,系统地介绍了软件开发必须遵循的软件工程基本原理和开发方法,包括软件的需求、设计、实现、维护等开发过程和项目管理;下篇是体现本书特色的应用篇,介绍了应用企业级软件架构和MVC设计模式等现代开发技术进行软件开发过程,即基于架构与MVC模式的一体化开发方法。一体化开发方法是本书的核心内容,它一方面是指从分析、设计到实现全程遵循MVC模式,而不仅仅指某个开发阶段:另一方面是指架构与MVC模式的相互结合,架构可使得MVC的应用走向简单化、实用化。在一体化的基础上进而介绍了一种正交设计方法,它可以轻松处理复杂领域问题的解耦,将软件结构按MVE三大空间进行隔离设计,然后采用组装方式,以两大装配将MVE三大空间联系为一个软件整体。正交设计具有很强的规律性、可操作性。本书在最后介绍了一体化开发的应用案例,该案例不仅体现了一体化的具体应用,也展示了软件开发从抽象到细化的真实过程,让读者深入理解软件工程的一系列重要思想。
《21世纪高等学校规划教材·软件工程·软件工程基础与实用教程:基于架构与MVC模式的一体化开发》可以作为计算机或软件工程等相关专业的本科生、研究生的教材,同时也可作为软件开发领域的各类专业人员的参考书。
《21世纪高等学校规划教材·软件工程·软件工程基础与实用教程:基于架构与MVC模式的一体化开发》特点:教学目标明确,注重理论与实践的结合;教学方法法灵活,培养学生自主学习的能力;教学内容先进,加强对毕业设计的指导作用;教学模式完善,提供配套的教学资源解决方案。
这是一本基于软件工程原理、结合现代技术的软件开发实用教程。软件工程本是一门实践性非常强的学科,但是很多初学者在学习软件工程课程以后依旧感到茫然,面对实际项目不知所措。另外,对于一些现代技术的学习和应用没有上升到软件工程的高度去理解和认识。本书以掌握软件工程基本原理为指导应用,应用要与现代技术相结合的目标来讲解软件工程,全书分为上、下两篇:上篇为基础篇,系统地介绍了软件开发必须遵循的软件工程基本原理和开发方法;下篇为应用篇,首先对企业级软件架构和MVC设计模式等现代开发技术进行介绍,然后讲述由此带来的开发方法上的变化及在软件工程中的使用。
近几年,诸如微软的.NET、Sun的J2EE等软件架构技术在企业级软件开发中得到广泛应用,使得软件开发效率、质量、维护性、成功率得到空前的提高,其商业价值得到IT业界的认可,以至在业界形成了汹涌的应用浪潮。
软件行业发展的一个特殊规律是技术催生方法学,就是先使用技术后讲究方法。如20世纪60年代,出现了FORTRAN、COBOL、Lisp等过程性高级语言[1],直到20世纪70年代,随着BASIC、Pascal、C的广泛应用,诞生了结构化的程序设计方法学。到20世纪80年代C++已经广泛应用,而到20世纪90年代,面向对象的开发方法OOA和OOD才趋于普及和成熟。回顾以往,方法学的诞生比技术的兴起延时5~10年。架构技术与基于架构的开发方法也面临这样的窘境,一方面企业开发在大量应用架构,另一方面它的开发方法还没有规范。目前在技术层面推进上,有关架构的技术书籍随处可见,这些书籍和作者在技术推广方面功不可没;高等教育的课堂教学,以及适应就业需求“揭竿而起”的就业培训也是把“热点”集中在架构的编程技术层面。然而,在基于架构技术的方法学层面上的教学和教材还不多见。在很多软件工程的经典教材中,甚至在面向21世纪的新教材中还是停留在传统的面向对象开发方法上,主要讲述经典的Booch方法、Coad-Yourdon方法、Ivar Jacobson的OOSE方法、James Rumbaugh的OMT[2][3]。有些先进的教材中介绍了统一方法,但也不是基于架构的,面对今天的架构它们显得能力不足。试想一下,如果基于架构的技术却采用OMT方法开发,结果是把简单的事情复杂化,适得其反,架构所带来的降低开发难度的好处将荡然无存。
本书参考了许多开发团队的成功经验,结合作者在应用架构方面的研究和工程实践,在方法学的层面,介绍有关架构与MVC模式统一起来在软件的分析、设计、实现的开发过程中具体的应用方法和步骤,也就是本书副标题“基于架构与MVC模式的一体化开发”。为完整体现一体化开发方法的应用,在第13章介绍了一个教师和学生都熟悉的“毕业设计流程管理系统”案例。尽管该案例采用J2EE架构,但它同样适合其他架构。
一体化开发的核心思想是:从系统分析开始就在按MVC(更准确地说是MVE)划分,直到设计、实现和维护的全过程乃至开发团队的组建都遵循MVC的理念(分离+协作)。一体化开发的目的是:先进的开发方法要与先进的技术相适应,降低开发难度,解放生产力。
上篇共有 10 章,本书一改传统的讲述方式,在讲述内容与章节上做了重大调整。由于结构化与面向对象的分析和设计遵循的原理、基础是相同的,把软件分析和软件设计基础部分单独抽取出来,然后分别从结构化、面向对象两个层次讲述从分析到设计。读者要重点理解和掌握第 7 章的“面向对象从分析到设计”。基础篇也包括软件测试和维护的内容,第10章介绍了软件项目管理。
下篇是本书具有特色的应用篇,也是体现本书从实用出发的核心内容:应用架构与MVC设计模式相结合的一体化开发方法。
第11章就是作为一体化开发的基础篇,对架构与MVC模式从基本概念开始直到它们如何达到统一做了系统的介绍。比如读者想追根寻源地了解这样的系列问题:什么是架构?企业为什么采用架构?架构给软件开发提供了什么?如何使用?架构为什么分层?分为多少层?每层起什么作用?……什么是设计模式?什么是MVC设计模式?MVC分层与架构分层有何区别和联系?等等。理解这些概念将有助于加深对架构、设计模式方面的理解。为了让初学者容易理解,本书尽量避免使用晦涩的学术性用语,而是采用通俗、形象的语言来解释概念,引用生活中熟悉的例子加以印证。对于从其他学习中已建立了一些基本概念、有一定基础的读者,阅读本部分内容来系统疏理一下思路也将大有裨益。11.3节具体地介绍了一个常用的企业架构J2EE;另外,为开阔读者眼界,在11.4节对企业集成架构SOA、SCA进行了介绍,在11.7节介绍了开源框架SSH在MVC模式中的使用。11.6节是第11章的核心内容,在以架构与MVC的基本概念为铺垫下,重点从原理上叙述了架构分层与MVC模式分层的区别和联系,找到了它们之间的共同点,也就是演奏了基于架构与MVC模式一体化开发的前奏曲。此外,为了帮助读者更好地理解MVC的特征,也对事件驱动模式和观察者模式做了一定的介绍。
第12章是本书的核心内容,介绍一体化开发过程的基本原理、具体实施。第12章实际就是软件开发从面向过程到面向对象再升华达到的第三个层次:面向架构从分析到设计。一体化一方面指架构的分层与MVC分层的统一,架构与MVC设计模式是天作之合,架构解决体系结构设计难题,MVC 解决领域结构设计的困扰;另一方面指从需求分析、概要设计、详细设计到编码实现全过程始终遵循MVC的思想。这种一体化方法使得软件开发从对客观抽象到具体实现的逐步精化过程具有很强的简便性、规律性、可操作性。它对于软件工程初学者不再虚无缥缈,对于软件分析师、设计师乃至程序员在实际工作中都具有很好的参考价值。在领域问题软件结构设计方面,结合MVC的事件响应管理模型,介绍了正交设计方法。该方法首先在水平方向按软件体系结构层找出每个事件的层间的依赖关系即执行链,然后按垂直方向分为V(Viewer)、M(Model)、E(Entity)三大结构进行分层设计。这种正交设计方法克服了传统的对象识别和对象设计上的困难。在界面和事件的命令组织设计方面也采用了正交设计方法,使得繁杂的设计工作变得井然有序。
第13章是一体化开发方法的应用案例。案例采用Java EE架构,读者可以完整体验基于架构的从分析到设计的过程遵循一体化开发方法。为节省篇幅,案例中对于内容不同但如法炮制的部分做了大幅削减。
参考本书提供的一体化方法和实际案例,读者将从技术层面提升到方法学层面来理解和使用架构;帮助读者领悟到架构给方法学所带来的进步;通过与读者分享案例来学习这种软件开发方法,体验由难变易、由繁变简、逐步精化、有章可循,走向简单化、条理化、规范化的可贵提升。
为了理解架构与MVC的关系,本书介绍了很多有关架构方面的知识,同时也介绍了常用的架构 J2EE 和 SSH 框架,并以代码的形式介绍了相关例子。但本书是以理解 MVC模型为出发点,而不是系统性地讲解编程技术和技巧。如果阅读代码部分有困难,或者想要从具体编程上有待提高的读者还要参阅其他相关资料。
很多读者在学习软件工程课程之后,感到空洞茫然,面对实际问题无所适从;也有些读者在应用具体的技术之中缺乏软件工程的思想,对技术的理解陷入片面,技术发挥受到局限。本书意在学习软件工程和架构技术之间搭建一个桥梁。本来软件工程和架构技术之间存在着天然的联系,但是由于课程设置、教学目标或因教学对象不同,造成两者知识的断裂。因此,本书对单独学习软件工程或单独学习架构编程各自存在的不足进行了弥合,可以作为这两门知识的双向理解,最终将两门知识融合在一起,提升对软件开发的理解和解决问题的能力。本书可以作为本科的专业课教材,同时也是毕业设计极好的参考资料;本书也适合研究生深入学习和研究架构的基础教材;本书对那些在工作岗位上需要进一步理解架构、理解开发方法的从业者也有很好的帮助。
尽管本书在编著过程中力求内容精炼、语言准确,但由于时间仓促和作者水平所限,疏漏与不足之处在所难免,欢迎广大读者批评指正。
马云吉、王莉、孙学波、张文宇、李迎春、郭秋、张秀梅、张晓霞、芦明、王博等老师参加了本书的编写和校对工作,在此表示感谢。
作 者
2012年7月于辽宁科技大学
上篇 软件工程基础篇
第1章 软件工程概述
1.1 软件的概念
1.1.1 软件和软件产品
1.1.2 软件产品的类型
1.2 软件的发展与软件危机的产生
1.2.1 软件的发展过程
1.2.2 软件危机
1.2.3 软件危机的表现
1.3 解决软件危机的途径
1.4 软件工程的定义
1.5 软件工程的内容
1.5.1 从计算机科学视角看软件工程
1.5.2 从工程视角看软件工程
1.5.3 从管理视角看软件工程
1.5.4 从基本原理视角看软件工程
1.6 软件发展的新阶段与新问题
1.6.1 软件发展的第4阶段和第5阶段
1.6.2 以面向对象为基础的面向架构技术
1.6.3 以业务单元为基础的面向服务架构SOA
1.6.4 以软件作为服务的应用模式
1.7 软件工程的演变发展
1.7.1 从软件技术到软件工程
1.7.2 从传統软件工程到现代软件工程
1.7.3 从软件工程学到软件经济学
1.7.4 从软件工程应用到教学
本章小结
习题
第2章 软件过程
2.1 软件过程概述
2.1.1 软件过程定义
2.1.2 软件过程的活动集合
2.1.3 软件过程贯穿软件工程方法论
2.2 软件过程与软件生存周期
2.2.1 软件生存周期
2.2.2 软件生存周期与软件过程的关系
2.3 软件过程与软件工程
2.3.1 工程是管理过程的
2.3.2 软件过程是软件工程的子集
2.4 软件开发模型
2.4.1 瀑布模型
2.4.2 快速原型模型
2.4.3 增量模型
2.4.4 螺旋模型
2.4.5 统一过程RUP
2.4.6 敏捷开发与极限编程
2.4.7 关于RUP与XP之争
2.5 软件过程与开发方法
2.5.1 软件开发的本质与开发方法
2.5.2 面向过程开发方法
2.5.3 面向对象开发方法
2.5.4 面向组件开发方法
2.5.5 面向服务开发方法
2.5.6 开发方法进步带来的思考
2.6 软件过程改进与CMM
2.6.1 过程改进SPI
2.6.2 软件能力成熟度模型SW-CMM
本章小结
习题
第3章 软件计划
3.1 软件计划櫬述
3.2 问题定义
3.3 可行性分析
3.3.1 可行性分析概要介绍
3.3.2 可行性分析的方法
3.3.3 可行性分析工具之SFD
3.3.4 可行性分析之业务建模
……
下篇 软件工程实用篇
参考文献
本书特色
教学建议
跋