编程卓越之道(卷3):软件工程化

0
(0)

编程卓越之道(卷3):软件工程化

作者:RandallHyde

出版社:电子工业出版社

译者:张若飞

出版年:2022-9

页数:388

定价:128

ISBN:9787121439933

内容简介
······

《编程卓越之道(卷3):软件工程化》深入介绍了从开发方法、生产力到面向对象的设计需求和系统文档的方方面面。通过本书,你将学习到:为什么遵循软件匠艺模型可以让你做到最好;如何利用可追溯性来加强文档的一致性;如何通过用例分析来创建自己的UML需求;如何利用IEEE文档标准开发出更好的软件。

通过对高质量软件开发中技能、态度和道德方面的深入讲解,本书揭示了如何将工程原理应用于编程的正确方法。在这个过程中,Hyde不仅会教给你规则,还会告诉你什么时候该打破规则。他不仅会启发你认识什么是最佳实践,同时还会让你发现适合自己的最佳实践。

作者简介
······

Randall Hyde是The Art of Assembly Language(《汇编语言的编程艺术》)和Write Great Code(《编程卓越之道》)第1~3卷(均由No Starch Press出版),以及Using 6502 Assembly Language和P-Source(由Datamost出版)的作者。他也是Microsoft Macro Assembler 6.0 Bible(由Waite Group出版)一书的合著者。在过去的40年里,Hyde一直从事嵌入式软件/硬件工程师的工作,为核反应堆、交通控制系统和其他电子设备开发相关指令集。他还在加州理工大学波莫纳分校和加州大学河滨分校教授计算机科学课程。

目录
······

第 1 部分 个人软件工程

1 软件开发的比喻 ……………………………………………………………………………………. 2

1.1 什么是软件 ……………………………………………………………………………………………. 2

1.1.1 软件不是被制造出来的 ………………………………………………………………… 3

1.1.2 软件不会磨损 ………………………………………………………………………………. 3

1.1.3 大多数软件都是定制化的 …………………………………………………………….. 3

1.1.4 软件可以很容易升级 ……………………………………………………………………. 4

1.1.5 软件不是一个独立的实体 …………………………………………………………….. 4

1.2 与其他领域的相似性 ………………………………………………………………………………. 4

1.2.1 程序员像艺术家一样 ……………………………………………………………………. 4

1.2.2 程序员像建筑师一样 ……………………………………………………………………. 5

1.2.3 程序员像工程师一样 ……………………………………………………………………. 6

1.2.4 程序员像工匠一样 ……………………………………………………………………….. 7

1.2.5 究竟是艺术家、建筑师、工程师还是工匠 ……………………………………. 7

1.3 软件工程 ……………………………………………………………………………………………….. 8

1.3.1 一个正式的定义 …………………………………………………………………………… 9

1.3.2 项目规模 ……………………………………………………………………………………. 10

1.3.3 软件工程的问题 …………………………………………………………………………. 12

1.4 软件匠艺 ……………………………………………………………………………………………… 13

1.4.1 教育 …………………………………………………………………………………………… 13

1.4.2 学徒阶段 ……………………………………………………………………………………. 14

1.4.3 软件熟练工 ………………………………………………………………………………… 15

1.4.4 大师级工匠 ………………………………………………………………………………… 15

1.4.5 软件匠艺的不足 …………………………………………………………………………. 16

1.5 通往卓越编程的道路 …………………………………………………………………………….. 16

1.6 获取更多信息 ………………………………………………………………………………………. 17

2 生产力 ………………………………………………………………………………………………. 18

2.1 什么是生产力 ………………………………………………………………………………………. 18

2.2 程序员生产力与团队生产力的比较 ……………………………………………………….. 19

2.3 工时和实际时间 …………………………………………………………………………………… 20

2.4 概念复杂性和范围复杂性 ……………………………………………………………………… 21

2.5 预测生产力 ………………………………………………………………………………………….. 22

2.6 度量指标,以及我们为什么需要它们 ……………………………………………………. 23

2.6.1 可执行文件大小度量指标 …………………………………………………………… 24

2.6.2 机器指令度量指标 ……………………………………………………………………… 24

2.6.3 代码行数度量指标 ……………………………………………………………………… 25

2.6.4 语句数量度量指标 ……………………………………………………………………… 25

2.6.5 功能点分析 ………………………………………………………………………………… 26

