100万行のソースコードを約2分で解析して快適な開発環境を実現するプロも納得の構造解析ツールとはコードの複雑度も一目で分かり技術的負債を解消

多機能を実装するソフトウエア開発では、ソースコードが何十万行、何百万行と大規模になり、処理の分岐を追うだけで一苦労だ。開発者が本来の生産的な作業に入る手前で膨大な時間ロスが発生している。この問題を解決するのが、ソースコード構造解析ツールだ。テクマトリックスが提供する「Understand」は、強力な解析エンジンを実装しており、ソースコード100万行であれば約2分で解析が完了する。その三つの特長を担当者に聞いた。

» 2015年04月08日 10時00分 公開
[PR/@IT]
PR

高速解析とシンプルな操作性でソフトウエア開発を支援

 最近のソフトウエア開発では、ゼロからコードを書くというよりも、既存のものを改修していく案件が増えている。しかし、特に多機能を実装するものはソースコードが何十万行、何百万行と大規模になり、処理の分岐を追うだけで一苦労だ。また、「オリジナルのソースコードが古過ぎてドキュメントが残っていない」「ドキュメントがあってもアップデートされていない」「そもそもコード自体が“読みづらい”ために判読に時間がかかり過ぎる」など、開発者が本来の生産的な作業に入る手前で膨大な時間ロスが発生している。

 この問題を解決するのが、ソースコード構造解析ツールだ。ソースコードを解析し、処理の流れをフローチャートなどにプロットして、ソースコードを理解しやすくしてくれる。オープンソースの解析ツールもあるが、解析に時間がかかったり、解析するための準備が大変だったりと、使い勝手の良さに欠ける。

テクマトリックス システムエンジニアリング事業部 ソフトウェアエンジニアリング営業部 ソフトウェアエンジニアリング営業二課 課長 福永一寛氏

 「少しコードを書き変えたので、ちょっと確かめたいだけなのに、解析に2時間もかかってしまうと、開発の手を止めざるを得ない」。テクマトリックスの福永一寛氏は、本来開発者が集中すべきクリエイティブな作業が阻害されるデメリットを指摘する。

 高速に解析でき、ソースコードの全貌を可視化し、手を加えるべき部分がすぐに分かって、使い勝手が良い。この10年でたまった技術的負債を解消したい。そんな開発者の願いを手頃な価格で叶えるツールがある。

 テクマトリックスが提供する「Understand」は、高速解析とシンプルな操作性でソフトウエア開発を支援するソースコードの構造解析ツールだ。強力な解析エンジンを実装しており、ソースコード100万行であれば約2分で解析が完了する。

 同製品の特長を大きく分けると、三つある。

【特長1】未完成のコードも解析、ビジュアル化が可能

 一つは、構造を可視化して分かりやすく把握できる「グラフィカルビュー」機能だ。Understandでは、ソースコードの依存性、例えば関数の呼び出し/被呼び出し関係、クラスの継承/被継承関係をフローチャートやツリーでグラフィカルに表示する。

関数やメソッドの呼び出し/被呼び出し関係を一つのダイヤグラムに表示したもの

 解析できるのは、完全にコンパイルされたものだけではない。コンパイルエラーが出るものも解析できる。「ソースコードが全部そろっていない、コンパイル環境がそろっていないなどの状況では、解析するための事前準備で時間が取られるという話もよく聞く。Understandでは、ソースファイルさえあれば解析して描画でき、そのままレビューに生かし、問題の洗い出しに役立つ」(福永氏)

 コード開発とレビューが終わってコードが完成したら、さらに厳密な解析モードに切り替え、より正確な検証を行うことも可能だ。どの開発フェーズにも対応し、効率的な開発環境を支援する。

【特長2】ソースコードの編集作業を効率化するさまざまな機能を備える

 二つ目の特長は、多機能エディターとしても利用できる点だ。「グラフィカルビュー」で関数などを右クリックし、オプションメニューで選択すると、エディターが開いてソースコードが表示される。また、エディター内の「情報ブラウザ」でコードの詳細情報が確認できる。その逆の操作も、同様に行える。右クリックしてメニューを開いて選択するだけというシンプルな操作で複数ルートから必要な情報へアクセスできるのは便利だ。

Understand 3.1のメイン画面

 エディターでは、予約語の色分け表示、コードブロックの畳み込み、検索機能、外部コマンドとの連携など、さまざまな工夫が施されている。

 検索機能も強力だ。例えば「エンティティフィルタ」では関数や変数などの最小粒度の単位ごとに一覧表示ができる他、さらに細かい絞り込みができる「エンティティロケータ」、プロジェクト全体から任意の文字列を含む要素を検索できる「ファイル内検索」、巨大なプロジェクト全体を素早く検索できる「インスタント検索」などがある。

 フロー図には、コード内に記述したコメントを表示することもできる。図を見ながら処理内容を確認できるという意味で、ドキュメントツールとしても活用できる。

