ソフトウェアテストの工数を減らし効率化する方法を紹介!(ソフトウエアテスト効率化)

更新:2024.5.16
著者:Sky株式会社


【設計】ソフトウェアテストを効率化する3つの方法

品質を下げることなく効率化することが非常に難しいソフトウェアテストに、頭を悩ませている担当者も多いのではないでしょうか。ソフトウェアテストを効率化する手法は「テスト設計の効率化」と「テスト実行の効率化」の2つに大別できます。最初に、テストの設計段階における効率化の方法についてご紹介します。

テストケースの流用

過去に作成したテストケースを流用することは、ソフトウェアテストの効率化においては有効です。似たような内容のソフトウェアテストを設計する場合、過去案件のテストケースを流用することで、テストケースを一から作成する手間を省くことができます。

しかし、過去案件に携わっていなかったエンジニアが、過去のテストケースを流用してテスト設計を行うことも往々にしてあります。テストケースはその作成手順や意図が作成者以外にわかるようなかたちで管理されていないことが多いため、流用する場合は過去のテストケースの内容を理解した上で、今回の開発内容に適しているか、システムの仕様と合っているかなどを入念に検証することが必要です。

組み合わせテスト

組み合わせテストとは、ソフトウェアテストにおいて、複数の条件を組み合わせることでシステムの欠陥を特定するテスト技法です。単一の条件では発生せずとも、複数の条件が組み合わさった場合に発生する欠陥を検出できます。この組み合わせテストは、テスト技法の中でも特に使用頻度が高く、ソフトウェアを開発する上で避けて通れません。また、組み合わせテストでは「因子」と「水準」という用語を用いてテストを実施します。因子とはテストすべき条件を指し、水準とは各条件が取り得る具体的な値を指します。

組み合わせテストの大まかな手順として、「因子の洗い出し」「因子ごとの水準の洗い出し」「禁則組み合わせの排除」「組み合わせ表の作成」の順番で進めていきます。組み合わせテストでは、因子と水準の組み合わせによってテストケースを作成します。テストケースに漏れを生じさせないためにも、因子と水準で考えられるものはすべて洗い出しましょう。禁則組み合わせとは、システムの仕様や論理上あり得ない組み合わせパターンのことを指します。禁則組み合わせを排除することで無効なテストを除外でき、必要なテストケース数をより簡単に把握することができます。最後に、組み合わせテストのパターンを表に落とし込むことでテストケースが完成します。テストケース作成後の工程としては、一般的なブラックボックステストと同じです。

では、実際に組み合わせテストの具体例として、Webサイトのテストを実施するケースを考えてみましょう。以下のケースでは、「OS」「Webブラウザ」「言語」が因子で、「Windows」「Microsoft Edge」「日本語」などが水準です。

  • OS:Windows、Mac
  • Webブラウザ:Microsoft Edge、Google Chrome
  • 言語:日本語、英語

上記の選択肢がある場合、組み合わせは以下の表のように2×2×2で8通りです。

テストケース OS Webブラウザ 言語
1 Windows Microsoft Edge 日本語
2 Windows Microsoft Edge 英語
3 Windows Google Chrome 日本語
4 Windows Google Chrome 英語
5 Mac Microsoft Edge 日本語
6 Mac Microsoft Edge 英語
7 Mac Google Chrome 日本語
8 Mac Google Chrome 英語

上記の表程度の数であれば簡単にテストできますが、因子や水準が増えると、それに合わせてテストケースも加速度的に増えていきます。例えば、各因子と各水準を2つずつ増やした場合では、4×4×4×4×4で1,024通りです。

このように、組み合わせテストでは因子や水準に多数のパターンがあり、すべてを組み合わせると膨大な数のテストケースが必要になります。そのため、以下で紹介する2因子間網羅(ペアワイズ)のような、組み合わせテスト技法を用いるのが一般的です。

しかし大前提として、どのようなテストであっても、すべての条件の組み合わせを網羅できることが理想です。最初から因子や水準の組み合わせを独断により省略してしまったり、いきなりテスト技法を適用してテストパターンを削減したりすると、本来テストケースがカバーすべき条件が満たされない可能性があります。

2因子間網羅(ペアワイズ)を用いて効率的にテスト数を減らす

組み合わせテストを効率化するテスト技法として、「直交表」と「2因子間網羅」が主に用いられます。直交表は水準の出現回数が均等になること重視し、2因子間網羅は2因子間が重複しないことに重きを置きます。ここでは、よりテストケースを削減できる2因子間網羅をご紹介します。

