• 代码中的软件工程
21年品牌 40万+商家 超1.5亿件商品

代码中的软件工程

正版保障 假一赔十 可开发票

53.86 6.0折 89.9 全新

库存15件

广东广州
认证卖家担保交易快速发货售后保障

作者孟宁

出版社人民邮电出版社

ISBN9787115578501

出版时间2021-07

装帧平装

开本16开

定价89.9元

货号11595566

上书时间2024-09-02

灵感书店

三年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介

孟宁 中国科学技术大学软件学院专职教师,主讲“不错软件工程”“ Linux操作系统分析”等课程。 他讲授的两门慕课获评国家精品在开放课程和本科课程,入选华为“智能基座”精品慕课,被中国高校计算机教育MOOC联盟评为很好课程,荣获安徽省教学成果奖二等奖,等等。在线课程视频在读行学、网易云课堂、学堂在线、B站等在线平台的累计学员达20余万人。 他专注于 Linux操作系统、软件工程、人工智能和区块链等技术领域,与华为、OPPO、龙芯中科等多家国内外企业和创业公司有技术合作。



目录

第 一篇 工欲善其事,必先利其器 第 1 章 编程“利器”Visual Studio Code 2 1.1 Visual Studio Code 的安装和基本用法 2 1.1.1 下载和安装Visual Studio Code 2 1.1.2 VS Code 界面概览 2 1.1.3 VS Code 的基本配置 3 1.1.4 VS Code 的基本用法 3 1.2 VS Code 为什么能这么牛 4 1.2.1 简洁而聚焦的产品定位贯穿始终 4 1.2.2 进程隔离的插件模型是“定海神针” 5 1.2.3 代码理解和调试——LSP 和DAP 两大协议“厥功至伟” 6 1.2.4 集大成的VS Code 远程开发环境 8 1.3 基于VS Code 的C/C++开发调试环境配置 9 1.3.1 安装C/C++插件 9 1.3.2 安装C/C++编译器和调试器 10 1.3.3 配置Visual Studio Code 构建任务 11 1.3.4 配置Visual Studio Code 调试环境 12 1.4 VS Code 远程开发环境配置 13 1.4.1 VS Code 远程开发环境概述 13 1.4.2 VS Code 远程开发环境Remote-SSH 配置 15 1.4.3 VS Code 远程开发环境Web Remote-code-server 配置 20 本章练习 21 第 2 章 五大场景玩转Git 22 2.1 Git 分布式版本控制系统 22 2.1.1 版本控制概述 22 2.1.2 Git 的历史 22 2.1.3 Git 的基本操作 23 2.2 场景一:Git 本地版本库的基本用法 25 2.2.1 安装Git 25 2.2.2 初始化一个本地版本库 25 2.2.3 查看当前工作区的状态 26 2.2.4 暂存更改的文件 27 2.2.5 把暂存区里的文件提交到仓库 28 2.2.6 Git 本地版本库的基本用法参考 30 2.3 场景二:Git 远程版本库的基本用法 31 2.3.1 克隆远程版本库 31 2.3.2 远程版本库的基本命令简介 31 2.3.3 Git 远程版本库的基本用法参考 32 2.4 Git 背后的设计理念 34 2.5 场景三:团队项目中的分叉合并 36 2.5.1 团队项目的一个参考工作流程 36 2.5.2 分支的基本用法 36 2.5.3 团队项目工作流程参考 39 2.6 场景四:Git Rebase 整理提交记录 40 2.7 场景五:Fork + Pull request 开发工作流程 43 本章练习 46 第3 章 正则表达式十步通关 48 3.1 为什么使用正则表达式 48 3.2 第 一关:基本的字符串搜索方法 49 3.3 第二关:同时搜索多个字符串的方法 50 3.4 第三关:在匹配字符串时的大小写问题 50 3.5 第四关:通配符的基本用法 51 3.6 第五关:匹配具有多种可能性的字符集 52 3.7 第六关:贪婪匹配和懒惰匹配 53 3.8 第七关:一些特殊位置和特殊字符 53 3.9 第八关:使用捕获组复用模式 54 3.10 第九关:基本的字符串搜索替换方法 54 3.11 第十关:在替换中使用捕获组复用模式 55 本章练习 56 第二篇 工程化编程实战 第4 章 简约而不简单——代码规范和代码风格 58 4.1 实验项目介绍 58 4.2 代码风格的原则:简明、易读、无二义性 61 4.3 编写高质量代码的基本方法 66 4.3.1 通过控制结构简化代码 66 4.3.2 通过数据结构简化代码 67 4.3.3 一定要有错误处理 68 4.3.4 性能优先策略背后隐藏的代价 68 4.3.5 拒绝修修补补,要不断重构代码 69 4.3.6 编码过程中的团队合作 69 本章练习 69 第5 章 模块化软件设计 71 5.1 模块化思想背后的基本原理 71 5.2 模块化代码的基本写法举例 72 5.3 传统单体集中式架构与微服务架构 78 5.4 模块化软件设计中的基本方法 80 5.4.1 KISS 原则 80 5.4.2 使用本地化外部接口来提高代码的适应能力 80 5.4.3 保持设计结构和代码结构的一致性 81 本章练习 81 第6 章 可复用软件设计 83 6.1 消费者复用和生产者复用 83 6.2 接口的基本概念 83 6.2.1 软件模块接口举例 84 6.2.2 微服务接口举例 86 6.2.3 接口与耦合度之间的关系 88 6.2.4 同步接口和异步接口 88 6.3 可复用软件模块的接口设计示例 89 6.3.1 通用LinkTable 模块的接口设计 89 6.3.2 给LinkTable 增加Callback 方式的接口 95 6.3.3 进一步改进LinkTable 的Callback 方式的接口 97 6.4 通用接口定义的基本方法 99 6.4.1 参数化上下文 99 6.4.2 移除前置条件 99 6.4.3 简化后置条件 100 本章练习 100 第7 章 可重入函数与线程安全 103 7.1 线程的基本概念 103 7.2 函数调用堆栈 103 7.3 可重入函数 105 7.4 什么是线程安全 106 7.5 LinkTable 软件模块的线程安全分析 108 本章练习 112 第8 章 子系统的工程化 113 8.1 menu 子系统的可复用接口设计 113 8.2 Makefile 工程文件举例 116 8.3 带参数的复杂命令函数接口的写法 117 8.4 看待软件质量的几个不同角度 118 8.5 编程的基本方法和原则 119 本章练习 120 第三篇 需求分析和软件设计 第9 章 获取需求的主要方法 122 9.1 什么是需求 122 9.2 为什么需求很好重要 122 9.3 有哪些类型的需求 123 9.4 有哪些和需求相关的人员 123 9.5 获取需求的主要方法 124 9.6 高质量的需求是什么样子 124 9.6.1 便于验证的需求是高质量的 124 9.6.2 解决了内在冲突的需求是高质量的 124 9.6.3 高质量需求的典型特征 125 9.7 绘图工具VS Code 和draw.io 125 9.7.1 在线绘图工具draw.io 125 9.7.2 安装draw.io 插件 126 9.7.3 快速入门VS Code+draw.io 画图 127 本章练习 130 第 10 章 对需求进行分析和建模 131 10.1 原型化方法和建模的方法 131 10.2 用例建模 131 10.2.1 什么是用例 131 10.2.2 用例的三个抽象层级 132 10.2.3 用例建模的基本步骤 133 10.2.4 准确提取用例的基本方法 134 10.2.5 用例图的基本画法 135 10.3 业务领域建模 136 10.3.1 面向对象分析涉及的基本概念 136 10.3.2 业务领域建模的基本步骤 137 10.3.3 头脑风暴的具体做法 138 10.3.4 业务领域概念分类的方法 139 10.4 关联类及其关系数据模型 140 10.4.1 关联类的基本概念及其UML 类图 140 10.4.2 关联类的面向对象设计与实现 141 10.4.3 关联类的关系数据模型 142 10.5 关系数据的MongoDB 数据建模 143 10.5.1 基于文档的数据库MongoDB 143 10.5.2 一对多关系建模的三种基础方案 144 10.5.3 几种反范式设计方法 147 10.5.4 MongoDB 数据建模总结 150 10.6 软件业务概念的原型 150 本章练习 151 第 11 章 从需求分析向软件设计的过渡 153 11.1 敏捷统一过程 153 11.1.1 瀑布模型 153 11.1.2 统一过程 153 11.1.3 敏捷统一过程的计划阶段 154 11.1.4 敏捷统一过程的增量阶段 154 11.2 对象交互建模 155 11.2.1 对象交互建模的基本步骤 155 11.2.2 找出关键步骤进行剧情描述 156 11.2.3 将剧情描述转换成剧情描述表 158 11.2.4 将剧情描述表转换成时序图 158 11.2.5 从分析时序图到设计时序图 161 11.2.6 完整的“借书”用例对象交互建模 163 11.3 形成软件设计方案 164 11.3.1 设计类图和分析类图 164 11.3.2 形成设计类图的基本步骤 165 11.3.3 形成软件设计方案的整体思路 169 本章练习 170 第四篇 软件科学基础概论 第 12 章 软件是什么 172 12.1 软件的基本构成元素 172 12.1.1 对象 172 12.1.2 函数和变量/常量 172 12.1.3 指令和操作数 173 12.1.4 0 和1 是什么 174 12.2 软件的基本结构 176 12.2.1 顺序结构 176 12.2.2 分支结构 176 12.2.3 循环结构 178 12.2.4 函数调用框架 179 12.2.5 继承和对象组合 180 12.3 软件中的一些特殊机制 181 12.3.1 回调函数 181 12.3.2 多态 182 12.3.3 闭包 183 12.3.4 异步调用 184 12.3.5 匿名函数 185 12.4 软件的内在特性 186 12.4.1 靠前的复杂度 186 12.4.2 抽象思维和逻辑思维 186 12.4.3 专享不变的就是变化本身 187 12.4.4 难以达成的概念完整性和一致性 188 本章练习 188 第 13 章 软件设计模式 190 13.1 什么是设计模式 190 13.1.1 软件设计模式的优点 190 13.1.2 软件设计模式的含义和构成 191 13.2 软件设计模式的分类 191 13.3 常用的软件设计模式 192 13.4 观察者模式举例 196 13.5 软件设计模式背后的设计原则 200 13.5.1 开闭原则 200 13.5.2 丽斯科夫替换原则 200 13.5.3 依赖倒置原则 200 13.5.4 单一职责原则 201 13.5.5 德米特法则 201 13.5.6 合成复用原则 201 13.5.7 反思软件设计模式的根基 202 本章练习 202 第 14 章 软件架构举例 204 14.1 三层架构 204 14.2 MVC 架构 204 14.2.1 什么是MVC 204 14.2.2 MVC 模式 205 14.2.3 MVC 架构 207 14.3 MVVM 架构 208 14.3.1 什么是MVVM 208 14.3.2 Vue.js 的基本用法 209 14.3.3 Vue.js 背后的MVVM 211 本章练习 216 第 15 章 软件架构风格与描述方法 217 15.1 构建软件架构的基本方法 217 15.2 软件架构风格与策略 218 15.2.1 管道-过滤器 218 15.2.2 客户-服务器 219 15.2.3 P2P 219 15.2.4 发布/订阅 219 15.2.5 CRUD 220 15.2.6 层次化 221 15.3 软件架构的描述方法 221 15.3.1 分解视图 221 15.3.2 依赖视图 222 15.3.3 泛化视图 222 15.3.4 执行视图 223 15.3.5 实现视图 223 15.3.6 部署视图 223 15.3.7 工作分配视图 223 本章练习 224 第 16 章 什么是高质量软件 225 16.1 软件质量的3 种视角 225 16.1.1 软件质量的含义 225 16.1.2 产品视角下的软件质量 225 16.1.3 过程视角下的软件质量 228 16.1.4 价值视角下的软件质量 229 16.2 几种重要的软件质量属性 230 16.2.1 易于修改维护 230 16.2.2 良好的性能表现 231 16.2.3 安全性 231 16.2.4 可靠性 231 16.2.5 健壮性 232 16.2.6 易用性 232 16.2.7 商业目标 232 本章练习 234 第五篇 软件危机的前生后世 第 17 章 软件危机概述 236 17.1 软件危机产生的背景 236 17.2 软件危机的主要表现及根源 237 17.3 有关软件危机的争论 238 本章练习 239 第 18 章 软件过程模型 240 18.1 软件的生命周期概述 240 18.2 瀑布模型 241 18.3 原型化的瀑布模型 242 18.4 V 模型 243 18.5 分阶段的增量和迭代开发过程 243 18.6 螺旋模型 244 本章练习 245 第 19 章 PSP 和TSP 246 19.1 个体和团队 246 19.2 个体软件过程 246 19.2.1 PSP 0 247 19.2.2 PSP 0.1 247 19.2.3 PSP 1 247 19.2.4 PSP 1.1 248 19.2.5 PSP 2 248 19.2.6 PSP 2.1 249 19.2.7 PSP 3 250 19.3 团队软件过程 250 19.3.1 团队概述 250 19.3.2 TSP 概述 251 19.3.3 TSP 的基本原理 251 19.3.4 TSP 的基本工作方法 252 本章练习 253 第 20 章 CMM/CMMI 254 20.1 CMM/CMMI 简介 254 20.2 CMM/CMMI 的作用 255 20.3 CMM/CMMI 的主要内容 256 20.4 CMMI 的评估过程 257 本章练习 257 第 21 章 敏捷方法 258 21.1 敏捷方法产生的背景 258 21.2 敏捷软件开发宣言及所遵循的原则 258 21.3 Scrum 敏捷开发方法 259 本章练习 263 第 22 章 DevOps 265 22.1 什么是DevOps . 265 22.2 DevOps 和敏捷方法 266 22.3 DevOps 和精益原则 266 22.4 DevOps 和全栈自动化 267 本章练习 269 测验题 270



