「観点の蒸留」

~腕利きソフトウェアテストコンサルタントが支える優理の事件簿・アドベントカレンダー2016/12/15番外編~

著者: にし やすはる

「あ~、忙しい忙しい。やることは山ほどあるのに、時間は全然足りないよ。でも早く一人前のQAマンにならなくちゃ。頑張るぞ!」

鳥刈は誰かに聞いて欲しいわけでもなく、しかし独り言にしてはずいぶん大きな声で呟きながら会議室のセッティングをしていた。今日はいつも先輩が受けているコンサルティングを自分一人で受けられる、またとないチャンスだ。勉強ならたくさんしている。本もいくつも読んだ。いろんな勉強会に出席した。SNSでも凄い人たちと友達のように会話できる。その成果をコンサルの人に誉めてもらおう。奥村先輩はいっつも「お前は熱心なんだけどさ、ちょっと空回りなんだよなぁ...。」と苦笑するけど、あんな呑んでばっかりの人じゃ分かってくれない。優秀なコンサルなら分かってくれるはずだ。こないだだって、開発の安達部長から「期待してるよ」って声をかけてもらったんだぞ...と言わんばかりに、全く汚れていないテーブルを、頼まれてもいないのに力を込めて一生懸命拭いている。20代の若さの分だけ机がキュッキュと音を立てた。

「こんにちは。いつもお世話に...あれ?奥村さんはどうされました?」

ここのところずいぶん寒くなったのにジャケットだけで登場する姿はスマートだ。母さんの手編みの毛糸のマフラーをしている僕とは違う。一瞬同性に見惚れてしまった鳥刈は、すぐに我に返って軽く声を上ずらせながら答えた。

「すみません、急病で奥村先輩はお休みなんです。あいにくQA部長も出張で留守にしてまして、もしよろしければ私だけでお話を伺ってもよろしいでしょうか。」

水元は、首から上だけのお辞儀で恐縮した風を見せながら気負っている雰囲気が漏れ出てくる若さに微笑みつつ、「構いませんよ。でも前回の宿題は...?」と尋ねながら席に着いた。コンサルタントという職業柄、クライアントがバグ対応で欠席するなど珍しくもなんともない。会社の前まで来て中止のメールが来たこともある。熱心な若者の力になれるのであれば嬉しい限りだ。

「すみません。そちらも次に回して頂けますでしょうか。今日はちょっと『テスト観点』についてお伺いしたいんです。」

なんかさ、よろしくやっといてよ、と先輩は電話で言った。うん、言った。僕はそう聞いた。だったら、せっかくの機会なんだから自分の実力アップに使おう。こないだ呑み会で先輩は「お前の信じる道を行け」とも行ってくれたじゃないか。なんだか覚えてなさそうだけど。

「ふむ...いいですよ。どんな質問ですか?」

「インターネットで各社の動向を調査したんです。『テストの切り口』とか『どうテストするか』とか抽象的には分かります。でも具体的なものが欲しいと思ってテスト観点の表みたいなものをダウンロードすると、なんか違和感があって...。ずっとモヤモヤしてるんです。教えてください。テスト観点って、なんですか?」

どうして不明点を説明し終わってドヤ顔をしているんだろう、という疑問が頭をかすめたが、水元の頭脳の焦点はそれどころではなかった。この質問に答えはないからだ。

なぜ答えがないのか。質問者は字面としてテスト観点の定義を質問してくる。しかし実のところ彼らが聞きたいのは「良い」テスト観点の挙げ方であり、それが「良い」ことの保証である。質問にまともに答えるとずいぶん哲学的な定義の話になるし、モヤモヤは消えず不承不承納得した表情をして話は終わりになる。誰も得をしない。

