📑

プロパティベーステストを使用した自動エンドツーエンドテスト | パートI

2025/02/24に公開

ソフトウェア開発において、テストは依然として重要な側面です。ソフトウェアエンジニアや品質保証(QA)担当者は、多様な技術や方法論を駆使してアプリケーションを厳密にテストします。しかし、これらの対策が講じられていても、バグは発生し得ます。

現代では、ChatGPTのような高度な技術がテクノロジー分野で人間の能力を超えるほど進化していますが、それでもソフトウェアテストで絶対的な完璧さを達成することは依然として複雑な課題です。

ユニットテストは本当に有効だと思いますか?🧐 先ほどの引用のように、私たちは本当に「ユーザーが行うことだけをテストしている」のでしょうか? 手動の回帰テストやテストスイートの作成は、QAにとってまだ必要なのでしょうか?

これから進むにつれて、これらの質問に対する答えを明らかにしていきます。まずは基本から始めて、AIの精度を超えるかもしれないテスト自動化プラットフォームの開発を目指して進んでいきましょう(冗談です😅 いや、もしかしたら本気 🤨)。

ソフトウェアテストとは?

ソフトウェアテストは、ソフトウェアの正確性を評価するプロセスです。信頼性、スケーラビリティ、移植性、再利用性、ユーザビリティなど、さまざまな特性を評価します。アプリケーションをテストする方法には、いくつかの手法があります。

Software testing chart

代表的なテスト手法
ユニットテスト(Unit Testing)

ソフトウェアの各ユニット(関数や条件など)を個別にテストする手法。
結合テスト(Integration Testing)

複数のユニットを組み合わせてテストし、相互作用による欠陥を発見する。特に異なる開発者が開発したコンポーネント間の問題を特定するために実施される。
システムテスト(System Testing)

アプリケーション全体のエンドツーエンド(E2E)テストを行い、実際のユーザーが体験するフローを確認する。
受け入れテスト(Acceptance Testing)

製品の最終リリース前に、顧客やプロダクトマネージャーなどのドメインエキスパートが行うテスト。
詳細なテスト手法については、こちら を参照してください。

エンドツーエンドテスト(E2E)は他のテストより優れているのか?

本記事では、特に開発フェーズにおけるテストに焦点を当てます。そのため、ロードテストのようなパフォーマンステストは対象外です。

開発フェーズでは、主に ユニットテスト と エンドツーエンドテスト(E2E) という2つの主要なテスト手法が用いられます。

kind of tests we need

なぜ多くの開発者はユニットテストを好むのか?
細かい制御が可能(Fine-grained Control)

ユニットテストはホワイトボックステストであり、開発者はコードの内部を理解した上でテストを書くことができる。
細部への注意(Attention to Detail)

各ユニットレベルでテストが行われるため、細かいバグを検出しやすい。
作成が簡単(Simplicity in Creation)

E2Eテストと比べると、ユニットテストは作成が容易。
素早いフィードバック(Feedback)

コード変更のたびにテストを実行できるため、即座に問題を発見できる。
カバレッジの向上(Coverage)

コードの行カバレッジや分岐カバレッジを測定でき、テストの適用範囲を確認できる。
では、ユニットテストだけで十分なのか?
🤔 完璧なソリューションに見えるユニットテストですが、いくつかの問題があります。

ユニットテストはデータベースなどの外部依存関係を直接テストしません。
モックオブジェクトを使用するため、実際のアプリの挙動を完全に再現できない場合がある。
アプリケーション全体の動作を保証するものではない。
一方、E2Eテストはどうでしょう?

E2Eテストは、ユーザーの行動をシミュレーションし、アプリケーションの実際のレスポンスを検証します。これにより、アプリ全体の統合テストが行われ、異なるコンポーネントが正しく連携することを確認できます。

開発者はE2Eテストをあまり書かない傾向がありますが、それは 作成とメンテナンスが難しい ためです。そのため、多くのプロジェクトでは QAチームがE2Eテストを担当 します。

しかし、もし E2Eテストが簡単に書ける ようになったらどうでしょう?
開発者はユニットテストだけでなく、開発段階で包括的なE2Eテストも実施できるようになるでしょう。もしかすると、ユニットテストの必要性すら減るかもしれません。

自動テストとは?
自動テスト は、テストスクリプトを作成し、それをテストツールで実行することで、人間の介入なしにソフトウェアの品質を評価する手法です。 例えば、Selenium は広く使用されている自動テストツールの1つです。

E2Eテストの自動化に関しては、多くのツールが存在しますが、本記事で注目するのは「初回のテスト作成すら自動化する」ことです。

伝統的な自動化では、新機能の最初のテストは手動で作成する必要があります。しかし、もしその部分すら自動化できれば、開発者の負担が大きく軽減されるでしょう。

詳細な実装については、Part II で紹介しています!ぜひご覧ください 🥳

Discussion