‹ XCSG 解説集

XCSG 解説集: はじめに

Atlas はコードベースを Extensible Common Software Graph として表現します。本シリーズでは、そのスキーマと、それをクエリする方法を説明します。

弊社の Atlas の力を引き出すシリーズでは、ソフトウェア解析プラットフォームである Atlas を紹介し、その基本を説明しました。Atlas の主要な構成要素は、そのグラフ表現である eXtensible Common Software Graph(XCSG)です。この新しいシリーズでは、XCSG スキーマの詳細を扱い、スキーマが捉えるソフトウェア成果物をすべて説明し、Atlas クエリ言語を使ってスキーマをどのように活用できるかの例を示します。

XCSG.Type、XCSG.Function、XCSG.ControlFlow_Node、XCSG.DataFlow_Node が XCSG.Node を指し、XCSG.TypeOf、XCSG.DataFlow_Edge、XCSG.ControlFlow_Edge が XCSG.Edge を指す、XCSG のタグ階層です。

XCSG スキーマの一端

XCSG の基本

XCSG は、Atlas がコードベースから抽出したソフトウェア成果物をグラフとして表現するために用いるグラフ表現スキーマです。したがって、XCSG スキーマに従うデータベース内の各要素は、ノードまたはエッジのいずれかです。XCSG では、このような分類の名称を「タグ」といい、スキーマは XCSG のすべてのタグを階層的に編成したものです。

最も基本的なタグは、次のとおりです。

  • XCSG.Node: XCSG のすべてのノードには XCSG.Node というタグが付いています。これは、XCSG のすべてのノードを包含するスーパータイプです。
  • XCSG.Edge: 同様に、XCSG のすべてのエッジには XCSG.Edge というタグが付いています。XCSG.Edge は、常に 2 つの XCSG.Node を接続します。端点は、e が XCSG.Edge であるとき、e.from() と e.to() を使ってアクセスします。
  • XCSG.Contains: 包含関係を表すエッジです。コードベースはモジュール化されているため、コード断片はファイルに含まれ、ファイルはコードベース全体に含まれます。同様に、文は関数に含まれ、変数定義はそれが宣言されている文に含まれる、などです。XCSG.Contains は、コードベース全体を途切れなく閲覧できるようにします。
  • XCSG.Project: コードベース全体を表すノードです。コードベース内のすべてのコード成果物は、XCSG.Contains エッジの連鎖によってこのノード内に含まれます。
  • XCSG.File: コードベース内のファイルを表すノードです。XCSG.Contains エッジ(project->file)によって、XCSG.Project ノードに接続されます。

属性

XCSG.Node または XCSG.Edge は、自身が持つプロパティに対応する特定の値を持つことがあります。たとえば、ソースコード内の位置、つまりそれを含むファイルへのパス、行番号、オフセットです。このような値は、属性と呼ばれるキーと値の組として格納されます。ノードまたはエッジの種類に応じて、さまざまな属性を持つことができます。最も一般的な 2 つの属性は、次のとおりです。

  • XCSG.name: すべての XCSG.Node と XCSG.Edge は、name 属性を持ちます。エッジでは、常に '<name of from node> -> <name of to node>' という形式です。ノードでは、値はノードの種類によって決まります。たとえば、関数の場合は関数名を表します。
  • XCSG.sourcecorrespondence: この属性はすべての XCSG.Node が持っており、そのノードが表す成果物のソースコード上の位置を表します。

本解説集は 3 つの部分で構成されています。詳しくは、リンク先の記事をご参照下さい。

  1. 制御フロー
  2. データフロー
  3. 手続き間フロー

ご質問、または修正のご希望はありますか?

どのようなご用件ですか?