第一篇 软件工程基础 第1章 软件发展史及软件工程 3 1.1 软件的发展历程 3 1.2 软件的定义和特点 5 1.3 软件危机 6 1.4 软件工程 7 1.5 软件开发方法 9 1.6 软件工程知识体系 12 1.7 小结 13 1.8 习题 13 第2章 软件生命周期 14 2.1 项目构想和立项 14 2.2 可行性分析 15 2.3 项目开发计划 17 2.3.1 制订项目开发计划 17 2.3.2 项目开发计划评审 19 2.4 需求分析 19 2.4.1 需求的定义和组成 20 2.4.2 需求管理 21 2.5 软件设计 24 2.5.1 软件设计的目标和任务 25 2.5.2 软件设计阶段 26 2.5.3 模块化与模块独立 26 2.5.4 经典软件体系结构 27 2.5.5 设计复审 34 2.6 软件实现 35 2.6.1 程序设计语言的选择 35 2.6.2 软件编码规范 37 2.6.3 软件效率 38 2.7 软件测试 41 2.7.1 软件测试的发展历程 42 2.7.2 软件测试技术 45 2.7.3 软件测试策略 50 2.7.4 软件测试步骤 55 2.7.5 软件测试的原则 56 2.7.6 软件调试 58 2.7.7 软件可靠性 61 2.8 软件维护 61 2.8.1 软件维护分类 62 2.8.2 软件维护实施 62 2.9 小结 67 2.10 习题 67 第二篇 结构化方法 第3章 结构化分析 71 3.1 结构化需求描述方法 71 3.2 结构化需求建模 73 3.2.1 数据流图 73 3.2.2 处理/加工逻辑说明 77 3.2.3 状态转换图 80 3.2.4 数据模型 82 3.3 小结 87 3.4 习题 88 第4章 结构化设计 89 4.1 结构化设计与结构化分析的关系 89 4.2 结构化模块及模块独立性 90 4.2.1 结构化的模块独立性 90 4.2.2 结构化设计启发式规则 97 4.3 系统结构设计 98 4.3.1 系统结构图 99 4.3.2 HIPO图 101 4.3.3 面向数据流的设计方法 101 4.4 数据设计 109 4.4.1 数据元素设计 110 4.4.2 数据结构设计 110 4.4.3 文件格式设计 111 4.4.4 数据库设计 113 4.5 过程设计 116 4.5.1 程序流程图 116 4.5.2 PDL 118 4.5.3 模块过程设计 121 4.6 设计优化 121 4.7 小结 122 4.8 习题 122 第5章 结构化实现 123 5.1 结构化实现与结构化设计的关系 123 5.2 结构化编码 124 5.2.1 结构化程序的源代码组成 124 5.2.2 结构化程序的编译过程 126 5.2.3 结构化程序多文件组织 127 5.2.4 结构化模块集成 129 5.3 结构化测试 132 5.3.1 结构化测试阶段 132 5.3.2 结构化白盒测试覆盖标准 134 5.3.3 结构化白盒测试用例设计 138 5.3.4 结构化黑盒测试用例设计 143 5.3.5 结构化测试实施 146 5.4 小结 147 5.5 习题 147 第三篇 面向对象方法 第6章 统一建模语言 151 6.1 统一建模语言的发展史 151 6.2 UML中的图 152 6.2.1 用例图 152 6.2.2 活动图 154 6.2.3 类图 155 6.2.4 对象图 158 6.2.5 顺序图 158 6.2.6 通信图 162 6.2.7 状态图 164 6.2.8 构件图 166 6.2.9 部署图 167 6.2.10 包图 169 6.3 小结 171 6.4 习题 171 第7章 面向对象分析 172 7.1 业务用例分析 172 7.2 业务用例描述 173 7.3 活动建模 174 7.4 分析模型 176 7.4.1 对象建模 176 7.4.2 交互建模 180 7.4.3 状态建模 182 7.4.4 划分内容主题 183 7.4.5 完善分析模型 184 7.5 面向对象分析评审 185 7.6 小结 186 7.7 习题 186 第8章 面向对象设计 187 8.1 分析模型到设计模型的转换 187 8.2 面向对象设计原则 188 8.2.1 面向对象的模块独立性 188 8.2.2 面向对象设计启发式规则 191 8.2.3 设计模式 198 8.3 面向对象架构设计 201 8.3.1 软件架构设计 202 8.3.2 类方法设计 207 8.3.3 类属性设计 211 8.4 软件构件设计 214 8.4.1 构件设计原则 214 8.4.2 软件构件的设计方法 215 8.5 部署设计 218 8.6 小结 222 8.7 习题 222 第9章 面向对象实现 223 9.1 面向对象编码 223 9.1.1 项目文件组织 223 9.1.2 面向对象业务实现 226 9.2 面向对象测试 228 9.2.1 面向对象测试阶段 228 9.2.2 面向对象测试策略 230 9.2.3 面向对象测试用例设计 231 9.3 小结 239 9.4 习题 240 第四篇 软件过程及管理 第10章 软件过程 243 10.1 瀑布模型 244 10.2 演化模型 246 10.3 快速原型法 247 10.4 增量模型 249 10.5 螺旋模型 251 10.6 喷泉模型 253 10.7 构件组装模型 254 10.8 统一过程 255 10.9 能力成熟度模型 257 10.10 净室软件工程 258 10.11 敏捷开发过程 260 10.11.1 极限编程 261 10.11.2 Scrum 262 10.12 小结 264 10.13 习题 264 第11章 软件项目管理 265 11.1 项目管理概述 265 11.2 项目管理框架 266 11.3 项目阶段管理 268 11.3.1 项目准备与启动 268 11.3.2 项目计划 270 11.3.3 项目的执行与控制 277 11.3.4 项目的收尾与总结 295 11.4 小结 297 11.5 习题 297 第五篇 现代软件开发 第12章 腾讯敏捷软件开发 301 12.1 腾讯敏捷研发理念 301 12.2 腾讯敏捷解决方案 303 12.3 敏捷的核心应用 304 12.3.1 看板 304 12.3.2 需求 305 12.3.3 迭代 306 12.3.4 测试 307 12.3.5 缺陷 308 12.3.6 DevOps 310 12.3.7 报表 311 12.3.8 文档 312 12.4 小结 312 12.5 习题 313 第13章 基于领域驱动的云原生软件开发 314 13.1 云原生概述 314 13.2 云原生架构及其设计原则 317 13.3 领域驱动设计 322 13.4 基于领域的敏捷需求分析 323 13.4.1 领域分析及子领域识别 323 13.4.2 业务需求分析 324 13.5 云原生软件架构设计 324 13.5.1 界限上下文划分 325 13.5.2 实体及值对象分析 326 13.5.3 聚合分析与设计 327 13.5.4 事件识别及服务分析 330 13.5.5 存储库设计 331 13.5.6 数据一致性 332 13.5.7 软件前端设计 335 13.6 云原生软件系统实现及部署 336 13.6.1 云原生软件实现 336 13.6.2 容量估算及组件选型 341 13.6.3 系统测试 341 13.6.4 软件发布及部署 342 13.7 小结 343 13.8 习题 344 第14章 人机交互设计 345 14.1 人机交互 345 14.2 交互模型和框架 347 14.3 人机交互设计原则 350 14.4 人机交互界面的设计过程 354 14.5 小结 356 14.6 习题 356 参考文献 357    软件工程(微课视频版) 目 录