续前文:[论文笔记] A Survey of Software Refactoring(TOSE, 2004)第一部分
4. (S4)中介绍各种技术和形式化方法对重构各个步骤的支持,这部分内容综述的文献量很大。这次只能一般性地了解一下。
着重介绍了
- assertion(preconditions, postconditions, and invariant)(s4.1):用于解决behavior preservation问题。
- graph transformation(S4.2): 重构与graph transformation的各个步骤具有直接的对应关系,因此可以将重构中的问题转化为graph transformation的问题,并使用后者的理论方法进行求解。
- formalism(S4.3): 确保一些program properties保持不变(如syntactic rules, semantics等)。
及其他(S4.4):
- program slicing: 确保restructuring能preserve一些选定的behaviro。
- formal improvement theory: 能用来转化functional programs以提高其效率。
- formal concept analysis: 提供一种conceptual tool来分析数据。
- program refinement: 可逐步将program specification转化成可执行程序。
- software metrics: 度量重构的效果。
- software visualization: 对重构提供可视化支持。
- dynamic program analysis: 适用于无法用合理代价静态计算所有希望的preconditions时。
5. (S5) 介绍常见软件工件。
除了最常见的代码级别的重构,重构也可适用于其他类型的软件工件。
6. (S6)中对重构工具应支持的各种特性进行了讨论
- automation: 可支持哪些重构步骤以及支持的自动化程度。
- 当前能支持的是semiautomatic refactoring
- reliability: 是否能保证behavior perserving。
- 除了针对特定的场景,目前无法做到这点。因此,工具应提供undo功能来撤销不适宜的重构。
- configurability and openness
- 可配置的内容包括:refactoring方法种类、bad smells种类、bad smell与refactoring的关联、自定义composite refactoring
- coverage:可支持的重构步骤(与automation似乎同一个意思?)
- 目前大多数商业重构工具都只支持"automatically applying refactorings"
- scalability: privimitve & composite refactoring
- 当前只能支持primitive refactorings
- 有学者提出了transactional refactoring的概念。有这么一种情况:一系列重构最终能保证behavior preservation,但系列中的每个重构却未必都能保证behavior preservation.
- language independence
- Lammel最早引入了generaic program refactoring的概念
- 目前研究方法有:meta modeling, WSL(intermediate formal language)
7. (S7) 重构与软件再工程、敏捷开发等关系
- 在软件再工程的语境中,重构 "is only the last stage and addresses the technical issue of (semi)automatically modify the software to implement a new solution."。仅当软件退化时才使用。
- XP是敏捷开发的主要部分,而重构则是XP过程的基石,贯穿整个开发过程。