SlideShare une entreprise Scribd logo
1  sur  83
Télécharger pour lire hors ligne
#ccc_r11
テスト駆動開発ここが聞きたい
2015/10/14
大中浩行
#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
アジェンダ
• 「きれいなコード」
• テストファースト
• テストと不安
• テストのジレンマ
• まとめ
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「きれいな
コード」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka※絶版
#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※絶版
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
あやうい前提
「実は、『コードのよさは重要だ』という、か
なりあやうい前提に基づいて、この本は書かれ
ている。」
-「実装パターン」から
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「無能か有能かの判断な
んて、結局物事を成功さ
せたかどうかでしかない。
勝てば官軍、負ければ賊
軍。無能さを言い訳に努
力しない者は結局何事も
成し遂げず終わる。」
夏海公司「なれる!SE4 誰でも出来る?プロジェクト管理」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「テストしてないけど多分動く」
「とりあえずデプロイしてみよう」
「なんかわからないけど動いた」
etc…
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
…で、その結果
#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
「動作するきれいなコード」というのは原文で
言うと「Clean code that works」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka※絶版
#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
「きれいなコード」を語る上で、コードが
「リーダブル」であることは重要ですが、今日
の話ではその事に触れていません。
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストファー
スト
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
https://en.wikipedia.org/wiki/Bulletproof_vest
テストファースト
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「いつテストを作成すべきか。→テスト対象の
コードを作成する前である。」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「コードを変更する前に、失敗する自動テスト
を書くこと。」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
再び「クリーンコード」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「TDD三原則」
• 失敗する単体テストのコードを書く前に、製品
のコードを書いてはいけない
• コンパイルが通り、適切に失敗する単体テスト
が通るまでは、次の単体テストを書いてはなら
ない
• 現在失敗する単体テストが通るまで、次の製品
コードを書いてはならない
Robert C. Martin(著)花井志生(訳) Clean Code アジャイルソフトウェア達人の技
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
まあこわい
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
こわくないよ!
• テストファーストにはどのような意味がある
のか
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストファーストにはどのような意味があるのか
「テストファーストしてないテストは怖い」
※個人の見解です
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
テストを先に書くことはどんな意味があるのか
• テストに求められる機能は、成功するとGreenに
なり、そうでない時にRedになること
• テストファーストしてないテストは、「まず失
敗させる」ことができないため、テストとして
の信頼性がさがる
• 「失敗していないテストのカバレッジは50%し
かない」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
思い出してみてください。
自動化されてないテストで、テスト項目書に
「正しく表示されていること」と記載されてい
て、検証に苦労したことはありませんか?
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
ユニットテストが「テスト」である以上、テス
トの答えとなるものは先に用意されているはず
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
TDDではなぜテストファーストするのか
あくまでテストのあるべき姿を追求したことで、
結果としてテストを最初に書くことになるイ
メージ。
#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
ただ、IT技術者として手札は多いほうがよいの
で、スキルとしてテストファーストできるにこ
したことはないです。
#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
@t_wada曰く
#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
• お互いが不安に感じていることを認める。
• その人の弱さを認めた上で、それをどうテス
トでカバーできるかチームで考える。
#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
テストのジレ
ンマ
#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
詳しくはこちらを
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
まとめ
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
TDDをすすめる時に気をつけること
「テストを書く/書かない」ということは、道
義的な責任の問題ではない
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
「TDDやれば偉いわけじゃない」
http://b.hatena.ne.jp/entry/232721484/comment/t-wada
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
では、なぜTDDするのか
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
鏡の国のアリス
#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
タユムコトナキナガレノナカデ
• コードを生かし続ける
• ビジネスドメインの変化
• 実行環境のバージョンアップ
• 技術トレンドの変化
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
• 「世界を変える」というのは、もっとポジ
ティブなこと
• 自分が変わらずに世界は変わらない
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
私の話
• 新卒文系プログラマー
• 「オブジェクト指向分からない!
Serializableってどういう意味!」
• システムテストでコンパイルエラー!
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
Eclipseというものを知る
→「素晴らしい!書いたコードがコンパイルを
通る!」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
JUnitというものを知る
→「素晴らしい!書いたコードがちゃんと動
く!」
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
レガシーコード、@t_wadaさん、java-ja
http://d.hatena.ne.jp/t-wada/comment?date=20080224#c
#ccc_r11
Copyright 2015 Hiroyuki Ohnaka
これでおしまい!
TDDを習得するのも大事なんですが、「自分が
エンジニアする理由」をもっと大事にしてほし
いと思います。
またお会いしましょう。ご静聴ありがとうござ
いました。

