现在市面上也有很多冠之以软件工程名义的读物,其中不乏精品。但总体来说,这些读物,要么精于理论阐述,要么精于实践描述,却很少有将二者有机融合的读物。对于刚刚接触软件工程的读者来说,与实践脱节的理论读物未免乏味,与理论脱节的实践描述却又难以提升理论品位。在象牙塔内,技术与理论脱节情况尤为严重:数据库理论中的很多内容在实践时学生不知如何运用,更难说得上理论结合实践;软件工程课程几乎被学生当作政治理论课,认为只要背诵就能对付考试,固然应对考试应该没什么问题,但学生却因此失去难能可贵的掌握理论、锻炼实践能力的机会,实在可惜。因而很有必要推出能够将软件工程的理论与实践有机融合的读物。
国内也翻译或影印了不少国外软件工程实践的书籍,但是这些书籍中讲解的很多理论与方法只是适应国外的特定环境,在国内的一些特定的软件开发环境下,这些方法或者需要调整或者需要创新。所以关键在于灌输一种“渔”的方法,而非简单地阐述某一开发过程或者某一特定理论。例如,讲解软件过程管理,重要的不是将哪一种软件过程改进模型当作教条加以宣扬,而是阐述软件过程管理的基本内容、基本框架、基本原则。如果将重点放在介绍某一种模型上,读者很可能先入为主,形成偏见,有碍于客观的整体知识结构的形成。
正是基于以上对国内软件工程领域读物现状的认识,我们开始了编写本书的尝试。编者的初衷是为本科阶段的学生学习软件综合课程设计编写一本辅导书籍,但本书编写时的定位,却是希望能够为上述问题的解决贡献一份微薄的力量。诚然,软件工程知识体系结构庞大繁杂,精于一隅已属不易,毋用说整理总体的知识框架并且将理论结合实际了。所以本书很大程度上是一次尝试与创新。但毕竟由于时间、编者学识等各方面的因素,疏漏之处,在所难免。因而,正如软件质量评价的一个很重要标准是可扩展性,本书在编写之初,在内容结构的安排上,也充分考虑到将来的扩展。由于各方面因素的限制没有来得及安排上的内容,均可以在将来得以有机的衔接。
本书本质上是一本针对软件工程的引导性读物,旨在帮助读者建立最新的、关于软件工程知识体系的宏观视野,为读者带来实践软件工程时最为实用的指导。因而本书比较适用于刚刚接触软件工程,希望对软件工程有一个整体性了解的读者;也比较适合于正在寻找一些软件工程实践时最为实用的一些指导的读者。这些指导可能帮读者解决以下问题:不知如何进行计划;不知如何进行数据库设计;不知怎么进行软件的需求分析;不知如何解决.NET编程时的某一个特定技术问题;等等。
本书基本上是按照以下行文思路来编写的。先以软件工程知识体为指引,构思全书。第1章全面介绍软件工程知识体,重点介绍了软件过程管理,一些最新的过程管理模型,如CMM、XP均有涉及,同时本书还倡导软件质量管理的理念。第2章对软件工程管理的几个最为主要的内容作了一定的介绍,重点介绍了一些对于学生来说较为实用的管理方法和思路。第3章和第4章分别就软件工程过程几个重要阶段中的软件需求分析、软件设计作出了详细介绍,对当前的两大主流分析设计方法:结构化分析方法、面向对象的方法均作了一定程度的介绍。第5章是数据库的分析与设计,将数据库的各类理论运用于分析设计的实践,并尝试了数据库设计模式的探索。第6章对.NET框架下的软件构造过程给出了详细的描述,同时针对刚刚接触.NET时的常见问题给出了解答。第7章详细地介绍了软件测试技术,在阐述一些先进的测试理念的前提下,特别突出了自动化软件测试工具的使用。在本书的最后,第8章详细描述了一个学生团体实际的软件过程。
本书在编写过程中力求体现以下几个的特点。
1.新颖
本书参考的绝大部分资料来自2000年后出版的关于软件工程方面最新的书籍,很多概念的引述直接来自于IEEE、ACM、SEI、PMI等权威组织的最新定义,其中包括IEEE、ACM、Rational等多家组织或单位共同推出的Guide Tothe Software Engineering Body of Knowledge(2001年3月版,简称SWEBOK),包括Project Management Institute推出的AGuide to the Project Management Body of Knowledge(2000年版,简称PMBOK)。
本书的很多的材料来自于互联网各类技术论坛、社区、技术宣传网站的第一手资料,其中包括很多经典的分析设计案例及实际开发过程中用到的过程规划、时间质量控制计划、软件书写规范、各类文档模板。
本书的行文思路也打破了传统的软件工程教材的思路,以SWEBOK中论及到的软件工程知识体系结构为骨架和指引,将软件工程中众多分散的概念有机地组织在一个总体的框架之下,这个框架就是SWEBOK为读者描述的软件工程知识体。
在内容方面,本书对软件工程的最新事物,都作了一定程度上的介绍。与国内的传统软件工程教材相比,本书尤为突出地介绍了软件过程管理(一些最新的过程管理模型,如CMM、XP均有涉及),同时本书强调了软件质量管理的理念。在软件工程方法的介绍上,结构化方法和现在日益成为主流的面向对象的方法并重。关于测试,本书在介绍传统测试技术的同时,更侧重于向学生灌输了一些新的实用测试理念,如测试先行、测试自动化等全新理念。
本书中分析设计实例主要针对当今主流的分析设计方法、UML的分析设计方法来介绍,对传统结构化分析设计方法也有介绍。本书中所有编码实例均是基于.NET平台,数据库服务器使用SQL Server2000,这是当今主流的软件实现平台。
2.全面
本书侧重于学生总体知识框架的建立,因而对软件工程的众多基本概念均作了一定程度介绍,当然由于篇幅所限,很多概念不可能一步到位,但对这些粗略提到的概念均给出了参考书籍。
本书在对概念作基本介绍的同时,更给出了很多实际的例子,这些例子涉及软件的管理、分析设计、技术实现。
本书既介绍了传统的经典的软件工程模型,也介绍了最新的软件过程发展。既讲解了传统的结构化的方法,也介绍了新的面向对象的方法。
本书按照软件工程知识的架构,在各章分别对各项知识点作了介绍,并在此基础上给出了完全由学生完成的软件工程实践的综合实例。
3.实用
本书罗列的各类技术问题及其解决方案,均来自于第一线软件开发组织的最新的实际问题,其中,绝大部分来自于上海理工大学曹渠江实验室几年来在.NET平台下实际项目的知识积累以及学生课程设计辅导的经验总结。应该说这些问题都是使用.NET框架时最有可能遇到的最新的问题,这些方案都是较为典型的实用方案。
本书的软件实现一章,在理清基本概念的同时,以学生软件开发过程中经常遇到的众多基础技术问题为核心,以解答问题的方式讲解技术,以方便学生查阅。在附录部分,对入门级的学生可能遇到的疑难,给出了详细解答。本书的附录部分也是本书的一大特色,这部分给出了很多实用的互联网资源的连接,很多实用的简洁的文档模板,实际软件开发过程中的编码规范、设计规范等。
本书是上海理工大学计算机工程学院曹渠江教授连续七届的教学实践积累,也是上海理工大学精品课程与上海市教委重点课程建设项目的教学研究成果。本书内容的多次充实、编辑与修订得到了曹渠江教授的历届研究生的大力支持,在此向已毕业的肖仰华、叶文珺、王宇鹏、周树明、胡震宇、张溶冰、张博、张凤、陈洁、俞心禹、施佺、应脂、卢彬、王伟良、杨希亮、李进京、耿少峰、赵健和施振佺等同学表示衷心感谢。上海理工大学计算机学院2001届中国爱尔兰合作班学生邹怡、王庆玮、徐吟晖、杨晨、陈佳韵、曹佳梁出色地完成综合应用软件设计的教学任务,并书写了完整的项目报告,构成了本书第8章的主要内容,在此向他们表示感谢。曹春萍老师为本书各章编写了思考题,并参与了部分章节的审阅工作,在此也一并表示感谢!
限于水平,书中难免有欠妥之处,欢迎广大读者和专家批评指正。
编者
于上海理工大学