ホワイトプログラマー

40歳からSEを辞めてプログラマになりました

ソースコード解析ツールに頼ってもいいんじゃないか

ソースコード解析ツールは普段利用してますか?

  • 利用している
  • 使ってみたい
  • 興味ない
  • 使ったけど効果があまりなかった

などいろいろありますね。

ここで紹介するツールはCOBOL/​C/C++/Java​​/Pascal/​C#/JavaScript/CSSなど普段SIerがアプリケーション開発で使用している言語をおおよそ網羅してる。ホスト系/オープン系を問わず利用可能だ。(あっ、本記事は当該製品の宣伝記事ではありません)

understand.techmatrix.jp

ソースコード解析ツールはいくつかの企業が開発しているけど、私は過去に異なる現場でUnderstandの利用を目にしてきた。

この製品の特徴は、一言で言うと高速解析とそれを活かしたグラフィカル表示となります。100万行程度のソースコードであれば数分で解析できる。コードは毎日更新されるので、この高速性は運用担当者にはとても扱いやすいものではないかと考える。

最近、あるアプリケーションの解析を行う必要があったので、Understandの評価版をダウンロードし早速解析を行った。そこでのこのツールを使って発見できたことを中心に記載してみようと思う。

​メリット1:ステップ数、複雑度が容易に出力できる

これはソースコード解析ツールであれば当たり前の機能だけど、一応紹介。 ステップ数はアプリケーションの規模を計る指標として最初に用いますね。もちろん、Understandはこれを高速に実施できる。 下図のように対象プロジェクトのコメント行数、宣言行数、実装行数、空行がグラフィカル及び表形式ですぐに出力できるし、もちろん、特定のフォルダ単位での計算も可能。 f:id:sabburo:20161223145036p:plain ​ また、複雑度の計算も可能。この複雑度とはアプリケーション全体のソースコードの複雑性を一瞬で表示してくれる。ただ、この機能は概要を知るというレベルでの利用をおすすめする。複雑度については以降で再度紹介する。

メリット2:ディレクトリ(パッケージ)の依存関係が一発でわかる

ソースコードの依存関係というのは、開発を行うにあたり極めて重要な要素である。EclipseVisual StudioなどのIDE(統合開発環境)を使用して開発している人はIDEの機能を使用し、クラス、メソッドごとの依存を確認しているはず。

Understandを使用して解析するとなにがよいかというと、​全体の依存関係をグラフィカルに表示することができる。以下の例はJavaで開発されたWebアプリケーションである。Web開発はいくつかのデザインパターンに沿って構築されるが、以下のアーキテクチャMVCS with DAO と呼ばれ、上位から順にコードが依存している。このデザインパターンに従うことで、アプリケーションの影響を踏まえた修正や開発が容易となる。

以下の図ではControllerとDAOが結ばれているのがわかる。これはDAOの変更が予期せぬControllerの改修に直結することを意味する。(これはまだまだ軽症だけど、俗に言うスパゲッティの始まり)​正しく作っていれば、Serviceの改修だけで改修影響を抑えることができる。

f:id:sabburo:20161223145037p:plain

このようなチェックを開発の途中で週単位で実施することにより、疎結合なアプリケーションが継続して作ることができる。これをシステム開発の終盤で修正することはとても難しい作業となる。

メリット3:複雑なソースコードが一発でわかる

Understandにはソースコードの複雑さを示す指標として、CycloMatic、Essentialなどが存在する。この指標をアプリケーションに対して俯瞰表示させることができる。

アプリケーション中のクラスやメソッドに対して計測することができるため、まずはクラスに実行し、重そうなクラスを見つけたり、メソッドを対象とすることで、問題のあるメソッドを見つけることができる。下図の濃い青色の部分が複雑なメソッドを表している。

f:id:sabburo:20161223145039p:plain

これはアプリケーションを改修する時に、手を出しては行けない場所、手を出すときはリスクをきちんと積むということが業務に精通していない人でもある程度認識することができそうだということがわかるだろう。

また、運用に携わっている人であれば、現場のアプリケーションにUnderstandを実行することで改修提案を計画することの手助けになるのではないだろうか。

Understandには他にも有効な機能はあるが、特に気に入った機能をまずは紹介した。