前回に続き品質管理プロセスにおけるソフトウェア・テストのお話しです。今回は単体テスト、及び単体テストの実施前に行わなければならないソースコード・レビューについて説明します。
| まず、単体テストの説明の前に、ソースコード・レビューについて触れておきましょう。プログラムを作成したら、最初にソースコードのレベルでチェックをし、机上(*1)で発見できるバグを修正してから単体テストに入るのが、テストの効率化を図るための本来の姿です。昨今このプロセスを踏まずに、コーディング即テストというパターンが多いのが気になります。目視で容易に検出できるバグをテストで発見することは、非効率的で非生産的だと認識する必要があります。 | ||
| (*1) | 今は「机上」という表現は死語かもしれません。古い話で恐縮ですが、筆者の若い頃はコーディング用紙にプログラムを書き、それをカードや紙テープにパンチしてコンピュータに読み込ませてコンパイルし、ソースリストをプリントして、それを机の上に広げてデバッグ(机上デバッグと呼んだ)したものです。「机上」はその名残ですね。 |
|
| ソースコード・レビューは、一般に以下のことをチェックします。 (1)関数呼出しインタフェース |
||
| ・引数: 個数、属性、順序 ・出力エリア: サイズ、オーバーフロー対応、使用方法 ・関数値とリターンコード: 初期化 ・関数処理用ワークエリア: 確保と開放 ・異常時: 異常リターン処理 |
||
| (2)データ定義・参照 | ||
| ・変数定義 ・初期値設定 ・文字列長や数値エリアの制限 ・ポインタの設定、添字の設定、及びそれらのカウントアップ |
||
| (3)演算・比較・制御 | ||
| ・0(ゼロ)による割り算 ・演算結果の上限値と下限値 ・計算誤差 ・条件式の判定結果 ・繰返しステートメントの初期値、増分、上限、回数 ・繰返しステートメント内での繰返し変数の書換え ・異常時処理(処理継続/中断の判断、復旧処理) |
||
| (4)その他 | ||
| ・確保したエリアの開放 ・オープンしたファイルのクローズ ・コーディング規約の遵守 ・コメントの適切さ(割合、内容) ・既存プログラムの改定の場合、影響する他のプログラムの調査 |
||
| 単体テストは、この次のステップである結合テストにスムーズに移行できるように、対象プログラムの品質を確認、保証するテストです。 (1)開始と終了 |
||
| 単体テストは、プログラムのコンパイル後にソースコード・レビューをし、そこで発見したバグを取り除いた状態から開始します。計画したすべてのテスト項目を消化し、不具合がすべて処置された時点で終了しますが、対外的には単体テスト報告書のレビューを受け、承認を得た時点で完了となります。 | ||
| (2)ガイドライン | ||
| 単体テストは一般に以下のガイドラインに沿って実施します。 ・関数単位でのテストは、すべてのプログラム・ロジックを網羅する。 ・プログラム仕様として他プログラムへの情報の引渡しがある場合は、引渡し情報の出力と内容の 確認までとする。 ・ミドルウェア・インタフェースを利用している場合は、実際のミドルウェアを動作させるか、または スタブ(*2)を用いたテストでの確認も可能とする。 (*2)スタブについては次回説明します。 |
||
| (3)単体テストの目標値 | ||
| 単体テストにおける目標値は、テストの妥当性やテスト対象プログラムの品質を数量的に評価する指標ですので、プロジェクトやプログラムの特性などを考慮して最も妥当性のある値を設定する必要があります。この目標値は、品質マネジメント計画書に記述しておきます。 単体テストの目標値の例を幾つか挙げておきます。 |
||
| ・テスト項目選定件数 すべてのプログラム・ロジックを網羅することを考慮して、 5ステップで1件 ・バグ検出数 ソースコード・レビューが実施されている前提で、 30ステップで1件 ・テスト消化率 基本は100%が目標であるが、テスト環境上の問題を考慮して、 95%以上 ただし、未テスト項目はトラッキングできるようにしておくこと。 |
| 上記はあくまでも例ですので、実際にはプログラムの特性などを考慮して設定することになります。 なお、ここでは目標値例をステップ当りの数値としましたが、ステップ算出ができないコンピュータ言語などでは、ファンクション・ポイント当りの数値として設定することもあります。 |
||
| 以上の他、単体テスト項目選定基準、単体テスト手順、テスト成果物などを定義して、品質マネジメント計画書に記述します。 なお、単体テスト項目の選定基準については、その典型的なものを次回に示します。 |
||
| 参考文献: | ソフトウェア品質ガイドブック 森口繁一編 日本規格協会 |