[论文笔记] A Survey of Software Refactoring(TOSE, 2004)第一部分
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)第一部分相关推荐
- 「ArXiv2020」【Efficient Transformers: A Survey】论文笔记(更新中)
「ArXiv2020」[Efficient Transformers: A Survey]论文笔记 Abstract 1. Introduction 2. Background on Transfor ...
- NLP论文笔记合集(持续更新)
NLP论文笔记合集(持续更新) 经典论文 参考文献 情感分析论文 关键词 综述 参考文献 非综述 参考文献 其他论文 参考文献 经典论文 2003年发表的文章1^11,NLP经典论文:NNLM 笔记 ...
- 光流 速度_[论文笔记] FlowNet 光流估计
[论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...
- 论文笔记目录(ver2.0)
1 时间序列 1.1 时间序列预测 论文名称 来源 主要内容 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Dr ...
- 【论文笔记09】Differentially Private Hypothesis Transfer Learning 差分隐私迁移学习模型, ECMLPKDD 2018
目录导引 系列传送 Differentially Private Hypothesis Transfer Learning 1 Abstract 2 Bg & Rw 3 Setting &am ...
- 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour
360 VR Based Robot Teleoperation Interface for Virtual Tour 文章概括 摘要 1. 介绍 2. 方法和系统设计 2.1 系统结构 2.2 远程 ...
- 【time series】时间序列领域的Transformer综述论文笔记
论文名称:Transformers in Time Series: A Survey 论文年份:2022/5/7 论文作者:阿里巴巴达摩院 论文下载:https://arxiv.org/abs/220 ...
- 《Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network》论文笔记
<Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network>论文笔记 论文地址 ...
- 论文笔记【A Comprehensive Study of Deep Video Action Recognition】
论文链接:A Comprehensive Study of Deep Video Action Recognition 目录 A Comprehensive Study of Deep Video A ...
最新文章
- 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。...
- 【面试招聘】算法岗通关宝典 | 社招一年经验,字节5轮、阿里7轮
- 《时间管理:如何充分利用你的24小时》—让你时间发挥最大效用
- Ubuntu14.04-LAMP环境搭建
- PHP 遍历数组的方法汇总
- 在淘宝,我们是这样衡量代码质量的
- 【安卓开发】AndroidStudio项目提交到github最详细步骤
- python如何统计累计每日的人数‘’_Python数据分析2019陕西高考(理工)成绩及填报志愿...
- JS 网页自动加载js函数
- linux脚本调用job,linux shell - 脚本中调用fg调取后台任务报错
- jquery 插件 thickbox窗口 第一个控件获得焦点(解决第二次弹出窗口,文本不能输入数据)...
- SPSS统计指南【SPSS 003期】
- 公务员Python培训
- 如何定义StrokeIt手势 常用StrokeIt手势大全
- 英国大学计算机科学硕博连读,曼彻斯特大学硕博连读
- mac 设置mysql登录快捷键_史上最详细的苹果Macbook快捷键使用
- 「SQL面试题库」 No_47 买下所有产品的客户
- 苹果应用审核及相关问题解决方法
- WSL挂载移动硬盘U盘
- lisp语言cond和if套用_LISP语言入门(CLISP)
热门文章
- 如果你身边有程序员 今天对他好一点
- 关于EOSUNION 的商业创业大赛的一点心得
- Python F5创建monitor、pool、node以及vs(二)
- linux文件操作和目录操作,Linux基础操作1——文件和目录
- 【U8+】用友登录账套年度提示以前版本的数据,请使用系统管理升级。
- 【转载】《仙剑OL》主题曲_玩家版
- PTA_数据结构与算法_7-7 六度空间 (30分)
- 信锐无线控制器短信认证企信通配置
- 整理:对开发者有用的英文网站合集
- 随时随地访问家里搭建的私有存储(tfcenter)