SlideShare a Scribd company logo
1 of 67
永和システムマネジメント
家永英治
TDD & Pull Request 入門
〜 動作するきれいなコードを目指そう〜
今日のゴール
➤TDDとは?を知る
➤Pull Request(プルリク)とは?を知る
➤TDD & Pull Requestの自習・学習方法
を持ち帰る
※ハンズオン形式で学ぶ講座ではありません。座学と見学で学ぶ講座です。
※簡単な例を実演で提示します。
2
自己紹介
➤家永英治
 2003年 永和システムマネジメント入社
 2005年頃 エクストリーム・プログラミングを使っ
たチーム角谷に参画. 角谷・t-wadaに感銘を受ける
 最近は、ScrumやTDDやテスト自動化の導入支援
のコーチを行っている
3
学生の参加者の調査
➤好きな言語、得意な言語
➤TDD試したことあるよ
➤Pull Request試したことあるよ
➤今日の講座の参加の動機
4
開発のよくある悪循環
5
やっつけ仕事
技術的負債
レガシーコード
スパゲティコード
時間がない
6
TDD と Pull Requestの
共通の軸
http://www.slideshare.net/YohNakamura/a3-38731262
不確実で難しい問題は
トライ・アンド・エラー
で素早くフィードバック
を得ながら関わることが大事
8
9
XPの多重のフィードバックループとコード
Code
TDD&
Pull Requestの領域
10
学びの最大の障害物は “自分は解っている”の思い込み
予期せぬ驚きの発見に注意すること
https://www.flickr.com/photos/photohannah/512202109/
当初の計画【解き方A】では、
大きな障害物に出会うこともある
しかし、早期にフィードバックを得ていれば慌てる時間ではないはず
素早く計画を変更し
【解き方B】に切り替えことが重要
(必要であれば【問題A】を【問題B】に置き換えること)
11
http://blog.goo.ne.jp/junsky/e/7fe1362e7295d0249591931a03dfbb61
問題が難しいなら分解し
ステップ・バイ・ステップで
解くことが大事
12
13
https://www.flickr.com/photos/ryanh/43936630/
早めに、こまめに
リファクタリングすること
を忘れずに
継続的インテグレーション(CI)テスト駆動開発(TDD)
どんなふうに問題を解く?どうやってつくる?
15
• 問題を理解する
• 解き方を考える
• 問題を解いて、ふりかえる
• スモール・イズ・ビューティフル
• 一つのプログラムには一つのこと
をうまくやらせる
• できるだけ早く試作を作成する
。。。
テスト駆動開発とは?
“テスト駆動開発 (てすとくどうかいはつ、test-driven
development; TDD) とは、プログラム開発手法の一種で、プログラ
ムに必要な各機能について、最初にテストを書き(これをテスト
ファーストと言う)、そのテストが動作する必要最低限な実装をとり
あえず行った後、コードを洗練させる、という短い工程を繰り返すス
タイルである。” -- Wikipediaより
16
http://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
“「動作するきれいなコード」、ロン・ジェフ リーズ
のこの簡潔な言葉は、TDD(テスト駆 動開発)の目
標である。動作するきれいなコー ドは、あらゆる
理由で価値がある。
─ Kent Beck
17
@t-wada
18
[TDDの見学]
➤ ライフゲームの練習お題を途中まで
解く実演
※ 途中の掛け声をお願いすることがありますが、
ご協力お願いします。
“実装する前に?” ー> “テスト!”
“きりの良いレッドからグリーンに変わったら” -> (ハイタッチ!)
“実行結果がグリーンの時は?” -> “リファクタリング!リファクタリング!”
19
20
TODO
- 誕生
- 生存
図を描いたり、TODOリストを用意する
TDDサイクルを回す前に
21
➤問題を理解するため
➤解く道筋(当初の計画、解き方A案)を明らか
にするため
※はじめにすべて書き出す必要はない
※あとからTODOを発見して追加してもOK
※あとで、解き方A案に大きな障害物を発見して、捨てることもある
22
TODO
-----
○誕生
生存
過疎
過密
誕生
Field?
Cell
--------
row
col
status
0行
1行
2行
2 列0 列 1列
死んでいるセルに隣接する生きたセルが
ちょうど3つあれば、次の世代が誕生する。
1
n
TODO
- 誕生
- 生存
23
➤解き方のコアとなる骨組みを明らかにす
るため
(解き方(設計・実装)の学びが得られるTODOはどれだろうか?)
※ 途中で発見した正常系のバリエーションや異常系はTODOに積んで、あとで解く
ハッピーパス(正常系)を選択する
一つ目のタスクを選ぶとき
TODO
- 誕生
- 生存
先にテストを書いて失敗を確認する
タスクに着手したら
24
➤ 問題を実行可能なテストで明確にするため
(何が実行できたら問題を解いたと言える?)
➤ テスト対象のメソッドの使い方例を明瞭にするため
(クラスやメソッドを利用する人はどう使えると嬉しいだろうか?)
➤ テストが期待通り動作していることを確認するため
➤ 後日にまとめてテストでは、テストが記述が難しい実装に
なってしまうため
(testでassertが書けるように実装するにはどうすればよいだろうか?)
※問題を解く前に問題を明瞭にするのは、問題を解くときのの基本鉄則。テストで表現するのがポイント
※ただしテストファーストに慣れずに手が止まってしまうなら、TDDの制約をゆるめ、“ちょっと実装したら直ぐテストで確認
(つまり何の問題を解いてたのか?をテストで明瞭にしてみよう)”で始めるがオススメ
TODO
- 誕生
- 生存
テスト失敗は基本は1つにする
問題を解いている時
25
➤一つの問題に集中してとりくむため。
一度に複数の問題を相手して、混乱しないた
め
(自分が今、集中して解きたい問題は何だろうか?)
※ 誕生を解くことに集中
※ Ignoreやコメントアウトのほか、テスティングフレーワークの機能を使って特定のメソッドを指定して実行する
TODO
- 誕生
- 生存
26
➤前提条件(Arrange)、
テスト対象への行為(Act)、
期待結果の表明(Assert)の3つで
問題を整理して理解を深めるため
(期待結果はなんだろうか?、操作や前提条件は?)
※ 3Aの整理で迷ったら、まず期待結果の表明(Assert)が何かを明らかにする
がオススメ(Assert First)
Arrange Act Assertで
テストコードを整理する
TODO
- 誕生
- 生存
失敗のレポートを読んで次の一手を考える
テスト失敗の時、実装が未完の時
27
➤エラーメッセージやテストの失敗レ
ポートから、次に何をすべきかを把
握できるため
(コンピュータは僕に何を教えてくれている?)
※コンピュータと対話しながら問題を解く
※ IDEが使える言語なら、エラー箇所にジャンプやコンパイルエラー時にコード生成機
能を駆使する
※ エラーの意味がわからなければ、Googleや Stack Overflowなどで検索
TODO
- 誕生
- 生存
テストの失敗時のレポートを読みやすくする
失敗が読んでわかりにくい場合
28
➤自分が今何に取り組もうとしているかの
問題を明瞭にするため
➤後日のテスト失敗時に、他の人が読んで
直ぐ理解して対応できるようにするため
※ たとえばテストのメソッド名を工夫する
※ power-assertも テスト失敗時の内容がわかりやすくするための方法の1つ
TODO
- 誕生
- 生存
29
➤APIや既存ライブラリの使い方がわか
れば問題がより簡単に把握できるよう
になるため(巨人の肩にのる!)
※ かわりに REAP(対話シェル環境)を利用して学習するもオススメ
テストを使ってライブラリの使い方を学ぶ
知らないAPIやライブラリを学びたい場合
TODO
- 誕生
- 生存
小さな問題に分割して解く
レッドからグリーンに遷移させるのに時間がかかり難しい場合
30
➤分解した小さい問題をクリアできれば、
以前より大きな問題は簡単に解けるよう
になるため
(2時間以上グリーンを観ていない。もっと小さく問題を分割して解けないだろうか?)
※ TODOリストに追加や順序の入れ替えを忘れずに
一つのプログラムには一つのこ
とをうまくやらせる
TODOの見直し
31
TODO
-----
○誕生
○ ArrayのAPIの学習(寄り道)
周囲の生きているセルの数
仮実装を置き換え
メソッドの移動
…
生存
過疎
過密
TODO
- 誕生
- 生存
32
➤難しい問題も簡単なベタ書きなら停滞せずに先
に進め、以前よりも解き方の理解が捗るため
(あれ?長時間レッドだな。落ち着こう。ベタ書きにするとどうなるだろうか?)
(問題が難しそう?一旦ベタ書きからはじめてみよう)
➤テストが期待通り動作(グリーン)することを
確認するため
ベタ書きから一般化で問題を解く
レッドの時に次の一手がむずかしい場合
TODO
- 誕生
- 生存
33
ベタ書きを一般化
不吉な臭い
オブジェクト指向
SOLID原則
パターン
関数型プログラミング
イディオム
コーディング規約
公式ドキュメント
…
現状のコードや設計の良し悪しを判断する
テスト結果がグリーンの時に
KISS
名前重要
DRY原則
スモールイズビュー
ティフル
…
TODO
- 誕生
- 生存
こまめにリファクタリングする
テスト結果がグリーンの時はチャンスタイム!!
34
➤あとから自分や他人が読んで直ぐに理解できる
ようにするため
➤あとから(予期せぬ)コード修正をできるよう
にするため
➤気分すっきり!
※ レッド時にリファクタリングは、危険な作業
※ レッド時に発見した修正したい項目は TODOなどに積んで、あとで実施する
※ TDDの文脈では、ベタ書きから一般化もリファクタリングの一つ
35
グリーンの時は
リファクタリング
チャンスタイム!
TODO
- 誕生
- 生存
36
➤小さく回すのは「下手な長考休むに似たり」の
代わりに、早く実験して【学び】を得たいから
(サイクルの結果、問題や解き方(実装や設計)について学んだことは何だろうか?)
➤言い換えると、問題把握ー>解決ー>整理整頓の繰り
返しのリズム
(TDDのサイクルの目安は10分以下だが実際は何分サイクルだろうか? )
➤プログラミングの現状の透明性を高めるため
(今は問題定義している時?解いている最中?解けた状態?リファクタして壊していない?)
Red Green Refactorのリズムで
ステップ・バイ・ステップに解く
TODO
- 誕生
- 生存
37
➤期待通りテストが機能しているかを再確
認するため
コードの一部をコメントアウトする
テストが本当に機能しているか不安を感じたとき
TODO
- 誕生
- 生存
38
➤うまくできなかった時に、すぐにセーブ
ポイントに戻って、作業を再開できるよ
うにするため
※ エディタの戻るや履歴機能の代替案も
※ ブランチで作業して捨てる。あるコミット地点に戻る
バージョン管理を使う
キリの良い作業単位が終わった時、テストがグリーンの時
TODO
- 誕生
- 生存
39
➤「当初の計画(解き方A案)がまずかっ
た」もTDDサイクルで得た学びの1つ
※ 別の解き方Bを試す
※ 問題Aを問題Bに再設定して、問題と解き方を共にシンプルにできないかも検討する
別の解き方B案に切り替える
当初の計画(解き方A案)に大きな障害物を発見した場合
TODO
- 誕生
- 生存
40
➤テストの抜け漏れを発見するため
(境界値・同値分割の観点からは?異常系は?)
➤他の人が読みやすくするため
(テストもリファクタリング対象)
➤不要なテストを削除してメンテナンスし
やすくするため
(試行錯誤の過程で必要だったテストも完成すれば、不要になることもある)
テストを見直し整理整頓する
テストの書き方のポイント 抜粋
41
➤テストコードも失敗レポートも人が読んで理解で
きるように書く
あとで読んで直ぐに理解し、修正しやすくするため
➤テスト間は独立して実行できるように書く
失敗時に問題箇所を特定しやすくするため
➤ALLテストが繰り返し グリーンになるように書く
メンテナンスしやすくするため。例えば時間に依存したテストは注意
➤テストの実行時間が長いスローテストに注意する
実行に時間がかかりすぎると問題発見が遅れるやテスト実行しなくなるため
➤ちょっとした修正で予期せずテストが大量に失敗してし
まう脆いテストに注意する
脆いなら自動テストの費用対効果は低い。設計・実装・テストに何か不味いことがある兆候
TDDの嬉しさって?
➤高速の試行錯誤で問題や解き方を学びな
がら進めることができる
単位時間あたりの学びの量と質を上げる
➤頻繁にコードや設計の見直しの機会があ
り、安心してリファクタリングできる
テストがあるおかげ
➤新たな要望(追加問題)にも自信をもって
修正できるコードを手に入れられる
シンプルなコードと自動化されたリグレッションテスト
42
オススメのTDDの自習・学習
➤ TDD本、Rails Tutorialを写経
(真似てタイプして著者の追体験する)
➤ 練習お題を繰り返し解く
プログラミングの学習法として、Code Kata 、「写経」、「練習、練習、
練習」などが知られているが TDDも練習が必要
- http://d.hatena.ne.jp/absj31/20120721/1342880403
- http://devtesting.jp/tddbc/?TDDBC%E4%BB%99%E5%8F%B003%2F%E8%AA%B2%E9%A1
%8C
➤ 同じ学生仲間で集まってチャレンジして、意見交換する
➤ TDDBCや Coderetreat などのプログラミングを学ぶイ
ベントに参加。自分よりうまい人から教わる
http://devtesting.jp/tddbc/
➤ パターンなど一般的な設計の本を読む。ネットで調べる
43
継続的インテグレーション(CI)Q&A
Pull Request
Pull Request とは?
➤“プルリクエストは、Bitbucket を使った
開発者のコラボレーションを促進する機
能の 1 つです。使いやすい Web イン
ターフェイスで、提案された変更を公式
プロジェクトに統合する前に議論するこ
とができます。”
https://www.atlassian.com/ja/git/workflows#!pull-request
46
Github Flow
https://guides.github.com/introduction/flow/index.html
https://gist.github.com/Gab-km/3705015
http://scottchacon.com/2011/08/31/github-flow.html
フィードバック
コメント & 修正
47
Pull Request
[Pull Requestの見学]
➤重複コードを修正する簡単なシナリオ
 トピック・ブランチの作成
 修正・コミット・プッシュ
 Pull Requestの作成
 第三者のコメント
 コメントのフィードバック対応
 マージ
