テスト自動化のニーズ

https://www.veriserve.co.jp/asset/approach/column/test-automation/test-automation01.html


テストの自動化とは、人の手によって行われるソフトウェアテストの全て、もしくは一部をツールを用いて自動でテストを行うことを指しています。

ソフトウェアテストには、『テスト設計・テスト実施・実施結果の確認・進捗管理・レポートの作成等』の作業があります。

これらの作業の効率向上・範囲の拡大、またはコスト削減・実施時間の短縮に利用される仕組みがテストの自動化です。


自動テストと手動テストの違いは以下の通りになります。

1. 自動化が注目されている理由


・スピード納品の定着

ビジネス環境の変化に伴い、従来よりもソフトウェア開発の期間が短くなっています。

以前は、適切かつ計画通りに開発作業を行っていたため、1年以上もの時間をかけていました。しかし現在は市場のニーズの変化に遅れずに開発することが求められています。

そのため、スピード感があり一定品質のソフトウェアの開発をしなければいけなくなっています。

・テスト項目の増加

新たにリリースされるソフトウェアの数が増え続けることでソフトウェアの複雑さや規模が拡大されていきます。

そのためテストにかかる工数も比例して増え続けることになります。

またソフトウェアの複雑さ・規模が拡大する以外にも、ほとんどのものが長期的で継続的な開発で運用されているためリリースの度に同じテストを繰り返して行うケースも増加します。

・開発手法の変化

多様性や変化スピードが増しているユーザーのニーズに合わせて開発途中であっても仕様を市場に合わせて変えていくといったアジャイル型開発への取り組みが年々加速している。

アジャイル開発では各工程の中で何度もテストを実施します。


テストの自動化は、時間の効率化・テスト項目の削減・短期間のソフトウェア開発のニーズがどんどん高まっていく現在・今後の将来にあわせて注目が高まっていくと考えられます。

2. 自動化のメリット

テストの自動化を導入することにはいくつかのメリットがあります。

・コストを抑えて品質の向上

品質保証を手動で行うと膨大なコストがかかります。

そのため品質保証の範囲を狭めてしまうことも多々あります。

その際にテストをしなかった箇所でバグ・障害が発生することも珍しいことではありません。


手動で行うテストよりもコストが大きくないため、狭めてしまった箇所、避けられがちな箇所を自動化することで後々、障害を発生する可能性がある機能を発見できる割合を高めることができます。


https://shiftasia.com/ja/column/%E3%83%86%E3%82%B9%E3%83%88%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%A8%E3%81%AF/


・不具合の早期発見

自動化の導入により素早くシステムの不具合・問題を発見することができるようになります。


テスト実行の時間短縮によりバグの早期発見、修正といったサイクルを手動のテストと比べて早くすることが可能になります。

また時間を問わずに毎日、毎週といったように繰り返し実行することでデグレーションの確認や修正後の確認等を無駄なく実施してくれます。

そのため、手動テストにかける時間・開発にかける時間の最適化を可能にしてくれます。

・人不足でもテスト可能

テスト自動化をおこなっている範囲内であれば、人の手を使わずにテスト実施を進めることが可能になります。

そうすることで何らかの原因によって人手が不足するといったことを最小限で抑えることができるようになります。

また特定の人でしかテスト実施ができないといったテストの進捗に影響を与えることがないため、ある程度スケジュール計画を練りやすくなることもメリットとして挙げられます。

・テストの高速化

手動でのテストと比較して実行にかかる時間を大幅に短縮することが可能になります。


人が行う判断・物理的にかかってしまう手作業の時間の削減や時間経過とともに起きてしまう効率の低下も自動化であれば起きません。

また24時間作業することも可能なため、手動で行うテストよりも時間的かつ効率的にテストの実行ができるようになります。

・ヒューマンエラーの排除

手動のテストでは、ヒューマンエラーが必ずといっていいほど発生します。

その後何らかの問題が発生した場合、ヒューマンエラーが発生した箇所の判断にも時間が取られてしまう可能性があります。

しかしテストの自動化では、システムが合格・不合格の判断をするためそういったことの問題をなくすことができます。

