《重构》学习笔记-构筑测试系统与大型重构
构筑测试系统 测试……一年前,我开发的时候还是很不在乎测试,不过那个时候也没人告诉我测试的重要性。直到意识到要提高自己,学习中看到了那么多提到测试的,所以慢慢的尝试使用(大部分是单元测试),然后深深的爱上了单元测试(其他测试呢,好吧,编程中的确比较少用到其他测试,我比较懒)。 作者在前面反复提到测试在重构中的重要性,这章就是介绍测试的。 自我测试代码的价值: 编码往往只占了开发中的小部分时间,很多时间不是在沟通、设计,就是在找 BUG 。。。专业点,应该叫调试( debug )。测试的主要作用就是帮助调试,帮助开发中发现潜在的 BUG ,这样我们就可以少话点时间在调试上了。频繁进行测试是极限编程(下一个学习的内容)的重要一环。 确保所有测试都是自动化,让它们检查自己的测试结果。 一整组测试就是一个强大的 BUG 侦测器,能够大大缩减查找 BUG 所需要的时间。 JUNIT : 看来 JUNIT 的历史很悠久啊,作者写书的时候就已经很成熟了。我想这个不需要多说了,现在有关 JUNIT 的介绍到处都是。我也喜欢用 JUNIT ,不过看书中的介绍的 JUNIT 的基本使用有点老了,完全忽略吧。 重构前先为需要重构的功能构建好测试用列,在重构中,每次变动都需要进行测试,以确保重构没有给程序带来什么BUG。这个很重要。 大型重构 大型重构的重要性:大型重构没有那些小动作那样立竿见影的效果,不过它可以帮助我们解决那些堆积了很久,影响范围又很大的问题。 Tease Apart Inheritance (梳理并分解继承体系) 用于处理混乱的继承体系——这种继承体系往往以一种令人迷惑的方式组合了数个不同方面的变化( variations )。 某个继承体系( inheritance hierarchy )同时承担两项责任。 建立两个继承体系,并通过委托关系( delegation )让其中一个可以调用另一个。 Convert Procedural Design to Object (将过程化设计转化为对象设计) 可以帮助你解决一个「古典」问题:如何处理程序性代码( procedural code )? 你手上有一些代码,以传统的过程化风格( procedural style )写就。 将数据记录( data records )变成对象,将行为分开,并将行为移入相关对象之中。 Separate Domain from Presentation (将领域和表述 / 显示分离) 将业务逻辑( business logic )与用户界面( user interface )隔离开来。...