第1章 软件工程实训项目课程导论 1
1.1 软件工程与我 1
1.1.1 角色认知:我的未来不是梦 1
1.1.2 课程定位:软件车间主任的培训班 3
1.1.3 实训与实战:态度决定一切 4
1.1.4 理论与实践:相映成趣、相得益彰 5
1.2 实训各阶段的任务与要求 6
1.2.1 阶段1:组成项目团队 6
1.2.2 阶段2:提出项目目标 6
1.2.3 阶段3:制定项目计划 7
1.2.4 阶段4:完成需求定义 7
1.2.5 阶段5:设计系统架构 8
1.2.6 阶段6:完成代码开发 8
1.2.7 阶段7:提交测试验收 8
1.2.8 阶段8:进行项目总结 9
1.3 实训项目课题的选择 9
1.3.1 关于实训项目课题的选择 9
1.3.2 实训项目案例——ATM系统扩展 9
1.3.3 在相同基础上的个性化发挥 10
1.4 带着兄弟们上路 10
1.4.1 组成项目团队 10
1.4.2 从角色需要考虑人选 10
1.4.3 准备VSTS环境 11
1.4.4 阅读教材与参考书 12
1.5 本阶段小结——组成项目团队 13
1.5.1 理解实训项目的课程目标 13
1.5.2 了解如何进行课程阶段成果的检查 14
1.5.3 本章的理论基础和实践内容小结 14
1.6 本章作业与问题 14
1.6.1 本章作业 14
1.6.2 问题:更进一步的思考 14
第2章 实训项目的选题与目标范围确定 15
2.1 认识我们的目标 15
2.1.1 微软创新杯 15
2.1.2 大赛主题与选题 16
2.1.3 理解大赛主题 16
2.2 有一个好的点子 17
2.2.1 基于传统问题域的创新选题 18
2.2.2 关注新的应用领域 19
2.2.3 寻找新的技术应用热点 20
2.2.4 参考各类软件创新大赛的获奖选题 20
2.2.5 从既往的项目中选择课题 21
2.3 选题的目标设计与价值评价 21
2.3.1 目标与方案 21
2.3.2 最初的目标:大赛通知 22
2.3.3 第一个交付成果:《项目计划书》 23
2.3.4 再谈目标——大赛的评价标准 25
2.4 课题的难度与可行性 27
2.4.1 何谓“难度” 27
2.4.2 难度与可行性的关系 27
2.4.3 可行性的非技术性考虑 28
2.5 确定项目的范围 29
2.5.1 为目标而确定范围 29
2.5.2 考虑条件和资源 29
2.5.3 修剪你的“范围树” 30
2.6 项目团队组建与项目初步规划 30
2.6.1 角色与分工 31
2.6.2 项目总体规划 31
2.6.3 为第一次提交,制订更详细的工作计划 32
2.7 实训项目案例——《ATM扩展项目计划书》 32
2.7.1 参赛作品构思的创意与价值 32
2.7.2 参赛作品的目标实现形式 33
2.7.3 参赛作品目标实现的可行性 34
2.7.4 团队组成与角色分工 34
2.7.5 项目时间进度表 34
2.8 本阶段小结——通过项目初审 35
2.8.1 软件创新大赛各阶段评审重点 35
2.8.2 第一轮入围与评判标准 35
2.8.3 本章的理论基础和实践内容小结 36
2.9 本章作业与问题 37
2.9.1 本章作业 37
2.9.2 问题:更进一步的思考 37
第3章 交付过程模型与项目管理控制 38
3.1 交付过程模型与过程管理 38
3.1.1 过程模型的一般意义 39
3.1.2 微软公司的软件过程模型MSF与VSTS 41
3.1.3 统一过程模型RUP与IBM的Jazz 44
3.1.4 MSF与RUP的比较 47
3.2 交付过程模型的结构与关键行为 47
3.2.1 工作项与工作产品 48
3.2.2 角色 48
3.2.3 流程 48
3.2.4 活动和步骤 49
3.3 为实训项目搭建VSTS平台 49
3.3.1 VSTS的逻辑结构与物理结构 49
3.3.2 安装VSTS系统的服务器端 50
3.3.3 安装VSTS系统的客户端 55
3.4 使用VSTS定义项目 56
3.4.1 在VSTS上定义项目 56
3.4.2 使用团队资源管理器定义项目的工作项内容 57
3.5 为项目定义基线与状态 62
3.5.1 基线与状态控制 62
3.5.2 用VSTS设置项目的基线 63
3.6 创建门户与团队报告 65
3.6.1 打开团队项目门户 65
3.6.2 自定义并扩展团队报告 66
3.7 实训项目案例——ATM扩展 66
3.7.1 定义前的准备 66
3.7.2 为ATM扩展项目选择生命周期模型 66
3.7.3 为ATM扩展项目定义项目计划 67
3.7.4 为ATM扩展项目定义具体的工作项内容 67
3.7.5 为ATM扩展项目定义基线 68
3.7.6 查看ATM扩展项目的团队门户和团队报告 68
3.8 本阶段小结——召开第一次项目例会 68
3.8.1 如何开好一次项目例会 69
3.8.2 本章的理论基础和实践内容小结 69
3.9 本章作业与问题 69
3.9.1 本章作业 69
3.9.2 问题:更进一步的思考 69
第4章 需求工程中的需求开发与管理 71
4.1 软件需求的获取与描述 72
4.1.1 需求获取阶段的工作目标与关键交付物成果 72
4.1.2 基于UML的电梯控制系统需求模型 73
4.1.3 项目案例:ATM扩展项目的需求获取过程 75
4.1.4 项目案例:ATM基本系统的业务用例模型 76
4.1.5 项目案例:在ATM网络系统中加入“前置机”的功能与作用 77
4.1.6 项目案例:ATM系统的扩展以及相关的用户确认 81
4.2 需求分析模型与关键需求 82
4.2.1 需求分析阶段的工作目标与关键交付物成果 82
4.2.2 项目案例:ATM基本系统的需求分析模型 83
4.2.3 项目案例:ATM扩展的需求场景 84
4.2.4 项目案例:ATM扩展的关键需求分析 86
4.2.5 项目案例:ATM关键需求实现的用户验收 86
4.3 文档化的需求处理与需求规格描述 87
4.3.1 需求处理阶段的工作目标与关键交付物成果 87
4.3.2 《需求规格说明书》的主要内容 88
4.3.3 项目案例:ATM项目的《需求规格说明书》 88
4.4 Borland Caliber的需求定义与管理功能 89
4.4.1 Borland Caliber的需求定义与管理概念 89
4.4.2 Borland Caliber的需求定义与管理过程 90
4.5 使用Caliber定义项目需求 93
4.5.1 创建新项目 93
4.5.2 为项目创建需求树 93
4.5.3 定义需求信息 94
4.5.4 为需求分配属性值 95
4.5.5 为需求分配用户和组 96
4.5.6 链接参考文档 96
4.5.7 创建追踪能力链接 96
4.5.8 定义需求验证过程 98
4.6 使用Caliber对需求进行基线管理 98
4.6.1 查看项目的需求基线 98
4.6.2 创建项目的需求基线 99
4.6.3 初始化项目的需求基线 101
4.6.4 锁定项目的需求基线 101
4.6.5 项目基线的电子签名 102
4.6.6 添加项目基线的电子签名 103
4.6.7 查看项目基线的签名报告 103
4.6.8 比较项目的需求基线 103
4.6.9 有关项目需求基线的小结 104
4.7 将Caliber与VSTS集成 105
4.7.1 安装Caliber的VSTS插件 106
4.7.2 让Caliber与VSTS工作项关联 107
4.7.3 在VSTS中创建Caliber的需求项 108
4.7.4 建立Caliber的需求项与VSTS工作项之间的跟踪关系 109
4.7.5 总结:Caliber与VSTS一起工作 109
4.8 在Caliber上建立ATM扩展需求 109
4.8.1 从业务用例模型到Caliber需求树 109
4.8.2 了解Caliber上的ATM需求 110
4.8.3 在Caliber中扩展自己的ATM需求 111
4.8.4 在Caliber上确定项目的需求范围边界 111
4.8.5 与VSTS工作项相关联并确定基线 111
4.9 本阶段小结——通过需求评审 112
4.9.1 理解实训项目的需求评审要求 112
4.9.2 开展实训项目的需求评审活动 113
4.9.3 本章的理论基础和实践内容小结 113
4.10 本章作业与问题 113
4.10.1 本章作业 113
4.10.2 问题:更进一步的思考 114
第5章 基于关键质量属性的架构设计 115
5.1 最初的架构模型设想 115
5.1.1 从需求模型开始 116
5.1.2 一般架构模型的基本考虑 117
5.1.3 从需求模型到架构模型的转换 118
5.1.4 电梯控制系统的架构设计 119
5.2 关注与架构有关的关键质量属性 121
5.2.1 满足关键质量属性需求的架构设计 121
5.2.2 电梯控制系统关键质量属性需求分析 122
5.2.3 规范的关键质量属性场景描述 126
5.2.4 有关ATM扩展的关键质量属性场景描述 126
5.3 基于关键质量属性需求的分析与架构设计 127
5.3.1 “可用性”需求的现状分析 127
5.3.2 实现“实时性”需求的对策 133
5.3.3 实现“实时性”需求的方法 134
5.3.4 基于关键质量属性的架构分析 135
5.3.5 实时故障恢复系统的架构设计考虑 136
5.3.6 实时故障恢复系统的详细设计考虑 137
5.4 搭建一个基于MVC模式的Struts架构 138
5.4.1 选择MVC模式的理由 139
5.4.2 用Struts搭建一个“轻量级”的应用架构 141
5.4.3 更进一步地体验Struts架构中的MVC组件 142
5.4.4 项目作业:比较在Struts架构上搭建ATM系统的优劣 144
5.5 在Struts架构上运用面向对象设计模式 145
5.5.1 业务处理流程灵活性的质量属性场景描述 145
5.5.2 实现业务处理流程灵活性的战术对策 146
5.5.3 采用工厂方法实现流程灵活性的关键质量需求 147
5.5.4 在Struts框架下实现设计模式的应用 148
5.6 使用VSTS可视化的分布式系统设计器构建系统架构 150
5.6.1 分布式系统设计器的作用和相互关系 150
5.6.2 定义组件的提供者 152
5.6.3 定义对组件提供者终结点的控制 153
5.6.4 定义组件之间的连接 154
5.6.5 应用程序的实现 155
5.6.6 项目作业:使用VSTS应用程序设计器实现ATM系统 157
5.7 架构文档与架构评审 157
5.7.1 规范的架构设计活动过程与制品 157
5.7.2 需要编写的架构视图和文档 158
5.7.3 透过架构视图表现架构设计的核心内容 160
5.7.4 针对一般要素的架构设计评审 161
5.7.5 针对关键质量属性需求的架构设计评审 161
5.7.6 ATM实时故障恢复系统的构架设计评审 162
5.8 本阶段小结——通过架构设计评审 165
5.8.1 理解项目实训课程的架构设计评审要求 165
5.8.2 开展实训项目的架构评审活动 166
5.8.3 本章的理论基础和实践内容小结 167
5.9 本章作业与问题 167
5.9.1 本章作业 167
5.9.2 问题:更进一步的思考 167
第6章 代码开发阶段的软件过程控制与管理 168
6.1 用VSTS实现对源代码的控制与管理 168
6.1.1 从建立规范的源代码开发管理环境开始 168
6.1.2 使用源代码管理器对个人的工作区进行管理 169
6.1.3 向存储库和工作区中添加文件夹/文件/解决方案 171
6.1.4 通过配置签入/签出策略设置对变更活动的约束 173
6.1.5 签出 174
6.1.6 签入 175
6.2 使用TFVC进行版本控制 175
6.2.1 设置团队版本控制环境 176
6.2.2 决定控制什么和由谁来进行控制 176
6.2.3 在开发中使用TFVC进行版本控制和管理 177
6.3 使用TFB进行构建与发布管理 177
6.3.1 什么是现代构建与发布管理 177
6.3.2 安装并配置TFB 178
6.3.3 使用TFB进行生成与每日集成 181
6.3.4 查看TFB报告 181
6.4 体验VSTS的单元测试与测试管理 182
6.4.1 测试的概念与VSTS的测试功能 182
6.4.2 单元测试的概念 184
6.4.3 建立本地的单元测试环境 185
6.4.4 为单元测试设置VS项目 187
6.4.5 使用测试管理器运行和管理单元测试 189
6.4.6 尝试VSTS的测试代码覆盖 189
6.4.7 运用VSTS托管代码分析工具 191
6.4.8 将测试与TFS集成并发布测试结果 192
6.5 本阶段小结——通过代码评审 194
6.5.1 理解实训项目的代码评审要求 194
6.5.2 开展实训项目的代码评审活动 194
6.5.3 本章的理论基础和实践内容小结 195
6.6 本章作业与问题 195
6.6.1 本章作业 195
6.6.2 问题:更进一步的思考 195
第7章 系统测试与用户验收 196
7.1 集成测试 196
7.1.1 什么是集成测试 196
7.1.2 在“类”级别的集成测试 197
7.1.3 使用VSTS的Web测试作为集成测试工具 198
7.1.4 用VSTS的应用程序设计器创建一个Web应用 198
7.1.5 实现StockBroker股票交易系统的关键组件 200
7.1.6 配置和创建Web测试 204
7.1.7 开始模拟的Web测试 205
7.1.8 测试组件之间的操作 206
7.2 系统测试 209
7.2.1 系统功能测试 209
7.2.2 系统性能测试 209
7.2.3 系统负载测试 210
7.3 应用系统的发布过程 212
7.3.1 部署与发布的概念 212
7.3.2 应用系统的现场实施过程 212
7.3.3 应用系统的现场实施活动 213
7.4 模拟用户验收测试 214
7.4.1 制定《验收测试计划》 214
7.4.2 设计《验收测试用例》 215
7.4.3 实施验收测试 216
7.4.4 编写《验收测试报告》 217
7.4.5 模拟用户验收测试 219
7.4.6 修改、修改、再修改 220
7.5 对ATM扩展项目进行用户验收测试 220
7.5.1 对ATM扩展项目进行验收测试的用户需求 220
7.5.2 对ATM扩展项目进行用户验收测试的测试环境 221
7.5.3 对ATM扩展项目进行用户验收测试的过程组织 221
7.5.4 对ATM扩展项目进行用户验收测试的测试用例 222
7.6 本阶段小结——通过用户验收测试 223
7.6.1 理解实训项目的用户验收测试要求 223
7.6.2 开展实训项目的用户验收测试活动 223
7.6.3 本章的理论基础和实践内容小结 223
7.7 本章作业与问题 223
7.7.1 本章作业 223
7.7.2 问题:更进一步的思考 224
第8章 实训项目的结束与总结 225
8.1 理解实训项目的结束活动与要求 225
8.1.1 项目管理中的项目结束活动 225
8.1.2 评价与度量的对象 226
8.1.3 评价“度”的把握 226
8.1.4 评价要素的选择 226
8.1.5 针对项目团队的“评价树” 227
8.1.6 针对实训课程本身的“评价树” 227
8.2 基于项目作品目标实现与否的项目团队评审 228
8.2.1 理解作品目标实现情况的评价与总结要求 228
8.2.2 实训项目作品目标实现情况的测试与评审 228
8.3 基于项目管理目标实现与否的项目团队评审 229
8.3.1 理解项目管理目标实现情况的评价与总结要求 229
8.3.2 项目管理目标实现情况的报告与评审 229
8.4 基于软件过程管理目标实现与否的项目团队评审 230
8.4.1 理解软件过程管理目标实现情况的评价与总结要求 230
8.4.2 实训项目软件过程管理目标实现情况的报告与评审 230
8.5 本阶段小结——对实训课程本身的总结与评价 233
8.5.1 传统课程评价方法的弊端 233
8.5.2 对课程评价方法的改进 234
8.5.3 课程目标与过程评价的实践 235
8.5.4 本章的理论基础和实践内容小结 242
8.6 本章作业与问题 243
8.6.1 本章作业 243
8.6.2 问题:更进一步的思考 243
参考文献 244