软件工程学将计算机科学理论与现代工程方法论相结合,着重研究软件过程模型、设计方法、工程开发技术和工具,是指导软件生产和管理的一门新兴的、综合性的应用科学。本书以传统的软件工程和面向对象的软件工程为主线,根据软件开发“工程化”思想,结合大量的应用示例,系统地介绍软件工程学的基本原理、软件过程、开发方法、应用技术和实用工具。
本书适合作为高等院校计算机科学与技术专业学生的教科书,也可以作为通用软件工程课程,或者需求工程学、软件设计、高级程序设计和软件管理等软件工程学专题的教科书,还可以作为从事计算机软件系统研究和项目开发等应用型技术/管理人员的参考书。
第1章 软件工程引论
1.1 软件工程诞生背景
1.1.1 软件的特性
1.1.2 软件危机
1.1.3 软件危机解决途径
1.2 软件工程学
1.2.1 软件工程化思想
1.2.2 软件工程学研究范畴
1.2.3 软件工程学的发展
1.3 软件工程方法学基本原理
1.3.1 推迟实现
1.3.2 逐步求精
1.3.3 抽象建模
1.3.4 质量保证
1.4 小结
习题1
第2章 软件过程
2.1 软件过程概述
2.1.1 过程、方法和工具
2.1.2 软件生存周期
2.1.3 软件过程模型
2.1.4 软件过程各阶段任务
2.2 典型的软件过程模型
2.2.1 瀑布模型
2.2.2 快速原型模型
2.2.3 增量模型
2.2.4 螺旋模型
2.3 面向对象的软件过程模型
2.3.1 面向对象的基本概念
2.3.2 软件开发统一过程
2.3.3 构件集成模型
2.4 小结
习题2
第3章 软件需求分析
3.1 需求分析概述
3.1.1 需求分析的任务
3.1.2 需求分析过程
3.1.3 需求分析的原型技术
3.2 非形式化需求分析
3.2.1 会谈
3.2.2 调查表
3.2.3 场景分析
3.3 结构化需求分析
3.3.1 结构化分析方法
3.3.2 结构化分析模型
3.3.3 结构化分析步骤
3.3.4 结构化分析实例:图书馆系统
3.4 需求分析的描述
3.4.1 需求描述的分类
3.4.2 需求规格说明文档
3.5 小结
习题3
第4章 软件设计
4.1 软件设计概述
4.1.1 软件设计过程
4.1.2 软件模块化设计
4.1.3 软件系统结构模型
4.1.4 软件设计说明文档
4.2 面向数据流分析(DFA)的设计
4.2.1 数据流类型
4.2.2 数据流分析的设计步骤
4.2.3 数据流分析设计技术
4.2.4 DFA设计实例:汽车数字化仪表板控制
4.3 面向数据的设计
4.3.1 Jackson(JSD)方法
4.3.2 Warnier(LCP)方法
4.4 软件详细设计
4.4.1 结构化程序设计
4.4.2 详细设计工具
4.5 特定应用软件的设计
4.5.1 实时系统设计
4.5.2 人机界面设计
4.6 小结
习题4
第5章 面向对象的分析与设计
5.1 面向对象建模
5.1.1 面向对象模型
5.1.2 统一建模语言(UML)
5.2 面向对象分析(OOA)
5.2.1 面向对象分析模型
5.2.2 面向对象分析过程
5.2.3 OOA实例:图书馆系统
5.2.4 OOA实例:电梯控制系统
5.3 面向对象设计(OOD)
5.3.1 面向对象设计模型
5.3.2 面向对象设计过程
5.3.3 构件类设计
5.3.4 OOD实例:图书馆系统
5.3.5 OOD实例:电梯控制系统
5.4 小结
习题5
第6章 软件实现
6.1 编程语言选择
6.1.1 程序设计语言的发展
6.1.2 程序设计语言的特点
6.1.3 编程语言的选择
6.2 程序设计技术
6.2.1 编码风格
6.2.2 面向对象程序设计
6.2.3 程序设计自动化
6.3 软件系统集成
6.3.1 软件系统集成方法
6.3.2 系统集成过程
6.3.3 面向对象的系统集成
6.4 小结
习题6
第7章 软件测试
7.1 软件测试概述
7.1.1 软件测试任务
7.1.2 软件测试原理
7.1.3 测试方法分类
7.1.4 测试终止标准
7.2 软件测试技术
7.2.1 测试用例设计
7.2.2 黑盒测试方法
7.2.3 白盒测试方法
7.2.4 自动测试工具
7.3 软件调试技术
7.3.1 软件调试过程
7.3.2 软件调试策略
7.4 多模块的软件测试
7.4.1 多模块的测试层次
7.4.2 单元测试
7.4.3 集成测试
7.4.4 确认测试
7.4.5 系统测试
7.5 特定应用软件的测试
7.5.1 面向对象软件测试
7.5.2 人机界面软件测试
7.5.3 分布式软件测试
7.5.4 实时软件测试
7.6 小结
习题7
第8章 软件维护
8.1 软件维护概述
8.1.1 维护阶段的任务
8.1.2 软件维护的特点
8.1.3 软件可维护性
8.2 软件维护类型
8.2.1 改正性维护
8.2.2 完善性维护
8.2.3 适应性维护
8.2.4 预防性维护
8.3 软件维护技术
8.3.1 软件维护过程
8.3.2 提高软件可维护性
8.3.3 面向对象的软件维护
8.4 小结
习题8
第9章 软件项目管理
9.1 软件项目管理范围
9.1.1 人员
9.1.2 项目和过程
9.1.3 软件度量
9.1.4 软件项目管理文档
9.2 人员组织范式
9.2.1 民主分权式
9.2.2 控制集权式
9.2.3 控制分权式
9.3 软件成本估算
9.3.1 软件规模度量
9.3.2 成本估算分解技术
9.3.3 经验估算模型
9.3.4 成本估算管理
9.4 软件质量保证(SQA)
9.4.1 SQA活动
9.4.2 软件质量度量
9.4.3 软件复审
9.4.4 软件认证标准
9.5 软件过程管理
9.5.1 过程度量和过程改进
9.5.2 项目进度安排
9.5.3 风险分析
9.5.4 软件配置管理(SCM)
9.6 小结
习题9
第10章 软件工程高级课题
10.1 软件复用
10.1.1 软件复用的基本概念
10.1.2 软件复用过程
10.1.3 领域工程
10.1.4 基于构件的软件开发
10.2 新型软件过程模型
10.2.1 形式化方法
10.2.2 软件再工程
10.2.3 客户-服务器软件工程
10.3 计算机辅助软件工程(CASE)
10.3.1 软件工程环境
10.3.2 CASE环境
10.3.3 CASE实例:SUITE企业开发环境
10.4 小结
习题10
附录A 缩略词中英文对照表
参考文献
软件工程学将计算机科学理论与现代工程方法论相结合,着重研究软件过程模型、设计方法、工程开发技术和工具,是指导软件生产和管理的一门新兴的、综合性的应用科学。随着计算机科学和软件产业的迅猛发展,软件工程学已成为一个重要的计算机分支学科,一个异常活跃的研究领域,正在不断涌现新方法、新技术,蓬蓬勃勃地发展着。
软件工程是计算机科学与技术专业学生必修的一门专业课程,也是工科各专业学生在计算机应用方面的一门重要选修课程。
本书编著者结合长期教学经验和工程项目实践,参考国内外众多最新(版本)教材和论文精选内容,注重基础性、系统性、实用性和新颖性,并结合大量软件项目的实例分析,深入浅出地阐述软件工程方法、应用技术和实用工具。
本书共分10章。第1~2章作为软件工程导论,分专题介绍了软件工程的一些重要概念、软件工程学研究范畴、软件工程方法学基本原理、软件开发过程和软件过程模型等。第3~9章以传统的和面向对象的软件工程为主线,系统介绍软件开发过程主要阶段的实现过程、采用的方法和技术、应用实例剖析,以及软件项目管理等。这7章为软件工程方法学和应用实践的结合提供了一个蓝本,是本书学习(参考)的重点和应用实践的指南。第10章简述软件工程学的高级研究课题。
第1章“软件工程引论”从软件的特点、软件危机的发生,引入软件工程化概念、软件工程定义和软件工程学研究范畴,从而诞生了软件工程学这一门新兴学科。随着计算机科学和软件产业的迅猛发展,软件工程学已成为一个异常活跃的研究领域,正在不断涌现新方法、新技术。
第2章“软件过程”介绍软件工程方法学的分解与抽象、逐步求精、软件生存周期、软件过程等基本概念,概述软件过程从问题定义到退役的阶段划分和各个阶段的任务,讨论典型的软件过程模型(瀑布、原型、增量、螺旋等模型)和面向对象软件过程模型(RUP、构件集成模型)的特征。本章是读者学习以后各章内容的重要指南。
第3章“软件需求分析”介绍需求分析过程、需求分析方法、需求规格说明文档。典型而实用的需求分析方法有非形式化需求分析、快速原型技术、结构化分析(SA)等。本章采用结构化分析技术,给出一个“图书馆系统”实例分析。
第4章“软件设计”介绍软件设计过程、设计说明文档、软件系统模型、软件设计方法。传统的软件设计方法有面向数据流分析(DFA)的设计、面向数据的设计(JSD和LCP)等。本章采用DFA设计技术,给出一个“汽车数字化仪表板控制”实例设计。
第5章“面向对象的分析和设计”介绍面向对象分析(OOA)和面向对象设计(OOD)技术。实际上,根据面向对象方法学理论,OOA和OOD之间没有严格划分,可以认为OOD是OOA的逐步求精过程,即OOA和OOD应该是“一气呵成”的。本章采用面向对象技术,给出“图书馆系统”和“电梯控制系统”实例的OOA和OOD。其中,“图书馆系统”实例的OOA与第3章的“图书馆系统”实例分析,便于读者对这两种分析方法做类比性参考。
第6章“软件实现”介绍软件根据其设计“翻译”成程序源代码的实现过程和系统集成过程。软件产品的实现,主要依赖于合理选择编程语言和采用良好的程序设计技术。软件系统的集成,主要介绍集成方法、系统集成环境等相关技术。软件集成的测试将在第7章中讨论。
第7章“软件测试”介绍软件测试的测试任务、测试原理,常用的测试策略、测试方法和测试技术,以及一些特定应用系统的软件(面向对象软件、人机界面软件、分布式软件、实时系统软件)的测试要点。
本书有一个重要的观点,认为软件测试不是一个独立的阶段。它不是仅仅在产品交付前才进行,也不是在软件开发过程的各个阶段结束时才进行,而是和所有软件生产过程的各个环节并行。因此,本章介绍的软件测试方法和技术贯穿在软件开发全过程,当然也包括贯穿在软件过程各个独立阶段的测试/验证环节中。
第8章“软件维护”介绍软件产品从“发布”到“退役”为止,整个运行期间软件维护的全过程,着重讨论维护工作的特点、维护任务的类型、提高可维护性的技术等。
第9章“软件项目管理”介绍软件项目的人员、过程、计划、度量等全方位的协调管理,着重讨论了软件项目管理计划(SPMP)、软件成本估计、软件质量保证、项目过程管理等内容。
和软件测试一样,软件项目管理工作贯穿在软件开发全过程。
第10章“软件工程高级课题”介绍软件工程学的一些新的高级研究课题:软件复用、新型软件过程模型(形式化方法、再工程、客户/服务器软件工程等)和CASE等。
本书内容适宜,编写有特色,应用指导性强。每章开头有前言,结束有小结和练习思考题。对开发过程中较为实用的方法和技术给出系列化应用示例。建议教学60学时,其中40学时授课,20学时做一个适当规模的软件项目开发实践训练。
本书适用面广,可以作为高等院校计算机科学与技术专业学生的教科书,也可以作为通用软件工程课程,或者是需求工程学、软件设计、高级程序设计和软件管理等软件工程学专题的教科书,也可以作为从事计算机软件系统研究和项目开发等应用型技术/管理人员的参考书。
本书由李芷、窦万峰、任满杰编著,李芷主编。窦万峰执笔第3,4,5章和9.3节,任满杰执笔第8章和6.3节,其余由李芷执笔。江苏大学查杰民教授审阅了全书,并对编写提出了宝贵意见。此外,靳松、黄永来、陈晔、齐宁超、吴奕斐、李春萍、李桂香、周兴旺、吕培祥、宗雷等参加了资料整理工作。谨在此一并向他们致以衷心的感谢。
编著者水平有限,难免有疏漏和不当之处,敬请广大读者不吝赐教。
编 著 者
2004年5月