
本书以一个贯穿始终的软件项目案例为基础,讲述了软件项目开发中需求分析、概要设计、详细设计、编码、测试、交付以及维护等各个过程中涉及的理论、方法、技术、提交的产品和文档等。本书注重实效、系统、全面,通过贯穿始终案例的讲述可以让学习者在短时间内掌握软件项目开发的基本知识、基本过程,并有效提高实践能力。
目 录<br />前言<br />第1章 软件工程之道1<br />1.1 软件工程的背景1<br />1.1.1 软件定义一切1<br />1.1.2 软件工程的诞生2<br />1.1.3 软件工程的本质3<br />1.2 软件工程知识体系4<br />1.3 软件工程路线图6<br />1.3.1 软件项目开发路线图9<br />1.3.2 软件项目管理路线图9<br />1.3.3 软件过程改进路线图10<br />1.4 软件开发的传统模型13<br />1.4.1 瀑布模型13<br />1.4.2 V模型14<br />1.4.3 原型模型14<br />1.4.4 增量式模型14<br />1.4.5 喷泉模型14<br />1.4.6 智能模型15<br />1.5 软件开发的敏捷模型15<br />1.5.1 Scrum16<br />1.5.2 XP20<br />1.5.3 DevOps23<br />1.5.4 规模化敏捷模型24<br />1.6 软件工程中的复用原则24<br />1.7 小结25<br />1.8 练习题25<br />第2章 软件工程模型与方法27<br />2.1 软件工程建模27<br />2.1.1 信息模型28<br />2.1.2 行为模型28<br />2.1.3 结构模型28<br />2.1.4 统一建模语言—UML28<br />2.2 软件工程方法30<br />2.2.1 面向过程(结构化)方法32<br />2.2.2 面向对象方法34<br />2.2.3 数据建模方法37<br />2.2.4 形式化方法37<br />2.2.5 快速原型方法38<br />2.2.6 面向构件方法38<br />2.2.7 面向代理方法39<br />2.2.8 敏捷开发方法41<br />2.2.9 模型驱动开发方法42<br />2.2.10 无代码开发模式43<br />2.3 软件工程方法对比44<br />2.4 软件逆向工程44<br />2.5 基于容器技术的软件工程化管理44<br />2.6 MSHD项目案例说明45<br />2.7 小结46<br />2.8 练习题46<br />第3章 软件项目的需求分析48<br />3.1 软件项目需求概述48<br />3.1.1 需求定义49<br />3.1.2 需求类型49<br />3.1.3 需求的重要性50<br />3.2 传统需求工程50<br />3.2.1 需求获取51<br />3.2.2 需求分析53<br />3.2.3 需求规格说明编写54<br />3.2.4 需求验证55<br />3.2.5 需求变更55<br />3.3 敏捷需求工程56<br />3.3.1 需求获取56<br />3.3.2 需求建模57<br />3.3.3 需求变更58<br />3.4 传统需求分析方法58<br />3.4.1 结构化需求分析方法58<br />3.4.2 面向对象需求分析方法61<br />3.5 敏捷需求分析73<br />3.5.1 影响地图73<br />3.5.2 需求池74<br />3.5.3 用户故事编写74<br />3.5.4 用户故事分解76<br />3.5.5 用户故事的INVEST准则76<br />3.5.6 用户故事地图78<br />3.6 需求的实例化78<br />3.6.1 BDD78<br />3.6.2 实例化需求80<br />3.7 需求分析的可视化工具81<br />3.7.1 IPO图81<br />3.7.2 判断矩阵81<br />3.7.3 功能列表82<br />3.8 原型设计工具83<br />3.8.1 Axure RP83<br />3.8.2 Balsamiq Mockups84<br />3.8.3 Prototype Composer84<br />3.8.4 GUI Design Studio84<br />3.9 需求规格说明文档84<br />3.10 MSHD项目案例—需求分析87<br />3.10.1 MSHD用户地图87<br />3.10.2 MSHD用户故事分解88<br />3.10.3 MSHD登录系统Story88<br />3.10.4 MSHD响应时间需求Story89<br />3.11 小结89<br />3.12 练习题89<br />第4章 软件项目的概要设计92<br />4.1 软件设计综述92<br />4.1.1 软件设计过程93<br />4.1.2 软件设计的原则93<br />4.1.3 软件设计的模式94<br />4.1.4 概要设计的定义96<br />4.2 软件架构设计96<br />4.2.1 单体架构(H/T体系结构)97<br />4.2.2 客户服务架构98<br />4.2.3 分层架构100<br />4.2.4 分布式架构103<br />4.2.5 面向服务的架构105<br />4.2.6 微服务架构107<br />4.2.7 领域驱动设计108<br />4.2.8 整洁架构115<br />4.2.9 插件架构115<br />4.2.10 无服务架构116<br />4.2.11 云原生架构119<br />4.2.12 面向工作流引擎122<br />4.3 应用程序框架124<br />4.3.1 前端框架125<br />4.3.2 后台业务框架129<br />4.3.3 后台数据框架134<br />4.3.4 应用组合架构136<br />4.3.5 Python Web应用架构137<br />4.3.6 基于技术中台的设计139<br />4.4 模块(构件)设计140<br />4.4.1 模块分解141<br />4.4.2 外部接口和内部接口设计142<br />4.4.3 模块的耦合度142<br />4.4.4 模块的内聚度143<br />4.5 数据模型设计145<br />4.5.1 数据库的设计过程147<br />4.5.2 数据库的概念结构设计147<br />4.5.3 数据库的逻辑结构设计149<br />4.5.4 数据库的物理结构设计153<br />4.5.5 文件设计154<br />4.6 用户界面设计155<br />4.7 结构化设计方法156<br />4.7.1 变换流与事务流158<br />4.7.2 功能模块划分158<br />4.7.3 数据流映射为结构图160<br />4.7.4 输入/输出设计161<br />4.8 面向对象的设计方法161<br />4.8.1 对象和类162<br />4.8.2 基于UML的设计图示163<br />4.8.3 面向对象设计步骤168<br />4.8.4 对象类设计实例171<br />4.9 敏捷设计176<br />4.9.1 腐化软件的味道176<br />4.9.2 防止腐化的设计177<br />4.10 概要设计文档标准178<br />4.11 MSHD项目案例—概要设计180<br />4.11.1 架构设计181<br />4.11.2 模块设计182<br />4.11.3 数据库设计183<br />4.11.4 界面设计184<br />4.12 小结184<br />4.13 练习题185<br />第5章 软件项目的详细设计187<br />5.1 详细设计的概念187<br />5.1.1 详细设计的定义187<br />5.1.2 详细设计的内容188<br />5.2 详细设计的表示工具188<br />5.2.1 程序流程图188<br />5.2.2 N-S图描述算法189<br />5.2.3 PAD描述算法190<br />5.2.4 决策表191<br />5.2.5 过程设计语言192<br />5.2.6 伪代码193<br />5.3 结构化详细设计194<br />5.3.1 算法194<br />5.3.2 JSD方法194<br />5.3.3 Warnier方法197<br />5.3.4 结构化详细设计的例子198<br />5.4 面向对象详细设计200<br />5.4.1 类之间关系的详细设计200<br />5.4.2 类的详细设计201<br />5.4.3 包的设计204<br />5.4.4 面向对象详细设计的例子204<br />5.5 敏捷化的整洁设计209<br />5.5.1 整洁设计209<br />5.5.2 基于TDD的详细设计209<br />5.6 详细设计文档210<br />5.7 MSHD项目案例—详细设计211<br />5.8 小结215<br />5.9 练习题215<br />第6章 软件项目的编程217<br />6.1 编程概述217<br />6.1.1 编程语言218<br />6.1.2 编程环境219<br />6.1.3 编程范式219<br />6.2 面向过程(结构化)编程219<br />6.2.1 算法实现220<br />6.2.2 控制结构220<br />6.2.3 编程过程规则222<br />6.3 面向对象编程225<br />6.3.1 对象和类225<br />6.3.2 面向对象编程的基本结构228<br />6.3.3 面向对象编程与面向<br /> 过程编程的对比229<br />6.4 声明式编程230<br />6.5 编程模式与策略231<br />6.5.1 面向组件编程231<br />6.5.2 面向服务编程232<br />6.5.3 面向切面编程233<br />6.5.4 低代码模式233<br />6.5.5 编程策略234<br />6.6 敏捷化编程实践234<br />6.6.1 测试驱动开发234<br />6.6.2 重构235<br />6.6.3 结对编程238<br />6.6.4 红-绿-蓝循环238<br />6.7 整洁代码244<br />6.7.1 什么是整洁代码244<br />6.7.2 整洁的命名244<br />6.7.3 整洁函数248<br />6.7.4 整洁注释248<br />6.7.5 整洁对象和数据结构249<br />6.7.6 整洁交付250<br />6.7.7 复用原则250<br />6.7.8 McCabe程序复杂度251<br />6.7.9 防御性编程252<br />6.7.10 编程标准和规范252<br />6.8 MSHD项目案例—编程过程<br /> (系统构建)253<br />6.8.1 项目开发环境的建立253<br />6.8.2 编程标准和规范255<br />6.8.3 TDD&Refactor开发模式256<br />6.9 小结261<br />6.10 练习题261<br />第7章 软件项目的测试263<br />7.1 软件测试概述263<br />7.1.1 什么是软件测试264<br />7.1.2 软件测试技术综述265<br />7.2 静态测试266<br />7.2.1 文档审查266<br />7.2.2 代码检查268<br />7.2.3 技术评审269<br />7.3 白盒测试方法介绍270<br />7.4 白盒测试方法——基于控制流<br /> 的测试270<br />7.4.1 语句覆盖270<br />7.4.2 判定覆盖271<br />7.4.3 条件覆盖271<br />7.4.4 判定/条件覆盖272<br />7.4.5 条件组合覆盖272<br />7.4.6 路径覆盖272<br />7.4.7 ESTCA规则273<br />7.4.8 LCSAJ覆盖274<br />7.4.9 MC/DC覆盖274<br />7.5 白盒测试方法——基于数据流<br /> 的测试275<br />7.5.1 定义/使用测试275<br />7.5.2 程序片测试 277<br />7.6 白盒测试方法——变异测试279<br />7.7 黑盒测试方法280<br />7.7.1 边界值分析280<br />7.7.2 等价类划分281<br />7.7.3 规范导出法282<br />7.7.4 错误猜测法283<br />7.7.5 基于故障的测试方法283<br />7.7.6 因果图法283<br />7.7.7 决策表法284<br />7.7.8 场景法286<br />7.8 其他测试技术290<br />7.8.1 回归测试290<br />7.8.2 随机测试290<br />7.8.3 探索性测试290<br />7.9 软件测试级别292<br />7.9.1 单元测试292<br />7.9.2 集成测试294<br />7.9.3 系统测试296<br />7.9.4 验收测试298<br />7.9.5 上线测试299<br />7.10 面向对象的测试299<br />7.10.1 面向对象分析的测试299<br />7.10.2 面向对象设计的测试300<br />7.10.3 面向对象的单元测试300<br />7.10.4 面向对象的集成测试301<br />7.10.5 面向对象的系统测试302<br />7.11 测试过程管理302<br />7.11.1 软件测试计划303<br />7.11.2 软件测试设计304<br />7.11.3 软件测试开发307<br />7.11.4 软件测试执行307<br />7.11.5 软件测试跟踪308<br />7.11.6 软件测试评估与总结312<br />7.12 敏捷测试315<br />7.12.1 敏捷测试层次316<br />7.12.2 敏捷测试模型316<br />7.12.3 持续测试318<br />7.12.4 自动化测试319<br />7.13 软件测试过程的文档321<br />7.13.1 测试计划文档321<br />7.13.2 测试设计文档322<br />7.13.3 软件测试报告330<br />7.14 MSHD项目案例—软件<br /> 测试过程332<br />7.14.1 单元测试333<br />7.14.2 接口测试333<br />7.14.3 UI测试337<br />7.14.4 探索性测试340<br />7.14.5 性能测试342<br />7.14.6 测试结论345<br />7.15 小结346<br />7.16 练习题347<br />第8章 软件项目的交付349<br />8.1 产品交付概述349<br />8.2 安装部署350<br />8.2.1 软件安装350<br />8.2.2 软件部署350<br />8.2.3 云原生部署350<br />8.3 CI/CD351<br />8.3.1 持续集成351<br />8.3.2 持续交付352<br />8.3.3 持续部署352<br />8.4 验收测试352<br />8.5 培训353<br />8.5.1 培训对象354<br />8.5.2 培训方式354<br />8.5.3 培训指南354<br />8.6 用户文档355<br />8.6.1 用户手册355<br />8.6.2 系统管理员手册355<br />8.6.3 其他文档355<br />8.7 软件项目交付文档355<br />8.7.1 验收测试报告356<br />8.7.2 用户手册359<br />8.7.3 系统管理员手册360<br />8.7.4 产品交付文档361<br />8.8 MSHD项目案例—软件<br /> 交付过程362<br />8.8.1 安装部署手册362<br />8.8.2 用户使用手册366<br />8.9 小结368<br />8.10 练习题368<br />第9章 软件项目的维护369<br />9.1 软件项目维护概述369<br />9.1.1 软件维护活动370<br />9.1.2 软件可维护性370<br />9.2 持续运维371<br />9.3 软件项目维护的类型371<br />9.3.1 纠错性维护372<br />9.3.2 适应性维护372<br />9.3.3 完善性维护372<br />9.3.4 预防性维护372<br />9.4 软件运维指标373<br />9.5 软件项目维护过程376<br />9.5.1 维护申请376<br />9.5.2 维护实现377<br />9.5.3 维护产品发布377<br />9.6 软件再工程过程377<br />9.7 软件维护过程文档379<br />9.8 MSHD项目案例—软件<br /> 维护过程379<br />9.8.1 运维监控379<br />9.8.2 维护任务381<br />9.9 小结383<br />9.10 练习题383<br />附录385<br />参考文献389