2因子間網羅とは、2つの因子の組み合わせを網羅する表を作成してテストを行う技法のことです。欠陥は、1~2因子間の組み合わせによって発生することが大半であり、3つ以上の因子の組み合わせによって起こることはほとんどないといわれています。そのため、欠陥が多く予想される2因子間の組み合わせを網羅することで、組み合わせを全網羅しているテストよりもテスト数を削減することが可能です。ただし、2因子間網羅の目的はあくまでもテスト数の削減であるため、テストの数が減る代わりに欠陥を見逃してしまうリスクが増えるということには、十分留意しておく必要があります。

この2因子間網羅の考え方を利用すると、上記のテストケースは以下のように削減することができます。

テストケース OS Webブラウザ 言語
1 Windows Microsoft Edge 日本語
4 Windows Google Chrome 英語
6 Mac Microsoft Edge 英語
7 Mac Google Chrome 日本語

「OS」と「Webブラウザ」に焦点を当てると、それぞれの値の組み合わせが網羅されていることがわかります。また、「OS」と「言語」、「Webブラウザ」と「言語」の組み合わせにおいても、同じように網羅されています。このように、2因子間網羅はテストケース数を圧縮しやすいのがメリットです。一方で、組み合わせによってバラつきがあることと、3因子間の網羅度は低くなることに注意しましょう。値が未入力のケース、因子や水準が多くなるケースなども考慮して、2因子間網羅によるテストが十分かどうかは入念に検証することが必要です。

リスクベースドテスト

ソフトウェアテストの効率化において、リスクベースドテストを取り入れることも効果的です。リスクベースドテストとは、テスト対象のリスクの大きさに基づいて、テスト作業の優先順位を決めることに重きを置いたテスト技法です。JSTQBの「テスト技術者資格制度 Foundation Level シラバス Version 2023V4.0.J01」では、リスクベースドテストを以下のように定義しています。

リスク分析とリスクコントロールに基づいてテスト活動を選択し、優先順位を付け、マネジメントしていくテストアプローチをリスクベースドテストという

ソフトウェアテストを設計する際、テストの終了条件として「すべてのテストを実施すること」を掲げている場合があります。しかし、考え得るすべてのテストを実施することは、大量の工数が必要となり、実施期間も長くなってしまうため、変化が速い現代のビジネス環境に適合しているとはいえません。そこでテストの効率化に役立つのがリスクベースドテストです。

ソフトウェアテストにおけるリスクの評価方法として、「テスト対象に欠陥が潜在している可能性」や「テスト対象に不具合があった場合の影響」など、テスト対象のバグに着目する方法があります。また、定量的なリスク把握のために、リスクの大きさを3段階~5段階程度で評価するのが一般的です。

例えば、「Webサイトに支払い機能を構築する」要件1と、「デバイスによってWebサイトの文字の大きさを調整する」要件2があったとします。この場合、要件1の方が要件2に比べて、より重要な機能であることは想像に難くありません。要件1が正しく実装されていなければ、顧客からの支払いが滞り、ビジネスの根幹を揺るがす事態に発展しかねません。要件2も正しく動作しなければ問題ではありますが、金銭的な影響はなく、要件1に比べて軽微な影響といえます。加えて、開発時にバグが発生する可能性の高さを考慮しても、要件1の方がリスクは高く、より優先的にテストを実施していく必要があります。しかし、前述のように「すべてのテストを実施すること」だけを終了条件にしていては、両方の要件に大量かつ同等のテストを実施することとなり、ソフトウェア開発の工期や工数を圧迫してしまいます。

上記は少し極端な例ですが、仮にローリスクなテストケースを先に作成してテストの実施が完了したとしても、ハイリスクなテストケースの作成が終わらずにテスト未実施であれば、ソフトウェアはリリースできません。リスクベースドテストでリスクの大小を判断し、テストケースの作成・実施の優先順位を決め、効率的にソフトウェアテストを進めていきましょう。

出典:JSTQB「テスト技術者資格制度 Foundation Level シラバス Version 2023V4.0.J01」

【実行】ソフトウェアテストの効率化