※今日は一人で行っていますが通常は、複数人で行います
※ https://www.railstutorial.org/ を参考にお題を作成
48
49
50
➤「真似て学ぶ」は学習の基本
➤他人のプルリクへのコメントを読めば
コードの書き方の注意点も学ぶことができる
➤知らないライブラリやコードのイディオムを
見つけて、より良いコードの書き方を
学ぶことができる
他人のプルリクを読む
51
➤大きすぎる1つのプルリクで問題を解決
しようとすると、
レビューがむずかしい、
設計議論が収束しない、
マージが難しいなどが発生してしまうた
め
※ 手頃なサイズに明確な基準はないけれど、人によっては例えば、
変更が200行程度の量、4日以内で終わる量、ある作業を2つの意味のあ
る作業単位で分割してプルリクを目安に
プルリクは手頃なサイズにする
ユーザス
トーリー
XP(Scrum)-プルリクの連動
2週間タイムボックス
プ
ラ
ン
ニ
ン
グ
レ
ビ
ュ
ー
(
デ
モ
)
プ
ラ
ン
ニ
ン
グ
レ
ビ
ュ
ー
(
デ
モ
)
プ
ラ
ン
ニ
ン
グ
レ
ビ
ュ
ー
(
デ
モ
)
プ
ラ
ン
ニ
ン
グ
レ
ビ
ュ
ー
(
デ
モ
)
市
場
に
フ
ィ
ッ
ト
す
る
プ
ロ
ダ
ク
ト
(
動
作
す
る
コ
ー
ド
)
を
つ
く
る
目
標
に
向
か
っ
ス
テ
ッ
プ
バ
イ
ス
テ
ッ
プ
で
開
発
ユーザス
トーリー
ユーザス
トーリー
タスクタスクタスク
フィードバック
52
予期せぬ修正に対応できるようにメンテナンスできるコード
(きれいなコード)を書く
53
➤手遅れになる前に、途中段階から素早く
コードの書き方や設計判断等のフィード
バックもらうため
➤リポジトリにバックアップを残すため
※ ✗ 10日の作業をまとめてプルリク => ○午前中の作業までを プルリク
※ 未完のプルリクは、タイトルに “WIP” や 作業中であることがわかるラベルを
付ける
※1人で解くには問題が難しく、もっと早くフィードバックが欲しい場合は、問題
や解き方を紙に描いて他人に話してから開発する、ペアプロやモブプログラミング
で対話しながらつくる代替案も
完成しなくてもプルリクを投げる
設計などで相談に乗って欲しい場合
TitleやDescriptionを書く
プルリクの作成時
54
➤周囲にどんな作業をしているか知ってもらい
フィードバックをもらいやすくするため
➤他人に説明することで、
問題や解き方や要確認事項等の理解を整理するた
め
(ゴムのアヒルちゃん)
※フォーマットは様々だが、Titleには何をやったのか(やろうとしているか)の要約、Descriptionには リ
クエストがなぜ必要とされるかの背景や理由, やったことリスト( Todoリスト)、Issueやチケット管理等
のリンク, 相談や外部に確認したい項目などなどが記載される
UIの画像をプルリクに添付する
UIありでものをつくる場合、細かなUIイメージが決まっていない場合
55
➤何をつくるとよいか(問題の定義)の議
論をUIを使って明確にするため
※ 仕事を依頼する人、デザインする人、プログラムを作る人が、プルリクに添付された
UI画像を参照しオンライン上で議論し、収束
※ Gifで動きを見せたり、Before/Afterを見せたり工夫も
※ プルリクのオンライン上ではなく会議室で収束させる代替案も
56
➤テストは読み手にとって、何の問題を解こう
として実装しているを理解する手がかりとな
り、フィードバックしやすくなるため
➤第三者によるテストの抜け漏れも、フィード
バックできるから
プルリクに自動テストのコードを含める
➤レビューアが読みやすくフィード
バックしやすくするため
※ 期待通り動作することを確認してcommit, リファクタリングしてcommit したのをプルリク
※ あとで見直して、問題のあるコードをリファクタリングしてプルリク
※ 問題を解く前に、修正しやすくするためにリファクタのみをテーマにしたプルリクをなげ、そののちに問題を解く
プルリクを投げる
57
リファクタリングと問題を解く実装は分ける
➤迷った設計判断などを記述しておけ
ば、周囲からフィードバックが得や
すいため
※ プルリクに自分でコメントかコード中にコメントを書く
58
相談に乗って欲しい箇所は明示的にコメントを書く
➤助け合いの関係を醸成するため
➤楽しく作業するため
※ オンライン上のコミュニケーションは殺伐とした関係になりがちなので注
意が必要。「いいね!」や「感謝の気持ち」などを絵文字で表現すると文字だ
けで伝えづらいことも伝えられる
※ コメントをもらう人とまだ信頼関係が醸成されていない場合は、
直接対話でフィードバックもらってコメントに記録する代替案も
59
会話に絵文字を利用する
プルリクで略語用語を利用する
60
➤圧縮してコミュニケーションを成立させるため
WIP 作業中
LGTM OK! いいね!(私は問題ないと思うよ)
Must 必ず直すべき
Nits 細かい指摘
IMO 私の見解では。。。
Fix xxx バグ修正
Cosmetic、Refactor コード整形
61
➤チームメンバーに素早く通知し、素早く
フィードバックもらうため
➤フィードバックをもらった後に直ぐに対
応できるようにするため
※ SlackやHipChatなどが有名。永和だと idobata
GitHubとChatツールを連携する
GitHubとチャットツール連携
push
Pull Request
コメント
Merge(Acceptedなら)
checkout –b
commit
通知
通知
62
プルリクと外部ツールを連携させる
63
たとえば、
➤プルリクをトリガーにCIを実行する
ビルドエラーを早期に発見し対応するため
➤プルリクをトリガーにデプロイする
本番に近い環境に即デプロイし動作確認しフィードバックを得て対応するため
Pull Request の嬉しさって?
➤オープンに/頻繁なコードレビュー
仕様(問題の設定)の齟齬の早期発見
バグの早期発見
良い設計案の選択
技術的負債の防止
➤オンライン上で共に学習と成長
コードベースに文法やイディオムやライブラリの理解やドメイン知識の共有、スキルアップ
➤メール代替の効果的なコラボ
エンジニア同士でコードを中心にしたコミュニケーション
外部のオープンソースのコミュニティへの参画のしやすさ
ビジネス側と開発側のコラボレーション
64
オススメのプルリクの自習・学習
➤ Github実践入門本を写経
(真似てタイプして著者の追体験する)
➤ 練習、練習、練習
https://github.com/octocat/Spoon-Knife
https://github.com/github-book/first-pr
➤ オープンソースのプルリクを覗いてみる
➤ ライブラリの学習でついでにプルリク投げること
サブ目標にする
(ドキュメントの記述間違いなどは初心者もプルリクしやすい)
➤ 学生向けイベントに参加して、自分よりうまい人と出会う
http://www.seplus.jp/sezemi/github/
http://www.seplus.jp/sezemi/ohw/
➤ 同じ研究室内の学生同士でプルリクを試してみる。
➤ オープンソースのコードを読んでみる
65
継続的インテグレーション(CI)Q&A
67
コアとなる問いかけ
“問題Aに取り組む背景や理由は?” “問題が解けたら誰が嬉しい?”
“期待する振る舞いや結果は何だろうか?”
“期待と実際とのギャップを埋めるにはどうしたら良いのだろうか?”
“解き方Aは妥当と判断する理由は?”
“トライ・アンド・エラーのサイクルの結果、私はいったい、
何を発見し学んだだろうか?”
“どうすれば単位時間あたりのトライ・アンド・エラーの数(学びの数)
を圧倒的に伸ばすことができるだろうか?”
http://c2.com/cgi/wiki?TestDrivenDevelopment

