第一部分 纪律
航空业发展时间线, 最终第一架巨型喷气宽体客机波音747出现,航空旅行成为安全和高效的旅行方式。
波音737 Max不安全。MU5735也是B737-800NG客机。所以我们国家不买波音的飞机了吧。
1970-2000年,硬件30个数量级的增长。
匠艺是指懂得如何做好某件事,源于良好的指导和大量经验。软件产业大量缺少这两样事务。
极限编程
1970年,提出瀑布开发过程。2000年,才纠正了这个错误。
1999年,出版《解析极限编程-拥抱变化》,推动敏捷革命。
极限编程实践手段四个要素:测试驱动开发、重构、简单设计和结对。
测试驱动开发
TDD纪律。小周期、先测试。测试先于一切。先写测试。先清理测试。测试先于一切其他操作。
所以操作切分为最小周期。周期以秒计。
TDD的目标是创建你完全依赖的测试集。TDD是一种精巧复杂的技术,难以习得
重构
将结构糟糕的代码改写为结构更好的代码,且不会影响代码行为。
只要保证代码行为不受影响,对结构的改进就是安全的。
没有TDD,重构无法实现。不做重构,也没法做TDD。
简单设计
地球生命可以分层描述。
类比编程。TDD是编程中的量子力学,那么重构就是化学,而简单设计是微生物学。SOLID原则、OO (Object-Oriented)和函数式编程是生理学。架构是生态学。
简单设计只包括四条极简规则。
《修改代码的艺术》设计感境界。
协同编程
结对编程、代码审查、头脑风暴。
第二章 测试驱动开发
1772年,工业革命势头迅猛,企业家为满足巨大的市场需求,差点破产。采用复式记账法,能看清金钱是如何在生意中流入流出的。现金流被调整后,破产没有发生。
复式记账法是最优秀发明之一,每位谨慎的家主都该用它来管经济。
能够通观整体、不至于迷失的细节里面。
TDD就是一种复试记账法
TDD三法则
第十章 质量
持续改进
每次程序员签入时,代码都比签出时整洁。在修正缺陷时,将代码改的更好。在增加功能时,将代码改的更好。对代码的每一次操作都能带来更好的代码,更好的设计和更好的架构。
免于恐惧
系统内部结构退化,系统复杂性会难以处理。开发人员越来越害怕做出改变。害怕改动,程序员只做出他们认为“最安全”的改动。
解决办法是消除恐惧。创建程序员死心塌地信任的测试集来消除恐惧。
QA的工作是用测试指定系统行为,给出最够细化的测试,这些测试由程序员来执行。
测试自动化
手动测试是对金钱的时间的巨大浪费。几乎可以自动化的测试都应该被自动化,包括单元测试、验收测试、集成测试和系统测试。人工测试成本高昂。
绝大多数测试是简单的安排、行动、断言结构,可以通过提供预设输入和检查预期输出来执行。
设计系统时,抽象出缓慢或需要配置得操作。如果使用关系型数据库,创建封装业务规则的抽象层,用自动测试输入数据取代 DB。增加测试速度。
较慢的和不方便的外围设备、接口和框架也应该被抽象化。这样单个测试可以在几微秒运行。
自动化测试与用户界面
自动化测试不应该通过用户界面来测试业务规则。用户界面极其容易改变,与业务规则无关。
应该测试业务API。
书籍推荐:程序员修炼之道 通向务实的最高境界。
第13章 集成
时间管理
番茄工作法---有效的使用每一点时间和精力 Francesco Cirillo
定时25分钟
计时器想起、休息5分钟
重新开始
第14章 团队合作
《敏捷整洁之道》