2011-03-25 36 views
0

我必须执行中等大小代码块的重构(< 200K LOC)。范围非常温和:重命名一些类,在类层次结构上下移动一些嵌套的定义,删除不用的东西。生成C++重构脚本

手动完成这项工作相当简单,但我们必须从旧代码库中选择一两年的错误修复,并且项目将改变现有代码中至少一半的行。

所以,我打算将这些更改表示为一系列缩进(假定为astyle),sed脚本和另一个缩进。

我的计划是:手工完成转换,然后开发sed脚本,以获得相同的结果。前面的部分很清楚,但手动开发sed脚本似乎并不特别吸引人,但我没有更好的主意。

请帮忙。

+0

解析C++是* hard *,这意味着,除非有问题的代码是*非常规,否则这将是一个艰难的难题。 – dmckee 2011-03-26 00:09:29

+0

感谢您的回复。结果我选择了简单的方法:(1)使用抽象接口将我们期望开发活动的部分与核心部分隔离开来;(2)重构核心;(3)将隔离部分连接到新核心;(4)维护(5)在核心部分和非核心部分进行手动合并以修正错误。作为奖励,我们可以并行执行一些重构绝缘部件。 – zzz777 2011-03-31 16:51:07

回答

1

sed大概可以这样做,但对于多行块,你最好用容易处理的东西。即使awk会是一个改进,但我会在选择Perl/Python /脚本语言。最好使用解析器,这也可以为您节省初始的indent运行时间。

实际上,我会寻找一个生成注释语法树的解析器,这使得重构主要是移动树枝周围的问题。

+0

暴力破解方法怎么样: – zzz777 2011-03-25 21:53:38

+0

用'sed',写它会非常残忍。尝试编写一个'sed'脚本来重定位一段代码。然后用一些明智的做法。 – geekosaur 2011-03-25 21:58:05

2

看一看大规模静态分析和重构工具,Mozilla的开发者正在处理

https://wiki.mozilla.org/Static_Analysis

我不知道,因为GCC 4.5的版本发生了什么 - 可能是猪肉和OINK现在更容易设置。