この記事を読んだときに、この「テストの合間にプログラミングする」という感覚が、はたして読み手に伝わるのかしら、、と思いまして、テスターの立ち位置で、いくつかツイートしました。
今回はそれを引用して、さらに補足します。
元の記事にも書いてあるように、咳マニアとか、咳フリークと言われる(または自覚がある)人たちにとっては、わりとおなじみのフレーズなのかもしれませんね。「テストの合間にプログラミングする」って、どのような風景を思い浮かべているのでしょうか。とても興味があります。
ここに書いてある「テストの合間にプログラミングする」というのが、どんな感じかというと、昨日、わたし(一日中テストするテスター)に割り込まれたプログラマーは11名でした。テスターはもう一人いて、同じように割り込んでいます。プログラマーもプログラマー同士で割り込んでる。よく見る風景です。 https://t.co/996E3c4iUi
— miwa (@miwa719) 2018年1月30日
バグを見つけたら、スッと立ち上がり、そのストーリーの担当プログラマーを探します。(うちのチームは『全員同席』なので、大抵すぐに見つかる)
そのときのプログラマーのシチュエーションは、こんな感じです。
- コードを書いてる(ひとりで)
- ペアプロしてる(2、3名で)
- 数人のプログラマーが集まって、小さなホワイトボードに何かを書きながら話してる
- テストしてる(プログラマーも1日1時間、テストの時間があります)
- すでに誰かに割り込まれてる
バグを見つけたら、と書いたけれど、ちょっと違和感があるようなとき(例えば、この操作をしたときだけ、反応が少し遅い)や、質問や相談ごと(こういうテストをしてみたいのだけど、どうやったらその状態が作れますか?)も、プログラマーに話しに行きます。
「テストの合間にプログラミングする」の「テストの時間」は、誰かのテストで見つかった問題、疑問、相談について、割り込まれて作業するのも「テストの時間」であり、1日1時間のテストの時間だけが、プログラマーにとっての「テストの時間」ではありません。
そのような「テストの時間」が、1日にどれくらいあるのかは、人それぞれですが、うちのチームのエースプログラマーを見ていると、1日のほとんどが「テストの時間」なんじゃないかな。でも、プログラミングもしてる(ストーリーが仕上がってくるからね)。この辺は、元の記事にも書いてありますね。
わたしは、これまでいくつかの組織、チームに所属してきましたが、こんなにテストに時間を使っているプログラマーがいるチームは、見たことがありません。
さて、今回この記事を書くにあたって、久しぶりに過去の記事を読み返しているのですが、こんなのも見つけました。プログラマーを褒めるためにも、割り込んでる!
テスターなので、普段からかなり意地悪なことをするんですけど、それでも壊れない、不安定さを感じない、これは頑丈に作られているなと、テストしていて(これは、素晴らしい・・・)と、思う瞬間があるんですね。プログラマーが、様々なユースケースを想定した上で、丁寧に設計、実装してきたのが、分かるんですよ。そんなシステム、ソフトウェアの動きを目の当たりすると、これはもう、一言言わずにはいられない。ストーリーを担当したプログラマーのところに行って「こんな(ひどい)ことしたんだけど、ちゃんと動いてた!すごい!感動しました!」て、割り込むんですね。
もうすこし説明すると
— miwa (@miwa719) 2018年1月30日
テストしたのは 10:30〜17:30 で、お昼休みや休憩時間が入るから、だいたい 1時間に2名 のプログラマーに割り込んでる。(感覚的にあってます)
割り込み時間はいろいろだけど、昨日は 3〜10分 くらいだったかな。
「割り込む」という言葉は「無理に押し割って入ること」「横入り」のように、どちらかというと、悪いイメージや印象を持つことが、多いかもしれないですね。でも、うちのチームは「これ」が推奨されています。(とは言っても、他人の作業に割り込むのは、練習しないと出来ません。わたしも出来るようになるまで、数ヶ月かかりました。)
そこで何をするかと言うと
— miwa (@miwa719) 2018年1月30日
・プログラマーの目の前でバグを再演
・クラッシュした時に多いのだけど、一緒にログを見ながら、わたしがやっていたことを話す(再現手順を把握してから報告、ではない。クラッシュしたらすぐ呼ばれます)
・プログラマーと一緒にテストする(バグの原因解析などのため)
割り込まれたプログラマーは、コードを書く手を止めます。ペアプロも、設計レビューも中断します。うちのチームで「割り込み」は、優先度が高いものとして扱われているので、コンピュータの世界での、割り込み(インターラプト)「実行中の処理を中断して、優先度の高い別の処理をする仕組み」に、似ていますね。
そうそう、プログラマーだけでなく、テスター同士でも、お互いのテスト中に割り込んで、いろんなことを話します。
- 昨日コミットされた◯◯だけど、さっきこんなバグを見つけたよ(目の前で見せる)
- おおお
- それが出るなら、これはどうかな(おもむろにペアテストがはじまる)
- うーん(深く)触るのは、このバグを修正してからの方がいいかもね
- ◉◉のテスト、シミュレータ環境では動いたけど、これ、実機環境でも確認したい
- うんうん、ハードウェアの制御も絡んでくるし、タイミングが微妙に変わってくるかもしれないよね
- じゃあ、午後、テストベイで一緒にテストしようか
- OK
もちろん、テスターも(テスト中に)プログラマーに割り込まれます。
- 昨日のバグが再現しないので、一緒にテストして欲しいです
- ◯◯について、テストの作戦を立てたいんだけど、今からちょっといいですか?
- **の件、直してみたんですけど、こんな感じでどうですか?(コミットする前に、プログラマーの開発環境で見せてもらい、動作確認することもある)
そう考えると、プログラマーにとっては「テストの合間にプログラミングする」だけど、テスターにとっては「テストの合間にテストする」ですね。(わかりづらい!)
「テストの合間にプログラミングする」を、テスターの目線で補足しました。うちのチームの開発風景と「テストの合間にプログラミングする」この感覚が、すこしでも伝わりましたら、うれしいです。