・営業時間外でのテスト

手動のテストでは、テストの実施者が稼働している営業時間中でしかテスト実行するタイミングがありません。

またテストのために開発側が関連の機能をストップしたり、スケジュール等の調整が必要になってきます。


しかし、テストの自動化を導入していれば時間帯を問わずにテストを行えます。

終業後、休業日といった時間でテストを実行できるため、開発の方の生産性を下げることなく対応ができるようになります。

3. 自動化のデメリット

自動化のメリットがある一方、反対に導入をしていない環境もあります。

デメリットもいくつかありますのでご紹介します。

・手動テストと比較すると多額の初期費用が発生する

手動テストの場合、テストエンジニアの稼働コストが主なコストになります。

しかし自動化では、テストコードを作成する・ツールを使いこなすための学習・どのくらいの範囲を自動化するのか・自動化することでどういった効果を求めるかといったような手動テストに比べるとかかる工数・費用・効果が異なります。

そのために導入の際には費用対効果を考慮して導入する必要性が出てきます。


・長期的かつ継続的な保守・運用が必須

自動化の導入をすることですぐに効果を得られるわけではありません。

長期間、継続的に運用することでやっと効果を発揮するものになります。

長期間の運用にはそのための工数を割り当てる必要性が出てきます。


また開発が終了したらそこで一緒に終わるものでもありません。

導入後にメンテナンス・アップデートをする必要があります。

テストの対象に新機能が追加されればそれに応じて新機能に対してのテスト内容を追加しなければいけないためです。


自動化を導入した時の状態をそのままにしてしまえば、うまく利用することができずに結局手動のテストを実施する。

もしくは再度テストコードを大幅に更新するといった手間が増えるため、それに対してのコストや工数を割かなければいけないといった状態になる可能性も出てきます。

導入の際には保守・運用の体制についても考えなければいけません。


https://www.veriserve.co.jp/asset/approach/column/test-automation/test-automation04.html

・テスト内容が間違っていたとしてもわからない

自動化する際にテストコードを書いていきます。

その際に書き手がテスト観点とはまったく違うことを書いていた場合でもその処理が合っていれば止まることなくテストを実行し続けてしまいます。

この間違いを見つけ出すことは容易ではなく、リリースされてから気づくことも少なくありません。


自動化して実行しているテストにはヒューマンエラーがなくともテストコードを書いている段階でヒューマンエラーが発生してしまうこともあるということです。

・その通りにしかテストを実施できない

自動テストではテストコードの通りに実行をしていきます。

そのテストコードがあっていれば問題ありません。

しかし自動テストの対象外であった場合は正しく判断ができません。

検出できないということになります。


手動のテストでは人間が判断するため、ちょっとした違和感やテストケースに書いていない暗黙的なものも処理することができます。

自動のテストはいわば言われたことのみしかできないため、人間的な暗黙の解釈を判断できません。

・自動テストの向き・不向きがある

原理的に手動で実行しなければいけないようなテストや自動での操作を防止する仕組みのテストでは自動化することができません。

できないという以外にも不向きなテストも存在します。

何度も実施しないようなテスト・仕様の変更が流動的に行われ頻繁に修正が入るというようなテストでは自動化で確認することも可能ではありますが、随時更新をかけたりと開発者の負担が増えてしまうため手動で実行することが望ましいと言えます。


自動化のテストにはできない・向かないテストというものが存在しています。

つまり全てのテストを自動化するということはできず、手動のテストに頼らないといけない場面が必ずあるということです。

4. まとめ

テストの自動化は近年のビジネス的観点からも急速に注目を集め、取り入れている開発現場が増加している。

しかしながら、取り入れるためのメリット・デメリットを総合的に判断していかなければコストの無駄遣いという結果で終わってしまう可能性もありえるツールだと認識して取り入れなければいけない。


また全てを自動化するということはできない。

自動化にも実行できないテストやあまり適さないテストケースも存在しているため、手動のテストと自動のテストをうまく織り交ぜてテスト工程を完了させる必要があります。