Sourcetrailを試してみました

2021年10月10日

どもです。
つい最近、ソースコードの解析に役に立ちそうなツールを見つけたので、ここで少し紹介をします。

1.何を見つけた?

見つけたのは、Sourcetrailというツールです。
これは、ソースコード内の関数の呼び出し関係やクラスの継承関係を可視化するツールです。
似たようなツールでは、「understand」というツールが有名ですが、これは有償なうえ高価です。
調べてみた範囲ですが、趣味でソフトの開発を行っている個人で払える、払うのは現実的ではないと考えてしまう価格です。
しかし、このSourcetrailは、オープンソースで似たような機能が提供されています。

2.インストールとかとか

Sourcetrailは、GitHubからインストーラをダウンロードできます。
Windowsでは、インストール版とポータブル版があります。
機能的には、どちらも違いは無いようです。
インストールするか、それともUSBメモリに実行ファイルを格納してどのPCでも実行できるようにするか、の違いしか無いようです。

なお、私は「インストール版」を選択しました。
インストール手順については、ここでは割愛します。
インストーラをダウンロードして、実行して、インストール場所指定して…という極々「フツー」の手順で完了します。

3.試しに使ってみた

インストールが終わったので、試しに使ってみました。

3.1.試してみたプロジェクトは?

Sourcetrailを試すにあたり、過去に自分が作ったプロジェクトの中から、「CStubMk」を選びました。
理由は、以下です。

  • C++で書かれている(っていうか、書いた)
  • 少し大きい

今回対象としているソースコードは、GitHubで公開しています。

3.2.試した結果

こうなりました。

arduino_spi_and_interrupt

この画面から、解析結果を表示したい内容を選択します。
今回は関数についての解析結果を確認するために、「Function」を選択してみます。
結果として、以下のような画面で、関数の一覧が表示されます。

arduino_spi_and_interrupt

表示されるのは、グローバル関数のみの模様です。
クラスのメンバ関数は、こちらには表示されない様です。
mainを選択してみます。

arduino_spi_and_interrupt

ここで初めて、どのクラスを参照しているか、どのメンバ関数を呼び出しているかを可視化できました。
更に、各関数が参照している、呼び出している他の関数を調べてみます。
図に示す順番で、ボタンを押します。

arduino_spi_and_interrupt

で、得られる図がコレ。

arduino_spi_and_interrupt

解析の深さを「5」に設定しているため、全ての呼び出しを解析できているわけではありませんが、呼び出し関係が可視化できています。
なお、試しに深さを「inf」に設定してみると、より大きい図になります。
ココでは示しませんので、気になる場合はお試しあれ。

4.結論

ソース解析ということだけ見れば、「understand」に劣らない、十分な機能を備えているかと思います。
しかし、解析できる言語がC/C++/Java/Pythonと限定されています。
今後、別の言語に対応することを期待、といったところでしょうか。