CAT GETTING OUT OF A BAG

What the tester is thinking.

無意識なテスト

ソフトウェアテストの小ネタ Advent Calendar 2020 - Qiita 11日目の記事です。

qiita.com

はじめに

私は医療機器(自社製品)の開発者です。開発の現場で感じるちょっとした違和感を大切にし次の行動に移るためのシグナルとして使う、そんなお話を2年前のソフトウェアテスト #2 Advent Calendar 2018 - Qiitaに投稿しました。『違和感のつかまえかた』は多くの方に読んでいただき、これがきっかけで登壇したりと印象深い記事のひとつになりました。今でも覚えているコメントがあります。


この人、無意識を使おうとしてる。

開発やテストで無意識を使おうとする意識は無かったのですが、そう言われてみればそうかもしれません。無意識が教えてくれることは意外に多くバグも出せます。何を言ってるのかわからないかもしれませんが、毎日のことなので偶然ではなさそうです。この記事では ”意識して触っているわけではないのにバグを出せてしまうテスト” を「無意識なテスト」と呼ぶことにして、この伝わりそうにない無意識なテストについて書いてみようと思います。

無意識:国語辞典的な意味

土曜日の午前中、愛車で近所のスーパーへ買い物に行くときに左折しなければならない道を直進してしまい、あわててUターンしました。なぜ直進したのかはすぐにわかりました。そう。平日の通勤経路が直進だったのです。会社に行こうなんてこれっぽっちも思ってなかったのに無意識に直進してしまいました。

む-いしき【無意識】

1. 意識がないこと。正気を失うこと。「無意識の状態が続く」

2. 自分のしていることに気づいてないこと、また、そのさま。「無意識に足が向く」

3. 精神分析学で、意識下の領域、種々の人間現象の背後にあって影響を与える混沌としたもの。催眠・自由連想・投影検査、麻酔などの薬物作用によってのみ表出が可能となる。潜在意識。

さすがに正気は失ってなかったので 1. ではありませんね。直進したその一瞬だけを切り取ると 2. の「自分のしていることに気づいてないこと」ですし、直進した=表出したのは 3. の「潜在意識のなせるわざ」とも言えそうです。無意識なテストも 2. または 3. に当てはまります。

無意識なテストの特徴

  • こんなことをしたらこういう問題が起きるかもしれないと狙いを定めてやるテストとはちがう(そういうテストは毎日やってるけどそれとはちがう)
  • 気がついたらやっていた
  • 頭で考えるというより身体が勝手に動いている
  • なぜそんなことをしたのか聞かれたら意図や理由を答えることができる
  • 当てずっぽうにやっているわけではなさそう
  • 思考のスピードに自分のテストが間に合ってないと感じる
  • 脳内に広がる情報量が多すぎて取りこぼしていると思う
  • 取りこぼさないように脳内に浮かんだことを言葉にしようとした瞬間に無意識なテストではなくなる
  • 脳内にあるのはこんなこと

企みや企てや期待する結果や期待しない結果や起きたら嫌なことや前にこんな問題があったとか昨日のプロダクトの様子とか同僚がこんなことを気にしていたとか処理は一瞬で終わるけど内部的にはこんな風に動いているはずだとか自分が作るとしたらどう作るかとかその作り方だとこんな風に間違えるかもしれないとか実装中に話題になったことやプログラマーの表情やチケットに書いてあった断片の文字やいま目の前で起きていることや指先から伝わってくる感触や視神経に残るコンマ何秒か前の残像(はあはあ)

  • QuestionとAnswerのセットが一瞬のうちに大量に処理されるイメージ
  • ものすごく繊細なときもあれば大胆なときもある
  • わずかな綻び(設計や実装が破綻する前触れのようなもの)を肌感覚や手触りで感知する
  • 出したバグをあとから思い返すとロジカルに見つけているのがわかる
  • 息を吸って吐くように自然にできる
  • 属人性が高い
  • プログラマーSさんの感想:"こわくて見てられない"
  • プログラマーFさんの感想:"落ち着きがない"

f:id:miwa719:20201210194446p:plain

バグの原因調査で動作ログからShiftキーを押していたことをプログラマーから告げられたときの私

なぜこんなことができるのか

私たちのチーム(以下、咳チーム*1)の製品開発のやりかた(チーム全体がひとつの生き物のように見えます。その生命体がやっていることすべて)に秘密があると思います。なぜなら咳チームにJoinする前は無意識なテストなんてできなかったし、第一そんなテストが有るなんて知らなかったから。ちょうどよい媒体がたまたま私だっただけで、無意識なテストは宿るべくして宿ったチームの成果物のようにも思えます。再現性のないおとぎ話のようですが、無意識(意識下)に強い影響を与えてそうな2つの習慣を紹介します。

