Autify Podcast : 水平思考とテスト技法
Autify Podcast、エピソードを追加しました
ソフトウェアテスト、スタートアップなどにフォーカスしてさまざまなTipsや、事例などをお伝えするラジオ番組、Autify Podcastを公開しています。
今回は、Mark Ward(@mkwrd) さんをゲストに迎え、テスト、言葉のお話し、水平思考など幅広くトークを繰り広げています。
ご意見、感想はTwitterでメンションしてください。
https://twitter.com/AutifyJapan
ここからは書き起こし記事です。
末村: じゃあ、Autify podcastを始めます、よろしくお願いします。いえーい。 今日はですね、河原田さんこと、マークさん。どっちが本名なんでしたっけ。
Mark: My name is Mark Ward.
末村: Oh, Nice to meet you.
Mark: Nice to meet you too. はい、というわけで、Mark Wardと申します。Twitterでは @mkwrdというハンドルネームで活動をしているという、あれでありますと。 今日は、友人の末村さんのお招きにあずかってですね、このようにAutifyのPodcastでお喋りをさせていただく機会をいただきました。どうぞよろしくお願いします。
末村: よろしくお願いします。先ほど友人という発言がございましたが、知人ですので謹んで訂正させていただきます。
Mark: その距離感大事だった?
末村: 1回サシ飲みしただけで、友人になれると思うなよ!
Mark: いやいや、その1回の差し飲みで3時間も4時間も、3,000円で喋り続けるっていうのは、なかなか普通の知人じゃあり得ないでしょう。
末村: あれ、凄かったですよね。ちなみに念のため申し上げておきますが、 このサシ飲みというのは、コロナパニックが始まる前に行われたものですので、我々は現在、不要不急の外出は慎んでおります。よろしくお願いいたします。
Mark: そうそう。3密は避けて。
末村: 3密は避けてね、そうそう。3密って何でしたっけ。
Mark: 何だったっけ。密接とか、何かそんなんじゃなかったでしたっけ。
末村: 密接・密集。
Mark: 寄るな、触るな、近寄るなみたいな。
末村: 押さない、駆けない、喋らない。
Mark: そうそうそうそう。「おかし」。
末村: なるほどね。
Mark: 3密。何かそんなですよね。
末村: そうですね。
Mark: とにかく人との距離は空けましょうということで、皆さんもコロナウイルス感染しないように、自助努力を続けてらっしゃると思うんですけれども。そんな最中で、この収録もリモートで行っているんですよね。
末村: はい、そうです。
Mark: なので、こういった収録っていうのは、大体目の前にいらして、手元に原稿があってていう感じで進めてくものなんですけど、僕は少なくともそういうイメージがあったんですけども、なんとZoomで絵を繫いでですね、完全にドフリーで話していると。今日のお話に関しては、そんな感じになってますと。
末村: だそうです。すごい、今どっちが招いたんだか分かんない感じになって、すげえなと思ってるんですけど。
Mark: いやいや(笑)どちらかというと僕はですね、この出演をさせていただくにあたってですね、一応過去作を全て制覇させていただいてこの場に臨んでおりますので。
末村: 過去作を。
Mark: 過去作を。過去3回、Podcastやられてますよね。
末村: そうでしたっけ。
Mark: そうですよ。
末村: 3回も、あれ?
Mark: リグレッションテストの話と、現note株式会社の増原さんが出演なさった2回と。
末村: すごかったですね。公開から1週間か2週間かぐらいで、公開した時に「ピースオブケイクから来ていただいた」みたいな感じで言ったのに、2週間ぐらいで「note株式会社に社名変更しました」みたいなのが来て。おっと、まあいいけど。
Mark: まあまあ、よくあることですよね。この時期ですしね。
末村: そうですね、しょうがないですね。うちもいつAutifyからBtifyになるか分かんないんで。
Mark: 何?
末村: 僕、テストデータでよく、組織名にAutifyって入れるんですけど、たくさん組織を作りたいとき、AutifyのAをBにしたり、CにしたりDにしたり。
Mark: おお。
末村: Autify、Butify、Cutify、Dutify。
Mark: うん。
末村: なので、いつButifyになるか分からない。
Mark: いつButifyにクラスチェンジするか分からない。
末村: そうですね。
Mark: なるほどね。そんなワーワー、つまらないことを喋っておりますけれども。
末村: そうですね。われわれアイスブレイクが長いのをどうにかしたいですよね。
Mark: 僕はもう、直に本編入ってもいいんですけど、このトーク本編ないですよね。
末村: そうですね。いつも収録のとき、僕もアンチョコ?カンペ。どういう話題を振るかみたいなやつを、実はこっそり用意して臨んでいるんですけど。 今回、河原田さんと話すにあたっては、絶対にそういうのがない方が面白いという信念に基づいて。
Mark: むちゃぶりをすると。
末村: そうです。何も用意せずに来ました。絶対に1振ったら1,000返ってくるから、この人。
Mark: いやいや、そんなに多くない(笑)たまに会社の人にも言われますけどね。 Mark君に話を振るとずっと喋ってるから、君は人の話を聞くことを覚えた方がいい、って。
末村: ふふふ(笑)
Mark: うん、分かるっていう。
末村: 何を隠そう、僕もそういう評価受けることが多いんですけど、違うんですよ。引き出しが開きやすいだけなんですよ。
Mark: なるほど。
末村: そう。引き出しが多いわけでも、人の話を聞きたがらないわけでもなく、ただ引き出しがガバガバなだけで、1個の引き出しに手を掛けられると全部開いちゃうんですよ。
Mark: それ、あれですね。引き出し同士が、密結合になってて、ちょっと何か関わりがあるなっていうのは、すぐくっついちゃうみたいな。
末村: なるほど。
Mark: うん。最近「Code Complete」っていう、Steve McConnell という人が書いた本を読んでいるんですが。
末村: はい。
Mark: そこにやっぱり書いてあるコーディングのプラクティスとして、結合は疎にしてこうと。
末村: そうですね。
Mark: いうことが書いてあるわけですよ。だから僕たちはどちらかというと、1話し始めたら1000喋ってしまうような密な感じを、少し改良すべきなのかなっていう気はしますね。 そうすることによって、テスタビリティも上がるんじゃないかなと。
末村: なるほど。すごくスムーズな流れに見せかけて、全然関係ないことを喋られた。
Mark: はは、バレたか(笑)
末村: バレバレですね。なるほど。 「Code Complete」を読んでいるんですか。
Mark: そうなんですよ。
末村: へえ。
Mark: 「Code Complete」って、Microsoft Pressから出ている2冊の分厚いね、はい。
末村: 知ってます知ってます。俺が知ってますというよりは、今のは聴いている方に向けたメッセージなんで。
Mark: もちろんもちろん。皆が皆、末村さんと同じぐらいの読書量を誇ってるって、そんなわけない。 僕だってたまたまその「Code Complete」読んでるだけで、普段はね、4コマ漫画とか好きなんで。
末村: 4コマ漫画は何を読むんですか。
Mark: 「猫田びより」といってですね。
末村: 「猫田びより」を読むんだ。なるほど。
Mark: ジャンププラスのですね。集英社の漫画アプリ、ジャンプ+の「猫田びより」っていうのがあるんですよ。
末村: なるほど。「猫田びより」を読む人とは、俺は仲よくできない。
Mark: え、ダメ?あれダメ?
末村: いや、いいよ。
Mark: いい?じゃあよかったよかった。「猫田びより」、シュールで面白いなと思って。
末村: うん。俺、実は4コマ漫画あんまり好きじゃないんですよね、正直。
Mark: おお。あんまり人生の中で触れてこなかったですか。
末村: うん、なんだろう。4コマ漫画で爆笑した経験って全然なくって。
Mark: うん。
末村: 「コボちゃん」で。「コボちゃん」分かりますよね、「コボちゃん」。
Mark: あの、新聞に載ってるやつですね。
末村: そうですね。「コボちゃん」で、「コボちゃん」のお友達がアトピーにかかっちゃう話があるんですけど。
Mark: ほう。
末村: アトピーを、アトピーの「ト」を接続詞だと勘違いして、2つの病気にかかっちゃったと勘違いする。「ア」「ピ」に。
Mark: 「ア」「ピ」うんうん、なるほど。
末村: 「ピ」にかかっちゃったと勘違いする話があって、それだけは唯一、俺が人生で爆笑した4コマ漫画なんですけど。
Mark: なるほど。
末村: それ以外ではあんまり、実は4コマ漫画を面白いと思ったことがなくって。
Mark: 4コマ漫画って結構、すごく面白いのは面白いし、そうでもないのはそうでもないんですけど、あれは芸術だと思っていて。
末村: なるほど。
Mark: ある意味の。人をちょっと感動させる仕組みが入っていたりとか、少しセリフまわしがよかったりだとか、あとは絵柄で人を面白くさせるとかね。いろいろあると思うんですよ。
末村: うんうん。
Mark: 僕が好きな4コマ漫画、Webで拾って見たものなんですけどね、意識高い系笑点ってのがあったんですよ。
末村: なるほど。
Mark: 笑点っていうと、和服を着た落語家のお師匠さんたちが、前で喋るわけですよね。
末村: 笑点ってそっちか。
Mark: 笑点です、笑うポイントですね、Laugh Pointで笑点ですね。
末村: はい。
Mark: 意識高い系笑点っていうのがあるんですよ。
末村: はい。
Mark: その意識高い笑点、4コマ漫画なんですけどすげえ面白いんですが、何が面白いかっていうと、そこの落語に、笑点に出てくる皆さんご存じのお師匠さんたちがですね、意識高いワードをすげえ使うんですよ。
末村: はい。
Mark: アグリーだとかフィックスだとか、ゼロベースで考えるだとか。それが、その和服のおじいさんがそんだけ長大なセリフを喋ってるっていうのが、ものすごくシュールで。 これはね、是非気になった方はですね、検索して調べていただきたいですね。 見つからなかったら僕のTwitterアカウントにDMを送っていただいて「ねえぞ」と言ってくだされば、こちらですとご案内させていただきます。っていうのがあるんですよ。
末村: なるほど。
Mark: そういう風に考えると、それってすごく面白い斬新なアイディアだと思うんですね。 だって、落語家の先生がゼロベースだとかキュレーションだとかリスケしてフィックスみたいなことを言うわけですよ。
末村: なるほど。
Mark: それって新しいんですけど、いわゆる広告代理店だとか、そういった僕らのいるIT業界もそうかもしれませんけども、そういった業界では別に普通じゃないですか。
末村: はいはいはいはい。
Mark: 普通に使う言葉じゃないですか。アグリー普通に使ってるやつ仲よくなりたくないけど。まあ、でもそうなんですよ。 ってなったときに、面白いなと思ったんです。 新しいアイデアっていうのは、古いアイデアが新しい場所、思いもしなかった場所にうつったときに起こるんじゃないか、見つかるんじゃないかと思うんですよね。
末村: なるほど。
Mark: これってすごく、枯れた技術の水平思考じゃないですけども、そういった発想になる。
末村: 出た。なるほど。
Mark: うん。喋ってる間がうまく上手にとれないので、お聴き苦しい感じになってしまったかもしれないですけど、いかがなものでしょう。
末村: 編集でカバーされるので大丈夫です。
Mark: 素晴らしい。
末村: 4コマ漫画の話をとうとうと喋っていただき、ありがとうございます。
枯れた技術の水平思考っていうワードが出たときに、違う、逆か。 俺がMarkさんを初めて観測したのって、SeleniumConf Tokyo、事前勉強会で水平思考の話をされていたときなんですけど。あのとき、俺も水平思考っていう概念を全然知らなかったんだけど、枯れた技術の水平思考っていうワードは、ゲーマーなので前から聞いたことがあって。 その水平思考って、同じもののことをさすんですか。
Mark: そうですね。まず枯れた技術の水平思考とは何かっていうのを、簡単にご説明いただけますか。
末村: はい。俺が説明するってこと?枯れた技術の水平思考って何なんですか。
Mark: 枯れた技術の水平思考っていうのは、任天堂にいらした横井 軍平さんが言い出したことだと思うんですけども。 90年代だったと思うんですが、当時、ゲーム機の開発っていうのは、もう日進月歩ですごく進歩をしていたんですよ。 SONYがあったりだとかセガサターンがあったり、いろいろあったと思うんですけど。 そうした中で、ちょっと時代違うかもしれない。 そうした中で、ひとつ大ヒットしたゲームのハード、ゲーム機があって、それをゲームボーイと言いますね。
あのゲームボーイっていうやつは、画質は全然たいしたことないもので、白黒みたいな感じのところからスタートしたんですけど、当時としては、あれが、要するに持ち運ぶことができるっていうのが、すごく画期的だったわけです。
末村: なるほど。
Mark: ところが一方で、別にカラーでもなんでもないっていうところでゲーム性というか、画面に映し出されるものというか、そこの部分に関しては、時代を2歩も3歩も遅れたものだったんですよ。 ただ、古い時代の技術であっても、新しい場所、ゲームボーイの場合は携帯性っていうところなんですけれども、そういうところに持ち出してきた、そして大ヒットしたっていうのを、それが任天堂が作った伝説のひとつだと思うんですけども、そのときに横井軍平さんがおっしゃっていたと言われるのが、枯れた技術の水平思考という考え方ですね。
末村: うん。
Mark: 枯れたっていうのは僕ら技術者ではよく言いますけども。あまり進化が激しくないとか、そういう意味合いで使いますね、安定したとか。
末村: そうですね、安定したの方で使いますね。
Mark: うんうん。といったところで、枯れた技術の水平思考っていう考え方を使って、ゲームボーイっていうのは生み出されたんですよという話です。 その水平思考という言葉ですけども、ラテラルシンキングと言われるものですね、と。 意味合いがどこまで一緒なのかって言われると、少し困ったりするんですけど、確かにそうですね。横展って思っとけばいいんじゃないですか。
末村: 急に説明を雑にしないでいただけないですか(笑)
Mark: いろんなところで、水平思考の考え方みたいなお話をさせていただく機会がこれまであったんですけど、必ずや会場に1人や2人いらっしゃるんですよね、横井軍平の話を出してくるっていう方がやっぱりいらっしゃって。 どう違うのかって言われると少し説明がしづらいかなっていうか、本当に違うんだろうか。いや全然違う感じもするし、まあ似たような感じもするし、といった感じではありますと。 何で僕がこれ、すごく半端にしか言えてないかというとですね、枯れた技術の水平思考について勉強しきれてないからですね。
末村: なるほど。
Mark: そうなんですよ。なので、僕自身がいろんなところでお話しをしている水平思考っていうところに、ラテラルシンキングっていうところにお話を戻させていただくとですね、問題を解決するにあたって論理的に突き詰めていくと、どうしてもこの岩盤破れないみたいな壁が出てきたりするとか、あとは問題の解決自体はできるんだけども、すごく時間が掛かるみたいな。
末村: うん。
Mark: というような感じに入っていくと思うんですけど、そういう風に順序立てて丁寧に考えていく、論理的に思考していくことを、垂直思考と言いますと。
末村: うんうん。
Mark: うんうん。
末村: 順序立てて考えていくみたいなイメージでいいんですかね。
Mark: 水平思考について考える場合は、あえて順序化をせずに、問題に対して裏側から見てみるとか。
末村: うん。
Mark: われわれテスターが好きな言い方だと、境界値を見てみるとかですね。 そんな感じでものを見るっていうことができるのかなという考え方なんですよ。 総合的に、あるいはランダムにっていう言い方になりますね。
その発想を生かしていけるのが、探索的テストというものではないかという風に、わたくしはお話をしているという感じなんですよ。
末村: うんうんうん、なるほど。
Mark: はいはい。
末村: 完全に順番が前後しちゃったんですが、今日Markさんに来ていただいているのは、単純に面白いやつだからもうちょっと話を聞きたいなっていうので来てもらったっていうのもあるんですが、水平思考とテストの話を結びつけてというか、テストにそこを持ち出しているっていうのを話しているのを、俺が知る限りなのでたぶん世の中にはたくさんいらっしゃるんじゃないかなと思うんですが、初めてそこについて話してる方。 すごくユニークな考え方だなと思ったので、そこの話を聞きたいなっていうのが、1個ありました。
Mark: なるほどなるほど。
末村: で、水平思考について、最初話を聞いたときに、「リファクタリング・ウェットウェア」っていう本があるんですけど。
Mark: ほうほう。
末村: 「リファクタリング・ウェットウェア」っていうのはオライリーから出ている本で、技術の話ではなくって、どっちかというといかにしてわれわれの生産性を上げたり、発想力を高めていくかみたいなところにフォーカスしてる。 プログラマーの知的生産術みたいなタイトルの本があったと思うんですけど、あれに若干似つつ、どっちかというといかにいい発想を生み出していくかみたいなところにフォーカスしてる本なんですが。 その中でも具体的な言い回しが思いだせないんですが、たしかLモードとRモードっていう言い方をしてたと思うんです。よく言う、右脳的発想、左脳的発想ですね。 Lモードはハードディスクじゃないや、いいのか。ストレージでいうと、シーケンシャルリード、順番に読んでいく。Rモードはランダムアクセス。 つまり、頭の中で系統立ててできあがった知識を生かしていくときには、到底思いつかないようなものが、ランダムアクセスだとポロッと出てくる。
人間、死に際に走馬灯を見るみたいな話がありますが、突拍子もないような発想をあえてすることで、そこからいいものを見つけてくるみたいな話があって、リファクタリングウェットウェアっていうのはそれをいかにしてコントロールするかっていうとちょっと違うかもしれないんですが、そういうRモード、右脳的発想、ランダムアクセスでの突拍子もないようなアイデアをいかにして生み出すかっていうところにフォーカスしているやつなんですね。 そこが水平思考に近いんじゃないかなっていうのを思って。 思ってだからどうでしょうっていうのを、今ここでMarkさんに振るのもどうかと思うんですが。
Mark: なるほどなるほど。そうですね、すごくよい質問だと思うんですよ。疑問の視座の持ち方というか。非常にいいですね。 鋭いし、わざわざそのように着目しないとそのような疑問の抱き方っていうのはしないのかな。末村さんは、ものをちゃんと洞察される方なんだな、すごいな、なんて思いながらですね、お話を伺っておりましたと。
末村: そうでしょ。
Mark: で、何の話でしたっけ。
末村: (笑)水平思考っていうのは、アイデアを生み出すものかっていうのが、根本的なところです。
Mark: うん、なるほど。
末村: すいません。Markさんは、水平思考を主に探索的テストをやるという文脈において使われている印象がすごくあります。 僕はそのことを、すごく気に入っています。
Mark: うんうん。
末村: それは、水平思考を使うっていう話もそうだし、探索的テストに十分フォーカスするっていうところもそうです。 なぜなら、僕はMarkさんに会うまで、探索的テストという言葉を知ったことがなかった。
Mark: うんうん。
末村: だいたいテストの技術って言われたときに出てくるのって、探索的テストでテストの技術を使わないっていう話じゃないです。 テストの技術だったり技法だったり、テストタイプであったりみたいな話をするときに、探索的テストについて出てくるのって、結構後の方。かなりテストについて、テストの入門的な本を読んだとしても、結構後の方に紹介されているようなイメージがあります。
ちょっと話を戻すと、水平思考は探索的テストだったり、水平思考だったりっていうところを、すごく前面に、言い方が適切か分かんないんですが、すごくプライオリティって言ったらいいのかな、一級市民のように扱う。
Mark: 一級市民?!
末村: そこに序列があるわけではないっていうのは僕は知ってるんですが、テストの探索的側面っていうのが、まずあるんだよと。
Mark: うんうん。
末村: そこについてすごくフォーカスをしている人を見たのが、まず珍しいなという印象があって。 ダメだ、どんどん話が飛んでいくな(笑)
そのときにやっぱ思ったのが、探索的テストっていうのはバグだったり、いや、あるいはバグではないかもしれない。いろんなものを見つけるための技法だと思います。技法って言ったらいいんですかね、見つけるためのものだと思います。 水平思考も、そこに使うのにすごくよいものだと思うんですが、さっき話したリファクタリング・ウェットウェアで話されているRモード、突拍子もないようなアイデアを見つけるための技法と水平思考というものって、何か違うニュアンスがあるような気がするんですよ。
Mark: ほうほう。なるほど。違うニュアンスがある。
末村: ないですか。
Mark: ないとはもちろん言いません。
末村: Markさんに最初に水平思考の話を聞いたときに出てきてたのが、 何でしたっけ。テニスの話でしたよね。
Mark: そうですね。
末村: そうそう。うろ覚えで説明できないので、今、ちょっと簡単に説明してもらってもいいですか、あの話。
Mark: はいはい。 僕がよく、水平思考の話をするときに出すExampleの例として、テニスの試合っていうのを出しています。 128人の選手が参加する、大きなトーナメントがあります。 そこで優勝者、ロジャー・フェデラーであったりとかノバク・ジョコビッチだったりとか、そういった有名な選手が最終的に勝つわけですけど、その選手の優勝が決まるまでにその大会、トーナメントでは、何試合行われますかっていうような、そういった問いを投げかけるわけです。
特にこれ、テストエンジニアの方、結構そういう傾向が強いのかなって見てますけど、いわゆるExcelの表を書いてですね、1回戦、参加人数128人、試合数は2で割るんで64人みたいな、64試合ですね。
64試合やる。64試合やった結果、2回戦に勝ち残る人数は64人。その64人でまた試合をしていきます。この試合数っていうのも割る2だから、32試合あると。 という風になっていくと、試合数っていうのは1回戦目が64試合、2回戦目が32試合、3回戦目が16試合、4回戦目が8試合と、そんな風になってくるんですよ。最後は決勝戦だから1試合ですと。 っていう風にやってくと、試合数いくつですかっていう風になると、1+2+4+8+16+38+64ってなるわけですね、まあ、なるんですよ。これ足し算すると、結果は127っていう数が出ます。 なので、トーナメント優勝者が決まるまでの試合数は127試合ですよっていう風に導く。
普通そうやってやると思うんです、数数えろと言われたらたぶんそうなると思うんです。 この考え方はいわゆる論理的に、要するに試合数なんだから試合をやるのは人数128人いたら64試合あるよなみたいな感じで、順序立てて考えていくっていうところから、バーティカルシンキング、いわゆる垂直思考という考え方になります。
じゃあ一方で、水平思考だったらどういう風に考えますか。水平思考っていうのはランダムに考えますと。要するに、思ってもみなかったところから答えをペロッと出しちゃうような、マーヴェラスな答え、ビューティフルな回答っていうのが出てきたりしますと。 水平思考を使うとどうなるかっていうと、128人いるんでしょと、その内優勝者何人いるの、ひとりだよね。 ひとり優勝者ってことはさ、残りの127人っていうのはどっかで負けるよね。負ける回数って1回ずつだよね。っていうことは、その負ける選手の数ぶんだけ試合があるっていうことなんだから127試合だよね、っていうような答えの導き出し方をするんです。
それが僕が説明している、例に出している、水平思考っていうのの扱い方というか具体例ですね。 こんなもんでよろしいでしょうかね。
末村: ありがとうございます。すごく納得がいってなくて、実は。
Mark: おお、なんと。
末村: っていうのが例えばなんですけど、テニスの試合数を導き出すアルゴリズムがあったとします。 それを、アルゴリズムの実装が、Markさんの言っているような形で実装されていました、と。
テスターはそこに対してブラックボックステストをしないといけません。
ってなったら、それをもう1回、今おっしゃってたようなやり方でテストをしてしまうと、もしかしたらバグっているかもしれない…ってなると、何かすごく今おっしゃっていたようなのが、まずランダムな考え方とはどうも思えない。
Mark: なるほど。
末村: そう。ランダムな考え方とはどうも思えないっていうのがまずひとつと、その考え方をテストに使えるのか分からない。 テストはどこまでも垂直志向でないと、つまり何らかの論拠の積み上げでやっていかないと。 論拠だったりエビデンスの積み上げでやっていかないと、テストとして成り立たないんじゃないかっていう懸念がありまして。 一方で、僕たちは境界値分析によって、1から10まであるところの、例えば、境界値が2と4だったらそこをテストするじゃないですか。 他のところは恐らくバグが出ないだろうと踏んでテストするけれど、その考えにはすごく同意しちゃってるんですよね。
Mark: うんうん。
末村: この違いは何なんだろうというのがすごく、自分の中でもやっとしている。伝わりますか。
Mark: うんと、そうですね。まずひとつ考えられることがあって。
僕のスライドの中では垂直志向を使った形式的テスト、つまり僕らが普段やってるテストケースを書いてっていうテストのことですね。と、水平思考を使った探索的テストっていう並べ方をしています。 形式的テストって、本当に100%論理的なんでしょうか、っていうのがありますと。
末村: なるほど。
Mark: 例えば、組み合わせなんか膨大になってくと思うんですよね。モバイルの数、あとブラウザのバージョンとかいろいろあると思うんですけど。 その中からカットするじゃないですか、テストケースって。そのカットする根拠って、全部が全部、論理的にこう示されているから。 例えばAutifyの対応ブラウザがこうだからみたいなところで、根拠があって決められているものと、経験上、IE10でテストすれば、IE11でも動くだろうみたいな。だからちょっとあれですけど。
末村: 分かります。言いたいことはいろいろありますが、分かります、そうですね。
Mark: みたいなところが入ってくると思っていて、それってその組み合わせを間引くっていう考え方をするときに、経験値っていると思うんですよ。
その経験値っていうのは、いわゆるその水平思考的なランダムアクセスメモリーのところから引っ張ってくるもんだと思うんですが。
末村: ああ、なるほど。つまりあれですね。例えばなんですが、今のIE10と11っていうのがちょっと気に入らないので違うのにするんですけど、WindowsのChromeとMacのChromeがあります。そうそう違わねぇだろうみたいな(笑) だから、WindowsのChromeとMacのChromeとをテストするのではなくて、WindowsのChromeとMacのSafariをテストするみたいな。MacのChromeについてはテストしない。
Mark: そうですね、しないとか最低限にするとか。
末村: ですよね、なるほど。
Mark: っていうところはあるかなっていうのがひとつ。 もうひとつ逆に創造的な思考である探索的テストっていうのを決めてくところにおいて、その論理的な部分っていうのが入らないかっていうと、入らないわけないと思ってます。 当然、実装された機能があったりだとか、過去のバージョンでバグが多かったりするとこだとか、逆にしばらく更新されていないところとか。
目の付けどころって、たくさんあると思うんですよ。
末村: なるほど。
Mark: その目の付けどころっていうところっていうのは、だいたいリスト化されたりするし、ちょっと英語で検索をするとツアーベーステストっていうのが出てきて。
末村: はいはいはいはい。探索的テストのやり方のひとつ。
Mark: そうですね、その通りです。っていうのがあったりするので、それってそのまま、そこに書いてあるやり方を適用すればできたりするわけですよ。
末村: うん。
Mark: 本当にそれが創造的って言えるのみたいな、ネットで拾ってきたやり方じゃんみたいな。 だから、完全なチェッキングである、完全な垂直思考しか使わない形式的テストはないし、完全に水平思考しか使わない探索的テストもないんですよ。
末村: なるほどね、そうですね。そこはグラデーションだし。
Mark: うん。問題はどこにあるかというと、今日本において僕の目利きする範囲で、探索的テストっていうものをすごく活用しているっていうプロジェクトが、あんまりないことですよねと。
末村: うんうん。
Mark: やっぱり形式的テスト、スクリプトテストとか言ったりしますけど、ここでは形式的テストという言い方を使いますが、その形式的テストっていうのイコール、テストであると。そこで完結しているという現状がある。
探索的テストはちょっと時間をとってアドホックに触ってみるとかその程度だったりするわけですよ。
ってなったときに、ここで出てくる話っていうのが、形式的テストと探索的テストってどっちもバグを出すので、どっちかしか出ないバグもあるんですよ、当然。出るバグの量って同じぐらいなんです。 同じぐらいでもあるにも関わらず、形式テストの方ばっかりやっていて、探索的テストをあまりやっていないというのは、いかにもバランスが崩れているのではないかという問題意識がひとつ。
もう1個あって、Autifyさんもそうだと思うんですけど、テスト自動化っていうのがどんどん進行しているわけですよね。発展してきている中で、形式的テストで記述できるもの、要するにチェッキングの領域っていうのは、どんどん自動化されていくと思うんです。 もちろん100%じゃないかもしれないけども、どんどん自動化されていく。
今その自動化に取り組んでいる人たちは、その自動化が終わった後どうなるのかなっていうことを考えたときに、全部テストがやってくれる、よかったよかった。自動化してくれているからよかったよかった。 じゃあ、僕はテストをどこにしたらいいのかなってなったときに、さあテストケースを書くかってなったときに、いや、もう自動化されているのでいりませんってなるわけですよ。 じゃあ、僕らの仕事ってなくなっちゃうんじゃないか、みたいな風になる時代が来るんじゃないかなっていう風に思ってます。 そこで、いやいやそのテストエンジニアの経験っていうのをバッチリ生かせる、テストのスペシャリストじゃないとできないような仕事が残ってるんですよ。 それが今まで日本で全然普及をしていないというか、あんまりやっているところを見たことがない、探索的テストっていう部分なんですよ、と。
末村: うんうん。
Mark: というような、以上、2つの思いがあって、あういう風に探索的テストっていうものをバンっと押し出したような喋り方をしている次第であります。
末村: うんうん、なるほど。すごく素朴な疑問なんですが、今テスト自動化の話が出ていて、テスト自動化は今技術的にチェッキングしか恐らくできていないと思うんですが、一方で探索の部分を自動化していこうみたいな高い志を持ったスタートアップを、いくつか知っています。
技術的な話を一旦置いておいたとして、Markさんは探索的テストは、人工知能なり機械学習なりによって、できると思いますか。
Mark: うん。今ではないでしょうけど、できるんじゃないかと思いますね。
末村: なるほど。
Mark: なぜならば、経験っていうところが水平思考に大きく寄与すると思うんですけど、探索的テストに寄与すると思うんですけど、経験って要するにこれまでの積み重ねなんですよね。 これまでの積み重ねっていうのはできるっていうことは、囲碁の世界とかでも明らかになっているわけじゃないですか。
やつら、自分たちで高速で対局して、人間が追いつかないようなレベルの試合をしたりとかってして実用化を身につけるっていうようなこともしてるわけですよね。 なので、できるんじゃないですかね。ただ、今今ではないと思いますよ。
末村: そうですよね。正直なところ、個人的にはそこに結構懐疑的でいて。 テストの観点そのものが、例えばなんですけどさっきおっしゃっていた囲碁だったり、あるいはテトリスみたいな。テトリスだったり、どっかのプロジェクトでアタリのゲームを全部強化学習で、人間より上手にやってみせようみたいなプロジェクトがたしかあったんですけど。 そういうある程度ルールがあって、今現状勝ってるか負けてるかみたいなのを評価するための関数が作れるようなものあればできそうな気がするんですが、テストにおいてこれがバグであるかどうかだったり、この挙動はユーザーエクスペリエンスが悪いよねっていうのを見つけてくるのって、すごく人の感性に委ねられる感じがしていて。
例えばなんですけど、あるソフトウェアを俺がテストするときとMarkさんがテストするときとで、かなり見るものが違うと思うんですよ。
Mark: うん。
末村: 俺はこのUXは悪くない、あるいはこういうもんだよねって思うかもしれない。Markさんは、いや、これはあり得ないって思うかもしれない。 そこって、UXに対する感度とか許容度だけではなくて、もっと広い何かのような気がしていて。 バグだったりも、明らかにエラー画面が出ちゃうとかみたいなのだったらすごくわかりやすい気がするんですが、その挙動に対する期待値を、過去に学習したものから見つけられるのかなというのが、すごく本当にできるのかなと思っていて。 我々はだいたいにおいて、新しいソフトウェアを作っているわけじゃないですか。
Mark: そうですね。
末村: 元々あるものをもう1回作ろうっていう人は、あまりいないと思うので。
Mark: うん。おっしゃるとおりですね。
末村: なので、すごく探索的テストの自動化は実現可能なんだろうかっていうのを、腑に落ちてないじゃないですけど(笑)
Mark: まあ、サイエンスフィクションな感じはしますよね。
末村: そう。何か、技術的なところを置いておいても難しいような気がしていて。考えうるとしたら、いろんなパラメータを持った人間ぐらいの機能を持ったAIテスターが何台かあって、それがそれぞれ意見を出してくれるみたいな世界観なのかなとも、ちょっと思うんですが、何かそれも…(笑)
Mark: この話をするときにひとつ、僕が考えるのが、そのテストの世界の話ですると、その辺でううん、どうなんだろうなになるけど、 例えばプロダクトオーナーであるとかビジネス側であるっていうのが、ロボットであるような時代。 これを想定すると、欲しいものがもう決まってるわけですよねと。
末村: なるほどね。
Mark: となったら、探索的テスト的な、違う名前になるかもしれないですけど、できるんじゃないですかね。
末村: なるほど。つまり、AIが作りたいものを決めて、作って、それをテストするという世界観になれば、探索的テストができる。
Mark: そうですね。
末村: それは何か、AIを作るっていうよりは人類をもう1個作るような話になりますね。
Mark: そうなんですよ。その頃っていうのがあと何1,000年後か分からないけど、そうなると間違いなくわれわれ人類っていうのは、たぶん愛玩動物か何かになってるわけですよ。
末村: いやあ、家畜人にはなりたくないな(笑)
Mark: だから、AIのPepperくんみたいなのに「末村君、可愛い可愛い」みたいな風に扱われるわけですよ。
末村: なるほどね。
Mark: 「お腹減ってるの? まだ18時00分00秒じゃないのよ」って、餌がもらえないとか。
そういう風になるんじゃないですか。もしくはいわゆる、オーウェルの「1984年」みたいな世界観になってくんじゃないかと。
末村: なるほどね、面白い面白い。たしかに。
Mark: だから、この話をしはじめるとSFに突入しちゃうんですよ。
末村: うん、そうですね。なるほど。
Mark: だから僕は、今のところは探索的テストは人間だけがやれるもので、テストのスペシャリストだからこそできる仕事であると。 それは、どんなに自動化が進んでも残るんだよと。仮に、それが残ってないとしたら、人類もほぼほぼ残ってないんじゃないかというような部分の話ですと。
末村: なるほど。つまり、技術的な障壁とか、技術的なハードルを考慮に入れた瞬間に、われわれに残された道は、チェッキングをなるべく自動化していくところと、探索的テストの技術を向上していくこと。
Mark: はい、テストエンジニアという枠組みではそうですね。これがQAエンジニアという枠組みだったら、変わってきますよね。
末村: ほう、なるほど。そこもうちょっと聞きたい。
Mark: はいはい。このPodcast、録音なんですけど、その録音なんですけど時間は大丈夫ですか。
ありがとうございます。
問題ないから喋り続けろ、ということで喋らせていただきますけども。
後半へ続く!
Autifyではこの他にも品質保証やテスト、アジャイル開発に役立つ資料を無料で公開していますので、ぜひこちらからご覧ください。