ソフトウェアテストの実行段階で効率化する方法としては、「ソフトウェアテストの自動化」と「テスト要員の配置の見直し」が挙げられます。ソフトウェアテストは、コンピューターにテストを任せる、人が手動で行う、もしくはその両方を用いてテストを実行していきます。ここではコンピューターと人、それぞれの場合において、ソフトウェアテストを効率化していく方法をご紹介します。

ソフトウェアテストの自動化

テスト自動化ツールなどを使用し、ソフトウェアテストをコンピューターに任せて自動化することで、テスト作業の負担を大きく軽減できます。また、手動テストに比べて精度が高く、高頻度で繰り返し実行できるため、早期に不具合や問題点を発見できることも大きなメリットです。人的リソースの問題を解消できたり、24時間いつでもテスト実施が可能になったりするなど、テスト自動化はソフトウェアテストの効率化に大いに役立ちます。

しかし、テストの自動化は手動テストよりも初期費用が高く、テストコードの運用・保守が必要になるというデメリットも存在します。また、すべてのテストが自動化できるわけではなく、手順が決まっていないテストやユーザビリティテストのような主観的要素を含むテストは、自動化には向いていないことに注意が必要です。

以下でご紹介する「リグレッションテスト(回帰テスト)」のように、繰り返し行うテストにはテスト自動化は高い効果を発揮します。テスト対象と範囲を設定し、適切にテストを自動化していくことで、ソフトウェアテストの効率を大きく改善することが可能です。

テストの自動化について詳しくは、こちらの記事をご覧ください。

テスト自動化とは? ツール導入のメリットや流れを徹底解説

https://www.skygroup.jp/software/quality/article/02/

テスト要員の配置の見直し

ソフトウェアテストを効率化していく上で、時にはテスト要員の配置を見直すことも必要です。人が手動でテストを行う以上、やはり担当者ごとにスキルの差が存在するのは事実です。テスト内容と担当者スキルの整合性がとれていないことにより、テストが思うように進まないケースは意外と多くあります。もちろん担当者の教育や人的リソースの問題もあるため、一概には言えませんが、適材適所にテスト要員を配置することでソフトウェアテストの効率を上げることができます。

また、テスト実行中であっても、柔軟にテスト要員の配置転換を行える体制づくりも有効です。テストの進捗はなかなか予定どおりにはいかず、シナリオを持ってテストを始めても、どこか特定の箇所で進捗が遅れ、テスト全体の進み具合に影響を及ぼすことがあります。そのような場合でも、臨機応変にテスト要員の配置転換を行うことで遅れを取り戻し、従来どおりのスケジュールでソフトウェア開発を進めることができます。

ソフトウェアテストの効率化が必要となる3つの理由

ここまでソフトウェアテストを効率化するための具体的な方法をご紹介してきました。しかし、なぜそもそもソフトウェアテストの効率化が必要なのでしょうか。以下でその大きな理由を3つご紹介します。

ソフトウェアテスト工数の削減

ソフトウェアの開発において、開発期間が無限にあるプロジェクトなどは存在せず、顧客に届けるまでの納期が必ずあります。基本的にこの納期を中心として開発が進められるため、進捗状況によってはテスト工数の削減が必要になる場合も少なくありません。テストの効率化を図ることで、テストの工数削減につながり、結果として納期通りに顧客へソフトウェアを提供できます。

リグレッションテスト工数の削減

リグレッションテストとは、プログラムに変更を加えた際に、修正した箇所以外に影響がないかを確認するテストを指します。別名「回帰テスト」とも呼ばれるこのテストは、ソフトウェア開発の現場で日常的に行われています。ソフトウェアは一度開発して終わりではなく、さまざまな変更を反映して修正していくため、必然的にリグレッションテストの数が増え続けてしまい、テスト工数を圧迫しがちです。実行頻度が高いテストだからこそ、リグレッションテストの工数を削減できれば、全体的なテストの効率化を見込むことができます。前述のソフトウェアテストの自動化は、このリグレッションテストの工数削減に高い効果が出る方法です。

ソフトウェアテスト品質の向上

ソフトウェアテスト品質の向上は、そのままソフトウェア自体の品質の高さへ直結します。テストを効率化することで、より事細かにテスト管理が行えるようになり、たとえ同じ工数であったとしてもテストの品質を向上させることが可能です。結果として、より高品質なソフトウェアの開発ができるようになります。

ソフトウェアテストの効率化のためのポイント

ただやみくもにソフトウェアテストの効率化を求めると、かえってテストの品質が下がってしまうことになりかねません。ここでは、ソフトウェアテストの効率化を考える際に抑えておくべき4つのポイントをご紹介します。

