この記事は、Goodpatch Advent Calendar 2025 9日目の記事です ⛄️
こんにちは!エンジニアのyukaです。
開発工程においてテスト設計を行うことは、品質の高いソフトウェアを効率的に作り上げるために欠かせません。
テストケースを定義することは、開発しているソフトウェアのあるべき姿を定義することにつながります。 定義されたあるべき姿に向かって開発を進めることで、曖昧さを排除し、品質の高いソフトウェアを効率的に実装することができます。
たとえば、テストフェーズに入ってからの多くの実装ミスや仕様漏れ、UIパターンの発見などのリスクを減らし、品質と効率を両立できます。
先日、短期間のスケジュールでテスト設計と実装を並行させる開発を行う機会がありました。本記事では、そのときに実践した開発フローをまとめます。
さらに、このアプローチは生成AIを活用した仕様駆動開発とも非常に相性が良いと感じたので、その点についても触れていきます!
開発フロー
今回は「開発フェーズ」と「テストフェーズ」を切り離さず、テスト設計 → 実装 → テスト実施をゆるく並行させる形で進めました。
1. テスト観点の整理
まず、実装対象の機能についてテスト観点を整理しました。たとえば、以下のような観点です:
- 基本機能が期待通りに動作するか
- UI・仕様が細部まで正しく再現されているか
- 表示やレイアウトが崩れないか
- 異常系が適切に扱われるか
- デバイス・ブラウザごとの表示が成立しているか
観点を最初に言語化しておくことで、テストケース作成がスムーズに進みます。
2. テストケース作成
テスト計画で定義した観点をもとに、実際にテストケースへ落とし込んでいきました。 テストケースでは通常、以下のような情報を整理します。
- 確認内容(何を検証したいか)
- 事前条件 / 手順(どう操作すればその状態になるか)
- 期待結果(どのような状態が正しいといえるか)
これらを明確に記述することで、仕様が具体化し、曖昧さを排除できました。
3. 実装
並行して、実装を進めていきました。あらかじめ用意したテストケースを参考にしながら開発するため、迷うことなく、仕様の抜け漏れなく実装できます。
4. テスト実施・修正
実装後にテストを行い、期待結果とずれていた箇所があれば、実装を修正して再度テストをしました。 実装と品質確認のフィードバックループが自然に回り、仕様理解も深まりました。
テストファーストで得られたメリット
品質が上がる
いわずもがな、仕様とテストケースを明確にすることで、漏れなく実装、テストができ、結果的に不具合が発生しにくくなります。
仕様についてのコミュニケーションがスムーズになる
「このケースではどうなるべきでしょうか?」という会話を起点に、チーム内で仕様について細かいコミュニケーションが取りやすかったと感じました。 テストケースが客観的な共通の物差しとして機能するため、議論が感覚的にならず、期待する挙動を明確に言語化しながら合意形成できます。
生成AIを活用した開発フローと組み合わせられる
テストケースとして構造化された情報(パターン、条件、期待結果など)を生成AIに提供することで、より正確で網羅的なコード生成が可能になります。 また、テストケースからテストコードを生成し、それをもとにコードを生成し、自動テストを実行させ、成功するまでAIにコードを修正させる、というサイクルも構築できます。
3. デメリット
初期コストが高い
テストケースの設計には時間がかかります。特に網羅的なテストケースを作成する場合、設計フェーズに多くの時間を投資する必要があります。
やりすぎのリスク
まだ固まっていない機能に詳細なテストを書くと無駄になりやすかったり、網羅性を追求しすぎて、優先度の低いケースまで作りすぎる可能性があったりします。 テストケースをどこまで書くかの見極めが肝心ですね。
まとめ
テストファーストな開発フローは、高い品質を目指せる仕組みをつくることができる、多くのメリットがあるアプローチだと感じました。 一方で、デメリットもあるため、どんな場面でこのアプローチを使うべきかを見極めることも重要だと思います。
これからも、プロジェクトの特性やチームの状況に応じて最適なフローを選びながら、品質にこだわった開発を追求していきたいです!
Goodpatchでは品質にこだわりたいエンジニアの仲間を募集しています。 少しでもご興味を持たれた方は、ぜひ一度カジュアルにお話ししましょう!