シフトレフトテストとは?
シフトレフトテストとは、開発ライフサイクルの早い段階へテストを移し、欠陥が最も安価なときに発見・修正されるようにすることです。
開発のタイムラインが設計からリリースへと左から右に流れるところを想像してください。従来、テストは右端、リリース直前に位置していました。シフトレフトとは、テストを左へ、より早くに引き寄せ、バグが導入された時点の近くで捕まえられるようにすることです。欠陥が早く見つかるほど、修正は安く簡単になります。
遅延コストという考え方
コードを書いている最中に見つかったバグは修正コストがわずかです。同じバグが本番で見つかると、デバッグ、調整、ユーザーへの影響において桁違いに高くつくことがあります。シフトレフトは、欠陥を可能な限り早く、理想的にはコードがmergeされる前に捕まえることで、その曲線に立ち向かいます。
左へ移すとはどういうことか
- コードと並行して、あるいはその前にテストを書く(TDD)。
- リリース前だけでなく、あらゆるcommitで高速なテストを実行する。
- エディタとpre-commitで静的解析とlintingを追加する。
- 設計上の判断を早期にレビューしテストする。
シフトレフトとCI
継続的インテグレーションはシフトレフトのエンジンです。あらゆるpushで自動的にテストを実行することで、CIは検証を実用上最も早い瞬間、コードが共有された瞬間へと移します。そのフィードバックが速いほど、実効的なテスト地点はさらに左へ移ります。
簡単な例
pre-commit hookやあらゆるpull requestでユニットテストを実行すれば、バグがチームメイトに届く前に捕まえられます。
Testing as early as possible
on: pull_request
jobs:
test:
runs-on: latchkey-small
steps:
- uses: actions/checkout@v4
- run: npm test # runs before review, not after mergeなぜここで速度が重要か
シフトレフトは、早期のテストが高速な場合にのみ定着します。あらゆるpushで遅いスイートが走ると、開発者はそれをスキップするようになり、シフトが台無しになります。テストを高速runnerで並列実行することで早期のフィードバックをほぼ即時に保ち、それが早期テストを実際に実現可能にします。Latchkeyが埋めようとしているのはそのギャップです。
重要なポイント
- シフトレフトテストはテストをライフサイクルの早期に移します。
- 欠陥をより早く検出することは、より安く簡単な修正を意味します。
- あらゆるpushでの高速なCIがシフトレフトを実用的にします。
関連ガイド
What Is Continuous Testing?Continuous testing explained: running automated tests throughout the delivery pipeline for constant feedback,…
What Is Test-Driven Development (TDD)?Test-driven development explained: the red-green-refactor cycle, how writing tests first shapes design, a wor…
What Is a Unit Test?Unit testing explained: what a unit is, why these tests are small and fast, a simple example, common pitfalls…
What Is Regression Testing?Regression testing explained: how it ensures old features still work after changes, regression suites, an exa…