内容摘要
本书共五篇:第一篇介绍常用工具VSCode、Git和正则表达式;第二篇以C语言代码为例介绍工程化编程的基本方法,涵盖代码的风格和规范、模块化、可复用、可重入函数与线程安全等;第三篇介绍从需求分析到软件设计的基本建模方法——从需求分析开始,以UML为工具完成用例建模、业务领域建模、对象交互建模,最终形成设计方案;第四篇探讨软件的元素、结构、特性和描述方法,以及高质量软件的内涵等;第五篇回顾软件危机的前因后果,并将之与PSP、TSP、CMM/CMMI、敏捷开发、DevOps等软件过程和生命周期管理衔接起来。
    本书以国家精品在线开放课程——“工程化编程实战”为核心内容,增加了常用工具、需求分析与建模方法、软件结构和软件过程等相关内容,内容全面、新颖,实践性强。本书主要针对在校学生编写,适合开设相关专业的普通高校和高职院校作为主要教材,也可供不同层次的自学者学习参考。

主编推荐

1.以在线开放课程“工程化编程实战”为核心内容,增加了常用工具、需求分析与建模方法、软件架构和软件过程等相关内容。 2.作者系中国科学技术大学软件学院软件工程10年教学改革的实践者,具有近20年代码编程+12年软件工程教学经验,他的慕课荣获“国家精品在线开放课程”。 3.本书反其道而行之,以“实用”为原则构成全书体系,从写代码的工具着手,逐步深入到模块化设计、需求建模、设计模式和软件架构等内容,章末设有练习环节,并提供可下载的配套源代码文件,让读者在做中学,进而从“程序员”修炼成“软件工程师”。 4. 软件工程领域刘强、朱少民、邹欣、陈振宇倾情推荐!



