質問

VB (または多言語) に特化したツールが必要です。自分で (おそらく Python で) 作成する前に、既に存在するかどうかを尋ねてみようと思いました。

必要なもの:

  • ツールは、再帰的かどうかにかかわらず、パスをクロールして、.bas、.frm、.xxx などの拡張子のリストを検索する必要があります。
  • 次に、そのファイルを解析し、関数やルーチンなどを検索する必要があります。
  • そして最後に、見つけたものを出力する必要があります。

これは、悪いプログラマーが、同じ名前の場合もあればそうでない場合もあり、同じことを行う関数を多数作成するというシナリオでの、「コードの冗長性を減らす」という考えに基づいています。4つのケースがあります:

  • ケース 1:同じ名前、同じ内容。
  • ケース 2:同じ名前ですが、内容は異なります。
  • ケース 3:差分名、内容は同じです。
  • ケース 4:差分名、差分内容。

したがって、出力は次のようになります

===========================================================================
RESULT
===========================================================================
Errors:
---------------------------------------------------------------------------
==Name, ==Content --> 3: (Func(), Foo(), Bar()) In files (f,f2,f3)
!=Name, ==Content --> 2: (Func() + Func1(), Bar() + Bar1()) In Files (f4)

---------------------------------------------------------------------------
Warnings:
==Name, !=Content --> 1 (Foobar()) In Files (f19)

---------------------------------------------------------------------------

これは私が何を必要としているのかを理解してもらうためです。

そこで、質問は次のとおりです。これと似たようなことを実現するツールはありますか?

追伸:はい、最初は良いコードを書く必要がありますが、ご存知のとおり、問題は起こります。

役に立ちましたか?

解決

何が欲しいのは「クローン検出器」です。これらのツールは、指定されたファイルの大規模なセット全体コピーと貼り付けコードを見つけます。クローンは、単に機能のではありません。彼らは、コードブロック、データ宣言、などすることができます。

があり、検出器の様々なそこにいる、そしてあなた自身のものを構築しようとする前に、あなたは彼らがどのように動作するかを知っている必要があります。

いくつかは、単に正確に等しいの行と一致します。これらの基本的な考え方を示している間、彼らは考慮にクローン化されたコードは、多くの場合、バリエーションを持っているという事実を取ることはありませんので、それらの検出は良くありません。コピーを作成する際にどのような人々が本当にやっていることはクローンと編集されます。

のlangaugeトークンのいくつかの試合シーケンスは、例えば、識別子、キーワード、リテラル、句読点。少なくともこれらは空白の変化の比較的寛容です。そして、彼らは、単一のトークンは、単一のトークンのために置換されたクローンを見つけることができます。彼らは言語の構造の(ブロック、ステートメント、関数の本体を)理解していないので、しかし、彼らはしばしば、クロス、このような構造の境界が(例えば、「{}」はしばしば、これらのツールによってクローンと考えられている)という配列が一致します、彼らは(非)クローンのかなり高い偽陽性の表示を作り出します。あなたは親切提案の持っているような完全な機能などの重要なプログラム構造、にマッチを制限するために、これらの試みの一部ます。

より洗練された検出器は、プログラム構造と一致します。 私たちの CloneDR の(私は原作者だ)ということである検出器 コードの正確な構造を抽出する抽象構文木に使用するコンパイラ品質解析、。これは、クローンがどのように変化するかのパラメータが示すと、任意の関数、ブロック、ステートメントまたは宣言としてクローン場所(VB6とVBScriptなど)多くの言語のためにこれを行います。 CloneDRは、複雑な構築物は、(複数の文または式)、単純なもの(例えば、単一なステートメントまたはリテラル)の代替として使用されている書式設定の変更、コメントの場所や内容の変更、さらにバリエーションにもかかわらず、クローンを見つけることができます。それは、高い検出率を(それは通常、10から20パーセント、取り外し可能な冗長性を発見!)持っている傾向があるが、その偽陽性率は、トークンベースの検出器よりもかなり低くなる傾向にあります。あなたは、サンプルのレポートを見ることができます 上記のリンクで異なるlangaugesの様々なています。

コードクローンの比較や評価を参照してください。検出技術とツール:明示的に異なるアプローチと利点について説明し、CloneDR含めた多数の検出器を比較するA定性的アプローチする

EDIT 2010年10月:私が最初にこの応答を書いたときは...、私はCloneDRがそうしなかった、OPはVB.netに興味があったと想定しました。私たちは、以来、VB.net、VB6とCloneDRへVBScriptの機能を追加しました。 (構文解析VB.netその現代的な形で(1が「シンプル」の想像よりも多くのメシエです!)のVisual Basicのようなのlangauge)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top