2012-05-05 13 views
2

私は関数からいくつかのCコードを使いたいと思いますが、この関数は300行以上のコードと20個の変数を持っています。大きな関数を小さな関数に自動的に分割するリファクタリングツールはありますか?

小さな機能を大きな機能から自動的に分離(リファクタリング)できるツールがあるかどうかは不思議です。それで、それは私のような長い機能に対処するために多くの時間を節約します。

(このツールは、変数が初めて定義された位置と、変数が最後に使用された位置を分析するだけなので、非常に難しいとは思いません。 )

+6

はい、私たちはこのツールを人間の脳と呼んでいます。少なくとも今のところは。 – Duck

+0

それは良い考えだとは思わない。あなたの機能であなたがやろうとしていることをツールがどのように知っていますか? – webgenius

答えて

5

問題は、コンピュータが機能の目的が何であるかを知ることは難しいということです。そのようにすれば、20の変数と300行のコードがすべてタスクに必要であり、そのタスクを分割するのは理にかなっていないと、それは良い機能です。想像するのは少し難しいですが、それでも。

は長すぎるため、ちょうどを分解しないでください。そうするのが理にかなっているので、それを壊してください。機能は1つだけ実行してください。現時点では、コンピュータは機能の目的を理解するのに十分なほどスマートではなく、特に分割できない機能のサブセクションが何であるかを決めるのに十分スマートではありません。

+0

+1この回答には、いくつかの非常に真実が記載されています。 –

0

はい、そうすることができるツールがあります。あなたが望むのは、CをASTに解析し、関数内のデータフローを決定し、データフローをガイドとしてASTを変換し、変換されたツリーからテキストを再生成できるプログラム変換ツールです。

あなたが直面しなければならない問題の1つは、ツールを教える方法です。ここでは、は機能を分割します。どの部分をサブ機能としてしたいですか?おそらく、関数内の関数(代入、副式、または文)の演算のうちの任意の集合をサブ関数に入れるように指定することができます。これは非常に長く詳細な説明(たぶん一連の行/列のペア)になります。しかし、しばしば、「操作だけをサポートするすべてのものをサブルーチンに入れる」などの自動選択が必要な場合があります。データフロー解析を行うツールは、操作から後方スライスを計算し、後方スライスのどの部分のみが操作に使用されているかを見つけ出し、対応するコードを移動することができます。実際の問題として、これらのアイデアを組み合わせる必要があります。どちらの場合でも、ツールは現在何を移動する必要があるかを認識しています。指定されたコードをサブルーチンに移動することは、標準的なプログラム変換のセットです。ほとんどのコンパイラにはこれを行うための内部機構があります。

この決定を行うために、このツールでコードのインタラクティブなグラフィカルなスライスビューを提供することもできます。 (Grammatechは正確にこれを行うCスライシングツールコールCodeSurferを提供しています)。

このようなスライスを計算してコード変換を行うツールはDMS Software Reengineering Toolkitで、C Front Endです。 (CodeSurferのようにインタラクティブではありませんが、CodeSurferでコードを変更することはできません)。 この特定のタスクを実装するには、DMSを構成する必要があります。それは上記のすべての機械を持っています。現実的には、それは手作業であなたの1つの機能を分割する努力よりも多くの作業である可能性があります。

これを言っても、あなたはまだを決定することに固執しています。は機能を分割します。そして、ツールではなく、あなたが持っている実際の問題のようです。

+0

ありがとうございます。しかし、お勧めのツールをダウンロードすることはできません。 –

+0

DMSは商用の企業レベルのツールです。ダウンロードすることはできません。もし本当に*これを追求したいと思っているなら、会社に連絡してください。私の指摘は、あなたの問題はツールではないということですが、そのようなツールが存在するかどうかについて尋ねました。彼らは、これを行うように構成することができますし、単一のケースでは単に作業をアヒルする方法を探すのではなく、手動で行うほうが簡単です。 –

関連する問題