高品質と開発スピードの "二兎を得る" ソフトウェアテストへの新アプローチ

ソフトウェア開発における理想は「速度を落とさず高品質な開発」だが、その実現は困難だ。有効な施策は「早期バグの検出と効率的なテスト実施」「客観的な定量分析」であり、これらの実現を容易にするのがテクマトリックスの「C++test」と「Parasoft DTP」だ。

» 2016年04月20日 10時00分 公開
[PR/MONOist]
PR

 高機能化・複雑化の一途をたどるソフトウェア開発において「速度(納期)」と「信頼性」への要求は高まる一方だが、その両立は困難を極める。

 「速度を落とさず高品質な開発」が理想であることは言うまでもないが、速度を上げればバグ検出を始めとする検証作業に割ける時間はどうしても減少し、信頼性を上げるための検証作業に時間をかければ開発速度は落ちる。この2つの市場要求に応える施策を誤れば、それは速度と信頼性の低下はもちろん、コスト増や企業イメージの毀損にもつながってしまう。

 ではなぜ「速度と信頼性の両立」は難しいのだろうか。ソフトウェアの開発工程に落とし込んで考えると、「後工程でのバグ修正による手戻り」「テスト項目の増大」「リリース判定に必要な情報の不足」「経験や勘に頼った、属人的な品質管理と分析」といった複数のポイントが浮かび上がる。

 このポイントに対する改善策として有効なのが「早期バグの検出と効率的なテスト実施」「客観的な定量分析」であり、これらの実現を容易にするツールがテクマトリックスのC/C++言語対応テストツール「C++test」とソフトウェア開発およびテスト管理プラットフォーム「Parasoft DTP」だ。

 コードテストツールとテスト管理プラットフォームの導入が、いかにしてソフトウェア開発への市場要求である「速度」と「品質」を実現するのか。「C++test」と「Parasoft DTP」へ新たに搭載された機能を中心に解説する。

早期のバグ検出と効率的なテストを実現するC++test

 C++testは「コーディング規約チェック」「フロー解析」「単体テスト」「実行時メモリエラー検出」と4つの機能を搭載する、C/C++に対応した静的/動的を問わない総合テストツールだ。

 静的解析では、パターンマッチングで違反となるコーディングを検出する「コーディング規約チェック」とプログラムの処理フローを解析し、メモリリークやバッファオーバーフローといった致命的な問題点を検出する「静的フロー解析」を備え、ワンクリックで実行が可能だ。動的解析では、単体テスト実施において必要となる作業工数を削減し、効率的なテストの実行とカバレッジ計測が可能だ。

 新バージョンでは、コーディング規約チェック、静的フロー解析、さらに単体テストのいずれも機能強化されているが、中でも注目は、単体テストの機能強化として実装された「Test Case Editor」だ。

「Test Case Editor」によるメリット 「Test Case Editor」によるメリット

 回帰実行が可能な単体テストを実施する際、理想的にはテスト対象にあわせたテストケースと代替関数(スタブコード)を用意するべきだが、双方を自作するには手間がかかり、また、メンテナンスの必要性も生じる。

 「Test Case Editor」はGUI上でテスト対象関数の入力値、期待値を入力するだけでテストパターンの生成ができる。さらにスタブの制御(戻り値の設定や引数などの条件に応じた振る舞いの変更など)に加え、スタブに対しどのような引数が渡されたかなど、スタブの呼び出され方の検証機能も搭載されており、まるで関数の埋め込まれた表計算ソフトの項目を変更するような感覚で単体テストが実施できる。

 静的解析については、コーディング規約チェックにMISRA-C:2012やCERT Cを始めとした200以上が追加され約2000のコーディングルールが利用可能となり、静的フロー解析機能も検出可能なバグが、既存製品比で2倍以上(26パターンから58パターンに)と大幅に向上している。評価指標(メトリクスルール)も34種類が追加され、対象となるソースが保守開発に向いているかなどの判断も容易になっている。

 これら機能の強化と新機能の実装で「早期バグの検出と効率的なテスト実施」を提供するC++testだが、後述の「Parasoft DTP」との連携によって、テスト結果の自動集約も可能だ。集約だけではなく、違反件数の推移やメトリクス、違反の多い項目(ルールやカテゴリ、担当者)といったテスト結果をParasoft DTPにて分析することで、「ソースコードの変更リスク」「技術的な負債」といったプロジェクトにおけるリスクをつかむこともできる。

