「ソフトウェアテストセミナー」レポート

#2 ソースコード静的解析ツールの有効利用 ~ソフトウェア・メトリックスを利用した品質の可視化~

この記事を読むのに必要な時間:およそ 1 分

組込み開発の現場活性化が使命

エクスモーションは,組込みシステム開発の変革に取り組む企業を支援し成功に導くためのプロフェッショナル集団。開発現場を,エンジニアが楽しみつつ高品質の成果を生み出せる場所とすることを顧客とともにめざすことをゴールとしています。

もっと使えるソースコード静的解析ツール

エクスモーション
研究・開発本部 スペシャリスト
玉木 淳治 氏

エクスモーション 研究・開発本部 スペシャリスト 玉木 淳治 氏

同社でソフトウェアの品質を定量的に評価する研究開発に従事している玉木氏は,ソースコード静的解析ツールをもっと活用できるツールであると語ります。

ソースコード静的解析ツールの主な機能として,⁠バグの可能性の高いコードの検出」⁠ソフトウェア・メトリクスの測定」⁠ソースコードのリバースエンジニアリング」があります。コード解析についてはビルド時やテスト前の潜在バグの検出と除去のために利用されているものの,メトリクスに関しては,⁠機能の存在や意味を知らない」⁠基準が分かりにくい」⁠利用による効果が分かりにくい」⁠リバースエンジニアリングに関しては,⁠抽象化が足りずレベルが詳細すぎる」といった理由では,開発現場ではあまり利用されていないのが現状です。このままでは,ISOで記述されている6つのソフトウェア品質特性のうち信頼性だけしか評価されていませんが,残りの2つの機能をうまく活用すれば,品質の定量化およびアーキテクチャ構造解析が行え,信頼性に加えて効率性,保守性,移植性という4特性まで評価できるといいます。

メトリクスの数値を得点化して相対比較

具体的にはどのように進めるのでしょうか。続いて玉木氏は,ソフトウェア・メトリクスとリバースエンジニアリングの利用方法を解説しました。

まず前者では,アーキテクチャ,コンポーネント,ファンクション,コードといったスコープ別の評価,品質4特性での評価という2つの評価軸を設定します。

次に,ツールで提供される数値はそのままでは理解しづらいため,評価関数を作成して得点化し,基準値との比較によって分析します。たとえば,メトリクスで提供される経路複雑度,ネスティングの深さといった数値を,⁠経路は複雑すぎないか」ということを測定するための詳細項目とし,それを最終的にチェックしたい「解析性」の品質値として得点化するのです。

そして得られた数値を,スコープ別の評価軸,品質特性別の評価軸ごとにグラフやチャートに展開すれば,マクロなレベルでの品質傾向の把握と要素・メトリクスレベルまでの追跡が可能になるというわけです。

リバースエンジニアリングは可視化がカギ

一方,リバースエンジニアリングでは,ソースコード静的解析ツールで得られたクロスリファレンスから設計構造を復元。UML・DSMで可視化して,構造の複雑さを定量化します。たとえば,たとえばパッケージの構造複雑度は,ファンイン数 * ファンアウト数で測るとし,この数値が高ければ高いほど構造が複雑であるとするのです。また可視化により,循環依存や上位レイヤへの依存を検出することで,アーキテクチャを推定するとともに違反箇所を見つけ出します。

この後玉木氏は,C言語で書かれた小規模な組込みソフトウェアにこの手法を適用した例を紹介。ここではメトリクスとリバースエンジニアリングにより,コーディングスタイルはスコアが高かったものの,極端に大きいファイルが存在する,他のファイルで定義された関数・変数へのアクセスが多いなど他の設計品質が低く,実はアーキテクチャが崩壊寸前であったことが判明したといいます。⁠静的解析ツールを効果的に利用することで,コード解析のみならず,広範囲にわたった品質の評価をすることが可能です」と,玉木氏はツールの積極活用を勧めてセッションを締めくくりました。