『継続的テスト』とは何か?『シフトレフト』とは何か?

via Continuous Testing in DevOps…

最近になってアジャイルコーチというより、品質活動に関係する仕事が多くなってきたため、様々な品質活動の現場に参加させていただいています。たくさんの現場を見ていると、共通する点(いい面も悪い面も)が見えてきて、それらを抽象化できそうな気分になってきました。この記事では、現段階で抽象化できてきたもの。ほとんどの現場で課題となり、必要になっている「シフトレフト」や「継続的テスト」とは何かについての考察を書いてみます。

継続的テストとは何か?

時代は継続的ブームです。とりあえず「継続的」をつければなんだかデキる人みたいになりモテます。

継続的テストは、アジャイル開発やスクラムの恩恵を受けるためには継続的なテストが必要不可欠だと考えています。なぜならば

  • 開発が継続的に続くから
  • 小さいサイクルをはやく回す必要があるから
  • 効率化や生産性向上のために技術を活用できるから

といった点が、今風な開発現場のスタンダードになりつつあるからです。

ひとつまえの記事でも書いたのですが、Danさんの図を見れば、すべての開発活動でテストが必要(または可能)と理解できるはずです。

https://daipresents.wordpress.com/2020/continuous-testing-in-devops/

そして大切なのは「手段」だと思います。「じゃ、どうするの?」に答えられなかったり、たとえチャレンジであっても成果をださなければ、プロとしてまったく意味がありません。いいこと言って気持ちよくなってる場合じゃない。

継続的テストの実現には、大きく分けて2つのスタイルがあると思っています。

  • 手動テストを継続的に実行するスタイル
  • 自動テストを継続的に実行し、個人の生産性を最大限に高めていくスタイル

前者はいわゆるマンパワーです。方法としては通用しても、安価な労働力があれば簡単に負けます。このあたりはオフショアなどによって空洞化した中間層の問題が結果としてもう出てきていますからね。

さらに、人間には限界があるので活動時間の上限が限られており(マンパワーなので稼働時間で勝負!)、さらにテスターやQAエンジニア(以後、まとめてQAエンジニアとします)の単価は全世界的に低いので、将来性もありません。そのなかで、どうやってさらなる価値を増やすか? どうやって作業者のモチベーションを保つか?という点が課題になるはずです。

後者は最近流行りのテスト自動化です。ただ、手動テストがメインスキルの人には高いハードルになります。プログラミング経験のない人であれば、残念ながら手動より非効率なテストケースが簡単に作成できてしまうため、手動テストが主流のQAエンジニア次のキャリアとして定義するのはかなり難しいでしょう。ただし、自動なテストなので、初期コストと運用コストは高くなりますが、継続的なテストを安定して実行できます。

ここまで書いておいてあれなのですが、これまで書いてきた目的や意義、手段を合わせても、継続的テストではありません

上記の図をベースに、継続的テストを定義するならば、僕ならこう答えます。

継続的テストとは、ソフトウェア開発から派生するさまざまな活動すべてをテストし続けること。そして、それを支える仕組みやプロセスを整えること

テスト自動化は図でいう「Code」や「Merges」などの一部分でしか成果を出せないので、それだけができても全体としてうまくいきません。

参考までに、僕のお客様先でやっているのは、はじめやすくてわかりやすいテスト自動化から初め、テスト部分が安定することで、それ以外の問題の芽がだんだん出てきて(気がついて)、異なる活動の改善に移る・・・ケースが多いです。

「活動すべてをテスタブルに」さらに「その活動において継続的テスト」を実現します。これはアジャイルテスティングの定義にもつながる気がします。

シフトレフトとは何か?

日本語訳がひどいで有名な『Agile Testing』の著者 ジャネット・グレゴリーさんが大嫌いな「シフトレフト」ですが、こちらもとりあえず「シフトレフトですね!」といえばできる大人のように振る舞えます。

「シフトレフト」は一般的に、テストフェーズから上流の左側。つまり、開発 ⇒ 設計 ⇒ 要件定義・・・とプロセスの左側に品質向上活動を広げていく活動を指しているようですが、みんなちょっとまって!

そもそも、「やっぱ上流工程重要だよね!」とか「Wモデル重要だよ!」とかは、もう使い古びた言葉だと思います。だから「いまさらシフトレフト?」とインタビューに答えるジャネットさんの気持ちもよく分かる。

ただ、大きく違うのは、プロセスの主流がウォーターフォールじゃなくなってきた点だと思います。

たとえば、上記のように「左から右に」という考え方がウォーターフォール的です。そもそもシフトレフトという言葉自体がウォーターフォール的かもしれません。

上流も下流もないアジャイル開発、スクラム、DevOpsしか経験したことがない人だと、いまいちピンとこないと思います。

言葉遊びはここまでにして、今話題のシフトレフトの本質は何かを考えた場合、僕ならばシフトレフトをこう定義します。

シフトレフトとは、開発に関わる人間全員が継続的テストに参加し、プロダクトに対して価値提供の範囲を広げていくこと

たとえばW字モデルの説明を見ると、上記の図と同じようなことをV字モデルでやろうとしています。

だったらウォーターフォール時代もDevOps時代も品質保証のあり方はおなじじゃーん。と思うかもしれませんが、大きな違いは、フェーズレベルでの役割分担の時代は終わったという点だと思います。

たとえば、「QAエンジニアがテスト設計やテスト実施する人」でしかないならば、その価値は限定的になり、活動範囲もせばまります。

しかし、「コードをけかるQAエンジニア」ならコードレベルの品質にも貢献できますし、「ビジネスドメインに詳しいQAエンジニア」なら企画の起案にも貢献できるでしょう。

そう考えると「レフトにシフトする」 というより前進を意味する「ムーブフォワード」とかのほうがいいかもしれない。

また、あらゆるすべてをQAエンジニアがテストすることは不可能な時代なので、境界を超えて自分の価値提供の場を広げていく人は、開発に関わる人間全員のはずです。

だから、QAエンジニアが「シフトレフトだ!ひゃっほー」と言ってるなら、視点が狭すぎます。そもそもQAエンジニアテストというコンフォートゾーンから出ていかなければなりません。

人だけでなく企業(テストベンダーとか)もビジネスモデルを変えなければならないはず。ずっとテスト設計についてあーだこーだいったり、テスト実行くりかえしやっていてもその価値はなかなか高められないからです。マンパワーを売りにしているテストベンダーにとって、シフトレフトや継続的テストはイノベーションのジレンマですよね。

おわりに

個人的に言葉の定義などは暇人か学者に任せればいいと思っていますが、Danさんに触発されて慣れないことにチャレンジしてみました。

考察なので正解ではないかもしれませんが、バズワードならではの誤解を恐れずに書いてみたつもりです。

このチャレンジが新しいアイデアの創発につながることを祈って。

広告