• [论文笔记] A Survey of Software Refactoring(TOSE, 2004)第二部分


    续前文[论文笔记] 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过程的基石,贯穿整个开发过程。
  • 相关阅读:
    Springboot~多个数据源时自定义datasource的bean
    springboot~aspose操作word模板实现导出功能
    spring-security-jwt的总结与实现
    mybatis+maven自动生成代码框架
    chrome 插件 vimium 像操作vim一样的操作浏览器
    递归计算过程和迭代计算过程
    找工作--Java相关
    《Linux程序设计》--读书笔记---第十三章进程间通信:管道
    poj 1474 Video Surveillance
    动态包含与静态包含的区别
  • 原文地址:https://www.cnblogs.com/yuquanlaobo/p/2288079.html
Copyright © 2020-2023  润新知