计算机
类型
可以朗读
语音朗读
236千字
字数
2021-12-01
发行日期
展开全部
主编推荐语
工程化编程实战:工具、编码、需求分析、软件结构和过程管理
内容简介
本书涵盖了五大部分内容:一是常用工具VS Code、Git和正则表达式;二是以C语言代码为例介绍工程化编程的基本方法,涵盖了代码风格规范、模块化、可重用、线程安全等;三是一种从需求分析到软件设计的基本建模方法,从需求分析开始以UML为工具完成用例建模、业务建模、对象交互建模,最终形成设计方案的一整套基本方法;四是探讨软件的内在元素、结构、特性和描述方法,以及高质量软件的内涵;五是历史性地回顾软件危机的前因后果,并与CMM/CMMI、敏捷开发、DevOps等软件过程和生命周期管理衔接起来。本书以国家精品在线开放课程“工程化编程实战”为核心内容,增加了常用工具、需求分析与建模方法、软件结构和软件过程等相关内容,内容全面、新颖、实践性强。
目录
- 版权信息
- 版 权
- 内容提要
- 前 言
- 资源与支持
- 第一篇 工欲善其事,必先利其器
- 第1章 编程“神器”Visual Studio Code
- 1.1 Visual Studio Code的安装和基本用法
- 1.1.1 下载和安装Visual Studio Code
- 1.1.2 VS Code界面概览
- 1.1.3 VS Code的基本配置
- 1.1.4 VS Code的基本用法
- 1.2 VS Code为什么能这么牛[2]
- 1.2.1 简洁而聚焦的产品定位贯穿始终
- 1.2.2 进程隔离的插件模型是“定海神针”
- 1.2.3 代码理解和调试——LSP和DAP两大协议“厥功至伟”
- 1.2.4 集大成的VS Code远程开发环境
- 1.3 基于VS Code的C/C++开发调试环境配置
- 1.3.1 安装C/C++插件
- 1.3.2 安装C/C++编译器和调试器
- 1.3.3 配置Visual Studio Code构建任务
- 1.3.4 配置Visual Studio Code调试环境
- 1.4 VS Code远程开发环境配置
- 1.4.1 VS Code远程开发环境概述
- 1.4.2 VS Code远程开发环境Remote-SSH配置
- 1.4.3 VS Code远程开发环境Web Remote-code-schmerver配置
- 本章练习
- 第2章 五大场景玩转Git
- 2.1 Git分布式版本控制系统
- 2.1.1 版本控制概述
- 2.1.2 Git的历史
- 2.1.3 Git的基本操作
- 2.2 场景一:Git本地版本库的基本用法
- 2.2.1 安装Git
- 2.2.2 初始化一个本地版本库
- 2.2.3 查看当前工作区的状态
- 2.2.4 暂存更改的文件
- 2.2.5 把暂存区里的文件提交到仓库
- 2.2.6 Git本地版本库的基本用法参考
- 2.3 场景二:Git远程版本库的基本用法
- 2.3.1 克隆远程版本库
- 2.3.2 远程版本库的基本命令简介
- 2.3.3 Git远程版本库的基本用法参考
- 2.4 Git背后的设计理念
- 2.5 场景三:团队项目中的分叉合并
- 2.5.1 团队项目的一个参考工作流程
- 2.5.2 分支的基本用法
- 2.5.3 团队项目工作流程参考
- 2.6 场景四:Git Rebase整理提交记录
- 2.7 场景五:Fork + Pull request开发工作流程
- 本章练习
- 第3章 正则表达式十步通关
- 3.1 为什么使用正则表达式
- 3.2 第一关:基本的字符串搜索方法
- 3.3 第二关:同时搜索多个字符串的方法
- 3.4 第三关:在匹配字符串时的大小写问题
- 3.5 第四关:通配符的基本用法
- 3.6 第五关:匹配具有多种可能性的字符集
- 3.7 第六关:贪婪匹配和懒惰匹配
- 3.8 第七关:一些特殊位置和特殊字符
- 3.9 第八关:使用捕获组复用模式
- 3.10 第九关:基本的字符串搜索替换方法
- 3.11 第十关:在替换中使用捕获组复用模式
- 本章练习
- 第二篇 工程化编程实战
- 第4章 简约而不简单——代码规范和代码风格
- 4.1 实验项目介绍
- 4.2 代码风格的原则:简明、易读、无二义性
- 4.3 编写高质量代码的基本方法
- 4.3.1 通过控制结构简化代码
- 4.3.2 通过数据结构简化代码
- 4.3.3 一定要有错误处理
- 4.3.4 性能优先策略背后隐藏的代价
- 4.3.5 拒绝修修补补,要不断重构代码
- 4.3.6 编码过程中的团队合作
- 本章练习
- 第5章 模块化软件设计
- 5.1 模块化思想背后的基本原理
- 5.2 模块化代码的基本写法举例
- 5.3 传统单体集中式架构与微服务架构
- 5.4 模块化软件设计中的基本方法
- 5.4.1 KISS原则
- 5.4.2 使用本地化外部接口来提高代码的适应能力
- 5.4.3 保持设计结构和代码结构的一致性
- 本章练习
- 第6章 可复用软件设计
- 6.1 消费者复用和生产者复用
- 6.2 接口的基本概念
- 6.2.1 软件模块接口举例
- 6.2.2 微服务接口举例
- 6.2.3 接口与耦合度之间的关系
- 6.2.4 同步接口和异步接口
- 6.3 可复用软件模块的接口设计示例
- 6.3.1 通用LinkTable模块的接口设计
- 6.3.2 给LinkTable增加Callback方式的接口
- 6.3.3 进一步改进LinkTable的Callback方式的接口
- 6.4 通用接口定义的基本方法
- 6.4.1 参数化上下文
- 6.4.2 移除前置条件
- 6.4.3 简化后置条件
- 本章练习
- 第7章 可重入函数与线程安全
- 7.1 线程的基本概念
- 7.2 函数调用堆栈
- 7.3 可重入函数
- 7.4 什么是线程安全
- 7.5 LinkTable软件模块的线程安全分析
- 本章练习
- 第8章 子系统的工程化
- 8.1 menu子系统的可复用接口设计
- 8.2 Makefile工程文件举例
- 8.3 带参数的复杂命令函数接口的写法
- 8.4 看待软件质量的几个不同角度
- 8.5 编程的基本方法和原则
- 本章练习
- 第三篇 需求分析和软件设计
- 第9章 获取需求的主要方法
- 9.1 什么是需求
- 9.2 为什么需求非常重要
- 9.3 有哪些类型的需求
- 9.4 有哪些和需求相关的人员
- 9.5 获取需求的主要方法
- 9.6 高质量的需求是什么样子
- 9.6.1 便于验证的需求是高质量的
- 9.6.2 解决了内在冲突的需求是高质量的
- 9.6.3 高质量需求的典型特征
- 9.7 绘图工具VS Code和draw.io
- 9.7.1 在线绘图工具draw.io
- 9.7.2 安装draw.io插件
- 9.7.3 快速入门VS Code+draw.io画图
- 本章练习
- 第10章 对需求进行分析和建模
- 10.1 原型化方法和建模的方法
- 10.2 用例建模[1]
- 10.2.1 什么是用例
- 10.2.2 用例的三个抽象层级
- 10.2.3 用例建模的基本步骤
- 10.2.4 准确提取用例的基本方法
- 10.2.5 用例图的基本画法
- 10.3 业务领域建模
- 10.3.1 面向对象分析涉及的基本概念
- 10.3.2 业务领域建模的基本步骤
- 10.3.3 头脑风暴的具体做法
- 10.3.4 业务领域概念分类的方法
- 10.4 关联类及其关系数据模型
- 10.4.1 关联类的基本概念及其UML类图
- 10.4.2 关联类的面向对象设计与实现
- 10.4.3 关联类的关系数据模型
- 10.5 关系数据的MongoDB数据建模[2]
- 10.5.1 基于文档的数据库MongoDB
- 10.5.2 一对多关系建模的三种基础方案
- 10.5.3 几种反范式设计方法
- 10.5.4 MongoDB数据建模总结
- 10.6 软件业务概念的原型
- 本章练习
- 第11章 从需求分析向软件设计的过渡
- 11.1 敏捷统一过程
- 11.1.1 瀑布模型
- 11.1.2 统一过程
- 11.1.3 敏捷统一过程的计划阶段
- 11.1.4 敏捷统一过程的增量阶段
- 11.2 对象交互建模
- 11.2.1 对象交互建模的基本步骤
- 11.2.2 找出关键步骤进行剧情描述
- 11.2.3 将剧情描述转换成剧情描述表
- 11.2.4 将剧情描述表转换成时序图
- 11.2.5 从分析时序图到设计时序图
- 11.2.6 完整的“借书”用例对象交互建模
- 11.3 形成软件设计方案
- 11.3.1 设计类图和分析类图
- 11.3.2 形成设计类图的基本步骤
- 11.3.3 形成软件设计方案的整体思路
- 本章练习
- 第四篇 软件科学基础概论
- 第12章 软件是什么
- 12.1 软件的基本构成元素
- 12.1.1 对象
- 12.1.2 函数和变量/常量
- 12.1.3 指令和操作数
- 12.1.4 0和1是什么
- 12.2 软件的基本结构
- 12.2.1 顺序结构
- 12.2.2 分支结构
- 12.2.3 循环结构
- 12.2.4 函数调用框架
- 12.2.5 继承和对象组合
- 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.4.4 难以达成的概念完整性和一致性
- 本章练习
- 第13章 软件设计模式
- 13.1 什么是设计模式
- 13.1.1 软件设计模式的优点
- 13.1.2 软件设计模式的含义和构成
- 13.2 软件设计模式的分类
- 13.3 常用的软件设计模式
- 13.4 观察者模式举例
- 13.5 软件设计模式背后的设计原则
- 13.5.1 开闭原则
- 13.5.2 丽斯科夫替换原则
- 13.5.3 依赖倒置原则
- 13.5.4 单一职责原则
- 13.5.5 德米特法则
- 13.5.6 合成复用原则
- 13.5.7 反思软件设计模式的根基
- 本章练习
- 第14章 软件架构举例
- 14.1 三层架构
- 14.2 MVC架构
- 14.2.1 什么是MVC
- 14.2.2 MVC模式
- 14.2.3 MVC架构
- 14.3 MVVM架构
- 14.3.1 什么是MVVM
- 14.3.2 Vue.js的基本用法
- 14.3.3 Vue.js背后的MVVM
- 本章练习
- 第15章 软件架构风格与描述方法
- 15.1 构建软件架构的基本方法
- 15.2 软件架构风格与策略
- 15.2.1 管道-过滤器
- 15.2.2 客户-服务器
- 15.2.3 P2P
- 15.2.4 发布/订阅
- 15.2.5 CRUD
- 15.2.6 层次化
- 15.3 软件架构的描述方法
- 15.3.1 分解视图
- 15.3.2 依赖视图
- 15.3.3 泛化视图
- 15.3.4 执行视图
- 15.3.5 实现视图
- 15.3.6 部署视图
- 15.3.7 工作分配视图
- 本章练习
- 第16章 什么是高质量软件
- 16.1 软件质量的3种视角
- 16.1.1 软件质量的含义
- 16.1.2 产品视角下的软件质量
- 16.1.3 过程视角下的软件质量
- 16.1.4 价值视角下的软件质量
- 16.2 几种重要的软件质量属性
- 16.2.1 易于修改维护
- 16.2.2 良好的性能表现
- 16.2.3 安全性
- 16.2.4 可靠性
- 16.2.5 健壮性
- 16.2.6 易用性
- 16.2.7 商业目标
- 本章练习
- 第五篇 软件危机的前生后世
- 第17章 软件危机概述
- 17.1 软件危机产生的背景
- 17.2 软件危机的主要表现及根源
- 17.3 有关软件危机的争论
- 本章练习
- 第18章 软件过程模型
- 18.1 软件的生命周期概述
- 18.2 瀑布模型
- 18.3 原型化的瀑布模型
- 18.4 V模型
- 18.5 分阶段的增量和迭代开发过程
- 18.6 螺旋模型
- 本章练习
- 第19章 PSP和TSP
- 19.1 个体和团队
- 19.2 个体软件过程
- 19.2.1 PSP 0
- 19.2.2 PSP 0.1
- 19.2.3 PSP 1
- 19.2.4 PSP 1.1
- 19.2.5 PSP 2
- 19.2.6 PSP 2.1
- 19.2.7 PSP 3
- 19.3 团队软件过程
- 19.3.1 团队概述
- 19.3.2 TSP概述
- 19.3.3 TSP的基本原理
- 19.3.4 TSP的基本工作方法
- 本章练习
- 第20章 CMM/CMMI
- 20.1 CMM/CMMI简介
- 20.2 CMM/CMMI的作用
- 20.3 CMM/CMMI的主要内容
- 20.4 CMMI的评估过程
- 本章练习
- 第21章 敏捷方法
- 21.1 敏捷方法产生的背景
- 21.2 敏捷软件开发宣言及所遵循的原则
- 21.3 Scrum敏捷开发方法[1]
- 本章练习
- 第22章 DevOps
- 22.1 什么是DevOps
- 22.2 DevOps和敏捷方法
- 22.3 DevOps和精益原则
- 22.4 DevOps和全栈自动化
- 本章练习
- 测验题
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。