2.6.6 McCabe 圈复杂度度量指标 …………………………………………………………. 26

2.6.7 其他度量指标 …………………………………………………………………………….. 27

2.6.8 度量指标的问题 …………………………………………………………………………. 28

2.7 我们怎样才能每天写出 10 行代码 …………………………………………………………. 29

2.8 估计开发时间 ………………………………………………………………………………………. 30

2.8.1 估计小型项目的开发时间 …………………………………………………………… 30

2.8.2 估计中型项目和大型项目的开发时间 …………………………………………. 31

2.8.3 估计开发时间的问题 ………………………………………………………………….. 32

2.9 危机模式项目管理………………………………………………………………………………… 33

2.10 如何提高工作效率 ………………………………………………………………………………. 34

2.10.1 合理选择软件开发工具 …………………………………………………………….. 34

2.10.2 管理开销 ………………………………………………………………………………….. 36

2.10.3 设置明确的目标和里程碑 …………………………………………………………. 37

2.10.4 练习自我激励 …………………………………………………………………………… 37

2.10.5 集中注意力,消除干扰 …………………………………………………………….. 38

2.10.6 如果你觉得无聊,那么就做点别的事情 ……………………………………. 39

2.10.7 尽可能自立 ………………………………………………………………………………. 39

2.10.8 识别何时需要帮助 ……………………………………………………………………. 40

2.10.9 克服士气低落 …………………………………………………………………………… 40

2.11 获取更多信息 ……………………………………………………………………………………… 41

3 软件开发模型……………………………………………………………………………………… 42

3.1 软件开发生命周期………………………………………………………………………………… 42

3.2 软件开发模型 ………………………………………………………………………………………. 45

3.2.1 非正式模型 ………………………………………………………………………………… 46

3.2.2 瀑布模型 ……………………………………………………………………………………. 47

3.2.3 V 模型 ……………………………………………………………………………………….. 49

3.2.4 迭代模型 ……………………………………………………………………………………. 50

3.2.5 螺旋模型 ……………………………………………………………………………………. 52

3.2.6 快速应用程序开发模型 ………………………………………………………………. 54

3.2.7 增量模型 ……………………………………………………………………………………. 56

3.3 软件开发方法论 …………………………………………………………………………………… 57

3.3.1 传统的(预测型)方法论 …………………………………………………………… 57

3.3.2 自适应型方法论 …………………………………………………………………………. 57

3.3.3 敏捷开发 ……………………………………………………………………………………. 58

3.3.4 极限编程 ……………………………………………………………………………………. 60

3.3.5 Scrum …………………………………………………………………………………………. 73

3.3.6 功能驱动开发 …………………………………………………………………………….. 74

3.4 卓越程序员的模型和方法论 ………………………………………………………………….. 77

3.5 获取更多信息 ………………………………………………………………………………………. 77

第 2 部分 UML

4 UML 和用例介绍 …………………………………………………………………………………. 80

4.1 UML 标准 …………………………………………………………………………………………….. 80

4.2 UML 用例模型 ……………………………………………………………………………………… 81

4.2.1 用例图的元素 …………………………………………………………………………….. 81

4.2.2 用例包 ……………………………………………………………………………………….. 84

4.2.3 用例包含 ……………………………………………………………………………………. 84

4.2.4 用例泛化 ……………………………………………………………………………………. 85

4.2.5 用例扩展 ……………………………………………………………………………………. 87

4.2.6 用例故事 ……………………………………………………………………………………. 88

4.2.7 用例场景 ……………………………………………………………………………………. 95

4.3 UML 系统边界图 ………………………………………………………………………………….. 97

4.4 除用例以外 ………………………………………………………………………………………….. 97

4.5 获取更多信息 ………………………………………………………………………………………. 98

5 UML 活动图 ……………………………………………………………………………………….. 99

5.1 UML 活动状态符号 ………………………………………………………………………………. 99

5.1.1 开始和结束状态 ……………………………………………………………………….. 100

5.1.2 活动 …………………………………………………………………………………………. 100

5.1.3 状态 …………………………………………………………………………………………. 101

5.1.4 转移 …………………………………………………………………………………………. 101

5.1.5 条件 …………………………………………………………………………………………. 102

5.1.6 合并点 ……………………………………………………………………………………… 104

