
December 30, 2024
シフトレフトとシフトライト:両方のアプローチが必要な理由
*本記事は Perforce Software社の以下のブログ記事(2025年1月8日時点)の参考訳です。
Shift Left vs Shift Right: Why You Need Both For Testing
*ブログの内容は更新されている可能性があります。
ソフトウェアエンジニアであれば、「シフトレフト」という言葉をスタンドアップミーティング(アジャイル開発における短時間の進捗確認ミーティング)やスプリントレビュー、技術講演などで何度も耳にした経験があるのではないでしょうか。シフトレフトは、現代の開発におけるスローガンのようになっており、バグの早期発見や開発者への継続的なフィードバックに加え、クリーンで信頼性の高いコードの提供を可能にします。つまり、重視されるだけの十分な理由があるわけです。しかし、シフトレフトだけ行っていれば十分なのでしょうか?
エンジニアであれば、事前テストをどれだけ丁寧に行ったとしても、本番環境の複雑さや予測不可能な状況を完全に再現することはできないことをよくご存じだと思います。この課題を解決するために必要なのが、実際のユーザーシナリオでのテストやバグ修正を可能にする「シフトライト」のアプローチです。
本ブログ記事では、シフトレフトとシフトライトの基本を説明しつつ、双方のアプローチを相互補完的に取り入れることの重要性についてお話します。
テストにおけるシフトレフトとは?
ソフトウェアテストにおける「シフトレフト」とは、各種テストをソフトウェア開発ライフサイクル(SDLC)の早い段階で行うことを指します。これにより、コードの欠陥や脆弱性、非効率箇所を開発プロセスの早い段階で発見して対処することが可能となり、複雑で修正費用も高額になるようなシステム障害を未然に防ぐことができます。
例えば、パフォーマンステストをシフトレフトすることで、完全なシステムのデプロイを待つことなく、開発段階からパフォーマンスのボトルネックを特定し対処することができます。そうすることで、開発者はボトルネックの根本原因をタイムリーに解決し、実際のユーザートラフィックが急増した際にWebアプリケーションがクラッシュするなどの問題を防ぐことができます。
「シフトレフト」という用語は、SDLCのタイムラインが、左から右に設計、開発、デプロイメントと進む形で示されていることに由来します。つまり、「シフトレフト」とは、このタイムラインの「左側」へテストを移行し、本番環境ではなく、開発中にテストを実施することを意味します。
シフトレフトの手法は、アジャイルやDevOps、CI/CDといった現代のソフトウェアエンジニアリングの基盤になっています。これは、シフトレフトが遅延を最小限に抑えた迅速な開発サイクルを実現し、コードの品質を向上させると同時に、SDLCを通じた自動化を継続的に可能にするからです。シフトレフトテストは、SDLCの終盤でテストを行う(いわゆる「シフトライト」と呼ばれる)ウォーターフォール型アプローチとは対照的なものです。
シフトレフトテストの基本原則
テストの自動化
開発のボトルネックにならない形で早い段階からテストを実施するためには、自動化が不可欠です。APIテストや負荷テスト、機能テストなど、様々なテストを自動化することで、コードの変更や更新と並行して、継続的な検証を行う必要があります。多くの場合、テストツールをCI/CDパイプラインに統合することで、新しいビルドが作成されるたびに、またはスプリント毎など、エンジニアリングチームが定めたタイミングで自動的にテストを実行します。
継続的なフィードバックループの実現
自動テストにより、実用的なフィードバックを即座に得ることができます。また、発見されたバグを迅速に優先順位付けし、修正することもできます。これにより、従来より短期間で、より高品質なソフトウェアを顧客に提供することが可能になります。
協力的なカルチャーを醸成
テストはSDLCの重要な要素であり、もはやQAチームだけの責任ではありません。むしろ、開発者によるテストの作成やテストスイートの管理、そしてDevOpsチームによるテストの自動化が必要になります。シフトレフトは、単なる役割分担を超えた取り組みであり、テストにより、エンジニア一人ひとりの目標やKPI達成を支援し、エンドユーザーにより良い製品を届けるために協力して作業にあたるという、“責任を共有する”カルチャーを根付かせるものです。
シフトレフトテストのメリット
エンジニアリングの現場では、次のようなメリットから、この10年間でシフトレフトテストが広く実践されてきました。
ソフトウェアの品質向上
継続的なテストと高速なフィードバックサイクルにより、システム全体の障害に発展する前に問題に対処できる
市場投入までの時間短縮
バグを早期に解決することで、後工程での手戻りによる遅延を最小限に抑え、エンドユーザーに高品質なソフトウェアをより迅速に届けることができる
チームの士気向上
すぐにフィードバックが得られることで、最終段階でのバグ修正に追われるという、開発者にとってのフラストレーションを軽減できる
開発者の生産性向上
高速なフィードバックサイクルにより、開発者は「コンテキストスイッチング」(タスクの切り替え)で生産性を低下させることなく、問題に取り組むことができる
修正コストの削減
欠陥の修正コストは、後工程になるほど指数関数的に増加する。例えば、本番環境でのバグ修正は、コーディング中に同じバグを発見し修正する場合と比較して、はるかに高額になる可能性がある
テストにおけるシフトライトとは?
テストにおける「シフトライト」とは、本番環境でデプロイメント後に実施するテストを指します。この手法は、ソフトウェア開発ライフサイクル(SDLC)の早い段階でテストを行う、前述の「シフトレフト」とは対照的なアプローチです。
シフトレフトが開発や設計フェーズでの早期の欠陥検出を優先するのに対し、シフトライトは実際の運用環境におけるアプリケーションの検証を目的としています。ソフトウェアが本番環境で確実に動作し、ユーザーの期待に応え、変化する要件にも適応できるようにすることを目指すものです。
シフトライトテストの基本原則
本番環境でのモニタリングとテスト
本番環境で直接テストを行い、実際のトラフィック下でのアプリケーションの動作や、リアルなユーザーシナリオにおけるユーザーエクスペリエンスを確認します。
リスクと信頼性のバランス
シフトライトテストは、本番環境でのテストに伴うリスクを認識しつつ、品質の確保を目指すものです。これには、重要なシステムを守るための強力なバックアップやロールバック機能(A/Bテストやブルーグリーンデプロイメント)の導入、制御された本番環境でのテスト(カオスエンジニアリング)、影響を最小限に抑えるための新機能の段階的な展開・スケーリング(カナリアテスト)などが含まれます。
継続的デリバリー
DevOpsパイプラインへの統合により、迅速なイテレーションとデプロイメントサイクルを実現します。本番環境でのテストはリスクが高いため、素早い対応が求められます。
シフトライトテストのメリット
本番リリースに対する信頼向上
実際の環境でテストを行うことで、アプリケーションのパフォーマンスをより深く理解し、使いやすさと信頼性を担保することができる
ユーザー視点の開発促進
実際のフィードバックを得ることで、ユーザーのニーズや行動(ユーザージャーニーやユーザーエクスペリエンス)を反映したアプリケーションを開発することができる
システムのレジリエンス向上
本番環境での障害に積極的に対処することで、より堅牢で障害耐性の高いシステムを構築できる
シフトレフトとシフトライトテスト:両方が必要な理由
シフトレフトテストとシフトライトテストはどちらも魅力的な手法です。しかし、どちらか一方のアプローチを選択し、それだけを実践していれば十分なのでしょうか?リソースや手間をかけてでも、両方の手法を採用する必要はあるのでしょうか?
シフトレフトとシフトライト両方の戦略を組み合わせることで、ソフトウェア品質に対する強固で包括的なアプローチを実現できます。片方のアプローチだけに頼ると、死角が生まれ、システムに脆弱性を残すことになりかねません。
シフトレフトのみの場合
- デプロイメント前のテストに過度に依存すると、本番環境での負荷下でしか発生しないような問題に対応しきれない可能性がある
- 早い段階でのテストだけでは、ユーザーエクスペリエンスや行動の細かな傾向を見逃す可能性がある
シフトライトのみの場合
- 本番環境でのテストに完全に依存すると、エンドユーザーに提供するソフトウェアが低品質なものになるリスクがある
- 本番環境での問題修正は、ダウンタイムの発生や評判の低下、修正コストの増大、ユーザーのフラストレーションなどを引き起こす可能性がある
包括的なテスト戦略:シフトレフトとシフトライトのバランス
開発初期段階から本番環境まで、一貫したテスト戦略を検討する必要があります。そして、これを実現するのが、シフトレフトとシフトライトの両方を統合し、ソフトウェアライフサイクルの全ステージにわたりテストを実施する、継続的テストという手法です。
シフトレフトとシフトライトを組み合わせるメリット
シフトレフトとシフトライトの両方を実践することで、以下のようなメリットを得ることができます。
全方位での品質保証
開発からビルド、リリース、本番環境に至るまで、幅広くテストを実施することで、より多くのバグや問題を検出し、エンドユーザーへの影響を減らすことができます。結果として、エンドツーエンドで、ソフトウェア品質とユーザー満足度の向上につながります。
リリースサイクルの高速化
継続的なフィードバックにより、市場投入までの時間が短縮されるだけでなく、本番環境で実際に顧客に影響を及ぼしている問題への対応も早急に行えるようになり、開発と運用の両面でボトルネックを減少させられます。
信頼性の向上
シフトレフトにより、リスクを減らしながら、より頻繁にアップデートをリリースすることができるようになります。つまり、スピードと安定性の両立が実現するのです。さらに、シフトライトによって、本番環境での問題が確実に検出・対処されることが分かっているため、余計なストレスが軽減され、最高品質の製品を顧客に届けられるという安心感が得られます。
シフトレフトとシフトライトテストを統合して実践する方法
継続的テスト戦略を始める場合は、以下の3点を意識して実践してみてください。
- シフトレフトとシフトライト対応のテストツールの選択する
シフトレフトとシフトライトの両方を可能にするツールベンダーを選びましょう。つまり、スクリプト作成やテスト実行の柔軟さや容易さに加え、多様なテストへの対応、CI/CDパイプラインやAPM(アプリケーションパフォーマンス管理ツール)との統合、テストの自動化、チーム全体でのツール活用ができるかなどが重要なポイントになります。 - カルチャー醸成の側面を重視する
関係者すべて(開発者、テスター、運用担当者)が責任を共有し、あらゆる段階でコードの品質を最優先に考えるカルチャーを作り上げましょう。 - フィードバックループを構築する
あらゆる段階でフィードバックループを取り入れましょう。コードカバレッジやテスト結果、エラー、インシデントデータ、ユーザーエクスペリエンスのインサイトを開発者に提供する自動化されたワークフローを構築してください。これらをJIRAなどのプロジェクト管理ツールに統合し、修正の優先順位付けを行いましょう。
まとめ
今まではシフトレフトテスト、あるいはシフトライトテストの一方だけに依存してきたとしても、本記事を読むことで、この2つが互いに補完し合い、両方を組み合わせることで、ソフトウェア品質の向上が可能になることがお分かりいただけたのではないでしょうか。
Perforce BlazeMeterは、シフトレフトとシフトライト両方のアプローチを取り入れた包括的で継続的なテストソリューションです。ご興味のある方はこちらをご覧いただくか、以下までお気軽にお問合せください。