1. どういう仕組みで動いているのか想像しながら触っている

ボタンを押すと画面が切り替わり○○が表示される、のような人間の目に見える変化だけでなく、たったそれだけのことを実現するためにソフトウェアがどういう仕組みで動いているのか想像しながら触っています。たとえばこんな感じです。

ボタンを押すということはどういうことか。どのイベント(MouseDown、MouseUpのような)に反応するのか。イベントを感知するプロセスと○○を取ってくるプロセスは同じなのか。○○はどこからどうやって選ばれ、どのようにしてデータを受け渡しているのか。その中間データはそのあとどうなるのか。受け取ったデータはそのまま使うのか、加工するのか。その時点ではたしかに存在してる○○を選ぼうとした直前に○○が消えていたらどうなるのか。画面の初期化はどのタイミングで行うのか。毎回やるのか。初期値はどこから持ってくるのか。画面のその位置に○○を表示すればいいことをプログラムはどうやって知るのか。

このように想像しながら触っていると「たったそれだけのこと」なんて思わなくなります。1秒で終わる処理がとてもとても長いものに感じます。ソフトウェアの隙間に気づき、試したいことがどんどん出てきます。画面を眺めているだけでは目に映らなかった問題や課題が見えてきます。新しい疑問がわいてきます。

どういう仕組みで動いているのかイメージできるようになると、自分の頭の中にピタゴラ装置NHKの番組『ピタゴラスイッチ』に登場するからくり装置)のようなものが組み上がってきます。実際のソフトウェアと同じかどうかはわかりませんが(たぶん違うがそのズレは悪いものではない)脳内でそのピタゴラ装置を動かしながらプロダクトを触ります。ときにはピタゴラ装置のある部分に障害物を置いてどう反応するのか観察します。プロダクトを動かしながら自分の理解をテストし続けるのです。

仕組みを知るにはどうしたらよいか

ソフトウェアがどういう仕組みで動いているかは、それを実装したプログラマーから教えてもらうのが一番良いです。またはその仕組みを知っている人。教えてもらうタイミングは何か不具合が見つかったときがおすすめです。"この状況でこんなことをするとこういう風におかしくなる" という物語を使って仕組みをトレースすると頭に入ってきやすいです。またこのときに仕組みの中のどこをどう直そうとしてるのかも併せて教えてもらうとよいでしょう。私は自分の頭の中にポンチ絵が描ければヨシ!(ひとまず理解できた)としています。不具合が直ってきたらどこをどうテストしようかな?と考えたり作戦を立てるときに、解像度が上がっているのを実感すると思います。

f:id:miwa719:20201210031531j:plain

100msecの間にソフトウェアの内部では何が起きているのか*2

2. 圧倒的な練習量

無意識なテストは身体的な反応(脊髄反射)に似ています。脳みそと感覚器を使って毎日プロダクトを触り続けていたら自然とそうなっていました。

私の1日(8時間勤務)の時間割りは、朝会と夕会で1時間半(内容は設計レビューのようなものです)、残りの時間はプロダクトを触ったり同僚のプログラマーやテスターと製品について具体的な話をしています。製品と向き合う時間の長さというよりはその時間をどう過ごしているかがポイントだと思いますが、仮にプロダクトを触る時間は1日1時間、残りの時間はずっと製品に関する会議をしていたとしたら無意識なテストは今も身についてないんじゃないかな。プロダクトの出来栄えや手触りや速度感を身体のすみずみまで染みわたらせるにはちょっと短いような気がします(個人の感想です)。

おわりに

意識して触っているわけではないのにバグを出せてしまう「無意識なテスト」について書きました。普段の開発では作戦としての無意識はありません。あてにしてないのでバグが出せたらラッキーくらいに思っています。無意識=気づかない、という側面もあるのでこわいですよね。

お客さまが想い描いている理想の世界や解決したい課題を自分たちの製品でどう表現するのか。ソフトウェアの仕組みを想像しながら動かし、お客さまが本当に望んでいるものは何かを問い続けています。このような毎日の営みが私たちのこころや身体となり、無意識の領域に働きかけるのでしょう。

鋭い読者は気づいたと思いますが、この記事を読んで無意識を意識してしまったら「無意識なテスト」になりません。私自身も今回これを書いたことで無意識に無意識を意識してしまいそうでちょっと後悔しています。

*1:世界一長生きのXPのチーム。@m_seki がプロの無職をロールプレイしている。

*2:話を聞いても複雑すぎて理解できないときもある。これはプロの無職に解説を求めて描いてもらったポンチ絵