5.1.7 事件和触发器 …………………………………………………………………………… 105

5.1.8 分叉和合并(同步) ………………………………………………………………… 107

5.1.9 调用符号 ………………………………………………………………………………….. 108

5.1.10 分区 ……………………………………………………………………………………….. 108

5.1.11 注释和注解 …………………………………………………………………………….. 110

5.1.12 连接器 ……………………………………………………………………………………. 110

5.1.13 其他活动图符号 ……………………………………………………………………… 111

5.2 扩展 UML 活动图 ……………………………………………………………………………….. 111

5.3 获取更多信息 …………………………………………………………………………………….. 113

6 UML 类图 ………………………………………………………………………………………… 114

6.1 UML 中的面向对象分析与设计 …………………………………………………………… 114

6.2 类图中的可见性 …………………………………………………………………………………. 116

6.2.1 公共的类可见性 ……………………………………………………………………….. 116

6.2.2 私有的类可见性 ……………………………………………………………………….. 117

6.2.3 受保护的类可见性 ……………………………………………………………………. 118

6.2.4 包级别的类可见性 ……………………………………………………………………. 118

6.2.5 不支持的可见性类型 ………………………………………………………………… 119

6.3 类属性 ……………………………………………………………………………………………….. 120

6.3.1 属性可见性 ………………………………………………………………………………. 120

6.3.2 属性派生值 ………………………………………………………………………………. 120

6.3.3 属性名称 ………………………………………………………………………………….. 121

6.3.4 属性数据类型 …………………………………………………………………………… 122

6.3.5 操作数据类型(返回值) …………………………………………………………. 122

6.3.6 属性多重性 ………………………………………………………………………………. 123

6.3.7 属性初始值 ………………………………………………………………………………. 123

6.3.8 属性字符串 ………………………………………………………………………………. 124

6.3.9 属性语法 ………………………………………………………………………………….. 124

6.4 类操作 ……………………………………………………………………………………………….. 125

6.5 UML 的类关系 ……………………………………………………………………………………. 126

6.5.1 类的依赖关系 …………………………………………………………………………… 127

6.5.2 类的关联关系 …………………………………………………………………………… 127

6.5.3 类的聚合关系 …………………………………………………………………………… 129

6.5.4 类的组合关系 …………………………………………………………………………… 130

6.5.5 关系特性 ………………………………………………………………………………….. 131

6.5.6 类的继承关系 …………………………………………………………………………… 140

6.6 对象 …………………………………………………………………………………………………… 140

6.7 获取更多信息 …………………………………………………………………………………….. 141

7 UML 交互图 ……………………………………………………………………………………… 142

7.1 时序图 ……………………………………………………………………………………………….. 142

7.1.1 生命线 ……………………………………………………………………………………… 143

7.1.2 消息类型 ………………………………………………………………………………….. 143

7.1.3 消息标签 ………………………………………………………………………………….. 145

7.1.4 消息序号 ………………………………………………………………………………….. 145

7.1.5 守卫条件 ………………………………………………………………………………….. 146

7.1.6 迭代 …………………………………………………………………………………………. 147

7.1.7 长延迟和时间约束 ……………………………………………………………………. 148

7.1.8 外部对象 ………………………………………………………………………………….. 149

7.1.9 激活条 ……………………………………………………………………………………… 150

7.1.10 分支 ……………………………………………………………………………………….. 150

7.1.11 可选流 ……………………………………………………………………………………. 152

7.1.12 对象的创建和销毁 ………………………………………………………………….. 153

7.1.13 时序片段 ………………………………………………………………………………… 154

7.2 协作图 ……………………………………………………………………………………………….. 173

7.3 获取更多信息 …………………………………………………………………………………….. 174

8 其他 UML 图 …………………………………………………………………………………….. 175

8.1 组件图 ……………………………………………………………………………………………….. 175

8.2 包图 …………………………………………………………………………………………………… 178

8.3 部署图 ……………………………………………………………………………………………….. 179

8.4 合成结构图 ………………………………………………………………………………………… 181

8.5 状态图 ……………………………………………………………………………………………….. 185

8.6 关于 UML 的更多信息 ………………………………………………………………………… 187

8.7 获取更多信息 …………………………………………………………………………………….. 188

第 3 部分 文档

9 系统文档 ………………………………………………………………………………………….. 190

9.1 系统文档类型 …………………………………………………………………………………….. 191

