重构是推进软件演化,改善软件内部结构,提高软件质量的重要手段。尽管人们已经提出了多种支持重构的方法,然而现有研究表明,自动化重构方法的研究仍很欠缺。主要问题在于现有方法大多数围绕少量的特定重构,通过手工选定重构种类,然后自动或半自动实施重构。对于重构的选定和效果评价,主要依靠经验。对于实施重构的"前因后果",少见有定性或者定量的分析。所谓前因,即为什么要重构,如何识别可重构代码;所谓后果,即如何分析重构的影响,如何评判、追踪和控制重构后代码质量。本课题在软件度量技术和依赖性分析基础上研究重构,以期支持持续的软件演化。为此,我们主要进行以下方面研究(1)支持重构的软件度量技术研究,研究度量与重构的关联关系;(2)基于度量结果的软件重构技术研究;(3)基于依赖分析技术的重构影响及正确性分析;(4)大规模开源软件实证研究和重构工具研发。
software refactoring;software metrics;software evolution;program analysis;
重构是推进软件演化,改善软件内部结构,提高软件质量的重要手段。尽管人们已经提出了多种支持重构的方法,然而现有研究表明,自动化重构方法的研究仍很欠缺。主要问题在于现有方法大多数围绕少量的特定重构,通过手工选定重构种类,然后自动或半自动实施重构。对于重构的选定和效果评价,主要依靠经验。本课题在软件度量技术和依赖性分析基础上研究重构,深入研究了实施重构的“前因后果”,即为什么要重构,如何识别可重构代码,以及如何评判、追踪和控制重构后代码质量。以期支持持续的软件演化,主要取得了以下方面研究成果 (1) 支持重构的软件度量技术研究,研究度量与重构的关联关系。深入研究了软件的结构化度量与复杂性度量,重点研究了内聚性与耦合性度量。通过实验验证了面向对象软件结构化度量与单元可测试性、可重构代码检测之间的联系。该研究证实了软件规模、复杂性与耦合性度量对单元测试工作量以及可重构代码检测的导向性作用。 (2) 基于度量结果的软件重构技术研究。提出了一种基于复杂网络划分的待重构代码识别方法,将社区网络中的社团识别方法用于源代码分析中,发现同样可以在源代码中发现社团。将源代码中的方法及方法间依赖抽取出来,构建了方法依赖图,然后在依赖图上利用社团识别方法,通过与设计良好的软件对比,发现所识别的社团结构与原有的类(包)设计非常相似。 (3) 基于依赖分析技术的重构影响及正确性分析。分别研究了两种重构正确性分析方法面向重构的测试方法与基于依赖性影响分析的重构错误检测方法。提出了一种有限资源约束下的测试用例优先级方法,不仅考虑了组合权重,也考虑了测试资源的消耗,提出了一种新的组合测试优先级度量模型,并给出了该度量模型的物理意义。探索了在W e b 服务组合中, 用户需求改变导致服务组合需要重构的情况,提出了一种用户需求驱动的测试方法。 (4)大规模开源软件实证研究和重构工具研发。我们在以上研究内容中进行了大规模的开源软件实证研究,并实现了相应的重构原型工具,申请了两项专利,获得两项软件著作权授权。