だからといって「良い」テスト観点について答えるのも難しい。結果として得られたテスト観点の良し悪しよりも、そこに至る過程でどこまでケンケンガクガクあーでもないこーでもないと議論して、時には白熱して、そして皆が納得感を共感することが大事だからである。誰かから「良い」テスト観点をもらってきたとしても、すぐに陳腐化する。水元はそのことをよく知っているし、少なくないエネルギーを費やしたコンサルティングの成果がクライアント側で水の泡になってしまって臍を噛んだこともある。どうしたものか...。

「百聞は一見にしかず、とか、論より証拠、と言いますよね。せっかく今日は鳥刈さんのお話をゆっくり伺えるので、ちょっと手を動かしながら実例を見てみましょうか。」

実例!そう、僕に足りないのは経験だ。勉強はたっぷりした。勉強会に出て凄い人たちの経験談も聞いた。でも先輩は微妙な顔をする。きっと僕に足りないのは経験だ。経験さえ積めば先輩も分かってくれる。それには実例が一番だ。さすが腕こきのコンサルタント。高いだけあって、クライアントのニーズに的確に答えてくれる。

「そうですね!よろしくお願いします!」

             ☆                  ☆

「あまり大きな実例ではかえって話が分からなくなりますから、すごく小さな例にしましょう。でもご心配なく。とても大事なエッセンスが詰まっていますから。」

えー。小さな例なら、勉強会でも聞けるじゃないか。鳥刈は少しがっかりした。

「鳥刈さんがダウンロードしたテスト観点の表は、どんな表でしたか?」

「なんだか機能仕様書から抜き書きして非機能要求をおまけに付けた感じだったり、あれしろこれしろここ見ろあそこ見ろのリストだったりして、なんだか歴史の年号の暗記みたいでした。あれを見て上手にテストできる感じはしませんでした。」

「なるほど。じゃあ実際に、手を動かしてみましょう。ここからダウンロードして...そうです。で、こうするとテキストファイルが開けますね。これは、+Lhacaという解凍ソフトのReadmeファイルです。読んだら、解凍のあたりのテスト観点図を作ってみて下さい。部分的で構いません。そんなに難しくないですね。」

水元はにこやかに促した。Xmindを立ち上げてすぐに、鳥刈は図を完成させた。

「おっ、早いですね。勉強熱心という噂は聞いていますよ。さすがです。」

誉められた!やはり見る目がある人は違う。先輩と大違いだ。鳥刈は鼻息が荒くなったことに気づかず、しかし意識の高い社会人に必要な謙譲の振る舞いとして顔の前で右手を振った。




【テスト観点図1】

「ふむ、なるほど。このテスト観点図の『意図』はなんでしょう?」

水元はまっすぐ鳥刈の目を見て言った。鳥刈はそのまま真っ向から見返して答えた。

「解凍機能の仕様確認です!」

「なるほど。まず、この段階ではそれで構いません。でも実際にテストをする時には、もう少し何か工夫をしませんか?」

「あー、そうですね。『1M以上』と書いてありますが、『とても大きい』にしてみると思います。」

「じゃあテスト観点図をリファインしてみましょう。」




【テスト観点図2】

「『1M以上』を『とても大きい』にしたのはなぜですか?」

鳥刈の目が少し泳いだ。

「何となく、何かが起きるかもしれないと思ったからです。」

「直感ですよね。直感、いいんです。大事にしましょう。さて改めて、とても大きくすると何が起きるでしょうね?」

「うーん、なんかあふれたり、とか?」

「なるほど。そうすると鳥刈さんのテストの“意図”は、『とても大きいサイズのファイルを解凍すると、なんかあふれるかも』なんですね。」

水元は注意深く、鳥刈の言葉を丁寧に紡いで投げ返した。誘導してしまうと、後で気づいて余計にモヤモヤするからだ。

「はい。そうなりますね。そうです。段々そうだって思ってきました。なんか元々そう思ってた気がします。」

鳥刈は暗示にかかりやすい。水元は、誘導してしまったかと心の中で軽く苦笑した。

             ☆                  ☆

「ところで、『あふれる』ってなんでしょう?」