ソースコードを解析し、フローチャートで表示したもの

 Eclipse向けのプラグインを用意しており、EclipseからUnderstandの「グラフィカルビュー」を表示できる。また、解析結果をGIF、JPEG、Visio XMLで出力したり、コマンドベースおよびGUIで解析スケジュールを設定したり、解析中にGUIで他の操作(コールグラフやフローチャートの表示、関数検索など)を呼び出したりすることも可能だ。

【特長3】テスト対象を効率的に絞り込め、見積もりにも役立つ

 そして、三つ目はテストを効率化できる点だ。

 例えば、書いた関数が期待通りに動くか、変な値が渡されたときにクラッシュしないかなどの例外処理を見る単体テストでは、どんなパターンのテストケースを用意すれば網羅的にテストできるかを考える必要がある。そんなときビジュアル化されたフロー図があれば、分岐も一目瞭然だ。フロー図で分岐条件を把握することで、必要なテストケースを準備しやすくなる。

 もう一つ、Understandで特筆すべきはコードの複雑度を定量化して表示する機能だ。ソースコードが複雑な場合、1カ所の変更でも全体に大きく影響を与えるため、テストが複雑になりがちだ。そのため、複雑であればあるほどソースコードを触らないようになり、抜本的な改修が難しくなる。また、変更したらテストケースの割り出しやテスト実施の工数は膨大になる。

 そこで、Understandではコードのメトリクスを計測することにより、コードの複雑さを数値化し、図示する機能が実装されている。

ソースコードのメトリクス値とソースコードの量を色の濃さや四角の大きさで表現

 Understandで計測できるメトリクスは、コードのボリューム、ネストの深さ、パスの数、結合度、凝集度、サイクロマティック複雑度など約100種類ある。計測結果は、数値や円グラフ、棒グラフ、メトリクスツリーマップで表示される。メトリクスツリーマップでは関数を四角で表現し、四角の大きさはコードの大きさを示し、表示色が濃くなるほどに複雑であることを示しており、ソースコード全体の複雑度を俯瞰的に把握できる。またメトリクス計測結果は、Excelにエクスポートすることも可能だ。

 メトリクスを計測することにより、ソースコードを修正した場合に不具合が発生するリスクを視覚的、定量的に把握できる。こうした、不具合発生リスクを定量的に計測するメトリクスの代表格が「サイクロマティック複雑度」だ。

サイクロマティック複雑度の違い(複雑度を定量化し、可視化することで現状を把握)

 「ソースコードはいくらでもつなげて記述できるため、放っておくと複雑度は増す一方になる。だが、引き継ぎながらソースコードを改修する現代の開発事情では、解析時間や改修負担を増やす原因になるだけではなく、不具合発生のリスクも高くなる。定期的にメトリクスを計測しソースコードの複雑度を低く保つことで、工数の削減やトータルコストの圧縮に効果が期待できる。

 さらに、メトリクスの計測は、工数見積もりの正確性を高めることにつながる。例えば、あるプログラム開発を他企業から引き継ぐことになり、ソースコード一式を受け取ったとする。このとき、引き継ぐ上でどれだけの作業負担が発生するかを把握していないと、低く見積もりした結果、意外に工数が掛かって赤字になる事態も発生し得る。ソースコードの複雑度を定量化できれば、作業時間がある程度正確に見積もることができ、先方への見積もりが分かりやすく提示できる」(福永氏)

 また、継続的インテグレーション環境を構築するとき、Jenkinsを使って複数ツールを連動させてリポートを出す企業も増えているが、「その中の1ツールとしてメトリクス計測を使っているところもある」と、福永氏は言う。

解析工数を大幅に削減し国内メーカーに高評価

 同製品は米Scientific Toolworks社の製品で、テクマトリックスでは7年ほど前に取り扱いを開始したが、利用者数は年々増加している。「製品のアンケート調査は、一般的になかなか協力してもらえないことが多いのだが、Understandについては回答率が非常に高い。それだけ満足度が高いのかと感じている」(福永氏)

 日本での導入事例も多い。ある企業では、過去製品のリプレース品を開発することが増えている。ただ、どれも数十年前の製品であるため、ドキュメントがあまりなく、ソースコードを解析するにはエディターで1つずつソースコードを追うなど、工数が膨大に掛かるという問題を抱えていた。Understandを導入したことで、その解析工数は大幅に削減されたという。

 価格は、固定PC1台で使用する「ノードロックライセンス」が19万8000円、サーバーでライセンスを管理し、同時に1ユーザーが利用可能な「フローティングライセンス」が39万8000円だ(いずれも税別)。

 動作環境は、Windows XP/Vista/7(32bit/64bit)、Windows Server 2003/2008(32bit/64bit)とLinux x86/x86-64をサポートし、対応言語はObjective-C、C/C++、Java 1.3〜7、HTML、PHP、CSS、JavaScript、COBOL、Python 2/3、Fortran、VHDL、Pascal、PL/Mなど、構造解析ツールの分野ではダントツに多い。

 Understandは、15日間無料で使える体験版も提供されている。「この他、Understandの便利な使い方は、Understand特設サイトで紹介している。体験版と併せて、このツールの魅力をぜひ実感していただきたい」(福永氏)

Copyright © ITmedia, Inc. All Rights Reserved.


提供:テクマトリックス株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2015年5月15日

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。