開発データを自動収集して展開、“気付き”を与える「Parasoft DTP」

 C++testとの連携も可能な「Parasoft DTP」はソフトウェア開発・テスト管理プラットフォームと位置付けられ、「多種多様なツール情報の一元管理」「リアルタイムなプロジェクト管理」「独自エンジンによる自動データ分析」「ポリシー(品質基準)管理」といった機能を提供し、定量分析の運用に貢献するツールだ。

 ソフトウェア開発に関連するさまざまなツールからのデータインポートに対応しており、列挙するだけでもC++testを始めとした各種解析ツールの他、「REDMINE」(タスク管理)や「Jenkins」(CI)、「Bugzilla」(バグ管理)、「Time Tracker FX」(工数管理)、「AccuRev」(構成管理)などからの情報が集約できる。こうして集めた情報はWebブラウザからグラフィカルなかたちで参照可能となるので、開発に携わる多くのメンバーが全体像を把握できる。

 解析結果を表示するParasoft DTPのダッシュボードは、ほぼリアルタイムに更新されるので、プロジェクトの進行管理や品質管理などが期待できる。プロジェクト単位でも管理可能だが、社内の全プロジェクトを対象にして、標準とするスケジュールや品質に即しているかといったチェックツールとしても活用できる。

Parasoft DTPによる分析結果の表示 Parasoft DTPによる分析結果の表示

 加えて「PIE(Process Intelligence Engine)」と名付けられたエンジンが、複数データを“現場”に分かりやすいよう加工してくれる。一例を挙げると、「メトリクス計測ツールで抽出したコードボリューム情報」と「テスト/解析ツールで抽出した残存バグと欠陥情報」を入力されたPIEが「時系列でのバグ密度」として表示するといった具合だ。

 ソフトウェア品質管理という観点からすれば、関係者間の効果的なデータ共有が実現されるだけでも大きなメリットだが、PIEの存在によって、さまざまなツールに点在するデータから進行している開発プロジェクトの傾向を導き出し、改善の参考とすることができることは高品質なソフトウェア開発において大きな恩恵となる。

 PIEによる分析はあくまで現状分析であり予測ではないが、「技術的負債(将来的な変更や保守に問題が生じそうなコード)の返済」を表示する機能も実装されている。具体的には、静的解析の指摘事項の有無や修正率、不必要と思われるコメント挿入があるコードなどを判断基準として、リファクタリングが必要なモジュールおよびその優先度、開始時期を判断する材料となるデータを表示する。

Parasoft DTPの処理エンジンPIEによる情報分析の例 Parasoft DTPの処理エンジンPIEによる情報分析の例

 判断材料という意味ではPolicy Centerによるポリシー管理も大きな意味を持つ。Policy Centerで開発フェーズのマイルストーンごとにプロジェクトが守らなくてはいけないポリシー(工程移行基準や出荷判定など)を設定しておけば、プロジェクトがポリシーにどの程度適合しているかを客観的かつリアルタイムに把握することができる。Policy Centerを見ることで、プロジェクトのリスクの低減のために何をすべきか、また次の開発工程に進んでもよいのかを簡単に判断することできる。


 繰り返しになるが、ソフトウェア開発における理想は「速度を落とさず高品質な開発」だ。しかし、その実現は一見地道な「テストの効率化と、定量分析の継続的な運用」でのみで達成される。換言すればそれは「早期のバグ発見」「大量のテストを継続的に行う仕組み」「データ収集と分析の自動化」「分析結果の容易な共有化」の4要素に分解できるものであり、テクマトリックスの「C++test」と「Parasoft DTP」はこの4要素を満たすものといえる。

Copyright © ITmedia, Inc. All Rights Reserved.


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

C++test

Parasoft DTP

提供