シフトレフト

シフトレフト（英語:Shift-left testing）は、ソフトウェアテストおよびシステムテストへの手法の一つである。テストをライフサイクルのより早い段階（つまり、プロジェクトのタイムライン上で左側に移動した段階）で実行することである。これは「test early and often」という格言の前半部分にあたる。2001年にラリー・スミス（Larry Smith）によって提唱された。

 テストの遅れによる弊害 
シフトレフトは、テストが遅れることによって生じる以下の種類の弊害を防ぐことを目的としている。
 テストへのリソース配分の不足。
 要件、アーキテクチャ、設計における欠陥が未発見のままとなり、それらの実装に多大な労力が浪費されること。
 ソフトウェアの生産と統合が進むにつれ、デバッグ（欠陥の特定、局所化、修正、およびリグレッションテストを含む）が困難になること。
 カプセル化によってホワイトボックステストが妨げられる結果、テスト中のコードカバレッジが低下すること。
 プロジェクトの失敗原因となり得る技術的負債の「船首波（bow wave）」（訳注：先送りによって膨れ上がった波、つまり負債の蓄積）。

 シフトレフトの種類 
ライフサイクルのより早い段階（つまり、古典的なV字モデルにおける左方向）へテストをシフトさせる基本的な方法は4つある。これらは、従来のシフトレフト、インクリメンタル・シフトレフト、アジャイル DevOps・シフトレフト、およびモデルベース・シフトレフトと呼ばれる。

 従来のシフトレフト 
サムネイル|従来のシフトレフト
図に示すように、従来のシフトレフトは、古典的なV字モデルの右側において、テストの重点をより下流（したがってわずかに左側）に移動させるものである。受け入れテストやシステムレベルのテスト（例：記録・再生ツールを使用したGUIテストなど）を重視する代わりに、従来のシフトレフトでは単体テストや結合テスト（例：APIテストや最新のテストツールの使用）に重点を置く。
 インクリメンタル・シフトレフト 
サムネイル|インクリメンタル・シフトレフト
図に示すように、大規模で複雑なソフトウェア依存システムを開発する多くのプロジェクトでは、開発を少数のインクリメント（V）に分解し、それに応じて期間を短縮している。赤い破線で示されるシフトレフトは、単一の大きなウォーターフォールV字モデルのテストタイプ（灰色で表示）の一部が、より小さなインクリメンタルV字モデルにおける対応するテストタイプのインクリメントとなるよう左にシフトすることで発生する。各インクリメントが顧客および運用へのデリバリーでもある場合、インクリメンタル・シフトレフトは、開発テストと運用テストの両方を左にシフトさせることになる。インクリメンタル・シフトレフトは、大規模で複雑なシステム、特に大量のハードウェアを組み込んだシステムを開発する場合に一般的である。従来のシフトレフトと同様に、インクリメンタル・シフトレフトへの移行も概ね完了している。
 アジャイル/DevOps・シフトレフト 
サムネイル|アジャイル DevOps・シフトレフト
図に示すように、アジャイルおよびDevOpsプロジェクトでは、前述の2つのシフトレフトの例のような単一または少数のインクリメント（V）の代わりに、多数の短期間のスプリントを持つ。これらの小さなインクリメント（V）は、基本要件やアーキテクチャの概要を決定するために1つ以上のスプリントが使用される場合や、テストファーストおよびテスト駆動開発（TDD）が実行されている場合には、さらに変更される。
シフトレフトが発生するのは、これら初期の小さなVの右側にあるテストタイプが、それらが置き換える大きなVの右側にある対応するテストタイプよりも左にあるためである。図はアジャイルとDevOpsで著しく同じように見えるが、アジャイルテストは通常、開発テストに限定されており、システムが運用環境に投入された後に発生する運用テストは含まれない。アジャイル/DevOps・シフトレフトへの移行は現在一般的であり、進行中である。

 モデルベース・シフトレフト 
サムネイル|モデルベース・シフトレフト
これまでの形式はすべて、開発サイクルの早い段階でテストを行うことに集中していた。しかし、これらはすべてソフトウェアが存在した「後」にテストを行い、実装上の欠陥のみを発見しようとするものである。

モデルベース・テスティングは、要件、アーキテクチャ、および設計モデルをテストすることにより、テストをVの左側に移動させる。このシフトでは、ソフトウェアがVの右側で利用可能になるのを長時間（従来のテスト）、中時間（インクリメンタル・テスト）、または短時間（アジャイル/DevOps）待つのではなく、ほぼ即座にテストを開始する。
 脚注 

 外部リンク 
 "Shift Left" Devopedia

Category:ソフトウェアテスティング
Category:セキュリティ技術