程序员

「修改软件的艺术」 读书笔记

2017-10-20  本文已影响152人  daydaygo

date: 2017-10-13 17:59:11
title: 「修改软件的艺术」 读书笔记

百度脑图 - 修改软件的艺术: http://naotu.baidu.com/file/3300eebf1014c10fd4d1a96ad6cf65ac?token=ff8bec2d896c0c61
图灵社区 - 修改软件的艺术: http://www.ituring.com.cn/book/1749

修改软件的艺术:构建易维护代码的9条最佳实践

将理解具象化
优秀软件是具象化的理解

敏捷 vs 瀑布

遗产 vs 遗留
奏效: 受雇的开发者必须意识到,仅仅言听计从是不够的,他们有义务让交付的软件持续产生价值
开发者有三种状态: 已完成 / 未开始 / 快完事了
评估未知
一个充满外行人的产业
导致低成功率的核心因素: (1) 代码变更 (2) bug修复 (3) 复杂度控制

顺流直下: 瀑布模型是从制造业和建筑行业借鉴而来
需求分析 设计 实现 集成 测试 安装 维护
为什么瀑布模型不管用
虚拟世界并不奏效
让我们建造出来的东西难以改变
开发和测试分离
出错误并非我的工作;创造错误才是
当“流程”变成“体力劳动”
流程无法支配创造力

敏捷: 希望软件能拥有即刻适应需求变化的能力
敏捷 Scrum 极限编程(Extreme Programming,XP)
敏捷流程核心: 通过持续不断地及早交付有价值的软件使客户满意
小即是好
并不是急于求成而是循序渐进
艺术与技能的平衡: 开发软件需要许多的技能和能力,也就是技艺,但是无论学到多少技能都没办法解决所有问题。
追求技术卓越

遵循实践(消毒某一特殊器械的行为)和遵循原则(对所有器械进行消毒的理由)的差别
如果想降低软件持有者的开销,我们必须关注软件的构建过程。
守、破、离
单一职责原则
开闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
原则帮助我们把某件事情通用化,有助于梳理知识体系。
实践必须: 在多数情况下产生价值; 容易学习且容易传授; 简单易行——简单到无需思考。
原则指导实践
压力对于构建更好的产品毫无帮助

要有一个产品负责人

用户故事: 做什么、为什么做、给谁做
为验收测试设立明确标准 / 自动化验收标准

产品负责人的7个策略:

编写出更好用户故事的7个策略:

小批次构建

工作单元应该可以展现出可度量的结果
大小适中,而不仅仅是“小”而已

做出调整

人类无法度量
关键路径的重要性:“怀孕生子需要九个月,无论有多少妇女参与其中。”
范围、时间、资源(scope,time,resource,STR)

控制发布节奏

越小越好有四个基本原因:更容易理解;更容易预估;更容易实现;更容易测试。

分而治之
之所以会很繁重,是因为两个原因:要么是复杂型的,要么是复合型的。
探索未知事物的时候需要做两件事: 未知变为已知,未知进行封装

更短的反馈回路

提高构建速度

对反馈做出响应

建立待办列表
讨论待办列表的顺序而非优先级

把用户故事拆分为任务

跳出时间盒子思考
Scrum并不是一个“全有或全无”的提议。
要么有风险,要么没有风险。当你有风险的时候,则充满未知。未知即是风险。

范围控制
降低风险的唯一方式是把用户故事进行到底,这意味着我们需要对什么是“完成”有明确的定义。
迭代”真正的目的是让团队消除以发布为单位的构建习惯。
看板。

度量软件开发的7个策略:

分割用户故事的7个策略:

持续集成

处理痛苦的方式有两种:避免痛苦,或者学着承受。

建立项目的心跳

实践持续部署

自动化构建

尽早集成,频繁集成
告诉你的开发者每天至少集成一次。
测试驱动开发(Test Driven Development,TDD)

软件应该从第一天起就具备发布条件

构建敏捷设施的7个策略:

消除风险的7个策略:

协作

极限编程
开放性的思想
沟通与协作
结对编程
伙伴编程

穿刺,群战,围攻

在时间盒子中对未知进行调研

定期代码审查和回顾会议

加强学习和知识分享

诲人不倦且不耻下问

结对编程的7个策略:

高效回顾会议的7个策略:

编写整洁的代码

CLEAN: Cohesive 内聚 / Loosely Coupled 松散耦合 / Encapsulated 封装 / Assertive 自主 / Nonredundant 没有冗余

高质量的代码是内聚的
单一的职责。

高质量的代码是封装良好的
由外而内编程 vs 由内而外编程
只暴露解决问题所必需的

高质量的代码是自主的

高质量的代码是没有冗余的
DRY Don't Repeat Yourself

提高代码质量的7个策略:

编写可维护代码的7个策略:

测试先行

测试是标准,测试定义行为。

验收测试 = 客户测试
单元测试 = 开发者测试
其他测试 = 质量保证测试

质量保证(Quality Assurance,QA):

以行为作为单元
TDD可以提供迅速的反馈
TDD可以为重构提供支持
编写可测试的代码

进行优质验收测试的7个策略:

进行优秀单元测试的7个策略:

用测试描述行为

测试就是标准
测试需要完整
bug是缺失的测试

工作流测试用所谓的模拟对象(mock)进行测试

使用测试作为标准的7个策略:

修复bug的7个策略:

最后实现设计

可变性的阻碍
缺乏封装
滥用继承
僵化的实现
内联代码
依赖

可持续性开发
删除死代码
保持名称更新
集中决策
抽象
对类进行组织

编码与清理
软件被阅读的次数比编写次数多
意图导向编程
降低圈复杂度
演化式设计

进行演化式设计的7个策略:

清理代码的7个策略:

重构遗留代码

重构能降低以下四个方面的成本:

技术债和财务债一样:利息会把你拖垮

通过重构糟糕代码来培养良好习惯
推迟那些不可避免的

图钉测试
依赖注入
系统扼杀
抽象分支

以支持修改为目的重构
以开闭原则为目的重构
以提高可修改性为目的重构

第二次做好

助你正确重构代码的7个策略:

决定何时进行重构的7个策略:

在不需要的事情上花钱

我们是软件开发者,利用现有工具尽我们所能开发最好的软件

上一篇 下一篇

猜你喜欢

热点阅读