2015/10/14 jjugナイトセミナー「テスト駆動開発ここが聞きたい」
TRANSCRIPT
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
• 大中浩行(Ohnaka,Hiroyuki)
• TDD Base Camp
• グロースエクスパートナーズ(株)
• Twitter @setoazusa
• いきものがかり / miwa / ケラケラ
• Javaプログラマー兼インフラエンジニア
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
どうしてこうなった
「ワタシハTDDチョットデキル」
→「CIの構築お願いできますか」
→「デプロイの自動化したいんです」
→「インフラの自動化もお願いしたく」
→(イマココ)
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://en.wikipedia.org/wiki/Kent_Beck
Kent Beck
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「動作するきれいなコード」
「動作するきれいなコード」、ロン・ジェフ
リーズのこの簡潔な言葉は、TDD(テスト駆動
開発)の目標である。動作するきれいなコード
は、あらゆる理由で価値がある。
ー「テスト駆動開発入門」から
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
あやうい前提
「実は、『コードのよさは重要だ』という、か
なりあやうい前提に基づいて、この本は書かれ
ている。」
-「実装パターン」から
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「無能か有能かの判断な
んて、結局物事を成功さ
せたかどうかでしかない。
勝てば官軍、負ければ賊
軍。無能さを言い訳に努
力しない者は結局何事も
成し遂げず終わる。」
夏海公司「なれる!SE4 誰でも出来る?プロジェクト管理」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://ja.wikipedia.org/wiki/スパゲッティプログラム
スパゲッティーコード
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://www.flickr.com/photos/22719239@N04/2246462044/
疲弊しきった現場
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://ja.wikipedia.org/wiki/対爆スーツ
爆弾処理のようなリリース
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://www.google.co.jp/search?q=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%9A%9C%E5%AE%B3&ie=utf-8&oe=utf-8&hl=ja#q=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%9A%9C%E5%AE%B3&hl=ja&tbm=nws
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://twitter.com/setoazusa/status/650250873017204736
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
Robert.C.Martin(Uncle Bob)
Kevlin Henney(編)和田卓人(監修)夏目大(訳)「プログラマが知るべき97のこと」から
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「よい」コード
「これまで、粗悪なコードに苦しめられてきた
のですから、よいコードが重要であることに間
違いはないのです」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
TDDは「今がどうなっているか」というところ
から始まる、ボトムアップの理論。トップダウ
ンで「TDDの定義」みたいなところから議論を
はじめても、答えにたどり着けない
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「大抵の管理者は、真実を求めます。仮に彼らが、そう振る
舞っているように見えなくてもです。大抵の管理者は、よい
コードを求めます。仮にスケジュールに悩んでいたとしても
です。彼らはスケジュールと要件を守ることに必死かもしれ
ませんが、それは彼らの仕事なのですから仕方がありません。
あなたがそれに負けない熱意を持ってコードを
守ればよいのです。」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
結局のところ
重要なのは、コードがきれいなことそのものよ
りも、コードのどういう側面に価値を置くかと
言うこと。
それが積み上がった結果としてのTDD。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://en.wikipedia.org/wiki/Bulletproof_vest
テストファースト
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「TDD三原則」
• 失敗する単体テストのコードを書く前に、製品
のコードを書いてはいけない
• コンパイルが通り、適切に失敗する単体テスト
が通るまでは、次の単体テストを書いてはなら
ない
• 現在失敗する単体テストが通るまで、次の製品
コードを書いてはならない
Robert C. Martin(著)花井志生(訳) Clean Code アジャイルソフトウェア達人の技
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストを先に書くことはどんな意味があるのか
• テストに求められる機能は、成功するとGreenに
なり、そうでない時にRedになること
• テストファーストしてないテストは、「まず失
敗させる」ことができないため、テストとして
の信頼性がさがる
• 「失敗していないテストのカバレッジは50%し
かない」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
思い出してみてください。
自動化されてないテストで、テスト項目書に
「正しく表示されていること」と記載されてい
て、検証に苦労したことはありませんか?
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
TDDではなぜテストファーストするのか
あくまでテストのあるべき姿を追求したことで、
結果としてテストを最初に書くことになるイ
メージ。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
http://www.slideshare.net/YasutoEnjoji/20150621-asbc-pub/29
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストファーストよりも大事なこと
• 「1ヶ月かけてコーディング、1ヶ月かけてテ
スト」のようなアンチパターンから、どれだ
けプログラミングとテストを連携して開発が
できるようにするか
• テストによって開発が駆動されているか
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
• 大事なのは、システムをデリバリーするために、
どうステップを踏んでいくか
• テストファーストを導入できるなら、すればよ
い。
• そうでないとしても、ユニットテストより上位
レベルのテストの項目は先に作成するなど、テ
スト同士で補完していけば良い。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テスト駆動開発は、プログラム中の不安を管理
する方法である。ここで言う不安とは悪い意味
ではない。...(略)...道理にかなった不安、す
なわち「これは困難な問題だから最初から最後
までは分からない」という感覚である。
ー「テスト駆動開発入門」から
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「不安をテストにする」
http://blog.fieldnotes.jp/entry/2013/12/02/213516
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「不安をテストにするテストで表現する」
http://gihyo.jp/dev/serial/01/tdd/0010
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
私たちプログラマの手を止めるものは何でしょうか。私は
「不安」だと思っています。「もしかしたら」という感情で
すね。「もしかしたら,自分の書いているコードは間違って
いるかもしれない」「もしかしたら,ライブラリの使い方が
正しくないかもしれない…」。(略)
だから,これから書くコードに対して,if文があるだろうな
とか,ループがあるとか,正規表現使わなきゃいけないなと
か,そういった自分自身に対する不安,これから書くことに
対する不安に対して,テストを書いていきます。
「[動画で解説]和田卓人の“テスト駆動開発”講座 第10回 テストの最小単位は不安」http://gihyo.jp/dev/serial/01/tdd/0010
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
• お互いが不安に感じていることを認める。
• その人の弱さを認めた上で、それをどうテス
トでカバーできるかチームで考える。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「信頼で結ばれた共同体」
James O. Copelin Neli B.Harrison(著) 和智右桂(訳)「組織パターン」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「どんなチームであっても、スムーズに作業す
ることが欠かせない。たとえば、ソフトウェア
開発者は定期的に声を掛けあい、インター
フェースを調整しあい、ビルドを行い、テスト
をしなければならない。」
「組織パターン」から(強調部発表者)
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
まとめると
• メンバー一人一人が不安に感じていることを、
テストの出発点にする
• 各々が弱みに感じている部分をオープンに出
来るようにするチームをつくる
ということです。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストのジレンマ
• テストはバグをなおさない
• 品質を改善する手立てを持たない品質保証部
門
• 開発のロールに過度に押しつけられる品質へ
の責任
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
その結果としての「テスト」へのネガティブなイメージ
http://realtime.search.yahoo.co.jp/search?fr=top_ga1_sa&ei=utf-8&p=%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
Developer Testingとは
• 開発者がテストに対して抱いたネガティブな
イメージから脱却し、開発者が行うテストを
「開発者の意図を確認する」工程として再定
義する
• その基準は「不安」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
開発者と品質保証の相互信頼の再構築
• 開発者テストのレベルで「開発者の思ったと
おりに動く」ことが保証されているから、品
質保証のテストは品質の検証に注力できる
• 品質保証や受入のテストが後詰めとして控え
ているから、開発者テストはプログラムの中
の勘所を押さえることに注力できる
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「二重のフィードバックループ」
Steve Freeman ,Nat Pryce "Growing Object-Oriented Software, Guided by Tests"
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「TDDやれば偉いわけじゃない」
http://b.hatena.ne.jp/entry/232721484/comment/t-wada
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「その場に居続けるには全力で走り続けなければならない」
「グズな国じゃの!ここではだね、同じ場所に
とどまるだけで、もう必死で走らなきゃいけな
いんだよ。そしてどっかよそに行くつもりなら、
せめてその倍の速さで走らないとね!」
Lewis Carroll(著) 山形浩生(訳) 「鏡の国のアリス」
http://www.genpaku.org/alice02/alice02j.html
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
http://mizchi.hatenablog.com/entry/2015/10/02/202112
「さよならCofeeScript」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
http://d.hatena.ne.jp/higayasuo/20150928/1443415547
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
タユムコトナキナガレノナカデ
• コードを生かし続ける
• ビジネスドメインの変化
• 実行環境のバージョンアップ
• 技術トレンドの変化
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
私の話
• 新卒文系プログラマー
• 「オブジェクト指向分からない!
Serializableってどういう意味!」
• システムテストでコンパイルエラー!
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
レガシーコード、@t_wadaさん、java-jahttp://d.hatena.ne.jp/t-wada/comment?date=20080224#c