软件重构
维库,知识与思想的自由文库
软件重构是指在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造。简而言之,重构就是改进已经写好的软件的设计。
软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。
目录 |
[编辑] 重构代码
重构一词通常是指在不改变代码的外部行为情况下而修改源代码,有时非正式地成为“清理干净”。在极限编程方法学中,重构常常是软件开发循环的一部分: 开发总是或者增加新的测试和功能,或者重构代码来改善内部的一致性和清晰性。测试保证了重构没有改变代码的外部行为。
重构是代码维护中的一部分,既不修正错误,又不增加新的功能性。而是用于提高代码的可读性或者改变代码的结构和设计,使其在将来更容易被维护。特别是,在现有的程序的结构下,给一个程序增加一个新的行为会非常困难,因此开发人员可能先重构这部分代码,使加入新的行为变得容易。
这个术语(英文单词Refactoring)是从数字与多项式的因式分解类比而来。如,x2 − 1 可以被分解为 (x + 1)(x − 1), 这样揭示了前面的形式不可见的内部结构(如两个根+1和−1)。同样,在软件重构中,在可见结构上的改变通常会揭示原有代码中“隐藏”起来的内部结构。
为了简化测试,重构是分步骤完成的。当重构结束后,任何行为上的变化无疑都是错误并可以与调试一个一个新特性的问题分开解决。
一个琐碎的重构的例子是修改一个变量的名称使其具有更明确的含义,从单个字母的‘i’重构为‘interestRate’(利率)(图一)。一个复杂的重构是把一段if语句中的代码变为一个子程序(图二)。一个更复杂一点的重构是用多态性来替换if 条件。清理代码已经发生了几十年,重构中最关键的见识是有意识地清理代码并与增加新功能分开进行,借助于一些常用的重构方法清理代码, 然后对代码进行测试 (任何的改变都可能带来BUG). 新的实现需要改善现有设计,并且不改变原软件的意图和行为。
重构是极限编程重要的一个方面。
马丁·福勒的著作《重构》是一个经典参考书。虽然重构已经非正式的使用了很多年了,William F. Opdyke'在1993年的博士论文却是第一篇著名的关于的重构的文章。 请参考常用重构方法列表;重构方法包括怎样辨识需要重构,应该使用那种方法重构以及如何重构。
重构是一个非常重要的 概念 ,请参看 软件的最重要创新之一 David A. Wheeler.
许多重构方法用来解决列表中[5] 的问题。
[编辑] 参考书目
- 马丁·福勒: 《重构:改进现有代码的设计》,Addison-Wesley Professional 1999, ISBN 0201485672
- William C. Wake:《重构练习册》,Addison-Wesley, ISBN 0-321-10929-5
- Joshua Kerievesky:《重构到模式》,Addison-Wesley, ISBN 0321213351
[编辑] 参见
[编辑] 外部链接
- 什么是重构? (c2.com article)
- Martin Fowler的关于重构的主页
- William F. Opdyke在1993年发表的博士论文
- 面向方面的重构,Ramnivas Laddad著
- 软件重构的纵览,Tom Mens和Tom Tourwé著
- 如何编写难以维护的代码,Roedy Green著
- 重构工具
- 重构 - alphabetical list
- 重构为模式的目录
- Citations from CiteSeer
- 重构Java代码