Contenu connexe

Tendances

TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめTDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
Kei Sawada
 

Tendances (20)

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめTDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
KDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローKDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フロー
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
テスト駆動開発へようこそ
テスト駆動開発へようこそテスト駆動開発へようこそ
テスト駆動開発へようこそ
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
 

Similaire à 2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」

TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 

Similaire à 2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」 (20)

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016
 
CEDEC2015講演 チーム開発をスムーズにするために
CEDEC2015講演 チーム開発をスムーズにするためにCEDEC2015講演 チーム開発をスムーズにするために
CEDEC2015講演 チーム開発をスムーズにするために
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
 
はじめてのテスト技法
はじめてのテスト技法はじめてのテスト技法
はじめてのテスト技法
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
connpass特徴と開発の流れ
connpass特徴と開発の流れconnpass特徴と開発の流れ
connpass特徴と開発の流れ
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
Ciecleci
CiecleciCiecleci
Ciecleci
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 
Devとopsをつなぐchat ops
Devとopsをつなぐchat opsDevとopsをつなぐchat ops
Devとopsをつなぐchat ops
 
これができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejectedこれができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejected
 

Plus de Hiroyuki Ohnaka

Reading java-property-file-from-ruby
Reading java-property-file-from-rubyReading java-property-file-from-ruby
Reading java-property-file-from-ruby
Hiroyuki Ohnaka
 

Plus de Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
 
Reading java-property-file-from-ruby
Reading java-property-file-from-rubyReading java-property-file-from-ruby
Reading java-property-file-from-ruby
 
SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」
 

2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」

  • 2. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka • 大中浩行(Ohnaka,Hiroyuki) • TDD Base Camp • グロースエクスパートナーズ(株) • Twitter @setoazusa • いきものがかり / miwa / ケラケラ • Javaプログラマー兼インフラエンジニア
  • 3. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka どうしてこうなった 「ワタシハTDDチョットデキル」 →「CIの構築お願いできますか」 →「デプロイの自動化したいんです」 →「インフラの自動化もお願いしたく」 →(イマココ)
  • 4. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka アジェンダ • 「きれいなコード」 • テストファースト • テストと不安 • テストのジレンマ • まとめ
  • 5. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「きれいな コード」
  • 7. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://en.wikipedia.org/wiki/Kent_Beck Kent Beck
  • 8. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「動作するきれいなコード」 「動作するきれいなコード」、ロン・ジェフ リーズのこの簡潔な言葉は、TDD(テスト駆動 開発)の目標である。動作するきれいなコード は、あらゆる理由で価値がある。 ー「テスト駆動開発入門」から
  • 9. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「きれいなコード」 …て、なんだ?
  • 11. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka あやうい前提 「実は、『コードのよさは重要だ』という、か なりあやうい前提に基づいて、この本は書かれ ている。」 -「実装パターン」から
  • 12. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「無能か有能かの判断な んて、結局物事を成功さ せたかどうかでしかない。 勝てば官軍、負ければ賊 軍。無能さを言い訳に努 力しない者は結局何事も 成し遂げず終わる。」 夏海公司「なれる!SE4 誰でも出来る?プロジェクト管理」
  • 13. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「テストしてないけど多分動く」 「とりあえずデプロイしてみよう」 「なんかわからないけど動いた」 etc…
  • 14. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka …で、その結果
  • 15. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://ja.wikipedia.org/wiki/スパゲッティプログラム スパゲッティーコード
  • 16. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://www.flickr.com/photos/22719239@N04/2246462044/ 疲弊しきった現場
  • 17. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://ja.wikipedia.org/wiki/対爆スーツ 爆弾処理のようなリリース
  • 18. #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
  • 19. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://twitter.com/setoazusa/status/650250873017204736
  • 20. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「動作するきれいなコード」というのは原文で 言うと「Clean code that works」
  • 22. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka Robert.C.Martin(Uncle Bob) Kevlin Henney(編)和田卓人(監修)夏目大(訳)「プログラマが知るべき97のこと」から
  • 23. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「よい」コード 「これまで、粗悪なコードに苦しめられてきた のですから、よいコードが重要であることに間 違いはないのです」
  • 24. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka TDDは「今がどうなっているか」というところ から始まる、ボトムアップの理論。トップダウ ンで「TDDの定義」みたいなところから議論を はじめても、答えにたどり着けない
  • 25. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「大抵の管理者は、真実を求めます。仮に彼らが、そう振る 舞っているように見えなくてもです。大抵の管理者は、よい コードを求めます。仮にスケジュールに悩んでいたとしても です。彼らはスケジュールと要件を守ることに必死かもしれ ませんが、それは彼らの仕事なのですから仕方がありません。 あなたがそれに負けない熱意を持ってコードを 守ればよいのです。」
  • 26. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 結局のところ 重要なのは、コードがきれいなことそのものよ りも、コードのどういう側面に価値を置くかと 言うこと。 それが積み上がった結果としてのTDD。
  • 27. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「きれいなコード」を語る上で、コードが 「リーダブル」であることは重要ですが、今日 の話ではその事に触れていません。
  • 29. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストファー スト
  • 30. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka https://en.wikipedia.org/wiki/Bulletproof_vest テストファースト
  • 32. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「いつテストを作成すべきか。→テスト対象の コードを作成する前である。」
  • 34. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「コードを変更する前に、失敗する自動テスト を書くこと。」
  • 35. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 再び「クリーンコード」
  • 36. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「TDD三原則」 • 失敗する単体テストのコードを書く前に、製品 のコードを書いてはいけない • コンパイルが通り、適切に失敗する単体テスト が通るまでは、次の単体テストを書いてはなら ない • 現在失敗する単体テストが通るまで、次の製品 コードを書いてはならない Robert C. Martin(著)花井志生(訳) Clean Code アジャイルソフトウェア達人の技
  • 37. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka まあこわい
  • 38. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka こわくないよ! • テストファーストにはどのような意味がある のか
  • 39. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストファーストにはどのような意味があるのか 「テストファーストしてないテストは怖い」 ※個人の見解です
  • 40. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストを先に書くことはどんな意味があるのか • テストに求められる機能は、成功するとGreenに なり、そうでない時にRedになること • テストファーストしてないテストは、「まず失 敗させる」ことができないため、テストとして の信頼性がさがる • 「失敗していないテストのカバレッジは50%し かない」
  • 41. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 思い出してみてください。 自動化されてないテストで、テスト項目書に 「正しく表示されていること」と記載されてい て、検証に苦労したことはありませんか?
  • 42. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka ユニットテストが「テスト」である以上、テス トの答えとなるものは先に用意されているはず
  • 43. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka TDDではなぜテストファーストするのか あくまでテストのあるべき姿を追求したことで、 結果としてテストを最初に書くことになるイ メージ。
  • 44. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka よくある質問 「TDDって、テストを必ず先に書かなければい けないんですか?」
  • 45. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka http://www.slideshare.net/YasutoEnjoji/20150621-asbc-pub/29
  • 46. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストファーストよりも大事なこと • 「1ヶ月かけてコーディング、1ヶ月かけてテ スト」のようなアンチパターンから、どれだ けプログラミングとテストを連携して開発が できるようにするか • テストによって開発が駆動されているか
  • 47. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka • 大事なのは、システムをデリバリーするために、 どうステップを踏んでいくか • テストファーストを導入できるなら、すればよ い。 • そうでないとしても、ユニットテストより上位 レベルのテストの項目は先に作成するなど、テ スト同士で補完していけば良い。
  • 48. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka ただ、IT技術者として手札は多いほうがよいの で、スキルとしてテストファーストできるにこ したことはないです。
  • 49. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストと不安
  • 50. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テスト駆動開発は、プログラム中の不安を管理 する方法である。ここで言う不安とは悪い意味 ではない。...(略)...道理にかなった不安、す なわち「これは困難な問題だから最初から最後 までは分からない」という感覚である。 ー「テスト駆動開発入門」から
  • 51. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「不安をテストにする」 http://blog.fieldnotes.jp/entry/2013/12/02/213516
  • 52. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「不安をテストにするテストで表現する」 http://gihyo.jp/dev/serial/01/tdd/0010
  • 53. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka @t_wada曰く
  • 54. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 私たちプログラマの手を止めるものは何でしょうか。私は 「不安」だと思っています。「もしかしたら」という感情で すね。「もしかしたら,自分の書いているコードは間違って いるかもしれない」「もしかしたら,ライブラリの使い方が 正しくないかもしれない…」。(略) だから,これから書くコードに対して,if文があるだろうな とか,ループがあるとか,正規表現使わなきゃいけないなと か,そういった自分自身に対する不安,これから書くことに 対する不安に対して,テストを書いていきます。 「[動画で解説]和田卓人の“テスト駆動開発”講座 第10回 テストの最小単位は不安」 http://gihyo.jp/dev/serial/01/tdd/0010
  • 55. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka • プログラマーとしての「不安」 • データベース技術者としての「不安」 • インフラ担当としての「不安」
  • 56. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka • お互いが不安に感じていることを認める。 • その人の弱さを認めた上で、それをどうテス トでカバーできるかチームで考える。
  • 57. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「信頼で結ばれた共同体」 James O. Copelin Neli B.Harrison(著) 和智右桂(訳)「組織パターン」
  • 58. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka なので、こういうことではないです!
  • 59. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「どんなチームであっても、スムーズに作業す ることが欠かせない。たとえば、ソフトウェア 開発者は定期的に声を掛けあい、インター フェースを調整しあい、ビルドを行い、テスト をしなければならない。」 「組織パターン」から(強調部発表者)
  • 60. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka まとめると • メンバー一人一人が不安に感じていることを、 テストの出発点にする • 各々が弱みに感じている部分をオープンに出 来るようにするチームをつくる ということです。
  • 61. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストのジレ ンマ
  • 62. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka テストのジレンマ • テストはバグをなおさない • 品質を改善する手立てを持たない品質保証部 門 • 開発のロールに過度に押しつけられる品質へ の責任
  • 63. #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
  • 64. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka Developer Testingとは • 開発者がテストに対して抱いたネガティブな イメージから脱却し、開発者が行うテストを 「開発者の意図を確認する」工程として再定 義する • その基準は「不安」
  • 65. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 開発者と品質保証の相互信頼の再構築 • 開発者テストのレベルで「開発者の思ったと おりに動く」ことが保証されているから、品 質保証のテストは品質の検証に注力できる • 品質保証や受入のテストが後詰めとして控え ているから、開発者テストはプログラムの中 の勘所を押さえることに注力できる
  • 66. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「二重のフィードバックループ」 Steve Freeman ,Nat Pryce "Growing Object-Oriented Software, Guided by Tests"
  • 67. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 詳しくはこちらを
  • 69. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka TDDをすすめる時に気をつけること 「テストを書く/書かない」ということは、道 義的な責任の問題ではない
  • 70. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「TDDやれば偉いわけじゃない」 http://b.hatena.ne.jp/entry/232721484/comment/t-wada
  • 71. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka では、なぜTDDするのか
  • 72. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 鏡の国のアリス
  • 73. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 「その場に居続けるには全力で走り続けなければ ならない」 「グズな国じゃの!ここではだね、同じ場所に とどまるだけで、もう必死で走らなきゃいけな いんだよ。そしてどっかよそに行くつもりなら、 せめてその倍の速さで走らないとね!」 Lewis Carroll(著) 山形浩生(訳) 「鏡の国のアリス」 http://www.genpaku.org/alice02/alice02j.html
  • 74. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka http://mizchi.hatenablog.com/entry/2015/10/02/202112 「さよならCofeeScript」
  • 75. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka http://d.hatena.ne.jp/higayasuo/20150928/1443415547
  • 76. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka ソフトウェアが死ぬとき ソフトウェアがドメインの変化に 追従するのをやめたとき もしくは、 追従できなくなったとき
  • 77. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka タユムコトナキナガレノナカデ • コードを生かし続ける • ビジネスドメインの変化 • 実行環境のバージョンアップ • 技術トレンドの変化
  • 78. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka • 「世界を変える」というのは、もっとポジ ティブなこと • 自分が変わらずに世界は変わらない
  • 79. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka 私の話 • 新卒文系プログラマー • 「オブジェクト指向分からない! Serializableってどういう意味!」 • システムテストでコンパイルエラー!
  • 80. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka Eclipseというものを知る →「素晴らしい!書いたコードがコンパイルを 通る!」
  • 81. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka JUnitというものを知る →「素晴らしい!書いたコードがちゃんと動 く!」
  • 82. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka レガシーコード、@t_wadaさん、java-ja http://d.hatena.ne.jp/t-wada/comment?date=20080224#c
  • 83. #ccc_r11 Copyright 2015 Hiroyuki Ohnaka これでおしまい! TDDを習得するのも大事なんですが、「自分が エンジニアする理由」をもっと大事にしてほし いと思います。 またお会いしましょう。ご静聴ありがとうござ いました。