本书源自我们软件工程导论的教学经验。尽管市面上已有不少同类图书,但很少有仅介绍核心内容,适用于一门为期一学期(授课16周,每周大约3学时)的课程的教材。随着小规模网络应用的激增,许多信息技术新人尚未完全理解软件工程必备知识就进入软件工程领域。本书适用于经验有限的新生和打算在软件工程领域开始新职业的经验丰富的信息技术专业人员。本书覆盖软件系统完整的生命周期,范围从初始阶段到发布阶段直至支持阶段。
本书内容的基础是我们的从业经验和职业背景—第一位作者曾在IBM、Blue Cross Blue Shield、MARCAM和RCA等公司从事构建、支持和管理大型复杂的关键业务软件等工作,有着超过25年的工作经验;第二位作者具有在微软和亚马逊等公司使用敏捷方法构建较小规模软件的大量经验;第三位作者具有双语能力,对美国大学生和非美国的西班牙语学生都有着丰富的软件工程教学经验。
尽管新思想和新技术会不断涌现,书中介绍的一些原理可能需要更新,但我们相信本书中介绍的底层的、基础的概念会保留下来。
第4版前言
第3版出版后,计算机行业更快地朝着服务应用和社交媒体的方向发展。虽然软件工程的基础仍然相对稳定,但我们还是决定做一些修改以反映软件工程领域的某些变化,包括增加一些教学辅助。我们的目标是保持本书的内容足够精练,以便用于为期一学期16周的课程教学。
下面是第4版主要增加的内容:
第5章中看板方法的讨论
第7章中REST分布式处理架构
第7章中数据设计、分析以及“大数据”
第9章中代码重用
第9章中云计算
此外,我们对书中部分语句的表达做了细微修改以突出重点和强化理解。我们也听取了来自不同大学,使用本书第1版、第2版、第3版读者的反馈,修改了一些语法和拼写错误。书中可能还会有一些错误,责任完全在我们。
本书的第1版、第2版、第3版被许多高等院校使用,感谢他们的耐心和反馈,我们从中受益匪浅。我们希望对所有未来的读者而言,第4版是更好的一本书。
本书组织结构
第1、2章展示小型编程项目和构造关键业务软件系统所需工作之间的差异。我们特意用两章内容来说明这个概念,强调一个单人“车库作坊”和构建一个大型“专业”系统所需的项目团队之间的区别。这两章中的讨论给出了学习和理解软件工程的基本原理。第3章第一次更加正式地讨论软件工程。这一章也介绍了软件工程职业的道德规范。
第4、5章涵盖软件过程、过程模型和方法学等传统主题。为了反映这个领域取得的大量进展,这两章非常详细地介绍了如何通过软件工程研究所(Software Engineering Institute,SEI)提出的能力成熟度模型来评价过程。
第6、7、9、10、11章在宏观层面上依次介绍了从需求到产品发布的开发活动。第7章用一个HTML-Script-SQL设计和实现示例,对UI设计展开讨论。在介绍软件设计的章节之后,第8章回顾并讨论了在评估概要设计和详细设计中使用的设计特征和度量指标。第11章不仅讨论了产品发布,还介绍了配置管理的基本概念。
第12章探讨了软件系统在发布给客户和用户后的相关支持和维护活动。涵盖的主题包括来电管理、问题修复和功能点发布等。在这一章中,进一步强调了配置管理的必要性。第13章总结了项目管理的不同阶段,同时介绍了一些具体的项目计划和监控技术。这章仅是一个概要总结,并没有包括团队建设、领导才能等主题。软件项目管理过程区别于开发和支持过程。第14章总结全书,介绍软件工程领域当前面临的问题,并展望了该领域未来的主题。
附录部分通过团队计划、软件开发计划、需求规格说明、设计计划和测试计划的“概要示例”让读者和学生深入理解软件开发主要活动可能产生的结果。一个常见的问题是需求文档或测试计划应该写成什么样。为帮助回答这个问题,并提供一个切入点,我们给出了计划、需求、设计和测试计划4项活动可能产生的文档样例格式。具体如下:
附录A:软件开发计划概要
附录B:软件需求规约概要
示例1:SRS概要—描写
示例2:SRS概要—面向对象
示例3:SRS概要—IEEE标准
示例4:SRS概要—叙述法
附录C:软件设计概要
示例1:软件设计概要—UML
示例2:软件设计概要—结构化
附录D:测试计划概要
很多时候,对于新手软件工程师组成的团队项目,在开发过程中需要对如何使用文档描述过程进行特别指导。这4个附录用于给读者提供具体的概要大纲示例。每一个附录都提供大纲及相应的解释。这为教师开展课堂活动、分配团队项目和独立任务补充了具体材料。
本书涵盖的主题反映了IEEE计算机学会倡议的《软件工程知识体系》(SWEBOK)和《软件工程本科学位计划软件工程课程指南(2004)》强调的内容。有一个未突出强调但贯穿全书的主题是质量—一个需要集成到所有活动中去解决的主题。它不仅仅是测试人员的关注点,本书多个章节中都讨论了质量,这反映了其广泛的影响和跨越多个活动的特性。
建议教学方案
本书所有章节都可以在一个学期内学完。当然,不同教师的侧重点可能会有所不同:
希望聚焦于直接开发活动的教师应该在第6~11章多花时间。
希望关注间接和通用活动的教师应该在第1、12和13章多花时间。