9.2 可追溯性 ……………………………………………………………………………………………. 193

9.2.1 建立文档可追溯性的方法 …………………………………………………………. 193

9.2.2 标签格式 ………………………………………………………………………………….. 194

9.2.3 需求/反向可追溯性矩阵 ……………………………………………………………. 200

9.3 确认、验证和审查………………………………………………………………………………. 204

9.4 通过文档降低开发成本 ……………………………………………………………………….. 205

9.4.1 通过确认降低成本 ……………………………………………………………………. 205

9.4.2 通过验证降低成本 ……………………………………………………………………. 206

9.5 获取更多信息 …………………………………………………………………………………….. 207

10 需求文档 ………………………………………………………………………………………… 209

10.1 需求的来源和可追溯性 ……………………………………………………………………… 209

10.1.1 建议的需求格式 ……………………………………………………………………… 210

10.1.2 好需求的特点 …………………………………………………………………………. 211

10.2 设计目标 ………………………………………………………………………………………….. 218

10.3 系统需求规范文档 …………………………………………………………………………….. 218

10.4 软件需求规范文档 …………………………………………………………………………….. 219

10.4.1 介绍 ……………………………………………………………………………………….. 221

10.4.2 总体描述 ………………………………………………………………………………… 222

10.4.3 具体需求 ………………………………………………………………………………… 224

10.4.4 支持信息 ………………………………………………………………………………… 229

10.4.5 软件需求规范示例 ………………………………………………………………….. 230

10.5 创建需求 ………………………………………………………………………………………….. 240

10.6 用例 …………………………………………………………………………………………………. 242

10.6.1 启用/禁用调试模式 …………………………………………………………………. 244

10.6.2 启用/禁用以太网 …………………………………………………………………….. 244

10.6.3 启用/禁用 RS-232 ……………………………………………………………………. 246

10.6.4 启用/禁用测试模式 …………………………………………………………………. 246

10.6.5 启用/禁用 USB ……………………………………………………………………….. 246

10.6.6 读取拨码开关 …………………………………………………………………………. 247

10.7 根据用例创建 DAQ 软件需求 ……………………………………………………………. 247

10.8 (从 SRS 中选择的)DAQ 软件需求 …………………………………………………. 248

10.9 用需求信息更新可追溯性矩阵 …………………………………………………………… 252

10.9.1 通过审查验证的需求 ………………………………………………………………. 253

10.9.2 通过测试验证的需求 ………………………………………………………………. 255

10.10 获取更多信息 …………………………………………………………………………………. 255

11 软件设计描述文档 ……………………………………………………………………………. 256

11.1 IEEE Std 1016-1998 和 IEEE Std 1016-2009 ………………………………………… 257

11.2 IEEE 1016-2009 的概念模型 ………………………………………………………………. 257

11.2.1 设计关注点和设计利益相关方 ………………………………………………… 257

11.2.2 设计观点和设计元素 ………………………………………………………………. 258

11.2.3 设计视图、设计覆盖和设计原理 …………………………………………….. 270

11.2.4 IEEE Std 1016-2009 的概念模型 ………………………………………………. 273

11.3 SDD 所需内容 …………………………………………………………………………………… 275

11.3.1 SDD 标识 ……………………………………………………………………………….. 275

11.3.2 设计利益相关方和设计关注点 ………………………………………………… 276

11.3.3 设计视图、设计观点、设计覆盖和设计原理 ……………………………. 276

11.4 SDD 的可追溯性和标签 …………………………………………………………………….. 276

11.5 建议的 SDD 大纲 ………………………………………………………………………………. 277

11.6 SDD 文档示例 …………………………………………………………………………………… 278

11.7 用设计信息更新可追溯性矩阵 …………………………………………………………… 293

11.8 创建软件设计 ……………………………………………………………………………………. 293

11.9 获取更多信息 ……………………………………………………………………………………… 294

12 软件测试文档 ………………………………………………………………………………….. 295

12.1 Std 829 中的软件测试文档 ………………………………………………………………… 295

12.1.1 流程支持 ………………………………………………………………………………… 296

12.1.2 完整性级别和风险评估 …………………………………………………………… 297

12.1.3 软件开发测试级别 ………………………………………………………………….. 299

12.2 测试计划 ………………………………………………………………………………………….. 300