More Related Content

What's hot

TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!Yasui Tsutomu
 
第11回モヤLT 男女ペアプログラミング合コンに行ってきた
第11回モヤLT 男女ペアプログラミング合コンに行ってきた第11回モヤLT 男女ペアプログラミング合コンに行ってきた
第11回モヤLT 男女ペアプログラミング合コンに行ってきたtake4_k
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
新人がTDDを学ぶ方法
新人がTDDを学ぶ方法新人がTDDを学ぶ方法
新人がTDDを学ぶ方法Ito Kunihiko
 
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編nackypon
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)kyon mm
 
テスト計画セッション
テスト計画セッションテスト計画セッション
テスト計画セッションTomoaki Fukura
 
センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。yjono Seino
 
テストプロセス改善技術の概要
テストプロセス改善技術の概要テストプロセス改善技術の概要
テストプロセス改善技術の概要Akira Ikeda
 
eXtremeProgramming入門
eXtremeProgramming入門eXtremeProgramming入門
eXtremeProgramming入門You&I
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Seiichi Sugahara
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-崇 山﨑
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hacktkyon mm
 
ソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verKosuke Fujisawa
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれAtsushi Mizoue
 

What's hot (18)

TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!
 
第11回モヤLT 男女ペアプログラミング合コンに行ってきた
第11回モヤLT 男女ペアプログラミング合コンに行ってきた第11回モヤLT 男女ペアプログラミング合コンに行ってきた
第11回モヤLT 男女ペアプログラミング合コンに行ってきた
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
新人がTDDを学ぶ方法
新人がTDDを学ぶ方法新人がTDDを学ぶ方法
新人がTDDを学ぶ方法
 
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編
 