水元は尋ねた。

「えーと、ディスクが一杯になって動かなくなる、とか。」

「その方が、テストの“意図”がはっきりしますね。言い直すと、『とても大きいサイズのファイルを解凍して、ディスクを一杯にして動かなくする』がこのテストの意図ですかね。このテストの意図は、2つの部分に分けられるんですが...

1) とても大きいサイズのファイルを解凍する

2) ディスクを一杯にして動かなくする

...本当に鳥刈さんがテストしたいのは、どちらでしょう?」

「2)です。」

「その場合、サイズが大きくなって欲しいのは、解凍前のファイルですか?」

「あー、違いますね。解凍後です。」

「じゃあテスト観点図をまたリファインしてみましょう。ただし分かりやすくするために、プログレスバーの確認は別で考えることにしましょう。」




【テスト観点図3】

「さっきより意図がはっきりした、すなわち“意図の解像度が上がった”気がすると思いますが、いかがですか?」

「うーん、確かにそうなんですが、まだモヤモヤしますね。」

鳥刈は首をひねりながら答えた。腕を組んで右手はアゴの下に当てている。首を左右交互に倒しているので、ばね細工のようだ。

「なぜでしょう?」

「解凍前のファイルと解凍後のファイルと両方あるからかな」

「解凍前のファイルは大きくなくてよいのですか?」

「いえ、解凍前が大きければ、解凍後も大きいですから。」

「圧縮形式は関係ない?」

「あー、もしかしたら関係するかも。いや、形式じゃないな。圧縮率とかだな。」

鳥刈の声が心持ち大きくなったことに二人は気づいていない。

「圧縮率?」

「はい、解凍前のファイルが大きくて、圧縮率が高ければ、解凍後のファイルも大きくなります。」

「なるほど。じゃあテスト観点図をリファインしてみましょう。




【テスト観点図4】

「ずいぶん“意図”がはっきりした気がしますね。」

「そうですね。そんな気がします。」

水元はこの答えの源泉が実感なのか暗示なのか不安だったが、これは実感してくれていると自分に暗示をかけて先に進むしかなかった。

             ☆                  ☆

「でもこのテスト観点図だと、相変わらずテストの意図は『解凍機能の仕様確認』になってますが、構いませんか?」

「いえ違います。『ディスクを一杯にして動かなくする』が意図ですから。」

「じゃあリファインしてみましょう。」




【テスト観点図5】

「こう、ですかね...?」

鳥刈は正解に向けて進んでいるのか不安になりつつある自分と、ほんの少しだが分かってきたという気持ちを臍のあたりで感じている自分との同居に戸惑っていた。水元はその戸惑いの理由を見透かして、鳥刈の背中を押すことにした。

「さっきのテスト観点図と今のテスト観点図を見比べて、気がついたことはありませんか?」

「あー、そうですね。別に解凍機能以外でもディスクを一杯にするテストってできるのかもしれません。圧縮とか。」

「じゃあまたリファインしましょう。ちょっとずつたくさんリファインしていいんですよ。中間作業成果物だと思うとやれ版管理だとかが気になりますが、いまのテスト観点図は鳥刈さんの理解を助ける相棒なんです。相棒と一緒に理解を深めているというイメージを持ってくださいね。」

「相棒...。相棒か...。」

鳥刈はまじまじとテスト観点図を見つめた。相棒と言われると、なんだか急に親しみが湧いてきた。嬉しくなってきた。また鼻息が荒くなってきた。




【テスト観点図6】

「どうですか?」

鳥刈は我に返った。

「いや...なんかムダっぽいです。同じようなテスト観点が並んでます...。」

相棒だったのに。一生懸命やったのに。ムダだった。もうダメだ。全然分からない。QAなんて向いてない。やっぱり開発の技術がなければテストなんてできないんだ。僕の人生はムダだった。鳥刈はポジティブな暗示にもかかりやすい分、ネガティブな暗示にもかかりやすい。肩を落としていると、水元はそんな鳥刈の顔を覗き込んでいたずらそうな顔でこう提案した。