12.2.1 主测试计划 …………………………………………………………………………….. 300

12.2.2 级别测试计划 …………………………………………………………………………. 302

12.2.3 级别测试设计文档 ………………………………………………………………….. 304

12.3 软件审查列表文档 …………………………………………………………………………….. 305

12.3.1 SRL 大纲示例 …………………………………………………………………………. 306

12.3.2 SRL 文档示例 …………………………………………………………………………. 306

12.3.3 将 SRL 项添加到可追溯性矩阵中 ……………………………………………. 310

12.4 软件测试用例文档 …………………………………………………………………………….. 310

12.4.1 STC 文档中的介绍 ………………………………………………………………….. 313

12.4.2 详细说明 ………………………………………………………………………………… 314

12.4.3 其他 ……………………………………………………………………………………….. 317

12.4.4 软件测试用例文档示例 …………………………………………………………… 318

12.4.5 用 STC 信息更新 RTM 文档…………………………………………………….. 327

12.5 软件测试过程文档 …………………………………………………………………………….. 327

12.5.1 IEEE Std 829-2009 软件测试过程 …………………………………………….. 329

12.5.2 软件测试过程的大纲扩展 ……………………………………………………….. 329

12.5.3 STP 文档中的介绍 ………………………………………………………………….. 332

12.5.4 测试过程 ………………………………………………………………………………… 334

12.5.5 其他 ……………………………………………………………………………………….. 337

12.5.6 索引 ……………………………………………………………………………………….. 337

12.5.7 STP 文档示例 …………………………………………………………………………. 338

12.5.8 用 STP 信息更新 RTM 文档 …………………………………………………….. 344

12.6 级别测试日志 …………………………………………………………………………………… 345

12.6.1 级别测试日志文档中的介绍 ……………………………………………………. 346

12.6.2 详细说明 ………………………………………………………………………………… 346

12.6.3 术语表 ……………………………………………………………………………………. 347

12.6.4 关于测试日志的一些注释 ……………………………………………………….. 347

12.7 异常报告 ………………………………………………………………………………………….. 351

12.7.1 异常报告文档中的介绍 …………………………………………………………… 352

12.7.2 详细说明 ………………………………………………………………………………… 353

12.7.3 对异常报告的几点建议 …………………………………………………………… 354

12.8 测试报告 ………………………………………………………………………………………….. 355

12.8.1 主测试报告的简要介绍 …………………………………………………………… 356

12.8.2 级别测试报告 …………………………………………………………………………. 357

12.9 你真的需要这些吗 …………………………………………………………………………….. 358

12.10 获取更多信息 …………………………………………………………………………………. 359

后记:如何设计卓越的代码……………………………………………………………………… 360

评论 ······

第一次看到这么有趣的软工发展史,知道了过去几十年软件行业究竟怎么了、怎么办、怎么救、怎么改……现在大家都在用的UML如何问世,文档又怎么组织大家盖起巴别塔,以及那一个个短暂又辉煌的开发模型。

软工的书辣么多,我推荐这本书主要是因为它更有人味儿。有些书太反人性,说得都对,但很难落实,尤其是小公司,没有足够任何和时间来监督和复验,看过只能大呼NB,然后回到日常。之所以不端着,是因为作者干的事情比较咋,甚至搞过核反应堆,既不缺乏丰富的工程实践,也能了解不同行业、企业和团队的复杂文化和人性,同时他又在南加州大学教授计算机科学教程,善于化繁为简、深入浅出。实践、变NB、名校任教、写书拯救自己的行…

快读完了。只能说工程化思想总是和我们不太相融。是企业文化吗?可似乎在工业产业里,项目工程化并没有太大的差距?是民族性吗?润出去的同学好像也并没有明显不适。那可能是企业的重视程度和制度化不够。这是现实瓶颈,更是未来隐患。这方面,老外总结得的确是好,个体先用来潜移默化的影响自己吧……

毕竟很多人没有机会参加大项目,很长一段时间都在拧螺丝。学生党更是螺丝都没得玩,只能写写伪代码。而软件开发终究会走向复杂和大型化,这就是我们要多度《编程卓越之道》这种书的原因,从书里找同伴,从书里长见识,从书里看世界,从书里领略一个软件的完整生命周期。

点击星号评分!

平均分 0 / 5. 投票数: 0

还没有投票!请为他投一票。

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册