关于我们
书单推荐
新书推荐
|
编程卓越之道(卷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一直从事嵌入式软件/硬件工程师的工作,为核反应堆、交通控制系统和其他电子设备开发相关指令集。他还在加州理工大学波莫纳分校和加州大学河滨分校教授计算机科学课程。
张若飞,曾任多家互联网金融公司CTO,在宜人贷、雅虎北研、金山云等知名公司担任架构师。十余年互联网研发及技术管理经验,对搭建海量数据、大型分布式系统有丰富经验。著有十余本技术译著,包括《Grails权威指南》《给大忙人看的JavaSE 8》《代码不朽:编写可维护软件的十大原则》《面向可伸缩架构》《云原生Java》等书,总计400余万字。
第 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 目录 XXI 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 XXII 编程卓越之道(卷 3):软件工程化 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 目录 XXIII 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 XXIV 编程卓越之道(卷 3):软件工程化 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 目录 XXV 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 XXVI 编程卓越之道(卷 3):软件工程化 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 目录 XXVII 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 XXVIII 编程卓越之道(卷 3):软件工程化 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
你还可能感兴趣
我要评论
|