ソースコード分解のメソッドのセット。
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingGlobal NetworkにアクセスしてPIPを使用する必要があります。対応するCコンパイラを備えたPython 3.9が必要です。 Pythonコンソールを実行して、Cコンパイラのバージョンを確認します。
このプロジェクトは、コマンドラインインターフェイスを介して使用することも、サブモジュールとして他のPythonプロジェクトに含めることもできます。
スライス
完全な計算スライス(Nikolaos tsantalis and AlexanderChatzigeorgiou。2011。ExtractMethod Refactoring Methodの分解機会の識別)でソースファイルを分解する場合は、このコマンドを使用します。
$ python cli.py slice [-h]
[-o OUTPUT]
source位置的議論:
ソース- ソースフォルダー、ファイルまたはURL
オプションの引数:
-o 、 - output出力 - 出力ファイルまたはディレクトリ:出力として設定した内容に応じて、スライス分解または単一のファイルでいっぱいのフォルダーが取得されます。指定されていない場合はstdoutを使用します
-H 、 - ヘルプ- このヘルプメッセージを表示して終了する
例:
$ python cli.py slice MyProjectPath$ python cli.py slice MyFile.java$ python cli.py slice MyProjectPath --output MyResultPath$ python cli.py slice MyFile.java --output MyResultPath制御依存グラフ- 対応する方法を持つコントロール依存性グラフ( NetworkX.Digraphから継承)を表す構造。
from program_slicing . graph . cdg import ControlDependenceGraph制御フローグラフ- 対応する方法を持つ制御フローグラフ( NetworkX.Digraphから継承)を表す構造。
from program_slicing . graph . cfg import ControlFlowGraphデータ依存グラフ- 対応する方法を持つデータ依存性グラフ( NetworkX.Digraphから継承)を表す構造。
from program_slicing . graph . ddg import DataDependenceGraphプログラム依存グラフ- 対応する方法を持つプログラム依存グラフ( NetworkX.Digraphから継承)を表す構造。
from program_slicing . graph . pdg import ProgramDependenceGraphステートメント-制御依存性グラフ、データ依存グラフ、またはプログラム依存グラフノードを表す構造。
from program_slicing . graph . statement import StatementStatementType-ステートメントタイプを列挙する構造。
from program_slicing . graph . statement import StatementTypei = 0 、 i += 1 、 i++など)。{}など、 if (...) a = 0の空のボディなど)。if 、 try 、 catch 、 switchなど)。for while )を生成するブランチステートメント。break 、 continue 、 throw 、 return 、さらにはelse )。基本ブロック-制御フローグラフノードを表す構造。
from program_slicing . graph . basic_block import BasicBlockプログラムグラフマネージャー- 同じソースコードに基づいて、さまざまなタイプのプログラムグラフ(制御フローグラフや制御依存グラフなど)を含み、分析のための一連の方法を提供する構造。
from program_slicing . graph . parse import Lang
from program_slicing . graph . parse import control_dependence_graph
from program_slicing . graph . parse import control_flow_graph
from program_slicing . graph . manager import ProgramGraphsManager
manager_by_source = ProgramGraphsManager ( source_code , Lang . JAVA )
manager_by_cdg = ProgramGraphsManager . from_control_dependence_graph ( control_dependence_graph ( source_code , Lang . JAVA ))
manager_by_cfg = ProgramGraphsManager . from_control_flow_graph ( control_flow_graph ( source_code , Lang . JAVA ))プロパティ:
start_pointを増やし、次にend_pointを減らすことにより、最初にソートされたステートメントを返します。SCOPE 、 BRANCH 、 LOOP 、 FUNCTION 、またはEXITステートメントに含まれていないもの)を返します。SCOPE 、 BRANCH 、 LOOP 、またはFUNCTIONステートメントを返します。パブリック方法:
FUNCTIONステートメントを返します。SCOPE 、 LOOP 、 BRANCH )ステートメントを返します。VARIABLEステートメントを返します。VARIABLEステートメントを返します。クラスの方法:
解析- 指定されたソースコード文字列およびプログラミング言語仕様から異なるグラフを構築できる機能のセット。
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . parse import control_dependence_graph , Lang
cdg : ControlDependenceGraph = control_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . cfg import ControlFlowGraph
from program_slicing . graph . parse import control_flow_graph , Lang
cfg : ControlFlowGraph = control_flow_graph ( source_code , Lang . JAVA ) from program_slicing . graph . ddg import DataDependenceGraph
from program_slicing . graph . parse import data_dependence_graph , Lang
ddg : DataDependenceGraph = data_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . pdg import ProgramDependenceGraph
from program_slicing . graph . parse import program_dependence_graph , Lang
pdg : ProgramDependenceGraph = program_dependence_graph ( source_code , Lang . JAVA ) from tree_sitter import Tree
from program_slicing . graph . parse import tree_sitter_ast , Lang
ast : Tree = tree_sitter_ast ( source_code , Lang . JAVA )変換- あるタイプのグラフを別のタイプに変換するオプションもあります。
from program_slicing . graph import convert
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . cfg import ControlFlowGraph
cdg : ControlDependenceGraph = ControlDependenceGraph ()
cfg : ControlFlowGraph = convert . cdg . to_cfg ( cdg )
new_cdg : ControlDependenceGraph = convert . cfg . to_cdg ( cfg )