2010-11-18 3 views
5

何百もの異なる場所に適用する必要があるいくつかの異なるタイプの変更からなるコードベースを大幅に変更する必要があります。ラインの。コードベースへの大きな変更のための準備のためのコードレビューツール

私はこれを手伝ってくれるツールを考えていますが、私がこのアイデアを持つ唯一の人ではないと確信しているので、すでに書かれているのだろうかと思います。

私はそれがうまくいく方法を概説してみましょう:

  • まず、コンテキストとgrepのようなビット、それが正規表現に基づいてコードの「面白い」チャンクのセットを収集します。これらの場所は何千もあるかもしれません。
  • 次にチャンクを繰り返し、それぞれ興味深い、または面白くないとします。これは、基本的に、潜在的な変更箇所を実際の変更箇所に振り分ける手動作業を可能な限り自動化しています。
  • 最後に、選択したすべての興味深い場所に変形(たとえばsedスタイルの置換)を適用しましょう。

このツールは既に存在しますか?

既存のツールが見つからない場合は、このツールを自分で作成すると考えています。それだけで私はそのようなすべてのツールを認識していないよC.

+2

適切なツールが見つからず、自分でビルドする必要がある場合は、あなたがソースを公開すると素晴らしいだろう。私があなたが提案しているものに似たようなツールを持っていることが好きだった場所はたくさんありました。 – sdolan

答えて

1

これは、Coccinelleが行うことに書かれたものに似て聞こえます。それはかなり専門的な仕事のように思えますが、そのようなツールを開発して配布することでお金を稼ぐのは難しいです。

これまでのような仕事があれば、EmacsのLispバージョンにスクリプトを書くことになりました。 Lispは強力な言語であり、Emacsエディタには、便利な組込み関数(例えば、照会置換正規表現)や概念が多数あるという利点があります。しかし、すでにEmacsとLispに精通していない限り、私はそれをお勧めしません。学習曲線が急峻すぎる。

+0

それは面白いですが、私はCoccinelleのアプローチが実際にはあまりにも構造化されていると思います。言い換えれば、それはあまりに多くを自動化しようとしますが、意味パッチを書いていく上で複雑さが他の側面で浮かび上がってしまいます。変更セットは再利用する必要がないので、理にかなった現実的な一回限りのマニュアル選択を行う方がよいと思います。 –

1

で動作しますが、

+0

私が気づいているツールは、研磨された製品ではなく、(ツール作成+リファクタリング)の総作業時間を最小限に抑える200行のハッキングジョブです。 query-replace-regular-expressionはsedのコマンドにすぎません。最初のパスとして、私のツールは大文字のテキストファイルに変更され、手で縮小され、次にsed、awkなどで修正され、その後オリジナルと再統合される可能性があります。 –

1

おもしろいですね。私もそのような考え方で遊んだことがあるが、コマンドラインスクリプティングからは遠ざかっていない。準備をリファクタリングのための私のアプローチは、次のとおりです。

  1. は、同様のコード/パターンと を見つけるためのREG-EXP /スクリプト は、この タイプの場所のリストを作成して生成
  2. をリファクタリングするコードのchuncを探しますパターン

出力ファイルは、GNUまたはMS出力形式の行が含まれています(例:FILE:LINE MESSAGE) だから、それは(VIM -qの)任意のIDEにロードすることができ、コードの塊を見つけることができます「エラーメッセージをダブルクリッキングして簡単に「s」。

ちなみにコードがインデントで統一されていれば、grepが簡単です。

1

あなたのコードを見つけるためにhueristics( "grep")を使用し、コードを変更するためのヒューリスティック( "sed")を使用してこれを行う予定があるようです。これらがトリックを行い、あなたが言うように実際に200行でそれを行うことができるなら、私はあなたがここで尋ねたことにも驚いています。

一般的に、ヒューリスティックを使用して何百もの変更を行うことは、かなり危険です。ある人物がそれぞれの人物に関わっている場合は、その人が気づいた程度に誤りを修正することができます。その場合は面白い見た目のテキストエディタを構築しています。あなたがそのルートに行くなら、EMACSは非常に良い選択かもしれません。あなたが望むすべてのアクション(文字列検索、表示用バッファ抽出、文字列置換、側面のマーカーデータ構造の構築)はElispで完全にスクリプト可能です既に素晴らしいUIを持っています。

これをより確実に自動化したい場合は、正確な検索と置換が必要です。 DMS Software Reengineering Toolkitは、Java、C++、C、C#、COBOLなどの多くの広く使用されている言語(これはあなたが行っていることを言わなかった)でこれを行うことができる プログラム変換ツールです。カスタムアクションセット。

+0

これは200行未満で行うことができますが、簡潔に書くのがますます難しくなり、より手作業の手順が必要になります:) grep -n -C 10の出力をテキストファイルにリダイレクトして後処理したdiffに追加し、最後にパッチを適用します。しかし、この種のワークフローを中心に設計されたビジュアルインターフェイスは、本質的にワークフローの問題であり、人生をはるかに容易にします。それを自動化することは重要ではありません。それに伴う全ての問題は、個々のケースの検査の反復性である。 –

関連する問題