タスクの洗い出しと課題の検証

最初に実施すべきことは、ソフトウェアテストにおけるタスクの洗い出しと課題の検証です。テスト工数の予算や実績、テストケース、チーム体制と役割分担など、過去のプロジェクトで残された客観的な事実に基づいてタスクの洗い出しを行います。どのタスクにどの程度の時間を使っているのかを把握することで、時間をかけすぎているタスクや問題が発生している工程を検証することができます。

このタスクの洗い出しと課題の検証を行う目的は、思い込みによる課題の決めつけを回避することにあります。思い込みによる課題の判断は、テスト品質の低下につながる可能性が高く、危険といえます。どこに問題が潜んでいて、それが本当に問題なのかを正しく理解するためにも、タスクの洗い出しと課題の検証は時間をかけて入念に取り組むべきポイントです。

現状の工数(リソース)を考えた優先順位づけ

課題の検証を終えた後、どの課題から解決していくべきかの優先順位を決めます。ここで意識しておくべきポイントは、現状の工数(リソース)を考慮し、課題を解決した場合の効果の高さによって優先順位を決めていくことです。課題を検証したものの、すべての課題に対処できなかったり、解決しても効果が低かったりすることも考えられます。効率化によってテスト品質を上げるためにも、課題の優先順位づけは必ず行いましょう。

優先順位に対して本当に効率化できるのかを確認する

課題に優先順位をつけ、いざその課題を効率化しようとする前に、もう一つ考えなければならないポイントがあります。それは、その課題が限られた工数の中で、効率化できるのかを確認することです。課題の優先順位づけは、あくまでも課題を解決した場合の効果の高さで決めているものであり、実際にそれが効率化できるかという視点は含まれていません。優先度が高い課題であったとしても、解決に時間がかかる場合や、そもそも効率化が困難な場合もあるため注意が必要です。

必要に応じてツールを活用したテスト自動化を行う

ツールを活用したテストの自動化は、効率化する上で非常に高い効果が見込める方法の一つです。しかし、ツールによっては、それまで行ってきたテスト作業に大幅な見直しが必要となる場合があり、導入時に気をつける必要があります。ツールを導入したときの効果とリスクを考慮し、問題ないようであれば活用していくことをお勧めします。

ソフトウェア開発(ソフトウエア開発)ならSky株式会社

Sky株式会社では、お取引先のメーカー様や企業様にソフトウェアエンジニアが常駐して開発を行うことも、弊社で受託開発することも可能です。要件定義から、設計や開発、検証、運用保守まで、あらゆるフェーズでのソフトウェア開発を支援します。また、今回ご紹介したソフトウェアテストの効率化をサポートするテスト自動化ツール「SKYATT」もご用意。自動テストによる効率化が求められるなか、その効果をさらに引き出すご提案をいたします。

Sky株式会社のソフトウェア開発について、詳しくはこちらをご覧ください。

https://www.skygroup.jp/software/

まとめ

ソフトウェアテストを効率化することで、テスト品質の向上、ひいては開発するソフトウェア自体の品質向上につながります。しかし、ソフトウェアテストの効率化は品質担保との兼ね合いが難しいほか、テスト自動化ツールの導入などにも専門的な知識が必要となるため、悩まれている企業は多いと思われます。Sky株式会社は、企業・団体のソフトウェア開発を幅広くサポート。ソフトウェアテストの効率化にお困りの場合も、ぜひお気軽にご相談ください。

著者 Sky株式会社

Sky株式会社は、家電のシステム開発を手掛けたのをきっかけに、デジタル複合機やカーエレクトロニクス、モバイル、情報家電、さらに自社商品として教育分野における学習活動ソフトウェアや、公共・民間向けクライアント運用管理ソフトウェアなど、幅広い分野でのシステム開発を展開しております。

お問い合わせ

ソフトウェア開発・評価/検証(ソフトウェアテスト)に関するご依頼・ご質問は、下記フォームよりお問い合わせください。弊社製品・サービスに関するお問い合わせは、各商品Webサイトより受けつけております。

パートナー企業募集

Sky株式会社では長期的なお付き合いができ、共に発展・成長に向けて努力し合えるパートナー企業様を募集しております。パートナー企業募集に関するご依頼・ご質問は、下記フォームよりお問い合わせください。

ページのトップへ