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