Your SlideShare is downloading. ×
テスト駆動開発の導入ーペアプログラミングによる学習効果ー    2012.10.26 JaSST 北海道     渡辺修司 (@shuji_w6e)                           1
自己紹介
渡辺 修司Javaプログラマ 株式会社エスプラニング所属 ウェブアプリやデスクトップアプリの開発テスト駆動開発、ユースケース駆動開発アジャイル開発最近の趣味はロードバイクとフットサル
@shuji_w6e札幌 JavaコミュニティTDD Boot Campやさしいデスマーチ(Blog)執筆活動 WEB DB Press vol.69 JUnit実践入門(Soon!)
テスト駆動開発
テスト駆動開発とは?テストコードをプロダクションコードより先に記述するテストファーストを実践し、インクリメンタルにソフトウェアを開発する開発手法(TDD: Test Driven Development)
テスト駆動開発のサイクル                            1.設計する5.リファクタリング               Heuristics                               2.テストを書く 4...
テスト駆動開発の目的明確で検証可能な仕様テスタビリティの高い設計常にリファクタリング可能素早いフィードバック
ペアプログラミング
ペアプログラミングとは?ペアで1つの作業を行うプラクティスコードを書くドライバーと、ドライバーのサポートをするナビゲーター定期的な役割の交代
ペアプログラミングの効果すべてのコードを2人以上が理解している状態曖昧な状態でコードが書かれないツールの使い方やコードの書き方を学べる
問題http://www.flickr.com/photos/panoptikon/403903803/
典型的なプロジェクトの流れ(1) 遅れる実装(2) とりあえずシステムテスト(3) デバッグ地獄(4) 後からユニットテスト(5) 追加開発でリグレッションの発生
ぐだぐだになる原因仕様が複雑でなかなか決まらない納期のプレッシャーユニットテストの工数がない
ぐだぐだになる本当の原因完成の基準が実装者によって異なる理解不足のままで実装している変更に対して脆いスキル不足担当機能以外に興味が無い結合すると動かない
事例http://www.flickr.com/photos/kieon/4313604468/
プロジェクトの概要Java のデスクトップアプリケーション解析エンジン + GUI(Swing)5­6名で3ヶ月程度の規模ミッションクリティカルなシステムのデータを解析するツール
導入前カオスなコードGUIとビジネスロジックが相互依存シングルトンパターンの乱用価値のないテストコードprivateメソッドのテスト少しの変更で通らなくなるテスト
開発手法の改善Tracによるissue管理外部設計にユースケースを導入自動化(SVN + Maven + JenkinsCI)ペアプログラミングテストファースト(テスト駆動開発)リファクタリング
ペアプログラミングの運用初心者同士ではペアを作らない2週間を目安にペアを変更担当個所が偏らないように作業を配分
テストファーストの導入必須とはしない書ける個所はテストを先に書いてみる「どうテストするか?」を意識するイメージが沸かない場合は軽く実装する
開発の流れ(1) ナビゲータに実装することを説明する(2) ナビゲータからの質問に答える(3) 合意したならば、実装を進める(4) 適宜ツッコミを受ける(5) 一区切りついたならば役割をチェンジする
効果
作業時間実装完了時間はほぼ2倍デバッグ時間は半減システムテスト後の修正時間は半減トータルで2­3割増えた程度※慣れてくれば同程度の時間になる可能性
品質不具合の質が変化システムテスト時の不注意的な欠陥が激減プロジェクト中盤でも安定して動作欠陥             開発期間
<CONFIDENCE>     CONFIDENCE
教育的効果ツールの使い方コーディングの技報他人の「考え方」を知ること多くの事を学べるが、プログラミングを作業と考えていると効果は薄い
考察
テスト駆動開発とペアプロの効果効果的なユニットテストユニットテストの強制考えたことを相手に伝えるプロセスプロジェクトナレッジの共有プログラマのスキルアップ
効果的なユニットテストCIの導入による素早いフィードバックプロジェクト終盤での「   褄合わせ」の減少「無駄なユニットテスト」の減少privateメソッドのテストインターフェイスを意識したテスト
ユニットテストの強制面倒なテストを先に書く後から書くのはもっと面倒「動くことを確認するテスト」から「動かすためのテスト」へ
考えたことを相手に伝えるプロセスバグのあるコードは「不安なコード」自信が無いのでコメントで誤魔化すコードに落とす前に言語化して伝える考えが曖昧なままで書かれたコードが減少コピペするにも考える会話が増える
プロジェクトナレッジの共有「この機能はXXさんが担当したから解らない」がほとんどなくなる知見をチームに伝搬させる担当ではない機能にも興味を持たせる
プログラマのスキルアップコーディング上のテクニックツールの使い方デザインパターンリファクタリング問題に対する「考え方」
課題http://www.flickr.com/photos/togemaru/2882075323/
基礎体力は必要プログラミングスキルリファクタリング設計パターンテストスキル
教育的コスト初心者にとって学べることは多いプロジェクトのリソースと教育コスト当然のように教育コストを払ってくれない余裕のないプロジェクトでは難しい一時的なメンバーでは効果が薄い
実績と経験者経験者がいないと難しいワークショップなどで「素振り」が必要初心者は経験者と組むことで楽経験者は思った以上に疲れる
ワークショップのススメ半日から数日のワークショップテストファーストとペアプロに慣れる小さなアプリを作成できると良い必ずリファクタリングまで回すこと
まとめ
テスト駆動開発( テストファースト)先に振る舞いを考えることの効果テスタビリティの高いシンプルな設計動作するきれいなコード/リファクタリングペアプログラミングスキルの伝搬プロジェクトナレッジの共有コミュニケーション
質疑応答
Upcoming SlideShare
Loading in...5
×

テスト駆動開発の導入ーペアプログラミングの学習効果ー

2,898

Published on

JaSST北海道2012での発表資料

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,898
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide
  • \n
  • 30&amp;#x79D2;&amp;#x7A0B;&amp;#x5EA6;\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 1&amp;#x5206;&amp;#x7A0B;&amp;#x5EA6;\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "テスト駆動開発の導入ーペアプログラミングの学習効果ー"

    1. 1. テスト駆動開発の導入ーペアプログラミングによる学習効果ー 2012.10.26 JaSST 北海道 渡辺修司 (@shuji_w6e) 1
    2. 2. 自己紹介
    3. 3. 渡辺 修司Javaプログラマ 株式会社エスプラニング所属 ウェブアプリやデスクトップアプリの開発テスト駆動開発、ユースケース駆動開発アジャイル開発最近の趣味はロードバイクとフットサル
    4. 4. @shuji_w6e札幌 JavaコミュニティTDD Boot Campやさしいデスマーチ(Blog)執筆活動 WEB DB Press vol.69 JUnit実践入門(Soon!)
    5. 5. テスト駆動開発
    6. 6. テスト駆動開発とは?テストコードをプロダクションコードより先に記述するテストファーストを実践し、インクリメンタルにソフトウェアを開発する開発手法(TDD: Test Driven Development)
    7. 7. テスト駆動開発のサイクル 1.設計する5.リファクタリング Heuristics 2.テストを書く 4.テストを成功させる 3.コードを書く
    8. 8. テスト駆動開発の目的明確で検証可能な仕様テスタビリティの高い設計常にリファクタリング可能素早いフィードバック
    9. 9. ペアプログラミング
    10. 10. ペアプログラミングとは?ペアで1つの作業を行うプラクティスコードを書くドライバーと、ドライバーのサポートをするナビゲーター定期的な役割の交代
    11. 11. ペアプログラミングの効果すべてのコードを2人以上が理解している状態曖昧な状態でコードが書かれないツールの使い方やコードの書き方を学べる
    12. 12. 問題http://www.flickr.com/photos/panoptikon/403903803/
    13. 13. 典型的なプロジェクトの流れ(1) 遅れる実装(2) とりあえずシステムテスト(3) デバッグ地獄(4) 後からユニットテスト(5) 追加開発でリグレッションの発生
    14. 14. ぐだぐだになる原因仕様が複雑でなかなか決まらない納期のプレッシャーユニットテストの工数がない
    15. 15. ぐだぐだになる本当の原因完成の基準が実装者によって異なる理解不足のままで実装している変更に対して脆いスキル不足担当機能以外に興味が無い結合すると動かない
    16. 16. 事例http://www.flickr.com/photos/kieon/4313604468/
    17. 17. プロジェクトの概要Java のデスクトップアプリケーション解析エンジン + GUI(Swing)5­6名で3ヶ月程度の規模ミッションクリティカルなシステムのデータを解析するツール
    18. 18. 導入前カオスなコードGUIとビジネスロジックが相互依存シングルトンパターンの乱用価値のないテストコードprivateメソッドのテスト少しの変更で通らなくなるテスト
    19. 19. 開発手法の改善Tracによるissue管理外部設計にユースケースを導入自動化(SVN + Maven + JenkinsCI)ペアプログラミングテストファースト(テスト駆動開発)リファクタリング
    20. 20. ペアプログラミングの運用初心者同士ではペアを作らない2週間を目安にペアを変更担当個所が偏らないように作業を配分
    21. 21. テストファーストの導入必須とはしない書ける個所はテストを先に書いてみる「どうテストするか?」を意識するイメージが沸かない場合は軽く実装する
    22. 22. 開発の流れ(1) ナビゲータに実装することを説明する(2) ナビゲータからの質問に答える(3) 合意したならば、実装を進める(4) 適宜ツッコミを受ける(5) 一区切りついたならば役割をチェンジする
    23. 23. 効果
    24. 24. 作業時間実装完了時間はほぼ2倍デバッグ時間は半減システムテスト後の修正時間は半減トータルで2­3割増えた程度※慣れてくれば同程度の時間になる可能性
    25. 25. 品質不具合の質が変化システムテスト時の不注意的な欠陥が激減プロジェクト中盤でも安定して動作欠陥 開発期間
    26. 26. <CONFIDENCE> CONFIDENCE
    27. 27. 教育的効果ツールの使い方コーディングの技報他人の「考え方」を知ること多くの事を学べるが、プログラミングを作業と考えていると効果は薄い
    28. 28. 考察
    29. 29. テスト駆動開発とペアプロの効果効果的なユニットテストユニットテストの強制考えたことを相手に伝えるプロセスプロジェクトナレッジの共有プログラマのスキルアップ
    30. 30. 効果的なユニットテストCIの導入による素早いフィードバックプロジェクト終盤での「 褄合わせ」の減少「無駄なユニットテスト」の減少privateメソッドのテストインターフェイスを意識したテスト
    31. 31. ユニットテストの強制面倒なテストを先に書く後から書くのはもっと面倒「動くことを確認するテスト」から「動かすためのテスト」へ
    32. 32. 考えたことを相手に伝えるプロセスバグのあるコードは「不安なコード」自信が無いのでコメントで誤魔化すコードに落とす前に言語化して伝える考えが曖昧なままで書かれたコードが減少コピペするにも考える会話が増える
    33. 33. プロジェクトナレッジの共有「この機能はXXさんが担当したから解らない」がほとんどなくなる知見をチームに伝搬させる担当ではない機能にも興味を持たせる
    34. 34. プログラマのスキルアップコーディング上のテクニックツールの使い方デザインパターンリファクタリング問題に対する「考え方」
    35. 35. 課題http://www.flickr.com/photos/togemaru/2882075323/
    36. 36. 基礎体力は必要プログラミングスキルリファクタリング設計パターンテストスキル
    37. 37. 教育的コスト初心者にとって学べることは多いプロジェクトのリソースと教育コスト当然のように教育コストを払ってくれない余裕のないプロジェクトでは難しい一時的なメンバーでは効果が薄い
    38. 38. 実績と経験者経験者がいないと難しいワークショップなどで「素振り」が必要初心者は経験者と組むことで楽経験者は思った以上に疲れる
    39. 39. ワークショップのススメ半日から数日のワークショップテストファーストとペアプロに慣れる小さなアプリを作成できると良い必ずリファクタリングまで回すこと
    40. 40. まとめ
    41. 41. テスト駆動開発( テストファースト)先に振る舞いを考えることの効果テスタビリティの高いシンプルな設計動作するきれいなコード/リファクタリングペアプログラミングスキルの伝搬プロジェクトナレッジの共有コミュニケーション
    42. 42. 質疑応答

    ×