「開発と同じですよ。似たようなソースコードがあれば共通化してサブルーチンとかライブラリにしますよね。テスト観点図で同じような構造が見えたら、テスト観点を一段階抽象化して、共通化しましょう。抽象化だと難しく聞こえるかもしれませんが、同じ役割をするものをグループにまとめて名前を付けるだけです。例えば、解凍と圧縮をまとめて『処理』と呼んでみましょうか。」




【テスト観点図7】

「どうですか?」

「すっきりしてきました...でももう少しすっきりできるかもしれません。」




【テスト観点図8】

鳥刈は目をぱちくりさせて、自分がいまリファインしたばかりのテスト観点図を眺めた。ずいぶん変わったな。

「なるほど。確かに、この方が意図が明確ですね。」

「ずいぶん分かりやすくなりました。変われば変わるもんですね。」

「でも、相変わらずテストの意図は『仕様確認』になってませんか?」

「あー、すぐ直します。」




【テスト観点図9】

「分かりやすいね。まぁ関連線をわざと描いてないのもあるけど。」

「分かりやすいですね...。意図がはっきり見えます。」

「ここまで分かりやすくなると、何か増やしたくなってこない?」

勝負所。誘導してはいけない。ここで誘導すると、すべてが水の泡。軽い口調で、あえて目を合わせず。言葉でも身振りでも指先でも目線でも、呼吸ですらもヒントを与えないように。水元は全身の筋肉がこわばり、汗が噴き出すのを感じていた。

「そうですねぇ...うーん...あー、ファイルのサイズが大きくなくても数が多ければいい、とか?」

水元の苦労など全く感じ取らず、鳥刈は答えた。水元は安心した。鳥刈はどうやら、ダイブと水元が呼ぶ状態に入っているようだ。考えている対象に集中でき、匂いや手触りを感じられるほどありありとイメージできる状態。潜っているのだ。クライアントがダイブしてくれたら、そのコンサルティングは成功である。放っておいても理解は進むし成果は出る。

「おー、新しい観点が出てきましたね。素晴らしい!じゃあリファインしましょう。」




【テスト観点図10】

「他に考えておくべき観点はありますか?」

「そうすると、ディスクの容量を減らしておいてもいいですね。」

「また新しい観点ですね!いいですよ、鳥刈さん、実にいい。さらにリファインしましょう。」




【テスト観点図11】

「なんか、いい感じですね。」

「なんか、いい感じですね。」

二人で目を合わせて、にんまりした。水元もまた、ダイブしているのだ。

「じゃあさらに一歩踏み込みましょう。一杯にできるのって、ディスクだけですかね?」

「メモリ!メモリも一杯にできます。そうすると、こうですかね。」




【テスト観点図12】

「そして抽象化。『記憶域』ですね。」

鳥刈はまるで10年以上もテスト観点図を作っているような調子で進めている。水元はその様子をウキウキしながら見ている。




【テスト観点図13】

水元はニヤリとしながら口を開いた。

「なにか違和感ない?」

テスト観点図に目線を一周させて、すぐに鳥刈は答えた。

「あります。『ファイル』だけやけに具体的。あと『圧縮率』も。」

「具体的って思うなら、抽象化してみましょう。」

「そうですね。ファイルは『リソース』かな。メモリだったらデータや文字列とかですかね。」

「圧縮率は『処理パラメータ』あたりにしておきましょうか。」




【テスト観点図14】

「どうですか?」

「なんだか、他のソフトのテストでも役立ちそうな感じです。圧縮ソフト以外でも。」

鳥刈は改めて驚いたようだった。

「最初のテスト観点図は役立ちそう?」

「いえ、あれは圧縮ソフト専用です。他のソフトには使えません。」

水元は立ち上がり、人差し指でリズムを取りながら解説を始めた。