Tdd Introduction
Tdd IntroductionTdd Introduction
Tdd Introduction
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)
 
テスト計画セッション
テスト計画セッションテスト計画セッション
テスト計画セッション
 
センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。センパイ!このプログラムクラッシュするんですけど。。。
センパイ!このプログラムクラッシュするんですけど。。。
 
テストプロセス改善技術の概要
テストプロセス改善技術の概要テストプロセス改善技術の概要
テストプロセス改善技術の概要
 
eXtremeProgramming入門
eXtremeProgramming入門eXtremeProgramming入門
eXtremeProgramming入門
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hackt
 
ソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年ver
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれ
 

Viewers also liked

[社内勉強会]Pull requestを使おう
[社内勉強会]Pull requestを使おう[社内勉強会]Pull requestを使おう
[社内勉強会]Pull requestを使おうhirooooo
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門Shuji Watanabe
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスRyo Sumasu
 
my-spirit-of-tdd
my-spirit-of-tddmy-spirit-of-tdd
my-spirit-of-tddYu Asano
 
TDD #NagoyaTesting
TDD #NagoyaTestingTDD #NagoyaTesting
TDD #NagoyaTestingkyon mm
 
Siklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JPSiklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JPNitta Tetsuya
 
Windows IoT Core and Robot Arm
Windows IoT Core and Robot ArmWindows IoT Core and Robot Arm
Windows IoT Core and Robot ArmMasuda Tomoaki
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDDTakuto Wada
 
ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016Nitta Tetsuya
 
