シフトレフトという考えについて

こんにちは、トーマです

ソフトウェアテスト界隈で最近「シフトレフト」という用語をよく聞きます。
簡単に言うと、テストを可能な限り早い段階で実施し、結果的にテストに割く工数を減らそうという考えです。

早く実施するだけで工数削減になるの?という点については
ソフトウェアテストの7原則「早期テストで時間とコストを節約」にもある通り、確かに有効です。
不具合の摘出が遅くなってしまうと、それだけ後戻りの手間が増え、それに付随するテストの時間も増えてしまうためです。

個人的にひっかかるのは、このワードがなぜか『アジャイル開発』とセットで扱われていることです。


突然ですが、皆さんは「W字モデル」という言葉をご存じでしょうか。
ずいぶん前から提唱されている、ウォーターフォール開発の型の一つです。

こちらのモデルでは、システム仕様・システム設計・詳細設計と並行して、各テストの設計などを行っていきます。
テストの観点でシステム仕様・システム設計などをレビューし、テスト設計のINPUTとするため、仕様の誤りや不整合に早期に気付ける可能性が上がります。結果として、早期の品質担保が可能です。

・・・あれ?

そうです、これもれっきとした「シフトレフト」の考えです。
シフトレフトは、最近生まれた考えではなく、古くからの考えを言語化したものにすぎないと思っています。
(反論を恐れずに言うと、響きを良くして「よくわからないけど大切な要素」的に扱っているようにも思えます。)

ただ、私も言葉狩りをしたいわけではありません。
私が伝えたいのは、「シフトレフトを実現するためにはアジャイル開発が不可欠」というわけではないということです。

ここで、『静的テスト』と『動的テスト』の話をします。

仕様のレビューなどは、『静的テスト』という呼ばれ方をします。実際に動くものがなくても実施できるテストです。
『動的テスト』は、実際に動作するプログラムで実施するテストを指します。そのため、完成品の存在が不可欠です。

そのため、『静的テスト』に加え『動的テスト』も早期実施したい場合は、アジャイル開発が不可欠となります。

ウォーターフォール開発では動くプログラムの開発はプロジェクトの中盤~終盤となるため「早めに動的テストをすることで品質をより強固なものにしたい」という目的があるならば、スプリント単位で成果物が生まれるアジャイル開発の方が遥かに向いているといえます。

勘違いしないで欲しいのは
シフトレフトの考えの元での動的テスト=アジャイル開発が必須」ですが
シフトレフト≠アジャイル開発が必須」である点です。

要は、シフトレフトの考えを最大限に発揮するための開発手法が、アジャイル開発であるということです。
現状V字モデルで開発しているプロジェクトが、W字モデルを採用するだけでも、立派な「シフトレフト」です。

大事なのは、横文字の用語に惑わされず「品質の早期担保のために何が大切か」ということをしっかり考えることです。
そうすれば「シフトレフト」が意味することや、その考えを最大限に発揮する方法も理解できるはずです。