株式会社豆蔵 エンジニアリングソリューション事業部 シニアコンサルタント 望月信昭氏 |
受け入れテストの善し悪しは、システムの運用に大きな影響を与える。受け入れテストをより効果的で効率的に行うには、テスト技術の導入が不可欠だ。例えば、テスト技術を受け入れテストのテストシナリオ作成に適用することで、テストの網羅性が向上し、テスト工数を減らすことができるのである。
6月26日に都内で開催された「ソフトウェア品質サミット」の2つ目のセッション「一歩進んだ受け入れテストとは~テスト技術の適用方法~」に登壇したのは、豆蔵 エンジニアリングソリューション事業部 シニアコンサルタントの望月信昭氏だ。同氏は、受け入れテストに有効なテスト技術を紹介するとともに、それをどのように活用していくべきかについて語った。
受け入れテストの目的を明確にし、テスト計画を立てることから始めよう
望月氏はまず、受け入れテストの位置づけと役割を明示するために、開発工程におけるテストレベルについて、システム要求から始まる一連の流れを図で説明した。
「この図を見ればわかるように、最初のシステム要求がちゃんと実現できているかどうかをテストするのが受け入れテストだ」と望月氏は強調する。
受け入れテストの位置づけと役割についてより明確に定義しているのが、ソフトウェアエンジニアリングの知識体系であるSWEBOK(Software Engineering Body of Knowledge)である。SWEBOKは、過去40年以上にわたるソフトウェアエンジニアリングに関する知識をまとめた体系で、ソフトウェアの品質を高めるためにはどのようなことを行えばいいのかについてのヒントが多く得られる。そこには、「ソフトウェア要求の基本的な特性のひとつに、完成した成果物がそれを満たしていることを確認できなければならないというものがある」と記されており、確認のためには個々の要求をいかにして検証するかを計画することが重要な作業であり、多くの場合は受け入れテストの設計がこれに当たるとしている。 そんな受け入れテストでありがちな悩みが、「やっていることに確信が持てない」、「リリース後に不具合が指摘される」、「工数/時間がかかり過ぎる」といったものだ。
望月氏は、これらの悩みの直接原因として考えられる事柄として、確信が持てないことについては合否基準が曖昧であること、リリース後の不具合については網羅基準がないことや必要なテストが不足していること、そして工数がかかる点については無駄なテストが多いことを挙げた。
「受け入れテストの悩みを克服するためには、まずは受け入れテストでやりたいことを整理することが大切だ。事前のテスト計画をしっかりと考えながらテストの目的を明確にするのが適切なアプローチとなるだろう」(望月氏)
テストの目的とは、そのテストをやることで何を確認したいのか、また何を達成したいのかであり、そうした目的達成のためにどうするかという視点を持つことで、考えがまとまりやすくなり、良い計画が立てられるというのが望月氏の見解である。
一般的な受け入れテストの目的とは、システムが要求に適合していることの確認とそのシステムを受け入れてよいかどうかの判定にある。そのためには、典型的なタスクを実行してみることにより、システムの振る舞いと顧客要求とを照合することが必要となるのである。
こうした受け入れテストの目的を考える上でのポイントとなるのが、システムが仕様どおりにできているかの検証ではなく、システムを使うことで顧客やユーザーの要求が満たされているかどうかを見ることなのだ。加えて、個々の要求は実現されていても組み合わせると不具合が生じたり、異なる利害関係者の要求が衝突していたりといった事柄について問題がないことを確認することもポイントとなるのである。
受け入れテスト効率化の「3つの課題」をいかに克服するか
ビジネス要求にシステムが柔軟かつ迅速に応えるためには、受け入れテストの効果や効率を高めることが重要になる。その時に生じる技術的な課題が、「合否基準の判定」、「網羅基準の設定」、「テスト設計(テストケース作成)」の3点である。
このうちテストの合否基準については、ひとつの基準だけで判断するのではなく、複数の基準を設けて総合的に判断することがポイントとなる。
次にテストの網羅基準に関して、望月氏は次のようにアドバイスする。「すべてのユースケースのすべてのフローを網羅するのは現実的には難しい。特に巨大なシステムともなればあまりに膨大になってしまうだろう。そこでまず、要求項目を満たすユースケースの最小集合を抽出して全部実行してみるという方法がある。ただそれでも一般的には多いのその先を伝える総合情報サイトこのリーフレットは、マイナビニュース「ソフトウェア品質」サミットの講演内容をもとに作成しています。3で、要求項目の中から優先度の高いものやリスクの高いものについて全フロー(代替フローや例外フローへの分岐を含む)を網羅することを基準にするのが効果的と言えるだろう」
最後のテスト設計(テストケース作成)については、テスト分析とテスト設計という大きく2つのステップを意識して考えるのが望ましい。いきなりテストケースを考えるのでなく、まず、テストベース(テスト設計の入力となる開発資料一式)からテストで確認すべき事項を抽出・整理し(テスト分析)、次にこれらの事項に対しどのようにテストをするかを考える(狭義のテスト設計)のである。テストケース作成で大切なのはテストの意図を明らかにすることであり、テスト技法(テスト設計技法)を活用することで意図がはっきりしたシナリオや操作を考えやすくなる。デシジョンテーブルテスト、境界値テストなど、受け入れテストでも有用な技法はぜひ活用したいところである。
適切な受け入れテストがもたらす効果とは
このような考え方に基づいた"きちんとした"受け入れテストを実施することで得られる直接的な効果としては、言うまでもないが、システムが顧客やユーザーの要求にかなっていることを確認できるという点が挙げられる。加えてテストを実行して問題が把握できた場合には、稼働開始の前に問題に対処することで、運用時のトラブル減少につなげることもできる。
さらに望月氏は受け入れテストには間接的な効果も大きいとしたうえで、その理由を次のように述べた。「テストの分析や設計を行うことにより、要求の不備、曖昧さや不整合など、要求にまつわるさまざまな問題をテストの実行に先立って見つけることができるはず。そうなれば、その時点で問題に対応できてしまうことになる。早期にテスト設計に着手すれば、それだけ要求にまつわる問題をより早い時期に発見できる」
そして講演の最後に望月氏は、「テストツールをうまく活用して、効率よく受け入れテストをマネジメントすることをぜひおすすめしたい。今回お話したのは受け入れテストの基本中の基本に過ぎないが、少しでも役に立つようであれば幸いだ」と述べて壇を後にした。
[PR]提供: