ATDDについて8年越しのリプライ

kyon_mm氏(以下、キョン):今日のイベントについて説明します。みなさんconnpassでお集まりいただいたと思うんですが、1990年代に広まりはじめたTDD(テスト駆動開発)について、2013年くらいに私がちょっと話をしました。

先日、日本でも有数の優秀なエンジニアたちが集ってプレゼンテーションする「July Tech Festa」というカンファレンスの中で、東口さんがATDD(受け入れテスト駆動開発)のプレゼンテーションをしていたんですね。そのときに私が2013年に話したプレゼンテーションについて興味をもってくれて。

今回ちょっと雑談してみようとTwitterで言ってみたら、東口さんが「いいですよ」と言ってくれました。やってみようかなと思ったのと同時に、雑談を聞きたい人ももしかしたらいるかなと思って、こういう勉強会にしてみました。では東口さん、自己紹介をお願いします。

東口和暉氏(以下、東口):はじめまして、東口です。軽い雑談という気持ちで臨んでみたら299人くらい参加者が集まっていて、どういうことだってなっているんですけど。まあ、そんなことにはかまわずに、ただ雑談していこうかなと思っています。

今はBASE BANKという会社にいて、テックリード兼マネージャーという肩書きでやっていますが、いちソフトウェアデベロッパーです。TDDやアジャイル、クラウドインフラなどの書籍の寄稿、技術カンファレンスなど、いろいろ発表しています。

今回July Tech FestaでATDDの発表をして、それが終わったあとに、「そういえば『ATDD by Example』という書籍があるんだよなぁ」とふと思い出しました。読んでみようかなぁと思ってTwitterで調べたら、キョンさんがなにやら2014年にしゃべってそうだということを発掘しました。

そこからキョンさんにTwitterで連絡をして、8年越しにリプライして、今日の場になったという感じです(笑)。よろしくお願いします。

キョン:よろしくお願いします。8年前にそんなことを言っていたキョンですが、最近はデロイトトーマツコンサルティングという会社で執行役員をやっています。2013年、2014年に話をしたときは、まだ47機関(チーム名)ではガッツリとアジャイルをやってはいなくて。なんちゃってアジャイルというか、アジャイルの試行錯誤をしている段階でした。

ちゃんとアジャイルをやるようになってから、私の考えが変わってきた部分もあるので、そういったところも含めて、今日は東口さんといろいろお話ができたらいいなと思っています。

セッション1に入っていくんですが、その前にみなさんにちょっと今日の芸風をお話していこうと思います。今日は、東口さんがおっしゃってくれたとおり、基本的には私と東口さんの雑談がメインです。

この2人のお話に付き合ってやるぞっていう人とはどんどんよい開発をしていきたいと思っているので、みんな友だちだよねっていう気分でやっていこうと思っています。

今日は「自分たちはこう考えています」と話すので、正解やべき論はないです。エキスパートがこう言っているんだからというわけでもないと思います。エキスパートって何ですかね!? わかりません!(笑)。 東口さんも私も自分の職務としていろいろやることはあるんですけど、楽しんでやっているエンジニアの1人という立場で見てもらえればと思います。

みなさんのコメントはメチャクチャうれしいです。ただ、しゃべっている間に見れるとは言っていません(笑)。見れないんだけど、うれしい。あとから見返してホクホクするタイムがあって、私が「あぁ、やってよかったな」って思える感じです。

今ここにQRコードがありますよね。これをスマホで読み込んでもらうと、mentimeterというWebサービスにつながります。みなさんは質問をここに投げることができます。最後の23時くらいからここをひたすら読み上げていこうと思います。

明確な質問じゃなくても書いてもらって大丈夫です。「自分はこう思うんですよね」みたいな、ちょっとした問いや、明確な質問じゃないんだけど、これはどうなんだろうみたいなのもあげてもらって大丈夫です。

あげてもらったのを全部取り上げる時間や気力はあんまりないので(笑)、たぶん東口さんとワイワイ楽しく話して、あとからふぅって一息をついてから見る感じです。

ぜひみなさんと、ゆるい感じでつながっていければなと思うので、ここに書いてもらえるとうれしいです。なんかさっそく。「test」。ありがとうございます! イェイ、イェイ! 

東口:なるほど。

アジャイルをやる中で感じた外部品質の課題

キョン:では本格的に始めていこうと思います。最初なんですが、今回のイベントのきっかけで、先ほどTDDやATDDについて東口さんがプレゼンテーションしたというのがありました。どうしてATDDに興味をもつようになったのかを具体的に教えてもらってもいいですか? 

東口:もともとATDDという用語自体は2、3年前に『実践テスト駆動開発』を読んでいて知っていて、あぁ、こんなのがあるんだなぁと思っていたんですけど。最近アジャイルをやっている中で、イテレーションごとの外部品質をどうやったらうまくやっていけるかと課題を感じていました。

それを実現するためにソフトウェアテストの方面からなにか施策がないかって考えていたときに、ふとATDDが頭の中に蘇ってきました。そこからアジャイルテスティングとかソフトウェアテストの戦略全体からATDDまで遡ってテストの戦略を考えたいなぁっていうのが、ここ1、2ヶ月のムーブメントです。それがあって、興味をもちはじめたというのがきっかけにです。