TDDの自殺 #TDDeX
TDDの自殺 #TDDeXTDDの自殺 #TDDeX
TDDの自殺 #TDDeXkyon mm
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -Shuji Watanabe
 
うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用ESM SEC
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Akio Ishida
 

Viewers also liked (20)

[社内勉強会]Pull requestを使おう
[社内勉強会]Pull requestを使おう[社内勉強会]Pull requestを使おう
[社内勉強会]Pull requestを使おう
 
Install tdd
Install tddInstall tdd
Install tdd
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティス
 
my-spirit-of-tdd
my-spirit-of-tddmy-spirit-of-tdd
my-spirit-of-tdd
 
TDD #NagoyaTesting
TDD #NagoyaTestingTDD #NagoyaTesting
TDD #NagoyaTesting
 
Siklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JPSiklu EH-600TX Brochure JP
Siklu EH-600TX Brochure JP
 
20140226_TDD
20140226_TDD20140226_TDD
20140226_TDD
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
Windows IoT Core and Robot Arm
Windows IoT Core and Robot ArmWindows IoT Core and Robot Arm
Windows IoT Core and Robot Arm
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016ギガビット無線機 Siklu の製品紹介 2016
ギガビット無線機 Siklu の製品紹介 2016
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
TDDの自殺 #TDDeX
TDDの自殺 #TDDeXTDDの自殺 #TDDeX
TDDの自殺 #TDDeX
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
 
TDDを研ぎ究める
TDDを研ぎ究めるTDDを研ぎ究める
TDDを研ぎ究める
 
アジャイル開発
アジャイル開発アジャイル開発
アジャイル開発
 

Similar to TDD & Pull Request入門

TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)seichi23
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンスGuildWorks
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス増田 亨
 
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜Yohei Onishi
 
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話gree_tech
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) Taku Yajima
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2Masashi Shibata
 
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateWACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateKinji Akemine
 
内職がいらないくらいわかりやすいディープラーニング
内職がいらないくらいわかりやすいディープラーニング内職がいらないくらいわかりやすいディープラーニング
内職がいらないくらいわかりやすいディープラーニングKo Kikuta
 
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編アジャイルの今とこれから-Agile conference2012参加報告-技術動向編
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編Hiroyuki Ito
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014一法 山崎
 
研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきことHiromu Shioya
 
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)bYuta Hayakawa
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会Yu Shibatsuji
 
ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後Shinsuke Abe
 
レガシーコードでTDD力を高めよう #agilesamurai
レガシーコードでTDD力を高めよう #agilesamuraiレガシーコードでTDD力を高めよう #agilesamurai
レガシーコードでTDD力を高めよう #agilesamuraiYoutarou TAKAHASHI
 

Similar to TDD & Pull Request入門 (20)

TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜
#tdd4ec is back!!〜テスト駆動開発による 組み込みプログラミングの集い〜
 
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
 
Caketest
CaketestCaketest
Caketest
 
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮)
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
 
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateWACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
 
内職がいらないくらいわかりやすいディープラーニング
内職がいらないくらいわかりやすいディープラーニング内職がいらないくらいわかりやすいディープラーニング
内職がいらないくらいわかりやすいディープラーニング
 
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編アジャイルの今とこれから-Agile conference2012参加報告-技術動向編
アジャイルの今とこれから-Agile conference2012参加報告-技術動向編
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014
[ワークショップ] 自分の壁をぶち破れ! - Agile Japan 2014
 
Whyから始めるスクラムマスター #sgt2016
Whyから始めるスクラムマスター #sgt2016Whyから始めるスクラムマスター #sgt2016
Whyから始めるスクラムマスター #sgt2016
 
研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと
 
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
 
ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後
 
レガシーコードでTDD力を高めよう #agilesamurai
レガシーコードでTDD力を高めよう #agilesamuraiレガシーコードでTDD力を高めよう #agilesamurai
レガシーコードでTDD力を高めよう #agilesamurai
 

TDD & Pull Request入門

Editor's Notes

  1. 「読めない」 「変更箇所が分散して影響範囲が読めない。。。」 「修正して壊したらどうしよう」
  2. ”目標値”と”実際の値”を比較して 値が一致するまで調整する仕組み. 運転の際は、人が目の前を見て、安全に(車間距離とるや歩道に乗り上げずに) 目的地: 箱根、なんで箱根? 家族で温泉旅行を楽しみたい! 前日に箱根が大雨で行くのが微妙。じゃ代わりに、群馬の温泉にしようか。
  3. 顧客が ビジネスのハンドルを握って
  4. 大きな問題を小さな問題に分割してステップバイステップでとくことが大事
  5. 大きな問題を小さな問題に分割してステップバイステップでとくことが大事
  6. 大きな問題を小さな問題に分割してステップバイステップでとくことが大事
  7. 大きな問題を小さな問題に分割してステップバイステップでとくことが大事
  8. 動作する= ユーザにとって役立つ、使える。目的を果たせる.市場にフィットしたプロダクト きれいな= 未来のめんテナーにとって修正できる、障害があってもすぐに解析して直せる 動作するきれいなコードを目標に実現する方法はTDDだけではない
  9. テストとともにリファクタリングできれいなコードを作れる。 外側のAcceptance Testing では、テストを対話に使って何を作ればよいかを明らかにできる。 内部の実装している段階で、エッジケースのAcceptance Testのパターンも発見することがあるでしょう。
  10. 問題(満たすべき仕様)を理解するため
  11. あとからの異常系は肉付け出来る傾向がある。
  12. その他テストが期待通り動作していることを確認するため
  13. 例えば、「コーディング規約が守っているだろうか?」 例えば、「テストコードみて使われ方のAPIが本当に良いだろうか? Command/Queryの分離の原則からができないだろうか?名前は適切だろうか?」 例えば、「本当に良いだろうか? テスト対象とのコラボレーション要素数が多すぎないだろうか?」 例えば、「メソッドの長さはどうだろうか?」「引数の数は?」 例えば、「関数型にならい副作用のないメソッドで記述できないだろうか?」 例えば、「数値や二次元配列の基本データ型に執着していないだろうか?」 例えば、「他の人が読んで理解するまでの時間は短いといえるだろうか?」 例えば、「メソッド名やクラス名はわかりやすいだろうか?」
  14. (おめでとう!)
  15. (おめでとう!)
  16. (TDD自体は多数のコードや設計の良し悪しの判断と改善するタイミングは提供するが、良いコードや設計判断の良し悪しについては深く語っていない)
  17. 2年目の若手が、先輩のPRを読んで参考にしている。 (作業や議論のログが残るってのが、コメントで「ちょめちょめのライブラリーがあるよ。」「○◎気をつけなきゃね」ってのは読んで 「あ、ここは気をつけなきゃ」「っx書くのがスタンダードなんだ」って)
  18. ヒントは、TDD、Pull Requestのなかに “問題Aは解く価値のある問題?解き方Aは妥当な解き方?”