2011-03-25 98 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現在更容易設置。