Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

TDDハンズオン

1.012 Aufrufe

Veröffentlicht am

XP祭り2016 登壇資料

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

TDDハンズオン

  1. 1. TDDハンズオン XP祭り2016 2016/09/24
  2. 2. 自己紹介 Name: 大橋 勇希 Work: アドテクエンジニア(株式会社 ジーニー) TDD: 約3年 Twitter: @secret_hamuhamu
  3. 3. 普段の業務 ・DSP管理画面の機能開発 ・テスト環境の整備 ・DBA ・チームビルディング
  4. 4. 目的 TDDについて興味を持ってもらう TDDについて理解を深めてもらう TDDに挑戦するきっかけになること ※ TDD初学者を対象とします
  5. 5. アンケート 1.普段テストコードを書いていない 2.テストコードをなるべく書いているけれども勉強中 3.日常的にテストコードを書いてプロジェクトを駆動させている状 態
  6. 6. こんな経験 ありませんか?
  7. 7. 一度動いたものを修正するのは怖い
  8. 8. 完璧に設計にしたつもりが 実際に出来上がったものと ギャップがある
  9. 9. デバッグに時間を費やしてしまう
  10. 10. そんなあなたに
  11. 11. TDD
  12. 12. Test Driven Development
  13. 13. What is TDD?
  14. 14. What is TDD? プログラム開発手法の一種で、 プログラムに必要な各機能について、 最初にテストを書き、そのテストが動作する 必要最低限な実装をとりあえず行った後、 コードを洗練させる、という 短い工程を繰り返すスタイルである。 https://ja.wikipedia.org/wiki/テスト駆動開発
  15. 15. What is TDD? テストコードを書いて実行することに より開発を促進させるための手法
  16. 16. What is TDD? TDDは設計と実装を シームレスに繋ぐ潤滑油
  17. 17. 開発スピード向上 What is TDD?
  18. 18. What is TDD?
  19. 19. What is TDD? テストコードを書くと逆に 開発スピードが落ちないか?
  20. 20. What is TDD? テストについて目線合わせ
  21. 21. TDDにおけるテスト
  22. 22. TDDにおけるテスト TDDのテストは品質保証を目的とした テストではない
  23. 23. TDDにおけるテスト TDDのテストは開発促進・設計行為を 目的としている
  24. 24. TDDにおけるテスト 開発者のためのテスト (Checking) 品質保証のためのテスト (Testing) ・ブラウザで実行確認 ・コマンドを打って実行確認 ・デバッグツール ・IDE ・デバック関数 デバッグ行為 ・様々な入力パターンの検証 ・セキュリティ ・パフォーマンス など
  25. 25. TDDにおけるテスト 開発者のためのテスト (Checking) 品質保証のためのテスト (Testing) ・ブラウザで実行確認 ・コマンドを打って実行確認 ・デバッグツール ・IDE ・デバック関数 デバッグ行為 ・様々な入力パターンの検証 ・セキュリティ ・パフォーマンス など
  26. 26. TDDにおけるテスト 開発者のためのテスト (Checking) 品質保証のためのテスト (Testing) ・ブラウザで実行確認 ・コマンドを打って実行確認 ・デバッグツール ・IDE ・デバック関数 デバッグ行為 ・様々な入力パターンの検証 ・セキュリティ ・パフォーマンス など
  27. 27. TDDにおけるテスト 開発者のためのテスト (Checking) 品質保証のためのテスト (Testing) ・ブラウザで実行確認 ・コマンドを打って実行確認 ・デバッグツール ・IDE ・デバック関数 デバッグ行為 ・様々な入力パターンの検証 ・セキュリティ ・パフォーマンス など
  28. 28. TDDにおけるテスト 開発者のためのテスト (Checking) 品質保証のためのテスト (Testing) ・ブラウザで実行確認 ・コマンドを打って実行確認 ・デバッグツール ・IDE ・デバック関数 デバッグ行為 ・様々な入力パターンの検証 ・セキュリティ ・パフォーマンス など TDD
  29. 29. TDDにおけるテスト TDDのためにテストコードを書くこと ≠ 品質保証のためにテストコードを書くこと
  30. 30. TDDにおけるテスト TDDにおいてテストコードは デバッグツールの代わり
  31. 31. TDDにおけるテスト 成果物の動作確認 テスト実行 > ブラウザをリロード・手動実行 早くて確実なフィードバックが得られる
  32. 32. TDDの研究論文
  33. 33. TDDの研究論文 TDD(テスト駆動開発)の適用評価を紹介した研究論文 - エリクソンはじめ3社 http://blogs.itmedia.co.jp/morisaki/2010/03/tdd---3-5b4a.html TDDを実施してみて ・機能テストでの不具合検出が18%減少した ・実装時間が16%増えた ・テストのカバレッジが大きくなった
  34. 34. TDDの研究論文 TDD(テスト駆動開発)の適用評価を紹介した研究論文 - エリクソンはじめ3社 http://blogs.itmedia.co.jp/morisaki/2010/03/tdd---3-5b4a.html 被験者を対象としたアンケート ・96%の被験者がデバッグの工数を減らすと感じた ・88%の被験者が要求が洗練されると感じた ・92%の被験者がコードの品質を上げると感じた ・50%の被験者が開発工数を減らすと感じた
  35. 35. TDDの研究論文 実装時間は増えるが デバッグ時間が減る トータルの開発時間が削減される
  36. 36. TDDの目標
  37. 37. TDDの目標
  38. 38. “動作するきれいなコード” を生み出すこと TDDの目標
  39. 39. “動作する汚いコード” にストレスを感じていないか? TDDの目標
  40. 40. TDDの目的 きれい 汚い 動作しない 動作する レガシーコード 到達したいゴール
  41. 41. TDDの目的 きれい 汚い 動作しない 動作する 到達したいゴール この道は なかなか難しい...
  42. 42. TDDの目的 きれい 汚い 動作しない 動作する レガシーコード きっちり設計したつ もりが。。。
  43. 43. TDDの目的 きれい 汚い 動作しない 動作する 到達したいゴール TDDのアプローチ こっちならいけそう!!
  44. 44. TDDの目的 きれい 汚い 動作しない 動作する レガシーコード 到達したいゴール 一度動いたものを変更す るのが怖い...!!
  45. 45. 安全に登っていく 必要がある TDDの目標
  46. 46. テストは命綱 TDDの目標
  47. 47. 安心して設計と実装を 満足するまで作りこめる TDDの目標
  48. 48. 動作するきれいなコードを 生み出すには?
  49. 49. 動作するきれいなコードを生み出すには? 目標を達成するには作戦が必要
  50. 50. 動作するきれいなコードを生み出すには? 自分は正しい努力をし ているのか、 毎日自分に問いかけ よ
  51. 51. リファクタリングとテストの関係 http://d.hatena.ne.jp/jun-yoshida/20060829/1156809373 TDDのリズム
  52. 52. 高速なフィードバックループ システムや人が成長するには 餌が必要
  53. 53. インクリメンタルな設計 ちょっとづつ確実に積み上げる
  54. 54. TODOリスト テストファースト アサートファースト 思考整理術
  55. 55. 数百人が参加する クリスマスパーティの 幹事をすることになった TODOリスト
  56. 56. TODOリスト
  57. 57. 仕様を細かく ブレークダウンする TODOリスト
  58. 58. 大きいタスクを小さいタスクに分割する ・参加者の予定調整 ・お店選び ・料理のコース決め ・参加者に連絡 ・乾杯の挨拶 ・コンテンツ用意 ・集金 TODOリスト
  59. 59. 実装を考えるよりも先に、 インターフェース(入出力)を考える テスト・アサートファースト
  60. 60. TDDのためにテストを書く = 設計 テスト・アサートファースト
  61. 61. How to TDD
  62. 62. TDDの流れ 1.TODOリストを作る 2.テストコードを書く 3.テストを失敗させる 4.テストを成功させる 5.リファクタリングする 3 ~ 5を繰り返し、動作するきれいなコードへ How to TDD
  63. 63. デモ https://github.com/hamuhamu/tdd_hands-on How to TDD
  64. 64. レガシーコード改善ガイド8章 TDDの大きな価値一度に一つのことに集中できる ・あまり考え過ぎない ・現在着手していることをまず終わらせる ・まず、テストを通過させる、最適化は二の次 ・重複は取り除くこと、メンテナンスの重荷になる How to TDD
  65. 65. わたしとTDD
  66. 66. ・コードが研磨された感じる ・面倒なデバッグが減った ・仕様を早い段階から深く考えれるようになった ・エンジニアとして成長できた わたしとTDD
  67. 67. テストは壁を与えてくれる わたしとTDD
  68. 68. エンジニアとしての成長 ・オブジェクト指向プログラミング能力の向上 ・リファクタリング能力の向上 ・データ設計能力の向上 ・アプリケーションの設計能力の向上 わたしとTDD
  69. 69. 最後に
  70. 70. TDDは品質を向上させる テストではない 最後に
  71. 71. 品質を向上させるのは 設計・実装をする人 最後に
  72. 72. 人のスキルを向上させるの がTDD 最後に
  73. 73. 一緒に勉強していきましょ う!! お気軽にお声がけこえかけてください @secret_hamuhamu 最後に
  74. 74. エンジニア募集してます!! ・チームマネジメント/プロジェクトマネジメント ・サーバサイド開発など 勉強会の会場提供なども できます https://geniee.snar.jp/ 最後に
  75. 75. ご静聴ありがとうございまし た 最後に

×