Time:8 hours
Timespan:Dec 8 – Dec 14 (杂事多,断断续续看了一周,终于把这篇综述看完了)

Tom Mens, Tom Tourwé (2004). A Survey of Software Refactoring. IEEE Transactions on Software Engineering, 30: 2. 126-139 February (gs:521)

这篇论文的作者Tom Mens1999年获得博士学位,现在是比利时蒙斯大学(University of Mons)的full professor,主要研究“formal foundations and automated tool support for software engineering”(特别是software evolution等),论著颇丰。在Google Scholar里搜“refactoring”,这篇论文排在第五位,且出版时间相对较迟,应该是该方向截止目前最新的一篇综述。

这篇综述针对软件重构(software refactoring),篇幅13页半,引用了111篇文献。全文分为8个部分,第一部分Introduction,第二部分是一个贯穿全文的重构实例(将原有设计重构为vistor模式),最后部分Conclusions,正文其他五个部分结构如下:

  • 3. Refactoring Activities。 将重构的过程分为了六个步骤(或活动),包括确定哪些地方需要被重构、应适用何种重构方法等。
  • 4. Refactoring Techniques and Formalisms。主要各种技术(包括assertion & graph transformation)与形式化方法对重构各个步骤的支持。
  • 5. Types of Software Artifacts。"Software Artifact",中文翻译为"软件工件",文中提到了Program、Design、Software Requirement这三种的重构。
  • 6. Tool Support。讨论了重构工具应支持的特性。
  • 7. Process Supoort。介绍重构与Software Reengineering、Agile Software Development、Framework-Based or Product Line Software Development的关系。

    下面是详细论文笔记:

1. (S1) 常识性概念
(1) 软件开发最大的成本是在软件维护(software maintenance) [1] [2] [3] (原文中的索引,下同)
(2) restructuring: "the transformation from one representation form to another at the same time relative abstraction level, while preserving the subject system's external behavior (functionality and semantics)"
      refactoring: "basically the object-oriented variant of restructing ",因此refactoring是restructuring的一种。 Refactoring最早由Opdyke在他的博士论文中提出(1992年,UIUC)。Martin Fowler对refactoring的定义是:"the process of changing a [object-oriented] software system in such a way that it does not alter the external behavior of the code, yet improves its internal structure".
(3) 不同语境下的restructuring/refactoring:
      software evolution: improve the quality of the software
      reengineering: examinaion and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form

2. (S2) 介绍了一个"Document Hierarchy"的例子,通过20几个"primitive refactorings",将其重构为Visitor模式。
这里介绍了primitive refactoring与composite refactoring这两个概念,后者具有更大的粒度。

3. (S3) 介绍了重构过程的六个步骤(活动),依次为:

  • 哪里需要被重构?(识别需要重构的地方)(S3.1)

    • (S3.1)中作者综述了现有方法和工具,包括Daikon Tool(通过自动检测程序不变量)、bad smells(most widespread approach)、可分析duplicated code的clone analysis tool等。 (对应的具体文献见原文,由于我目前并不专门研究这个方向,暂不跟进这些文献,下同)
  • 使用何种重构方法?(确定应该使用的重构方法)(S3.1)
    • 也在(S3.1)中提到,包括Flowler将bad smell与refactoring方法关联、本文作者提出的基于logic meta programming的被自动化方法、基于object-oriented metrics的方法、及visualization mechanism等。
    • 作者提到使用何种refactoring,高度依赖于特定的应用领域。对于web-based software, “where and why”to refactor,可参考书籍《Core J2EE Pattern》。
  • 确保重构“preserve behavior”(S3.2)
    • behavior perservation的概念最早由Opdyke提出:"for the same set of input values, the resulting set of output values should be the same before and after the refactoring",即"preservation of input-output behavior"
    • 但在许多应用领域中,满足上述输入输出的条件还不够。比如对实时软件,执行的时间长短就很关键,在嵌入式领域,重构还要考虑内存空间与电量消耗等。
    • 原文索引中的[23][24]提到了有趣的例子:不改变behavior的重构却不能通过部分现有的测试(即通过现有测试并非是重构的必要条件)。
    • 小结:确保行为一致的方法,有从实用主义(pragmatic)出发,也有用形式化方法来证明(如对于Prolog这类语言)
  • 进行重构
  • 重构是否有效?(评估重构的效果,可以从软件的复杂性、可理解性、可维护性,或者过程的生产率、成本等多方面进行)(S3.3)
    • 可以根据针对的quality attribute来对重构进行分类,比如可以是:remove code redundancy、raise the level of abstraction、enhance the resuability等
    • misconception: "improving the program structure has a negative effect on the program performance"。作者在(S3.3)引用了几篇文献对此观点进行了驳斥。
    • 度量、评估重构对质量属性影响的方法有:software metrics、empirical measurements、controlled experiments、statistical techniques等,文中介绍了相关文献。
  • 维护重构后代码与其他软件工件(各类文档等)的一致性(S3.4)
    • 代码重构后,要维护不同抽象层次的软件工件(如设计文档、需求文档等),也要维护相同层次的(如单元测试)

