Site cover image

🤷blog.takuyasuemura.dev

真面目なほうのブログです。不真面目なほうはこちら https://tsuemura.hatenablog.com

テストのエキスパートから、プロダクトやチームのエキスパートへ

多くのテスターやQAエンジニアは、テストのエキスパートとして働いていると思う。でも、テストのエキスパートって一体何なのだろう。開発者とは何が違うのだろうか。

開発のプロはテストにも詳しい

おれはその時代のことをあんまり知らないんだけど、どうも一昔前は「開発者が作り、テスターがテストする」というのが一般的だったらしい。ただ、おれがこの業界に入った2016年前後には、少なくとも開発者の責務の中に「テスト」は含まれていた。ちゃんと動く、価値のあるソフトウェアをデリバリーすることが開発者の責務で、テストを人任せにするような開発者はプロではないとおれは信じている。

じゃあ、この区分はマインドではなくスキルセットの問題なのだろうか。つまり、開発者は開発技術に詳しく、テスターはテスト技術に詳しいということなのだろうか。これについてもおれは異論があり、開発者はソフトウェアの保守性とテスト容易性を高めるために様々な努力をしていて、決してテスト技術に詳しくないというわけではなさそうだ。

例えば、一昔前のWebフロントエンドのテストは、GUIという ステートマシン のテストだった。副作用を伴うメソッドによってDOMを直接操作し、操作後のDOMの状態を検証する。これはWebフロントエンドがE2Eでしかテストできないという問題を引き起こし、フロントエンドがリッチになるにつれてテストの労力を甚大にした。

これを解決してくれたのがReactだった。ReactはWebフロントエンドを「状態を引数として受け取り、UIコンポーネントを返却する 関数 」として再定義した。これにより、実際のWebページをマウスとキーボードで操作してテストする必要はなくなり、ある状態においてどのようなページがレンダリングされるかというシンプルなテストに置き換えられるようになった。

つまり、フロントエンド開発のエキスパートたちは、テスト容易性を改善するために問題を抽象化し、フレームワークとして昇華したのだ。フロントエンドのエキスパートは、同時にフロントエンドの テスト のエキスパートでもある。

同じことが、バックエンド、インフラ、データベース、その他様々な領域に関して言える。

テスターは何のエキスパートなのだろうか

ひるがえって、テスターはテストのエキスパートと一般的にみなされている。しかし、開発者たちがそれぞれの技術スタックの テストも含めた エキスパートであるのなら、テスターも何かしらの領域の テストも含めた エキスパートであるべきではないだろうか。

そこで、周囲の優秀なテスターたちを見てみると、いくつかのパターンがあることに気づいた。

  1. プロダクトへの強いアフィニティと、高度なドメイン知識を武器にしている人。
  2. スクラムなどのフレームワークについての知識と経験を持ち、チーム全体のテスト活動にレバレッジを効かせている人。
  3. 静的解析や自動テストなど、開発を支える技術についての知識と経験を持ち、開発活動にレバレッジを効かせている人。

そうすると、実はいままで漠然と テスト のエキスパートと呼んでいた人たちが、実は チームプロダクトDevOps のエキスパートだったことが分かる。プロダクトをテストするというのはどういうことか、チームでテストするとはどういうことか、開発を支えるテストとはどういうものか、こうしたトピックについてみな一家言あることが多い。実際、テスターの中には プロダクトオーナースクラムマスター を兼任している人が多い。

様々なロールが、様々な形でテストに関わる

もちろん、本当にテストのエキスパートとしか言い表せない人もいるだろうし、そういう人の存在を否定したいわけではない。だが、もしプロダクトやチーム、自動テストなど特定の領域に関心を持つテスターがいたら、ぜひそうした領域のエキスパートを志向してもらいたいと思う。

冒頭で、開発者がどうテストに貢献しているかを書いたが、ああいうことをやっているテスターは多分少ないと思う。逆に言えば、テストというのはすごく幅広くて、「何を」テストするのかによって使う技術は異なる。これは、例えばセールスとマーケティングとで追うべき指標が違うのに似ているかもしれない。同じく顧客に相対する仕事だとしても、セールスは売上、マーケティングはリードの数をKPIにしている(※ 詳しくないので、間違ってたら指摘して欲しい)。

なので、開発者は開発者の責務においてテストをし、プロダクトオーナーはプロダクトオーナーの責務においてテストをする、というような世界になったらすごく良いのではないかと思うのだ。様々なロールが、それぞれの責務を果たし、ユーザーに価値を届けていることを確認するために、それぞれがテストをするのが理想的なチームなんじゃないかと思う。そして、テスターから他のロールに鞍替えした人たちは、そのために必要な技術を持った人材なんじゃないかと思う。

追記(2023-11-23)

議論が白熱しそうなネタだなと思いながら投下したら、やっぱりたくさん反響を得られてよかった。なるべく、テストや品質エンジニアリングのエキスパートたる人へのディスリスペクトにならないようには書いたつもりなのだけど、誤解を招かないように少しだけ追記しておく。

おれは、昔とある会社にジュニアソフトウェアエンジニアとして入社し、そこでQAとしての役割を得て、今に至る。おれはQAの仕事をエンジョイしていたし、もちろん今でも魅力的な仕事だと思っている。ただ、今ではおれの専門性はDevOpsや自動テストなどの技術にあって、テスト分析や設計、それに手動でのテスト実行は未だに苦手としている。

なので、おれの専門性についてより正しく説明するならば、QAではなくDevOpsやDevTestOpsと呼ばれるような領域なのだと思う。

記事で書いたように、テストはQAだけの仕事ではないし、QAがいちばんテストに詳しいとも限らない。テストはもっと汎用的な、万人に使うことを許された武器だ。なので、テストが好きだと思ったら、自分がどんなテストが好きで、どんなテストに詳しいのかを一度考えてみるのがいいと思う。そうすると、実は自分がテストをある目的を実現するための武器として使っていることが分かる。その目的は、良いプロダクトを作ることかもしれないし、良い開発プロセスを作ることかもしれない。

だとすると、テストドリブンで良いプロダクトを作る人って、実質的にプロダクトマネージャーなんじゃないか?あるいは、テストドリブンでデリバリーサイクルを加速させる人って、実質的にDevOpsエンジニアなんじゃないか?これが、この記事で言いたかったことだ。

Share icon for XShare icon for Hatena BookmarkShare icon for Pocket
Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます