2

あるプロジェクトから別のプロジェクトにファイルがコピーされたことがわかっているソースコードのセットが数百セットあります。ほとんどのプロジェクトは事実のずっと後に破壊にチェックインされました(改訂履歴は役に立たないでしょう)。どのプロジェクトが最も古いか、そしてそこからソースコードの家系図が何であるかを把握できる自動化ツールはありますか?

4

1 に答える 1

0

コードに日付情報が含まれている場合 [例: 以前の構成管理ツールのチェックイン日など] またはバージョン情報を使用する場合は、明らかにそれを出発点として使用する必要があります。

それが完了したら、ソース コード セットを相互に比較し、編集の観点から最小距離に基づいて系列ツリーを形成します。つまり、(A,B) のデルタ カウントが、システム内の他のすべての x および y の (A,x) および (y,B) のデルタ カウントよりも小さい場合、A は B から派生した可能性があります。また、A から B への変更が A から C への変更のサブセットである場合、B は仲介者である可能性があります。

これにより、システムのペア全体で「デルタカウント」を検出したり、包含のためにデルタセットを比較したりする問題が軽減されます。このためには、コードのどの部分が同じかを教えてくれるクローン検出機能が必要になるでしょう。補数は何が違うかです。

誰かがこれを簡単に使えるようにきれいな形にパッケージ化したかどうかはわかりません. 最も近いのは構造クローン検出器です。http://www.comp.nus.edu.sg/~stan/PAPERS/CMCA%20Summary.pdf を参照してください。デルタカウントは少し荒いかもしれません。

より細かいクローン検出が必要で、コードの大部分が 1 つのコンピューター言語である場合は、言語精度のパーサーから抽出された抽象構文ツリーのレベルでコードを比較する CloneDR や SmartDifferencers を検討してください。

于 2013-02-26T22:41:39.393 に答える