ObjectSquare

[レポート]


ES-6 ソフトウェアテストの実践手法

はじめに

ソフトウェアテストに関してよいイメージを持っているソフトウェア開発者は少ないのではないでしょうか?私もあまり好きな方ではありません。
しかしながら、ソフトウェアの品質を確保する最後の砦はテストです。

効率的で実践的なテスト技法に関して学び、現場の改善につなげられるような知見が得られればと思い、受講しました。


講演1: 現場のソフトウェアテスト 〜科学、実践、教育〜

講師:

三栄ハイテックス(株)
第1開発部 設計1課 2グループ
リーダー
森 孝夫

※ SESSAME(組込みソフトウェア技術者管理者育成研究会)メンバーでもある

概要:

ソフトウェア品質向上のために、現場サイドは日夜テストに奮闘している。そこでこの講義では、テストを含む開発全体を科学的に捉え、効率的で実践的なテストの技法と、現場に必要なサポート、教育を考察する。

1. 組込みソフトウェアテストの現状
2. ソフトウェアテストの技法と科学
3. 上流工程とテストの連携
4. テストから始まる現場の改善

(プログラムから引用)

内容:

1. 組み込みソフトウェアテストの現状

テストの目的は品質向上であり、確保すべき品質の定義や抽出法について述べられました。信頼性(いわゆるバグ/不具合が無いこと)だけではないソフトウェアの品質特性に関して、ISO/IEC9126を紹介し説明されました。

2. ソフトウェアテストの技法と科学

ソフトウェア開発のV字モデルを紹介し、各工程ごとに実践的なテスト技法を紹介されました。また、テストを行う上で「先憂後楽」の意識をもって、早め早めにテストを行うことが効果的であることを述べられました。

単体テストの工程では、プログラムの制御の流れをフローグラフ(フローチャートやDFD/CFD、状態遷移図などノードとリンクで書かれた図)で表し、その流れを網羅的にテストする技法である「制御パステスト」に関して紹介されました。制御パステストの注意点として、境界値テストとC1カバレッジ(分岐網羅)を推奨されていました。

結合テストの工程では、インクリメンタル結合テストに関して述べられました。インクリメンタル結合テストとは、プログラムをユニット単位に分割し、ボトムアップ、あるいはトップダウンで少しずつ結合していき、モジュール間の インターフェイスをテストする技法です。実機やOSなどの環境が間に合わない場合でも、可能な限りシミュレーション環境を用意して、実際にプログラムを動作させてテストすることや、機能ブロックの全てのモジュールの結合が完了したら、その時点で負荷テストや環境テストを掛けること、などを強調されていました。

機能テストの工程では、機能網羅テスト、マトリクス網羅法、デシジョンテーブル法、直交配列表など、実践的なテスト技法について紹介されました。

3. 上流工程とテストの連携

要求仕様やシステムアーキテクチャ/設計などの上流工程で、テスト容易性(Testability)を考えることによって、テスト効率の向上や設計の向上を図ろうという話でした。

テスト計画は、要求定義段階から開始可能であり、良く計画された効率のよいテスト計画が策定できれば、多くの工数を占めるテスト工程の効率化が図れ、全体工数の短縮が期待できます。また、テスト可能性という観点から品質特性を網羅的に確認することにより、要求を明確にすることが出来ます。

また、テスト容易性はアーキテクチャ設計と密接な関係があります。テスト容易性とは、スムーズにテストを進めることが出来るかどうかの指標であり、以下のような観点から成ります。

分解性はソフトウェアモジュールの凝集度や結合度と関係があります。制御性を高めるためには、状態遷移モデルを作り、ソフトウェアモジュールの振る舞いが解りやすいように設計しなければなりません。安定性を高めるためには、ロバストなインターフェイスや協調関係にしなければなりません。

4. テストから始まる現場の改善

テスト技術や不具合分析の利用を中心とした、組織全体(開発チーム、テストチーム)の改善方法に関して述べられました。


講演2: 組込みソフトウェア・テスト技法

講師:

キャッツ(株)
ソフトウェア事業部
取締役 副社長
渡辺 政彦

概要:

「網羅度検証」と「リアルタイム性検証」を中心に組込みソフトウェア・テストについて考察する。問題がどこにあるかを、理想的なあるべきテストの姿と現状のテストとのギャップから見出し、そのギャップを埋めるものが何かを考えたい。

1. 組込みシステムの現状
2. 組込みシステムのテストとは
3. 網羅度検証の概要
4. 網羅度検証の例
5. リアルタイム性検証の概要
6. リアルタイム性検証の例
7. まとめ

(プログラムから引用)

内容:

1. 組込みシステムの現状

組み込みソフトウェアの規模の拡大とそれに伴う生産性の低下に関して、例と数字を挙げて説明されていました。

2. 組込みシステムのテストとは

テスト成熟度モデル(TMM)やV字モデルを紹介されました。組み込みソフトウェアのテスト方法として、コードベースとモデルベースのテスト方法について紹介されました。

3. 網羅度検証の概要

Validation/Verificationに関する説明がありました。Validation/Verificationはそれぞれ妥当性確認/検証と訳されます。前者は言葉の通り「作るものが妥当であるか確認すること」であり、後者は「正しく作ったかを確認すること」です。Validationには、「モレ」「ヌケ」のない試験ケースを設計する技法が、Verificationには網羅的かつ効率的に試験ケースを設計する必要があることを述べられました。

4. 網羅度検証の例

網羅度検証のための技法として状態遷移表による動的分析モデルの例、アクター特性表と動的分析モデルからテストケースを設計する例が示されました。また、テストケースの組み合わせ爆発を防止するための技法として、組み合わせ爆発(pair-wise)による組み合わせ選択の例、状態遷移のパスの簡略化の例を示されました。

5. リアルタイム性検証の概要

リアルタイムシステムとは最悪実行時間(WCET:Worst Case Execution Time)を保証するシステムであり、WCETの検証には実機ベースのテストが必要であることを述べられました。

6. リアルタイム性検証の例

リアルタイム性検証の例として、RM(Rate Monotonic)でスケジュールされた複数の周期タスクが時間制約を満たすための利用率の制限であるUBT(Utilization Bound Theorem)について紹介されました。また、イベント駆動のシステムでリアルタイム性が満たされるかをテストするために、遺伝的アルゴリズムによるテストケースの生成について紹介されました。


感想:

セミナー会場は満席で、みなさん熱心に講演に耳を傾けている様子から、複雑化する組み込みソフトウェアの品質と、それを確保するためのソフトウェアテストに対する関心の高さをうかがい知ることが出来ました。両セミナーともに、まさに「現場で使えるテスト技法」に関して具体的に紹介されていましたので、現場の開発者、テスト担当者の方々には、とても有益なセミナーであったと思います。

また、「テスト容易性という観点から設計を評価する」という考え方にも賛同しました。普段、設計を行ってる場合に、ソフトウェアモジュールの保守性や再利用性に関しては気を配りますが、テストファーストプログラミングやテスト駆動開発のようなことを行っていない限り、テスト容易性まで気を配ることは少ないと思います。

保守性や再利用性の高い設計をするためには、仕様や環境の変更可能性などを考えなければなりません。これには深い洞察や経験が必要であると思います。これに対し、テスト容易性という観点は、より具体的で考えやすい設計の評価指標になるのではないかと思いました。

 

オージス総研
組み込みソリューション部
玉木 淳治


© 2004 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP