TDDハンズオン

75
TDDハンズオン XP祭り2016 2016/09/24

Transcript of TDDハンズオン

TDDハンズオン

XP祭り20162016/09/24

自己紹介

Name: 大橋 勇希

Work: アドテクエンジニア(株式会社ジーニー)TDD: 約3年Twitter: @secret_hamuhamu

普段の業務

・DSP管理画面の機能開発

・テスト環境の整備

・DBA・チームビルディング

目的

TDDについて興味を持ってもらう

TDDについて理解を深めてもらう

TDDに挑戦するきっかけになること

※ TDD初学者を対象とします

アンケート

1.普段テストコードを書いていない

2.テストコードをなるべく書いているけれども勉強中

3.日常的にテストコードを書いてプロジェクトを駆動させている状態

こんな経験

ありませんか?

一度動いたものを修正するのは怖い

完璧に設計にしたつもりが

実際に出来上がったものと

ギャップがある

デバッグに時間を費やしてしまう

そんなあなたに

TDD

TestDrivenDevelopment

What is TDD?

What is TDD?プログラム開発手法の一種で、

プログラムに必要な各機能について、

最初にテストを書き、そのテストが動作する

必要最低限な実装をとりあえず行った後、

コードを洗練させる、という

短い工程を繰り返すスタイルである。

https://ja.wikipedia.org/wiki/テスト駆動開発

What is TDD?

テストコードを書いて実行することに

より開発を促進させるための手法

What is TDD?

TDDは設計と実装を

シームレスに繋ぐ潤滑油

開発スピード向上

What is TDD?

What is TDD?

What is TDD?

テストコードを書くと逆に

開発スピードが落ちないか?

What is TDD?テストについて目線合わせ

TDDにおけるテスト

TDDにおけるテスト

TDDのテストは品質保証を目的とした

テストではない

TDDにおけるテスト

TDDのテストは開発促進・設計行為を

目的としている

TDDにおけるテスト開発者のためのテスト

(Checking)品質保証のためのテスト

(Testing)・ブラウザで実行確認・コマンドを打って実行確認・デバッグツール ・IDE ・デバック関数

デバッグ行為

・様々な入力パターンの検証・セキュリティ・パフォーマンスなど

TDDにおけるテスト開発者のためのテスト

(Checking)品質保証のためのテスト

(Testing)・ブラウザで実行確認・コマンドを打って実行確認・デバッグツール ・IDE ・デバック関数

デバッグ行為

・様々な入力パターンの検証・セキュリティ・パフォーマンスなど

TDDにおけるテスト開発者のためのテスト

(Checking)品質保証のためのテスト

(Testing)・ブラウザで実行確認・コマンドを打って実行確認・デバッグツール ・IDE ・デバック関数

デバッグ行為

・様々な入力パターンの検証・セキュリティ・パフォーマンスなど

TDDにおけるテスト開発者のためのテスト

(Checking)品質保証のためのテスト

(Testing)・ブラウザで実行確認・コマンドを打って実行確認・デバッグツール ・IDE ・デバック関数

デバッグ行為

・様々な入力パターンの検証・セキュリティ・パフォーマンスなど

TDDにおけるテスト開発者のためのテスト

(Checking)品質保証のためのテスト

(Testing)・ブラウザで実行確認・コマンドを打って実行確認・デバッグツール ・IDE ・デバック関数

デバッグ行為

・様々な入力パターンの検証・セキュリティ・パフォーマンスなど

TDD

TDDにおけるテスト

TDDのためにテストコードを書くこと ≠

品質保証のためにテストコードを書くこと

TDDにおけるテスト

TDDにおいてテストコードは

デバッグツールの代わり

TDDにおけるテスト

成果物の動作確認

テスト実行 > ブラウザをリロード・手動実行

早くて確実なフィードバックが得られる

TDDの研究論文

TDDの研究論文

TDD(テスト駆動開発)の適用評価を紹介した研究論文 - エリクソンはじめ3社http://blogs.itmedia.co.jp/morisaki/2010/03/tdd---3-5b4a.html

TDDを実施してみて

・機能テストでの不具合検出が18%減少した

・実装時間が16%増えた

・テストのカバレッジが大きくなった

TDDの研究論文

TDD(テスト駆動開発)の適用評価を紹介した研究論文 - エリクソンはじめ3社http://blogs.itmedia.co.jp/morisaki/2010/03/tdd---3-5b4a.html

被験者を対象としたアンケート

・96%の被験者がデバッグの工数を減らすと感じた

・88%の被験者が要求が洗練されると感じた

・92%の被験者がコードの品質を上げると感じた

・50%の被験者が開発工数を減らすと感じた

TDDの研究論文

実装時間は増えるが

デバッグ時間が減る

トータルの開発時間が削減される

TDDの目標

TDDの目標

“動作するきれいなコード”を生み出すこと

TDDの目標

“動作する汚いコード”にストレスを感じていないか?

TDDの目標

TDDの目的

きれい

汚い

動作しない 動作する

レガシーコード

到達したいゴール

TDDの目的

きれい

汚い

動作しない 動作する

到達したいゴール

この道はなかなか難しい ...

TDDの目的

きれい

汚い

動作しない 動作する

レガシーコード

きっちり設計したつもりが。。。

TDDの目的

きれい

汚い

動作しない 動作する

到達したいゴール

TDDのアプローチこっちならいけそう!!

TDDの目的

きれい

汚い

動作しない 動作する

レガシーコード

到達したいゴール

一度動いたものを変更するのが怖い ...!!

安全に登っていく

必要がある

TDDの目標

テストは命綱

TDDの目標

安心して設計と実装を

満足するまで作りこめる

TDDの目標

動作するきれいなコードを

生み出すには?

動作するきれいなコードを生み出すには?

目標を達成するには作戦が必要

動作するきれいなコードを生み出すには?

自分は正しい努力をしているのか、

毎日自分に問いかけよ

リファクタリングとテストの関係http://d.hatena.ne.jp/jun-yoshida/20060829/1156809373

TDDのリズム

高速なフィードバックループ

システムや人が成長するには

餌が必要

インクリメンタルな設計

ちょっとづつ確実に積み上げる

TODOリスト

テストファースト

アサートファースト

思考整理術

数百人が参加する

クリスマスパーティの

幹事をすることになった

TODOリスト

TODOリスト

仕様を細かく

ブレークダウンする

TODOリスト

大きいタスクを小さいタスクに分割する・参加者の予定調整

・お店選び

・料理のコース決め

・参加者に連絡

・乾杯の挨拶

・コンテンツ用意

・集金

TODOリスト

実装を考えるよりも先に、

インターフェース(入出力)を考える

テスト・アサートファースト

TDDのためにテストを書く = 設計

テスト・アサートファースト

How to TDD

TDDの流れ

1.TODOリストを作る

2.テストコードを書く

3.テストを失敗させる

4.テストを成功させる

5.リファクタリングする

3 ~ 5を繰り返し、動作するきれいなコードへ

How to TDD

デモhttps://github.com/hamuhamu/tdd_hands-on

How to TDD

レガシーコード改善ガイド8章

TDDの大きな価値一度に一つのことに集中できる

・あまり考え過ぎない

・現在着手していることをまず終わらせる

・まず、テストを通過させる、最適化は二の次

・重複は取り除くこと、メンテナンスの重荷になる

How to TDD

わたしとTDD

・コードが研磨された感じる

・面倒なデバッグが減った

・仕様を早い段階から深く考えれるようになった

・エンジニアとして成長できた

わたしとTDD

テストは壁を与えてくれる

わたしとTDD

エンジニアとしての成長

・オブジェクト指向プログラミング能力の向上

・リファクタリング能力の向上

・データ設計能力の向上

・アプリケーションの設計能力の向上

わたしとTDD

最後に

TDDは品質を向上させる

テストではない

最後に

品質を向上させるのは

設計・実装をする人

最後に

人のスキルを向上させるの

がTDD

最後に

一緒に勉強していきましょ

う!!

お気軽にお声がけこえかけてください

@secret_hamuhamu

最後に

エンジニア募集してます!!

・チームマネジメント/プロジェクトマネジメント

・サーバサイド開発など

勉強会の会場提供なども

できます

https://geniee.snar.jp/

最後に

ご静聴ありがとうございまし

最後に