精彩内容

本书共五篇:第一篇介绍常用工具VS Code、Git 和正则表达式;第二篇以C 语言代码为例介绍工程化编程的基本方法,涵盖代码的风格和规范、模块化、可复用、可重入函数与线程安全等;第三篇介绍从需求分析到软件设计的基本建模方法——从需求分析开始,以UML 为工具完成用例建模、业务领域建模、对象交互建模,最终形成设计方案;第四篇探讨软件的元素、结构、特性和描述方法,以及高质量软件的内涵等;第五篇回顾软件危机的前因后果,并将之与PSP、TSP、CMM/CMMI、敏捷开发、DevOps 等软件过程和生命周期管理衔接起来。 本书以国家精品在线开放课程——“工程化编程实战”为核心内容,增加了常用工具、需求分析与建模方法、软件结构和软件过程等相关内容,内容全面、新颖,实践性强。本书主要针对在校学生编写,适合开设相关专业的普通高校和高职院校作为主要教材,也可供不同层次的自学者学习参考。



媒体评论

这本书显著的特点是用代码诠释工程化开发的基本原理,注重在编程实践中学习软件工程。除此之外,这本书结构编排新颖,没有先谈软件危机、软件过程等软件工程的诸多概念,而是从学生熟悉的工具和代码岀发,逐步深入到模块化设计、需求建模、设计模式和软件架构等内容,显然这样的结构编排对学习者更加友好,让学习曲线更加平滑。 ——刘强,清华大学软件学院副教授 当我看到这本书要“献给软件相关从业者和哲学爱好者!”,想起几年前斯坦福大学教授约翰·奧斯特豪特(John Ousterhout)撰写的 A Phiosophy of Software Design,约翰在他的书中强调复杂度是软件工程的核心。面对复杂性问题,需要分解问题并逐个击破,这正是这本书提到的还原论。这本书打破之前软件工程类图书的惯例,从还原论到系统论,从实践到理论,帮助读者在实践中不断领悟“工程化”,进而从“程序员”修炼成“软件工程师”。 ——朱少民,同济大学特聘教授,《软件测试方法和技术》《敏捷测试:以持续测试促进持续交付》作者 这本书很好接地气,从基本而实用的工具和场景入手,让学生通过实践掌握软件工程的基本原理。这种方法防止了“眼高手低”“从入门到放弃”的现象,希望更多的学校老师采用这样的教学方法! ——邹欣,CSDN副总裁,原微软开发经理,《构建之法:现代软件工程》作者 Talk is cheap, show me the code.(说话很容易,给我看代码。)代码是软件工程核心的部分。这本书以“工程化编程实战”课程为核心,涵盖代码的风格和规范、模块化、可复用、线程安全等,结合常用工具、需求分析与建模方法、软件结构和软件过程等内容,以从实践到理论、从还原论到系统论等不同的角度提岀深入的思考和独到的见解,是一本理论与实践兼备的教材! ——陈振宇,南京大学软件学院教授,南京慕测信息科技有限公司



—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP