内容简介
本书比较全面地介绍软件工程学科,展示软件工程原则与基于系统工程的软件实践,阐明与软件工程所用的严格方法相关的实践活动、原则、任务和工件。本书共分三部分:部分(软件工程基础)讨论在软件工程体系下的软件开发框架和项目构建;第二部分(软件工程实践)通过六项技术惯例传达一种理念——利用计算技术,应用科学原则以及激活设计软件产品结构的灵活性;第三部分(软件工程应用的阶段)讨论软件工程团队在软件开发项目中承担的角色,以便建立和控制软件产品架构。本书适合作为高等院校软件工程及相关课程的教材,也可作为软件开发人员和软件技术人员的参考书。
目录
Software Engineering: Architecture-Driven Software Development
出版者的话
译者序
作者序
前言
第一部分 软件工程基础
第1章 软件工程简介 5
1.1 明确软件需求 6
1.2 软件架构 7
1.3 集成产品和过程开发 8
1.4 集成产品团队 8
1.5 工作分解结构 10
1.6 软件分解结构 10
1.7 规约树和文档树 11
1.8 集成总体方案和进度安排 11
1.9 评审与审核 12
1.10 配置管理和变更控制 13
1.11 权衡分析 15
1.12 风险管理 16
1.13 建模与仿真 16
第2章 通用软件开发框架 19
2.1 软件分解结构 19
2.2 软件开发过程 21
2.2.1 需求定义阶段 22
2.2.2 概要架构定义阶段 22
2.2.3 关键架构定义阶段 23
2.2.4 软件单元编码和测试阶段 24
2.2.5 软件组件的集成和测试阶段 24
2.2.6 产品测试阶段 24
2.2.7 验收测试阶段 25
2.3 总结 26
第3章 软件架构 27
3.1 涉众需求的关系和依赖性 29
3.2 软件需求基线的关系和依赖性 30
3.3 计算环境的关系和依赖性 30
3.4 测试和评估的关系及依赖性 30
3.5 功能架构的关系和依赖性 31
3.6 物理架构的关系和依赖性 31
3.7 开发后的过程的关系和依赖性 32
3.8 软件架构的动机 32
第4章 理解软件项目环境 35
4.1 集成产品团队 38
4.2 软件架构 39
4.3 复杂性控制机制 40
4.3.1 工作分解结构 40
4.3.2 产品分解结构 41
4.3.3 规约树 42
4.3.4 文档树 42
4.3.5 软件产品基线 42
4.3.6 需求可追踪性准则 42
4.3.7 权衡分析 43
4.3.8 软件复杂性度量 44
4.4 软件术语注册表 46
4.5 软件集成策略 47
4.6 项目和技术方案 47
4.6.1 技术组织规划 48
4.6.2 项目规划 48
第5章 软件集成产品和过程开发 50
5.1 IPPD在软件中的应用 51
5.1.1 客户至上 52
5.1.2 产品和进程的并行开发 53
5.1.3 早期的和连续的生命周期规划 54
5.1.4 最大化承包商独特方法的优化和使用灵活性 54
5.1.5 鼓励鲁棒设计,提高过程能力? 55
5.1.6 事件驱动进度 55
5.1.7 多部门团队协作 55
5.1.8 授权 55
5.1.9 无缝管理工具 56
5.1.10 风险的主动识别和管理 56
5.2 软件工程和开发 56
第6章 软件设计阻碍 58
6.1 作为原材料的软件 59
6.2 软件技术的变革 61
6.2.1 软件开发方法和标准 63
6.2.2 敏捷宣言 66
6.3 架构驱动的软件开发 67
第二部分 软件工程实践
第7章 理解软件需求 76
7.1 第1步:征求渉众需求与期望 78
7.2 第2步:需求分析与规约 79
7.2.1 平衡和化解渉众需求的冲突 80
7.2.2 维护项目的范围 81
7.2.3 有经验的软件人员的参与 82
7.3 第3步:任务定义与安排 82
7.4 第4步:资源的确定、估算和分配 83
7.5 第5步:建立组织工作包 83
7.6 第6步:技术规划 83
7.7 第7步:项目规划 83
7.8 探索渉众的需求 84
第8章 软件需求分析实践 86
8.1 项目分析任务 86
8.1.1 分析项目目的和目标 86
8.1.2 确定开发成功标准 87
8.1.3 征求渉众需求和期望 88
8.1.4 对渉众需求按优先级排序 89
8.2 业务分析任务 89
8.2.1 确定业务概念 89
8.2.2 确定业务场景 89
8.2.3 确定计算环境特征 90
8.2.4 确定外部接口 91
8.3 产品分析任务 91
8.3.1 确定业务模式 91
8.3.2 确定功能行为 91
8.3.3 确定资源利用率需求 93
8.3.4 确定数据处理条件逻辑 93
8.3.5 确定数据持久性需求 93
8.3.6 确定数据安全性需求 93
8.3.7 确定数据存储事务 93
8.3.8 确定性能度量 94
8.4 维护分析任务 94
8.4.1 确定开发后的过程业务概念 94
8.4.2 确定开发后的过程业务场景 94
8.4.3 确定开发后的过程特征 94
8.4.4 确定架构的指导方针和原则 95
8.5 项目评估任务 95
8.5.1 评估需求敏感性 95
8.5.2 确定软件测试策略 96
8.5.3 评估已提议的变更 96
8.5.4 评估项目可行性 97
8.6 建立需求基线 97
第9章 软件需求管理 98
9.1 接受变更 98
9.1.1 时间是一种宝贵资源 98
9.1.2 变更影响分析 99
9.1.3 调整项目里程碑 101
9.2 明确需求 102
9.3 需求分解和分配 103
9.3.1 功能分析 104
9.3.2 性能分配 104
9.3.3 结构化单元综合 104
9.3.4 结构化组件综合 105
9.4 需求可追踪性 105
9.4.1 变更控制 105
9.4.2 配置审核 106
第10章 制定功能架构 107
10.1 功能架构的动机 107
10.2 功能架构本体论 108
10.2.1 功能组件 109
10.2.2 功能单元 109
10.2.3 数据项 109
10.2.4 功能接口 109
10.2.5 外部接口 109
10.2.6 控制结构 110
10.2.7 资源 110
10.2.8 数据存储 110
10.3 构想功能架构 110
10.4 记录功能架构 112
10.4.1 功能层次 112
10.4.2 行为模型 112
10.4.3 功能时限 113
10.4.4 资源利用率概述 113
10.4.5 功能规约 113
10.4.6 需求分配表 114
第11章 功能分析与分配实践 115
11.1 评估功能复杂性 115
11.2 行为分析 117
11.2.1 识别功能场景 117
11.2.2 识别功能序列 118
11.2.3 识别数据流 118
11.2.4 识别控制行为 119
11.2.5 识别数据处理过程 119
11.2.6 识别资源先决条件 120
11.2.7 识别失效条件 120
11.2.8 识别系统监控过程 121
11.2.9 识别数据保留能力需求 122
11.2.10 识别数据安全过程 122
11.2.11 识别数据持久性与保留功能 122
11.3 性能分配 122
11.3.1 分配性能预算 123
11.3.2 分配资源预算 123
11.4 架构评估 123
11.4.1 评估需求满足 124
11.4.2 评估软件性能 124
11.4.3 评估架构复杂性 124
11.4.4 评估优化机会 124
11.5 建立功能架构 124
第12章 物理架构配置 125
12.1 结构设计解决方案 126
12.1.1 定义结构单元 127
12.1.2 准备结构单元规约 128
12.1.3 建立软件集成策略 129
12.1.4 指定工程组套 129
12.1.5 准备软件技术数据包 129
12.2 结构设计考量 130
12.2.1 结构设计指导原则 130
12.2.2 使用建模与仿真 132
12.2.3 行为分析 132
12.2.4 结构权衡分析 133
12.2.5 软件产品性能评估 134
12.2.6 软件原型 136
第13章 软件设计综合实践 138
13.1 设计概念化 139
13.1.1 建立软件架构设计指导原则 140
13.1.2 识别抽象结构组件 141
13.1.3 识别抽象用户接口机制 141
13.2 设计解决方案 142
13.2.1 识别基本结构元素 142
13.2.2 识别集成组件 143
13.2.3 评估软件重用机会 143
13.3 设计相关性 144
13.3.1 建立性能基准 144
13.3.2 识别结构设计缺点 145
13.3.3 评估架构候选方案 146
13.3.4 评估软件实现挑战 146
13.3.5 评估软件维护挑战 146
13.3.6 评估架构完整性 147
13.4 设计表现 147
13.4.1 建立结构设计配置 147
13.4.2 说明结构配置元素 148
13.4.3 识别工程组套 148
13.5 准备软件技术数据包 148
第14章 软件分析实践 150
14.1 定义权衡研究 151
14.1.1 建立权衡研究领域 151
14.1.2 确定候选方案 152
14.1.3 建立成功标准 152
14.2 建立权衡研究环境 153
14.2.1 汇集实验机制 153
14.2.2 汇集数据收集和分析机制 153
14.2.3 建立权衡研究过程 154
14.3 执行分析 154
14.3.1 评估需求候选方案 155
14.3.2 评估功能候选方案 155
14.3.3 评估结构候选方案 155
14.4 评估项目影响 156
14.4.1 评估开发影响 156
14.4.2 评估项目影响 156
14.4.3 确定项目执行策略 156
14.5 评估权衡研究结果 156
14.5.1 为架构候选方案排序 157
14.5.2 确定优先行动路径 157
14.5.3 将权衡研究的决策文档化 157
14.5.4 优化执行策略 158
第15章 软件验证和确认实践 159
15.1 定义V&V;策略 160
15.1.1 建立V&V;范围 160
15.1.2 建立V&V;方法 162
15.1.3 建立V&V;过程 162
15.2 验证软件架构 163
15.2.1 验证需求基线 163
15.2.2 验证功能架构 163
15.2.3 验证物理架构 163
15.2.4 验证软件实现 163
15.3 确认物理架构 163
15.3.1 确认结构配置 163
15.3.2 确认集成软件配置 163
15.4 记录V&V;结果 164
第16章 软件控制实践 165
16.1 配置管理 166
16.1.1 识别架构元素 166
16.1.2 维护架构状态 166
16.2 处理工程变更包 167
16.2.1 记录工程变更请求和提议 167
16.2.2 准备变更评估包 167
16.3 变更评估 168
16.3.1 评估变更技术优点 168
16.3.2 评估架构影响 169
16.3.3 评估技术工作包影响 169
16.3.4 评估技术方案影响 169
16.4 变更同化 170
16.4.1 发布变更通知包 170
16.4.2 审核架构变更进展 170
16.4.3 评估项目现状 170
16.5 软件库控制 170
16.5.1 维护工程工件库 171
16.5.2 维护变更历史库 171
16.5.3 维护技术风险库 171
第三部分 软件工程应用的阶段
第17章 软件需求定义 176
17.1 软件需求定义的产品 176
17.2 软件工程集成产品团队(软件需求定义阶段) 178
17.3 软件实现(软件需求定义阶段) 180
17.4 计算环境准备(软件需求定义阶段) 180
17.5 开发后的过程实现(软件需求定义阶段) 180
17.6 软件测试和评估(软件需求定义阶段) 181
17.7 评审、里程碑和基线(软件需求定义阶段) 182
第18章 软件架构定义 184
18.1 概要架构定义 185
18.1.1 概要架构定义的产品 185
18.1.2 软件工程集成产品团队(概要架构定义阶段) 186
18.1.3 软件实现(概要架构定义阶段) 187
18.1.4 计算环境准备(概要架构定义阶段) 187
18.1.5 开发后的过程准备(概要架构定义阶段) 187
18.1.6 软件测试和评估(概要架构定义阶段) 188
18.1.7 评审与里程碑(概要架构定义阶段) 189
18.2 详细架构定义 189
18.2.1 详细架构定义的产品 190
18.2.2 软件工程集成产品团队(详细架构定义阶段) 191
18.2.3 软件实现(详细架构定义阶段) 192
18.2.4 计算环境准备(详细架构定义阶段) 192
18.2.5 开发后的过程准备(详细架构定义阶段) 192
18.2.6 软件测试和评估(详细架构定义阶段) 193
18.2.7 评审与里程碑(详细架构定义阶段) 193
18.2.8 建立分配基线 194
第19章 软件实现 195
19.1 软件实现的产品 196
19.2 软件工程任务(软件实现阶段) 197
19.3 软件实现任务(软件实现阶段) 197
19.4 计算环境任务(软件实现阶段) 199
19.5 开发后的过程任务(软件实现阶段) 199
19.6 软件测试和评估任务(软件实现阶段) 199
19.7 评审与里程碑(软件实现阶段) 200
第20章 软件验收测试 202
20.1 软件验收测试的产品 203
20.2 软件工程(软件验收测试阶段) 203
20.3 软件实现组织(软件验收测试阶段) 204
20.4 计算环境实现组织(软件验收测试阶段) 204
20.5 开发后的过程组织(软件验收测试阶段) 204
20.6 软件测试和评估(软件验收测试阶段) 205
20.7 评审与里程碑(软件验收测试阶段) 205
20.8 建立软件产品基线 206
索引 207
前言/序言
Software Engineering: Architecture-Driven Software Development本书旨在比较全面地介绍软件工程学科,展示软件工程原则与基于系统工程的软件实践。本书详细地解释了基本的软件工程体系理念,即强调使用严格规范的方法来设计软件产品。为达到此目的,部分讨论了在软件工程体系下的软件开发框架和项目构建。第二部分展示了6项技术惯例,它们传达了这样一种理念:利用计算技术,应用科学原则以及激活设计软件产品架构(即设计)的灵活性。第三部分讨论了软件工程团队在软件开发项目中扮演的角色,以便建立和控制软件产品架构。典型软件开发项目的每个阶段都会讨论的重点是软件工程团队如何与其他技术和项目相关的团体协作来影响架构设计和软件产品实现。这几部分阐明了与软件工程所用的严格方法相关的实践、原则、任务和工件。
本书的基础概念基于系统工程实践来达到表1确定的目标。这些目标通过应用一系列来源于系统工程学科中50多年来成功应用于开发复杂系统的原则和实践来实现。它强调完整软件架构的建立,这使得产品的每个元素都要明确,以便制造、组装、集成和测试。将这些实践应用到软件工程领域,为解决表1中列出的那些挑战提供了基础。
表1 软件工程挑战与目标软件工程挑战 目标在编码之前必须先做设计 在提高成本效率和进度准确性前弄清楚正在构建什么 减少产品在设计细节和精度上的复杂性 成本管理、进度安排和风险控制交付软件技术数据包 完整的设计图表和软件实现(构建)的说明文档分配设计配置元素间的需求 软件组件和单元间的需求分解与分配 需求可追踪性集成产品和过程开发(IPPD) 产品维护性能的并行设计与开发 生命周期成本控制准备软件集成策略 架构设计活动中计划的软件组件集成开发 高效的软件实现规划控制软件复杂性 降低软件维护/支持成本 高效、用户友好的交互使变更同化 涉众/用户满意度 产品竞争力权衡分析 成本管理和进度控制 设计优化 产品演变/增量发布的稳定性 项目成功率的增强预先计划的产品提升 将某些功能延迟发布来保证产品按时交付软件分析与设计的当前实践基于计算机编程语言和这些语言处理数据使用的逻辑概念。这驱动了诸如面向对象设计的软件设计方法,它并不是用来处理先进软件产品的复杂性的。通过适应系统工程实践,本书建立了严格的软件工程原则和实践,从而提供了一种全面的方法来设计软件产品。这些软件工程实践必须清晰说明以保证它们对软件开发的重要性和适用性是确定的。将这些实践应用于一个软件开发过程演练中,以便可以控制、修正和管
软件工程:架构驱动的软件开发 下载 mobi epub pdf txt 电子书 格式