「今日は鳥刈さんに『テスト観点の蒸留』という技を体験して頂きました。テスト観点図を描くときに網羅とかMECEばかりに気を取られると、仕様書やユーザマニュアルのコピペが主になってしまいますし、何より描きっぱなしになってしまいます。」

水元は頷いて肯定するように鳥刈を見つめて、言った。

「最初はそれでもいいんです、最初は。でもその後に、自分たちの意図を再検討したり、解像度を上げたりしながら、テスト観点図を何度もリファインしなくてはなりません。そうすると、テストの“知恵”が“蒸留”されてテスト観点図の上の方に浮かんできます。テストの知恵が蒸留されると、フロントローディングをして蒸留で品質を確保しやすくなります。逆に言うと、最初から完全なテスト観点図を描こうとしない方がいいですし、社外からテスト観点を買ってくるのも弊害が大きいんです。蒸留の過程で自分たちが分かっていくことそのものが大事ですから。」

             ☆                  ☆

「なるほど、テストの知恵かー。」

鳥刈は感心したように何度も頷いた。

「最後にできたテスト観点図が完全な模範解答なわけではありません。引き続き鳥刈さんが考えてリファインしていく必要があります。でも“蒸留”する感じは掴めましたかね。では、ポイントをまとめましょう。

1) 最初は仕様書やユーザマニュアルのコピペのテスト観点図でも構わない。まず描くことが大事。

2) 描いてみたら、ほんの少しでいいし経験や直感で構わないから、テスト観点図に工夫を加えてみる

3) 「意図のリバース」を行う。テスト観点図に加えられた工夫や、自然に描いたところから、一体自分はどういう意図でこのテスト観点を描いてるんだろう、と再検討してみる

4) 「意図の解像度の向上」を行う。テスト観点図に描かれた意図がはっきりするように、テスト観点図をリファインしたり、より深く検討してみる

5) 「知恵の蒸留」を行う。意図のリバースと解像度の向上をしながらテスト観点図をリファインすると、意図が徐々にトップに近い観点に浮かび上がってくる。

7) 「テスト観点の拡充」を行う。蒸留された知恵がテストのモデルのようなものになっているので、足りない構成要素を追加したり、そのモデルに該当する他のものに応用してみる。」

「テスト観点を育てる、って感じですね。子育てはしたことないけど、こういう風に無理せず見守りながら育てられたらいいなー。」

まだ実感がこもっていない。無理もない、鳥刈はまだ20代の若手だからだ。

「複数のテストエンジニアでテスト観点図を描いてるのであれば、『みんなでテスト観点図を育む(はぐくむ)』のかもしれません。愛を育むように、たくさん意図を話してお互いで理解しあって共通認識をどんどん改めていって、テスト観点図を囲んでいつでもみんながみんなのことをわかり合ってる状態だといいですね。テスト観点図に正解はないんです。大事なことは、みんなで育むことなんです。」

一足早く仕事終わったことを感じ取ったのか、鳥刈は雑談モードに入ったようだ。

「水元さんは、愛を育んでいるんですか?」

「もちろん。これから大事な人のために、クリスマスのプレゼントを買いに行きます。鳥刈さんは、クリスマスはどうされるんですか?」

「ぼ、ボクはカノジョとか軽薄な感じじゃなくて、一人で自宅で技術書読んでバリバリ勉強しますよ!最強のQAになりたいんですから!サンタさんにもお願いしてます!モテないんじゃないです!プロの独身なんです!」

自分で話を振っておいて狼狽するあたりを可愛いと言ってくれる女子は探せばいるんじゃないかな世の中広いんだし、とは口に出さず、片付けを終えて水元は立ち上がった。

「はっはっは。まぁ、無理しない程度にクリスマスを楽しんでくださいね。そうそう、テストエンジニアに恋人になってもらうといいですよ。色々気を配ってくれますから。ではお疲れ様でした。メリークリスマス♪」

To be, or not to be continued into the main story…