開発スピードを上げたい!バランスの取れたテスト自動化にヒントがある
近年、ソフトウェア市場では、ユーザーの求める機能をいち早くプロダクトに追加してリリースすることが求められています。特にWEBサービスやモバイルアプリケーションでは、アジャイル開発手法を導入し、短いスパンで追加機能をリリースする企業、現場が増えてきています。
しかし、リリースサイクルを早くすることで課題も出てきます。なぜなら、テストの量が増大し、テスト実行がボトルネックとなり、逆に開発スピードを遅する要因となってしまっているからです。 この課題を解決する方法として、テスト自動化があります。ただし、各テストレベルでバランスの取れたテスト自動化を行わないと、このテスト自動化が、開発スピードを遅くしてしまう可能性があります。本記事では、テスト自動化の役割、テストレベルのテスト自動化の説明と、開発スピードを上げるためのテストの取り組み方について解説いたします。
開発スピードはなぜ、期待通りに上がらないのか?
プロダクトの成長に比例して、プロダクトは多種多機能を持つようになります。開発が見なければいけないスコープがどんどん広がります。アジャイル開発の元、短い期間で機能追加・修正のプロジェクトが発生した場合、手動テストだけでプロジェクトを進めるとどうなるでしょうか?
- 2~3週間と短い期間で開発・テストを行う必要がある
- 限られたリソースで、限られた機能(プログラムを修正した箇所あたり)のみテストする
- プログラム修正やバグフィックスでプロダクトが繰り返しデプロイされるため、デプロイの都度同じテストを繰り返し実施する
- 探索的テストなどで改修していないところで不具合が見つかると、テストスコープの見直しや追加テストが発生する
このように、手動テストだけでアジャイル開発を行おうとすると、品質を維持するために工数が膨らむことがあります。そして、人手でがんばろうとすると、テスト工程が長くなってしまい、開発スピードが落ちてしまいます。
そこで、開発スピードを上げるためには、バランスの取れたテスト自動化にヒントがあるのです。
テスト自動化によって開発スピードが上がる理由
テスト自動化は幅広いカバレッジでリグレッションテストを毎回行うことができます。そのため、アプリケーションの改修を行う都度テストを行うことで、デグレ等の不具合を改修のタイミングで見つけることができ、不具合原因の特定も短時間で行うことができます。
また、テスト自動化は手動テストより実行速度が断然早いです。そのため、開発に改修したアプリケーションのテスト結果を早くフィードバックすることができます。
このように、早いテスト実行と、早いテストのフィードバック、そして早い不具合の原因特定によって、開発スピードを上げることができます。
テストピラミッドとは
テストにはテストピラミッドという、テストレベルとテストカバレッジの適切な比率をビジュアライズしたものがあります。(図1参照)
一番底辺のUnit Test はプログラムの小さいユニットをテストするものです。基本的にプログラマーが担当します。
Unit Testは内部品質を向上する側面でもあります。Unit Testは機能のテストだけではなく、ドキュメンテーションとしても機能しており、ソースコードの可読性を上げる役割を担っています。
内部品質を上げることで、プログラムの修正やリファクタリングを行う時、 素早いテストのフィードバックで不具合の混入をすぐに発見してくれるため、容易にコード修正を行うことができます。
Unit TestはUI Testに比べて高速でテスト実行することができ、実装コストも低く抑えられます。
一方、頂点のUI Testはシステムのふるまいをテストするものです。基本的にQAエンジニアが担当します。
UI Testは外部品質を向上する側面でもあります。外部品質を上げることで、不具合の少ないシステムをユーザーに提供することができる。UI Testは手動テストに比べればテスト実行速度は速いですが、Unit Testに比べて低速で実装コストも高くなります。
このため、図1のテストピラミッドのように例えるならば、Unit Testでは正常系・異常系など様々な機能テストをカバーすることが可能です。一方で、UI Testでは基本的機能の正常系で数パターンのテストに絞ることで、品質を落とさず、開発スピードを上げることができます。
![ダイアグラム
自動的に生成された説明](/t-dash/cms/wp-content/uploads/2024/06/image.png)
開発スピードが遅くなるアンチパターンとは
テスト自動化戦略のアンチパターンとして、Ice Cream Coneというものがあります。テストピラミッドとは逆のカバレッジの比率をとったものです。Unit Testを少なくし、UI Test自動化を多くしたものと言えます。
Unit Testを全く実装せずに、すべてのテストをUI Test自動化でカバーすることは、ある程度は可能です。しかし、このUIテスト自動化を多くすることで、テスト自動化のコストが増え、実装に時間がかかります。またテスト実行時間がUnit Testよりも長くなってしまいます。
結果として、テスト完了までのトータル時間が増大し、開発スピードのボトルネックになる可能性があります。
![ダイアグラム
自動的に生成された説明](/t-dash/cms/wp-content/uploads/2024/06/image-1.jpg)
The Software Testing Ice Cream Cone – Saeed Gatson
まとめ
「開発スピードを上げたい!バランスの取れたテスト自動化にヒントがある」と題して、ご紹介してまいりました。
テスト自動化は高い品質を維持しつつ開発スピードを上げるためには必須となる技術です。しかし、各テストレイアに合わせたテストの役割とカバレッジを適切に設定しないと、かえってテスト実行速度が遅くなってしまう可能性があります。
互いのレイアで得意なテストとカバレッジを持たせることで、全体の品質を高めることができ、かつテスト実行速度を高めることができ、開発スピードを上げることが可能です。
誰でもカンタンにテスト自動化ができる時代は、すぐそこまできています。当サイトでは、テスト自動化ツールに興味のある方へ、「テスト自動化 推進ガイドブック」と「テスト自動化ツールT-DASH 基本ガイドブック」のダウンロード資料をご用意しております。ぜひダウンロードいただき、資料をご覧ください。
またテスト自動化ツール「T-DASH」を無料でトライアル利用できる環境もご用意しています。ぜひ、お試しいただき、ツールを活用したテスト自動化に挑戦してみてください。