キョン:なるほど。ATDDというワード自体はけっこう前から知っていて、それが今回思い起こされたので深掘りをしていった、という感じなんですかね? 

東口:そうです。当時はただE2E(End to End)的な、ユニットテストよりも少し大きなレイヤーでテストを回すくらいの認識しかなくて。アジャイルを一通りやったあとにもう1回「そういえばあの話ってもしかしてこうなのか?」と思い返して深掘っていった感じです。

キョン:なるほどね。いいですね。

東口:逆に2、3年前にやってなくてよかったなって、最近は思っています。

キョン:その心は?(笑)。

東口:あんまりよくわかっていないまま、受け入れテストはたぶんこうなんだろうみたいな推測でやってしまいそうだなと思って。特に目的感もなくやってしまいそうだったので。ちゃんと目的感をもって取り組むというところを考えると、ちょうど今でよかったなと短期的な振り返りを最近しています。

キョン:おもしろいですね。GOOS(『実践テスト駆動開発』)が出版されたのはいつでしたっけ?

東口:2012年の9月に日本語版が出版されたみたいですね。

キョン:原著はそれよりももっと前だろうから……。

東口:『ATDD by Example』の出版も2012年なので、少なくとも2012年7月よりはずっと前ですよね。

キョン:なるほど。

東口:あった。2009年ですね。

キョン:GOOSまわりで言うと、どこかでTDDBC Tokyoをやったときに、かっちゃんさんがキーノートでスティーブ・フリーマンを呼んでくれたんですよね。

東口:すげぇ。

キョン:そのときにスティーブ・フリーマンが、いわゆるメッセージベースのオブジェクト指向プログラミングとテスト駆動開発は非常に相性がよいという話をしていました。GOOSの最初のほうに書かれていることをキュッと詰めて話してくれて、内容までは覚えていないけれど、いろいろなQAが走っていましたね。

東口コマさんが(Discordに)貼ってくださっていますね。

キョン:楽天タワーってやっていたのか。懐かしい、思い出しました。

東口:Twitterで2013年の資料をやりとりしたのは、アップデート版の2014年の楽天のTech Talkの『自動テストの誤解とアンチパターン』というやつですよね。

キョン:そうですね。なので、2013年にシステムテスト自動化カンファレンスでしゃべった内容がツイートから読み込めないのは、非常に不徳の致すところなんです。

私、昔Bitbucketでブログをホスティングしていて、そのブログはMercurialで保存されていたんですけど、BitbucketがMercurialをサポートしなくなったことをすっかり忘れていて、ブログが1バイトも残っていないという(笑)。

東口:なるほど。それでどれだけ探しても見つからなかったんですね。インターネット上にない! と思って。

キョン:インターネット上にないんですよ(笑)。2014年にアギレルゴコンサルティングの川口さんと、今セッションを聞いてくれている伊藤さんたちと一緒に、楽天がお昼休みにやっているTech Talkというイベントで登壇してくれないかという話をいただきました。

そのときにSTAC2013の話も含めて話しましょうかと話したのが、今リンクを貼ってくれた『自動テストの誤解とアンチパターン』というプレゼンテーションでした。

2010年前半におきたツールのムーブメント

東口:なるほど。すごい温度感で始まっていたんですね。確かに2009年、2012年、2014年ってかなり温度感が高い。この当時のATDDってどういう温度感だったんですか?

キョン:特に2010年代前半はRSpecとかSpockとか、JavaScript系のテスティングフレームワークも含めた、いわゆるSpecBDDといわれるRSpecに端を発したスタイルでのテスティングフレームワークがすごくもてはやされた時期でした。

「こうやってテストを書くときれいになるんだ」みたいなムーブメントが起きていて。ある種のBDDではあるけど、BDDのスタイルにすることでATDDになりやすい側面もあるし、アジャイル開発を徐々にやっていく中で、もうちょっとハイクオリティにするためには自動テストの範囲を広げなきゃいけないよねっていうときに、TDDでやれないかというムーブメントは確かにありました。

今言ったムーブメントは、日本でのという意味ですけど、GOOSで言われているような、ある種のモックというか、Test Doubleを使ったテスト駆動開発というよりは、ハイレイヤーな自動テストをTDDでできないかという文脈がすごく大きかったかなと思っています。

東口:なるほど。TDDの文脈の中で、そのまま大きな範囲のテストを自動化したくて、BDD、RSpec、ちょうどいいものがあるぞみたいなところでつながってきたんですね。

キョン:そうですね。あの頃はテスティングフレームワーク、特にJUnitの進歩が止まっていたんですよね。Javaはちょっと歩みが進みはじめて、JUnitがJUnit4でずっと止まっていました。

そこに対してRSpecとかSpockとか、JavaScript系のテスティングフレームワークがドカドカ出てきた感じで。そういったツールのムーブメントも大きかったとは思いますね。

東口:代替していくムーブメントもそこに絡んできていたんですね。

キョン:そうですね。

(次回へつづく)