未完待续:[论文笔记] A Survey of Software Refactoring(TOSE, 2004)第二部分

转载于:https://www.cnblogs.com/yuquanlaobo/archive/2011/12/14/2280380.html

[论文笔记] A Survey of Software Refactoring(TOSE, 2004)第一部分相关推荐

  1. 「ArXiv2020」【Efficient Transformers: A Survey】论文笔记(更新中)

    「ArXiv2020」[Efficient Transformers: A Survey]论文笔记 Abstract 1. Introduction 2. Background on Transfor ...

  2. NLP论文笔记合集(持续更新)

    NLP论文笔记合集(持续更新) 经典论文 参考文献 情感分析论文 关键词 综述 参考文献 非综述 参考文献 其他论文 参考文献 经典论文 2003年发表的文章1^11,NLP经典论文:NNLM 笔记 ...

  3. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  4. 论文笔记目录(ver2.0)

    1 时间序列 1.1 时间序列预测 论文名称 来源 主要内容 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Dr ...

  5. 【论文笔记09】Differentially Private Hypothesis Transfer Learning 差分隐私迁移学习模型, ECMLPKDD 2018

    目录导引 系列传送 Differentially Private Hypothesis Transfer Learning 1 Abstract 2 Bg & Rw 3 Setting &am ...

  6. 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour

    360 VR Based Robot Teleoperation Interface for Virtual Tour 文章概括 摘要 1. 介绍 2. 方法和系统设计 2.1 系统结构 2.2 远程 ...

  7. 【time series】时间序列领域的Transformer综述论文笔记

    论文名称:Transformers in Time Series: A Survey 论文年份:2022/5/7 论文作者:阿里巴巴达摩院 论文下载:https://arxiv.org/abs/220 ...

  8. 《Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network》论文笔记

    <Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network>论文笔记 论文地址 ...

  9. 论文笔记【A Comprehensive Study of Deep Video Action Recognition】

    论文链接:A Comprehensive Study of Deep Video Action Recognition 目录 A Comprehensive Study of Deep Video A ...

最新文章

  1. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。...
  2. 【面试招聘】算法岗通关宝典 | 社招一年经验,字节5轮、阿里7轮
  3. 《时间管理:如何充分利用你的24小时》—让你时间发挥最大效用
  4. Ubuntu14.04-LAMP环境搭建
  5. PHP 遍历数组的方法汇总
  6. 在淘宝,我们是这样衡量代码质量的
  7. 【安卓开发】AndroidStudio项目提交到github最详细步骤
  8. python如何统计累计每日的人数‘’_Python数据分析2019陕西高考(理工)成绩及填报志愿...
  9. JS 网页自动加载js函数
  10. linux脚本调用job,linux shell - 脚本中调用fg调取后台任务报错
  11. jquery 插件 thickbox窗口 第一个控件获得焦点(解决第二次弹出窗口,文本不能输入数据)...
  12. SPSS统计指南【SPSS 003期】
  13. 公务员Python培训
  14. 如何定义StrokeIt手势 常用StrokeIt手势大全
  15. 英国大学计算机科学硕博连读,曼彻斯特大学硕博连读
  16. mac 设置mysql登录快捷键_史上最详细的苹果Macbook快捷键使用
  17. 「SQL面试题库」 No_47 买下所有产品的客户
  18. 苹果应用审核及相关问题解决方法
  19. WSL挂载移动硬盘U盘
  20. lisp语言cond和if套用_LISP语言入门(CLISP)

热门文章

  1. 如果你身边有程序员 今天对他好一点
  2. 关于EOSUNION 的商业创业大赛的一点心得
  3. Python F5创建monitor、pool、node以及vs(二)
  4. linux文件操作和目录操作,Linux基础操作1——文件和目录
  5. 【U8+】用友登录账套年度提示以前版本的数据,请使用系统管理升级。
  6. 【转载】《仙剑OL》主题曲_玩家版
  7. PTA_数据结构与算法_7-7 六度空间 (30分)
  8. 信锐无线控制器短信认证企信通配置
  9. 整理:对开发者有用的英文网站合集
  10. 随时随地访问家里搭建的私有存储(tfcenter)