《软件工程》全面系统地讲述了软件工程的概念、原理和典型的方法,以及软件项目的管理技术和软件工程的新方法。主要内容包括软件生命周期各阶段的任务、过程、结构化方法和面向对象方法,软件项目管理相关技术及工具,软件工程应用中的新技术等。着重介绍面向数据流的系统分析和设计,面向对象的分析和设计,面向对象基础和UML。
《软件工程》在介绍面向数据流和面向对象的设计时,紧密围绕实例进行阐述,对读者深入理解软件工程学很有帮助,可以作为学生综合实验前的练习。《软件工程》可作为高等院校软件工程课程的教材或教学参考书,也可作为软件开发人员和软件项目管理人员的参考书。
前言
第1章软件工程概述
1.1软件概述
1.1.1软件的定义
1.1.2软件的特点
1.1.3软件的分类
1.1.4软件的发展
1.2软件危机
1.2.1什么是软件危机
1.2.2产生的原因及解决途径
1.3软件工程
1.3.1软件工程定义
1.3.2软件工程的研究内容
1.3.3软件工程的目标和原则
1.3.4软件工程基本原理
1.4软件开发方法
1.4.1结构化方法
1.4.2面向数据结构的开发方法
1.4.3 面向对象的方法
1.5 CASE工具
小结
习题
第2章 软件生命周期和过程模型
2.1软件生命周期
2.1.1 软件定义
2.1.2软件开发
2.1.3软件运行与维护
2.2软件过程模型
2.2.1瀑布模型
2.2.2原型模型
2.2.3螺旋模型
2.2.4喷泉模型
2.2.5增量模型
2.2.6构件组装模型
2.2.7 RUP
小结
习题
第3章可行性研究
3.1问题定义
3.2可行性研究
3.2.1 可行性研究的任务
3.2.2 可行性研究的步骤
3.3成本估计与效益分析
3.3.1 成本估算方法
3.3.2效益估算
3.4系统流程图
3.4.1 系统流程图的符号
3.4.2 系统流程图举例
3.5制订软件计划
3.5.1确定软件计划
3.5.2复审软件计划
小结
习题
第4章需求工程
4.1需求的概念与内容
4.1.1 需求的问题
4.1.2需求的定义和分类
4.1.3 需求的层次
4.2需求工程
4.2.1 需求工程的定义
4.2.2需求工程的方法
4.3需求开发
4.3.1 需求获取技术
4.3.2需求建模
4.3.3 需求规格说明
4.3.4需求评审
4.4需求管理
4.4.1 需求变更控制
4.4.2需求版本控制
4.4.3需求跟踪
4.4.4需求状态跟踪
4.5需求管理工具
小结
习题
第5章结构化分析方法
5.1结构化分析方法概述
5.1.1基本思想
5.1.2 分析过程
5.1.3 描述工具
5.2数据流图
5.2.1 数据流图的结构
5.2.2 数据流与加工之间的关系
5.2.3 数据流图的分层
5.2.4数据流图的绘制
5.2.5 绘制数据流图的注意事项
5.3数据字典
5.3.1 数据字典的作用和内容
5.3.2 数据字典编写的基本要求
5.3.3 数据字典的定义符号和编写格式
5.4加工逻辑说明
5.4.1结构化英语
5.4.2 判定表
5.4.3判定树
5.4.4三种表达工具的比较
5.5 实例:供销管理系统的需求分析
5.5.1需求调研
5.5.2需求建模
小结
习题
第6章面向对象基础
6.1 传统开发方法与面向对象的开发方法比较
6.1.1 结构化软件工程方法的缺点
6.1.2 面向对象方法的优点
6.2面向对象的基本概念
6.3 面向对象的软件开发过程
6.4几种典型的面向对象方法简介
6.4.1 Booch的面向对象方法
6.4.2 Jacobson的面向对象方法
6.4.3 Coad—Yourdon的面向对象方法
6.4.4 James Rumbaugh的面向对象方法
6.5统一建模语言UML
6.5.1 UML概述
6.5.2 UML的概念模型
6.5.3 UML的扩展机制
6.6案例:基于UML的客户服务记账系统需求分析
6.6.1 问题描述
6.6.2寻找参与者
6.6.3 寻找用例
6.6.4 确定参与者和用例之间的关系,绘制用例图
6.6.5 编写用例描述
小结
习题
第7章面向对象分析
7.1 面向对象分析过程
7.1.1 分析类的概念
7.1.2分析过程
7.2识别分析类
7.2.1 识别实体类
7.2.2识别边界类
7.2.3识别控制类
7.2.4交互原则
7.3描述行为
7.3.1 消息与责任
7.3.2登录用例的顺序图
7.3.3 其他用例的顺序图
7.4描述类
7.5评审分析模型
小结
习题
第8章软件设计基础
8.1软件设计的目标和任务
8.1.1 软件设计的目标
8.1.2软件设计的任务
8.2软件设计的概念与原则
8.2.1 模块化与模块独立性
8.2.2抽象与逐步求精
8.2.3信息隐藏
8.3软件体系结构风格
8.3.1 管道—过滤器
8.3.2 仓库体系结构
8.3.3 分层体系结构
8.3.4 MVC体系结构
8.3.5 三层C/S体系结构
8.3.6 C/S与B/S混合软件体系结构
8.4设计复审
小结
习题
第9章结构化设计方法
9.1概要设计
9.1.1基本概念
9.1.2变换分析
9.1.3事务分析
9.1.4变换一事务混合型分析
9.1.5启发式规则
9.1.6设计优化
9.2详细设计
9.2.1 程序流程图
9.2.2盒图
9.2.3 PAD图
9.2.4 PDL
9.2.5 HIPO图
9.3 案例:供销管理系统的设计
9.3.1模块结构设计
9.3.2 系统IPO图
9.3.3 其他设计工作
小结
习题
第10章 面向对象的设计
10.1 OOD概述
10.2面向对象设计原则
10.2.1 单一职责原则
10.2.2开放一封闭原则
10.2.3 Liskov替换原则
10.2.4接口隔离原则
10.2.5依赖倒置原则
10.3系统体系结构设计
10.3.1 软件系统体系结构设计
10.3.2 硬件系统体系结构设计
10.4系统设计
10.4.1识别设计元素
10.4.2数据存储策略
10.5详细设计
10.5.1 方法和属性建模
10.5.2状态建模
10.5.3 详细类图
10.6评审设计模型
10.7设计优化
10.7.1 确定优先级
10.7.2 提高效率的几项技术
10.7.3 调整继承关系
10.8设计模式
10.8.1 设计模式的作用和研究意义
10.8.2经典设计模式
10.8.3 设计模式的使用策略
小结
习题
第11章用户界面设计
11.1用户界面基础
11.1.1 交互模型和框架
11.1.2人类工程学
11.1.3用户界面风格
11.2用户界面设计原则
11.2.1 置用户于控制之下
11.2.2减轻用户的记忆负担
11.2.3保持界面一致
11.3用户界面设计过程
11.3.1 界面分析和建模
11.3.2界面设计
11.3.3 界面实现和评估
小结
习题
第12章软件实现
12.1软件实现的目标和任务
12.2程序设计语言
12.2.1 程序设计语言的分类
12.2.2程序设计语言的选择
12.3软件编码规范
12.3.1 头文件规范
12.3.2 注释规范
12.3 3 命名规范
12.3.4排版规范
12.3.5 目录结构规范
12.4程序效率
12.4.1 运行速度的提高
12.4.2 存储空间的优化
12.4.3 输入/输出效率的提高
12.5软件代码审查
小结
习越
第13章软件测试
13.1软件测试基础
13.1.1 失败的软件案例
13.1.2软件缺陷概念
13.1.3 软件测试概念
13.2软件测试技术
13.2.1 静态黑盒测试
13.2.2动态黑盒测试
13.2.3 静态白盒测试
13.2.4动态白盒测试
13.3软件测试策略
13.3.1 单元测试
13.3.2集成测试
13.3.3 确认测试
13.3.4 系统测试
13.4面向对象的软件测试
13.4.1 面向对象测试类型
13.4.2面向对象测试策略
13.4.3 面向对象测试用例设计
13.5软件调试
13.5.1 调试过程
13.5.2调试方法
13.5.3 调试原则
13.6软件测试自动化
13.7软件测试管理
小结
习题
第14章软件维护
14.1软件维护概述
14.1.1 软件维护的产生及其目的
14.1.2 软件维护的分类
14.1.3 维护的成本
14.2软件维护的特征
14.2.1 结构化维护和非结构化维护
14.2.2 维护可能存在的问题
14.2.3影响软件维护工作量的因素
14.3软件维护实施
14.3.1 软件维护组织
14.3.2软件维护申请
14.3.3 维护过程
14.3.4维护档案记录
14.3.5 维护评价
14.4软件可维护性
14.4.1 影响软件可维护性的因素
14.4.2 软件可维护性的度量
14.4.3 提高可维护性的策略
14.5软件维护的副作用
14.6逆向工程和再工程
14.6.1 逆向工程
14.6.2 软件再工程
小结
习题
第15章软件项目管理
15.1软件项目管理概述
15.1.1软件项目的特点
15.1.2软件项目管理的特点和职能
15.2人员的组织与管理
15.2.1 软件项目组织
15.2.2人员的配置和管理
15.3成本的估计与控制
15.3.1 软件开发成本估计方法
15.3.2 专家判断法
15.3.3 成本估算模型
15.4进度计划
15.4.1 甘特图法
15.4.2 工程网络
15.4.3 项目活动工期估算的方法
15.4.4关键路径法(CPM)
15.5软件配置管理
15.5.1 软件配置
15.5.2 软件配置管理过程
15.6风险分析与管理
15.6.1 软件风险
15.6.2风险识别
15.6.3 风险预测
15.6.4风险规划
15.7 项目管理工具
15.7.1 SourceSafe
15.7.2 CVS
15.7.3 ClearCase
15.7.4软件工程中的CASE工具
15.7.5 Microsoft Project 2010系列产品
小结
习题
第16章软件工程新技术
16.1 XP技术
16.1.1 XP基本原则
16.1.2 XP软件开发中的基本活动
16.1.3 XP的十二条惯例和规则
16.2净室软件工程方法
16.2.1 净室软件工程目标
16.2.2 净室理论基础
16.2.3 净室技术
16.2.4净室技术的发展
16.3 AOP编程
16.3.1 AOP的基本定义
16.3.2 开发步骤
16.3.3 AOP的关键技术
16.3.4 实现方法
16.3.5 AOP的技术优势
16.4软件复用技术
16.4.1 软件复用的分类
16.4.2软件复用技术
16.4.3 软件复用的过程
16.4.4软件复用的发展
小结
习题
参考文献
4.建立快速原型
快速建立软件原型是最准确最有效、最强大的需求分析技术。快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行的程序。一个软件原型通常仅仅是真实系统的一部分或一个模型,是对新产品的部分实现。这种方法要求尽可能快地建造一个粗糙的系统,这系统只需实现目标系统的某些功能,并且该系统可能在可靠性、界面的友好性或其他方面上存在缺陷。但是,借助于这个原型可以加快对需求的挖掘和双方对需求的理解,以便快速获取用户需求。
在使用原型化方法时有两种不同的策略:废弃策略和追加策略。例如,为了获得具体的用户需求,可以用某些软件工具快速的建造一个原型系统,这个系统只是一个界面,然后听取用户的意见,改进这个原型。以后的目标系统可以在原型系统的基础上演化而成,为后续开发工作节省工作量和成本。
丛原型的用途可以看出,原型只要能够体现它的作用、满足评价的要求,它可以忽略一切暂时不关心的部分。正是由于这样忽略,追加策略原型进化为最终系统时需要十分小心,否则会对后期的开发造成很大问题。
5.基于用例的方法
随着面向对象技术的发展,基于用例的方法在需求获取和建模方面应用得越来越广泛。这种方法以用户和任务为中心,不但能够更加清楚地描述新系统允许用户做什么,而且能够帮助开发人员理解用户的业务和应用领域,并且可以运用面向对象的分析和设计方法将用例转化为对象模型。
在用例模型中,只关心系统所应实现的功能,而不关心内部的具体实现细节。一般情况下,用例模型的建立需要开发方和用户方的共同参与和反复讨论。基于用例的方法需求完成以下几个任务。
1)确定参与者
参与者指与系统交互的人或事。确定系统的参与者可以通过确认系统功能的使用者和维护者,确认系统与其他软件或系统的接口,确定系统与硬件设备的接口等方法来实现。
2)确定用例
用例描述系统完成的动作序列,产生对参与者有价值的结果。一个系统包含若干个用例,每个用例具体说明应完成的功能。识别用例首先要决定系统所能反映的外部事件,并把这些事件与参与的执行者和特定的使用实例联系起来,最终绘制出用例图。
3)描述用例
单纯地使用用例图不能提供用例所具有的全部信息,因此,对于那些不能反映到图形上的信息需求用文字加以描述。用例描述实际上是关于参与者与系统如何交互的规格说明,要求清晰明确,没有二义性。
由此可见,需求获取要求系统分析人员能够从复杂的原始材料中整理并抽取出能够反映用户真实需要的用户需求信息。系统分析人员根据目标系统的实际特点,独立或者组合使用以上方法,通过与用户的多次沟通最终实现需求获取阶段的任务。