随着软件工程技术的发展,软件的形态、规模、方法、架构、工具和环境等都在变化。由于Internet的普及,人们了解和掌握国内外新技术越来越容易。可是作为学生,系统地获取知识的软件工程教材并没有跟上软件工程技术发展的步伐,导致培养出来的学生不能很快地适应社会的需要。
国内本科生的软件工程教材仍然以瀑布型模型的生命周期为主线来组织,大部分教材的内容只跟进到20世纪90年代的面向对象开发方法,新的内容如软件体系结构、中间件、SOA、网构软件、面向Agent的软件工程和云计算等都没有涉及,使得软件工程的教学内容与当今主流技术之间的脱节越来越大。
国内研究生的软件工程教材几乎是一片空白,不少高校沿用本科阶段的教材,或是各自做些零散的PPT讲稿,这种现状可能与我国研究生教育相对宽松的要求有关。随着高校研究生数量的不断增多,教学质量要求越来越高,教材用量在不断增长,我们深感有必要整理一本合适的教材,以便把最新的成果较为系统地传授给学生。编写本书的目的之一是抛砖引玉,希望以后有更多优秀的软件工程教材涌现出来。
软件工程是指导计算机软件开发和维护的工程学科,研究如何提高软件生产效率和质量是该学科的核心问题。开发和维护或者说构造和演化是软件工程活动的两个重要环节。要提高生产效率必须减少开发和维护的工作量,缩短开发和维护的时间。要提高软件的质量必须构造良好的体系结构和复用以往成熟的部分。
软件复用一直是软件工程界所追求的梦想,复用技术是提高软件生产效率和质量的重要途径之一。
软件体系结构可帮助解决软件复用所遇到的障碍,对系统部件约束最小的地方复用性最大,而作为系统早期设计的体系结构对部件的约束最小,因此,基于软件体系结构的复用为软件复用开拓了一条新的道路,使软件复用从代码复用发展到设计复用和过程复用,实现多层次的软件复用。软件体系结构研究的最大贡献在于对软件生产率的提高和维护的简化。
在中间件产生以前,应用软件直接利用操作系统、网络协议和数据库等开发,这些都是计算机最底层的东西,越底层越复杂,开发者不得不面临许多很棘手的问题,如操作系统的多样性、网络环境的复杂多变性、网络程序设计的繁杂性、数据分散处理的不一致性以及程序的性能、效率和安全等问题。这些与用户的业务没有直接关系,但又必须解决,耗费了开发者大量宝贵的时间和精力。能不能将应用软件所要面临的共性问题进行提炼和抽象,在操作系统之上再形成一个可复用的部分,供成千上万的应用软件重复使用?这就是中间件技术。中间件技术使软件复用了网络和系统软件之上、应用系统之下的广袤疆域,为应用软件提供了应用支撑平台。
概括来说,面向对象技术通过类的封装,在同种编程语言中实现了代码级别的复用;构件技术在二进制级别共享,使复用跨越了编程语言的限制;SOA利用Web Service等技术,使复用跨越了操作系统平台的限制;软件体系结构使复用扩展到软件生命周期的各个阶段;中间件技术使应用软件的开发者复用了底层的大量技术。可见软件复用的粒度和范围在不断扩大。
前言高级软件工程软件自动化是软件工程界所追求的又一个梦想,CASE技术是为实现软件自动化作支撑的工具。CASE作为计算机软件工程的一种技术和环境,其目的是通过统一的数据操纵手段和方法,从多个角度和多个阶段辅助软件开发人员。CASE是集成化的软件开发环境,覆盖软件生命周期的各个阶段。一般来讲,CASE工具包括需求分析工具、软件设计工具、软件测试工具、软件文档编制与生成工具、逆向工程工具等。CASE技术也是提高软件生产效率和质量的重要途径之一。
智能化是软件自动化的重要提升,软件具有自适应的能力,必然会减少维护的工作量。Agent系统和多Agent系统已经成为一种应对各种复杂IT情景的强大技术。Agent是自治的应用组件,反映了现代分布式系统内在的分散性,并且可视为系统被不同的利益相关者所拥有,在模块化和封装概念上进行了自然延伸;Agent运行和交互所采取的灵活方式适应于现代软件在动态和不可预知的情况下运行;Agent的概念为人工智能的成果提供了一个统一的观点,通过使用Agent和多Agent作为存放智能行为的、可靠的和易管理的知识库,从而利用人工智能的成果解决现实世界中的问题。网构软件具有自主性、协同性、反应性、演化性和多态性等特征,是基于开放的Internet计算平台而提出的一种新的软件形态。Agent技术和网构软件都是从仿生学的角度来研究软件开发技术,也是提高软件生产效率和质量的重要途径之一。
零维护是软件工程界所追求的另一个梦想,维护是软件生命周期中最耗时的一个阶段,如何降低维护成本一直是一个重要课题。在线演化技术在许多重要的应用领域中(如医疗、金融、电力、电信、银行及空中交通管制等)对于系统的持续可用性是一个关键性的要求,运行时刻的系统演化可减少因关机和重启带来的损失和风险。柔性工作流是工作流技术研究领域中的一个重点,“柔性”概念是针对系统在模型定义和执行中所表现出来的僵化和死板而提出的。简单来说,系统的柔性就是指系统适应新情况、新环境、新任务的能力;具体来说,是指系统在其所处的环境、条件或者过程状态发生改变时,是否能够快速响应和跟随变化的能力。因此,在线演化技术和柔性工作流技术是减少维护的两个重要途径。
云计算是现代软件工程思想和技术大规模应用的结果。云计算通过虚拟化技术将资源进行整合而形成庞大的计算与存储网络,用户只需要一台接入网络的终端就能够以相对低廉的价格获得所需的资源和服务而无须考虑其来源。云计算实现了资源和计算能力的分布式共享,能够很好地应对当前互联网数据量高速增长的势头。
构件技术是受大工业生产的启发而产生的,是软件技术跨世纪的一个发展趋势,其目的是彻底改变软件生产方式,从根本上提高软件生产的效率和质量,提高开发大型软件系统尤其是商用系统的成功率。构件是现代软件工程的基础概念,是构造软件的“细胞”,本书第1~11章的所有理论和技术都是以构件为基础,第12~17章的6个实验中有4个是关于构件技术,有两个虽然是关于网络通信的编程,但仍然是以构件技术为支撑的。
本书出版的另一个目的是将软件工程的新技术成果以教材内容的形式传授给高校研究生,为他们今后的学习和工作奠定扎实的基础,因此撰写过程中直接或间接地引用了许多专家和学者的文献,作者向他们深表谢意。
在本书的撰写过程中,杭婷婷参与了第1、3、5、6、12、13章的编写,吴爱清参与了第2、3、11、14、15章的编写,侯海金参与了第2、7、15、16、17章的编写,谢启宇参与了第12、14、16、17章的编写,李申莉编写了第4章,秦飞编写了第8章,刘明编写了第9章,黄明星编写了第10章,苏昌亚、姚佳岷等同学协助了书稿的整理,刘辉参编了第11章和审核了部分章节,方木云组织编写和审核了全书。中国科学技术大学的赵保华和屈玉贵两位教授对本书提出了许多宝贵的建议,在此表示感谢。
在本书的编写过程中,内容反复斟酌,力求完美。但是限于作者的水平,书中必有许多不完善的地方,恳请读者批评指正。
作 者2011年5月
