概要
研究用のメモです。
リンク
https://github.com/k4nkan/ast-diff-research
使用技術
1. プログラミング言語
- Python:
- このプロジェクトの主要なスクリプト言語です。
- Dockerコマンドの実行 (
subprocess
)、ファイル操作 (os
)、データの整理・分析 (pandas
)、数値計算 (numpy
)、クラスタリング (scikit-learn
, scipy
)、グラフ描画 (matplotlib
)、XML解析 (xml.etree.ElementTree
) など、自動化フロー全体の制御とデータ処理を担います。
2. 差分比較ツール
- GumTree:
- コードの抽象構文木(AST)レベルで差分を比較する主要なツールです。
- C言語のコード構造を解析し、挿入、削除、更新、移動などの構造的な変更を検出します。
- 比較結果をXML形式(
axmldiff
コマンド)やHTML形式(htmldiff
コマンド)で出力します。
- Javaで書かれており、コマンドラインから実行されます。
3. コンテナ技術
- Docker:
- GumTree実行環境の構築と管理に使用します。
Dockerfile
: GumTreeの実行に必要なJavaやGumTree自体、その他の依存関係を定義し、再現可能な環境を構築します。
- Dockerイメージ:
Dockerfile
からビルドされ、GumTree実行に必要な全てが含まれたパッケージとして機能します。
- Dockerコンテナ: Dockerイメージから実行される独立した環境で、ホストOSを汚染することなくGumTreeコマンドを実行できます。
- ボリュームマウント: ホストOS上のC言語ソースコードや、GumTreeの出力結果のXML/HTMLファイルを、コンテナ内外で共有するために使用します。
4. データ分析・可視化ライブラリ (Python)
- pandas:
- GumTreeの解析結果から得られる非類似度(距離)データを、扱いやすいデータフレーム(表形式)で管理するために使用します。
- 特に、各ファイルペア間の距離を格納する「非類似度行列」の構築に役立ちます。
- scikit-learn:
- 機械学習ライブラリで、主に**クラスタリング(グループ分け)**アルゴリズムを提供します。
AgglomerativeClustering
などを用いて、数値化された非類似度を基にコードファイルを自動的にグループ分けします。
- SciPy:
- 科学計算ライブラリで、特に階層型クラスタリングのコア機能を提供します。
scipy.cluster.hierarchy.linkage
を使用して、ファイル間の類似性に基づいて「デンドログラム」と呼ばれる樹形図を生成し、グループ形成の過程を分析します。
- Matplotlib:
- Pythonのグラフ描画ライブラリで、階層型クラスタリングの結果であるデンドログラムを画像として可視化するために使用します。