Skip to content

Instantly share code, notes, and snippets.

@haru01
Last active August 15, 2019 12:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haru01/7248911 to your computer and use it in GitHub Desktop.
Save haru01/7248911 to your computer and use it in GitHub Desktop.

テスティングフレームワークのインストール

TDDを試せる環境を用意する。これがなきゃ始まらない。

テストの道具を揃える

保存したら即実行、前提データの準備、UIの実行、時間をコントロールするライブラリー、モックライブラリー、Given, When, Thenのフレームワークなど道具を揃え、 すぐに書けるように準備する。

Red Green Refactor のリズム

簡単なお題でRed Green Refactorを試して、体で体感する。

ライブデモ

経験者による実演でTDD進め方を観て学ぶ

グリーンバンド

テストを書くことのリマインダー。

RGRボード

リズムを忘れないように。Red、Green、Refactorのステータスを確認しながら。ペアでやるとなおよし。

ちょっと実装、ちょっとテスト、ちょっとリファクタリング

「先にテストを書く」の制約を緩めて、ちょっとづつテストする。書いたテストを参考に先にテストを書くを試す。

*** 素振り

武道家の型の練習のように、体や頭が俊敏に反応するまで、練習を繰り返す。

真似て学ぶ

学習パターン

*** TDDBC

TDDを学ぶイベントや研修に参加する。社内でTDDBCを自前で開催する。

きれいなコード・きれいな設計を学ぶ

リーダブルコードを学ぶ。設計原則を学ぶ。オープンソースを読そみ、参考となるテストの書き方を学ぶ。イデオムやパターンを学ぶ

勉強会

1人では学べない複数人で学習する

** フィーチャ単位の見積りと開発

工程ごとの見積りが、テスト実施しにくい場合。

* 界王拳

時間外の自発的残業でテストの道具を揃える。書いてみる。ほどほどに。

*** 1人でひっそり

上司の説得許可コスト抑えて開始する。

* タイムボックストライアル

炎上プロジェクトでも、限定された時間枠内で試して、現場での知見を得る。出来る範囲で。

個人タスクボード

「割り込み」対策。個人で割り込みの優先順位の対話をできるようにする。チームで取り組んでいるなら別アプローチを。

*** 開発環境の整備

ループを妨げる環境要因を徹底的に取り除く。テスト実行するまでの時間は?ディスプレイは?マシンは?フォントは?エディタは?机は?椅子は?ホワイトボードは?すぐに相談した人の場所は?テストケースを書く情報源のアクセス手段は?オンライン上の対話方法は?etc...

*** はじめての対象選び

テストなし既存コードにテストを差し込んでからTDDを開始。最初の差し込み対象を選ぶ。

*** テストのバックログ

テストなし既存コードにテストを差し込んでからTDDを開始する場合に、優先順位付けする

* 気の合う同僚

相談できる同志 (Fearless Change)、協力を求める (Fearless Change)

*** 指導者

1人では解決するには時間がかかるので、経験者アドバイスをもらう。

* 鬼教官

ついつい、現状に戻りがちなのを防ぐ

** ペアで開発する(組織パターン、SBE、XP)

ペアでTDDの進め方を学び合う。異なるロールの目線でテストを書く

徒弟制度(組織パターン、アプレンティスシップ・パターン)

師弟関係でTDDの技能を伝承する。

他者と対話する

1人TDDに熱中に注意。よい期待する振る舞い、ネーミング、設計、は1人では発見できない。

手動テスト時間・バグ件数の可視化

鏡の剣士。手動テストなどの現状を可視化し、次の現状把握、判断し、アクションを取る。

頻繁なデモを先に

ビジネスサイドにも効果が実感できるとこから始める。頻繁にデモをするには、安心して既存の振る舞いを残しつつ新しい振る舞いを追加しつづけられる仕組み=TDD(Acceptance Testing, Unit Testing)が必要。

Acceptance Testingを先に

ビジネスサイドにも効果が実感できるとこから始める。

Unit Testing、結合テストを先に

ビジネス側を巻き込まずに始められる。

* 時間泥棒を逮捕

TDDの新しい取り組みを実施するための時間を確保する。無駄なフィーチャ、無駄な会議など発見し対処する。

*** Doneの定義(プログラミングの完了条件)

自動テスト実施までを「プログラミング完了」と、開発の規律を浸透させる。

*** 見積りと計画づくり

テスト込みで実行可能な作業量を推測し、コミットする。

防火壁(組織パターン)

割り込み作業を整備する。

テストの方針設計

*** Given/When/Thenを使った会話

* イテレーション停止とゴミ量産防止策

スプリント毎にゴミコードを吐き続ける防止策を練る。テストの道具を整える。テストを差し込む。

常に誰かが進捗させる(組織パターン)

割り込みが入っても、誰かは集中して開発を続ける。

誰か1人犠牲にする(組織パターン)

責務を移動せよ(組織パターン)

例えば、プログラマがテストコードを書く。テスターが複数のプロジェクトを渡り歩き、プログラマにテストの道具やTDDを指導できるようになる。

PO/顧客代理(組織パターン)

PO・顧客が忙しい場合。開発チーム側から代理を立てる。PO目線でテストパターンを開発者と一緒に書き出していく。ペアで開発する。責務を移動せよ。顧客代理の組み合わせ。

* ステップ・バイ・ステップ (Fearless Change)

* ぐずぐずするな(組織パターン)

着手できるとこらから。ちょっとづつ始めよ。

* 信頼で結ばれた共同体(組織パターン)

* ふりかえり

* 適切なタイミング (Fearless Change)

リリース前とスケジュールプレッシャーがキツイなら別の機会を。

ソフトウェアの利用現場に乗り込む

実際にソフトウェアが使われる現場に乗り込み、良質なテストパターン(本当に必要とされる、ソフトウェアの期待する振る舞いは何だろうか?)を発見する。

デモからテストパターンの発見

予期せぬフィードバックを歓迎

「割り込み」と捉えず、過去に発見できなったテストパターンを今まさに発見したと、歓迎する。優先順位が高いなら、テスト書くところから対処

現状の可視化

バグ報告件数や手動テスト時間を測定し、次のアクションの判断材料にする。鏡の剣士

Github

プロダクトをまたいで、良いテストの書き方のサンプルを参照できるようにする

テストのコードレビュー

複数人でテストの良い書き方について議論し、判断基準を揃えていく。

動くスケルトン(GOOS)

レイヤーをまたぐエンドツーエンドのテスト(GOOS)

デプロイメント・パイプラインのエンドツーエンドのテスト(GOOS)

TODOのゴールをテストで表現(GOOS)

ストーリーをまだぐエンドツーエンドのテスト

テスト結果レポートを明瞭に

モックを使ったメッセージパッシングの設計(GOOS)

バリューオブジェクトの発見(GOOS、DDD)

スプリントゼロ

曳光弾開発(達人プログラマー)

使い捨てプロトタイプを先に

学習テスト(Kent Beck)

MVP,MMF

ホワイトボートによる設計を先に

TODOリスト(Kent Beck)

TDDがつくる学習フィードバックループ 学習ループの3つの問い 学習ループを妨害する要因

@haru01
Copy link
Author

haru01 commented Nov 2, 2013

テストのコードレビュー

@haru01
Copy link
Author

haru01 commented Nov 2, 2013

学習ループの診断と修復

@haru01
Copy link
Author

haru01 commented Nov 2, 2013

プロダクトビジョンづくりを先に

@haru01
Copy link
Author

haru01 commented Nov 3, 2013

パターンを記述する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment