テスト駆動開発とCI/CD — 品質を自動化する開発文化
導入
ソフトウェアのリリース後にバグが発覚すると、修正コストは開発中の何倍にもなると言われています。テストを自動化して品質を継続的に守る仕組みが、現代の開発現場では欠かせないものになっています。
なぜ重要か
ITパスポートのマネジメント系分野では、ソフトウェア開発の品質管理手法として、TDDとCI/CDが繰り返し登場します。従来型のウォーターフォール開発では開発の終盤にまとめてテストを実施するため、バグが後から発見されるほどコストが増大するという問題がありました。これに対して、テストを先に書くTDDや、コードを変更するたびに自動テストを実行するCIは、「問題を早期に発見する」という発想の転換を象徴しています。
また近年のアジャイル開発やDevOps(開発と運用の連携)の普及を背景に、CI/CDパイプラインの導入は多くの企業で標準的な開発インフラとなっています。試験においても「なぜCIを導入するのか」という目的を問われる場面があり、単なる用語の暗記にとどまらず仕組みの理解が求められています。
くわしく知ろう
TDD(テスト駆動開発:Test Driven Development)とは、コードを書く前にまずテストを書き、そのテストが通るように実装を進める開発手法です。「レッド(失敗するテストを書く)→グリーン(テストを通す最小限のコードを書く)→リファクタリング(コードを整理する)」という3ステップを小さく繰り返すことで、品質の高いコードを維持しながら開発を進められます。
CI(継続的インテグレーション:Continuous Integration)は、開発者がコードを共有リポジトリに登録するたびに、自動でビルドとテストを実行する仕組みです。問題を早期に発見できるため、複数人での開発でも品質を保ちやすくなっています。
CD(継続的デリバリー/継続的デプロイメント:Continuous Delivery/Deployment)は、CIを経てテストに合格したコードを自動的に本番環境またはステージング環境へ反映する仕組みを指します。CIとCDを組み合わせたCI/CDパイプラインは、リリースの頻度を高めながらミスを減らす現代的な開発文化の基盤として知られています。
CIとCDの違いを整理すると、CIは「コードを統合してテストする」工程を自動化するもの、CDは「テスト後にデプロイする」工程まで自動化するものです。CIだけを導入しCDは手動でリリースする運用も多く見られます。
具体例で理解する
たとえばGitHubにコードを登録すると自動でテストが走り、問題なければ本番サーバーへ自動デプロイされる――これがCI/CDパイプラインの典型的な形です。TDDはその土台となるテストコードを事前に用意する考え方にあたります。あるECサイトの開発チームが新機能を追加するたびにこのパイプラインを通すことで、デプロイ起因の障害件数を大幅に削減した事例は、CI/CDの効果を象徴しています。
試験での出題パターン
【パターン1:CIとCDの役割の違いを問う問題】
「コードをリポジトリに登録するたびにビルドとテストを自動実行する仕組みはどれか」という形式で、CI・CD・TDD・ウォーターフォールの4択から選ばせる問題が代表的です。CIは「テストの自動実行」、CDは「デプロイの自動実行」と役割を分けて覚えることがポイントです。
【パターン2:TDDの進め方を問う問題】
「テスト駆動開発の説明として適切なものはどれか」という問いでは、「コードを書いた後にテストを追加する」「専任チームがテストを担当する」などの誤答選択肢が登場します。TDDの核心は「テストを先に書く」という順序にあります。この順序の逆転が誤答の定番パターンです。
【パターン3:CI/CDの導入目的を問う問題】
「CI/CDパイプラインを導入する主な目的はどれか」という問いに対しては、「品質の早期確保とリリース頻度の向上」という2点をセットで答えられるようにしておくと対応しやすくなります。
よくある間違い・紛らわしいポイント
【CIとCDの混同】
CI(継続的インテグレーション)とCD(継続的デリバリー/デプロイメント)は混同されやすい用語です。CIはコードを統合してビルド・テストするまでの工程を指し、CDはその後のデプロイを自動化する工程を指します。「CI/CD」とひとまとめに語られることが多いですが、CIだけを導入してCDは手動で運用するケースも実際には多く見られます。試験では「この説明はCIかCDか」を判別させる問題が出ることがあります。
【TDDとユニットテストの混同】
TDDは「テストを先に書く」という開発プロセスの手法であり、ユニットテスト(単体テスト)はテストの種類を指す用語です。TDDを実践する際にユニットテストを使うことが多いですが、TDD=ユニットテストではありません。TDDはあくまで「どの順序でコードを書くか」というアプローチの名前です。
【継続的デリバリーと継続的デプロイメントの違い】
継続的デリバリー(Continuous Delivery)はテスト後に本番デプロイできる状態を保つことを目標とし、最終的なリリースは人間が判断する場合があります。継続的デプロイメント(Continuous Deployment)は人間の介在なく本番環境まで自動でデプロイされます。試験ではどちらも「CD」と略されるため文脈で判断することが必要です。
まとめ・試験ポイント
- TDD=テストを先に書き、それが通るようにコードを実装する開発手法
- CI(継続的インテグレーション)=コード登録のたびに自動でビルド・テストを実行
- CD(継続的デリバリー)=テスト合格後に自動でデプロイまで行う仕組み
- CI/CDパイプライン=品質維持とリリース高速化を両立する開発文化の基盤
- TDDの順序:テスト作成(レッド)→最小実装(グリーン)→リファクタリング
- 試験では「CIとCDの役割の違い」「TDDの進め方の順序」が問われやすい
学習した内容を試験形式で確認しよう。ITパスポート入門試験100問に挑戦できます。
入門試験100問に挑戦する