川獺の外部記憶

なんでも残しておく闇鍋みたいな備忘録

ソースコード可視化ツールまとめ

Abstract

大規模ソフトウェアの構造把握は一般に困難とされていますが、この困難さのうち偶発的なものはツールによる削減が可能です。

Software visualization というジャンル*1はこの偶発的困難さを削減する目的で研究されてきました。 Software visualization にはいくつかの種類があり、 Implementation artifacts の一種であるソースコードを可視化する Source code visualization もこの領域の一部です。

この Source code visualization を実現するためのツールについて調査した結果について記載します。

結果概要は以下の通り。

  1. ソースコードを読み書きする人の補助のためにはツール "Sourcetrail" を提案します。(※対応言語が限定されます)
  2. ソースコードを読み書きしない人とソースコードを読み書きする人が共同作業をするために使用する場合は "Understand" が適切だと考えます。(※有償)
  3. 実用評価はできていなくて申し訳ないですが、大規模プロジェクトを運営する補助ツールとしてはSysClinicが適切かもしれません。

(※詳細評価については続きに記載します。)

Introduction

ソースコードを読む設計者としての立場からのレビューです。

OSSや試用が可能なものについてはできる限り実用しました。実用対象は以下の2プロジェクト。

Overview

ツール 対象言語 ライセンス 特徴 試したか
Understand C/C++, Java, C#, PHP, TypeScript 有償(1ライセンス約400,000円?要問合せ) 多機能、しっかりしてる
Sourcetrail C/C++, Java, Python OSS (GPL) UX○
SysClinic C/C++, Java, C# 有償(価格要問合せ) 技術文書用図出力機能 ×(要問合せ)
codecrumbs C#, C++, Fortran, Go, Haskell, Java, JavaScript, Kotlin, PHP, Python, Ruby, TypeScript OSS (BSD) 対応言語○, 未成熟

Impressions

Sourcetrail

費用がかからないので、使用におけるハードルの低さが最大の特徴。もともとは商用ソフトウェアであり、一定の性能がありながらOSSとして利用可能です。

可視化されたノードと共にソースコードを閲覧可能で、ソースコードを読むときに同時使用する目的にマッチしています。
クラス図をクリックしたときに遷移する際のアニメーションはどこを見ているかの視線が自然に動くので良いです。

一方でソースコードを読まない人向けに説明する際のドキュメント化が可能な域までは至っていないと考えます。また、ソースコードの部分を追いかけながら構造を見ていくには適していますが、全体像を把握するには適していないと感じました。(何か間違っているのかもです)

個人的な短期目的に最適のようなので実用してみます。

Understand

知る人ぞ知る有名ツール、15日試用可能なので使用してみました。

こちらは価格が価格ですので、基本的にSourcetrailに対して完全に上位互換です。

私の経験で完全に使いこなせる気はしませんが、ソースコードを読まない人が設計をするような組織ではこの可視化ツールにより可視化された情報を頼りに設計すると精度が上がると考えます。

一方で設計者がソースコードを読む場合、このツールのすべての機能は行き過ぎに感じます。

また、ソースコードを同時に読む場合、Sourcetrailのほうが使いやすいように感じました。

SysClinic

概要を見る限りすごく強そう。機能の多さが凄まじいです。

フルスタックエンジニアが一人でプロマネから実装までやるような場合には頼りになりそうですが、頼りにするときが来ないことを切に願ってそっ閉じしました。

使えていないので評価は以上です。お値段かなりしそう…効果はありそうですが。

codecrumbs

synergy-core を食べさせたらクラッシュしました… 使い方を間違えているかもしれません。評価できませんでした。

Conclusion

Abstの繰り返しになります。

  1. ソースコードを読み書きする人の補助のためにはツール "Sourcetrail" を提案します。(※対応言語が限定されます)
    C++メインのプロジェクトの場合、現実的には導入コストの問題からこのツールが唯一の選択肢になるのではないでしょうか。
  2. ソースコードを読み書きしない人とソースコードを読み書きする人が共同作業をするために使用する場合は "Understand" が適切だと考えます。(※有償)
  3. 実用評価はできていなくて申し訳ないですが、大規模プロジェクトを運営する補助ツールとしてはSysClinicが適切かもしれません。