‹ 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. 手続き間フロー

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

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