2018 アジャイル事業部 年始のご挨拶 LTの資料。 ぜんぜん最後までいかなかったけどね
1/24 アジャイル事業部 年始のご挨拶@fkino に代わりまして代打 家永英治書籍『テスト駆動開発』7つの魅力のご紹介
View Slide
(最後のページに辿りつけなさそうなので)2018もHappy Programming!!
祝!2017年秋 新訳!
Q:● 買った人?● 付録Cだけ読んだ人?● 一通り読んだ人は?● 1部、2部実際に手を動かして試した人?
新訳出版のピッチ”『テスト駆動開発』は、自分たちのコードに自信を持って開発を続けたいプログラマ、チームリーダー向けの書籍である。これはテスト駆動開発の考案者自身によって書かれた原典であり、テスト駆動開発とは単にテスト自動化を行うことではなく、ユニットテストとリファクタリングを両輪とした小さいサイクルを回すことで不確実性を制御し、不断の設計進化を可能にする手法であることを、読者は実例を通して学ぶことができる。http://t-wada.hatenablog.jp/entry/tddbook
”テスト駆動開発とは単にテスト自動化を行うことではなくhttp://t-wada.hatenablog.jp/entry/tddbook
”ユニットテストとリファクタリングを両輪としたhttp://t-wada.hatenablog.jp/entry/tddbook
http://t-wada.hatenablog.jp/entry/tddbook”小さいサイクルを回すことで不確実性を制御し
”不断の設計進化を可能にする手法であることをhttp://t-wada.hatenablog.jp/entry/tddbook
”読者は実例を通して学ぶことができるhttp://t-wada.hatenablog.jp/entry/tddbook
それが!
ソフトウェアのバージョンを最新に(JUnit5、Python3)判型を小さく(持ち運びやすさUP)脱落しにくい構成に(写経ビリティUP)新規書き下ろしの訳者解説を追加(付録Cで歴史が学べる)http://t-wada.hatenablog.jp/entry/tddbook新訳版の工夫
お買い得です!未だな人は今すくクリックを!
今日は、テスト駆動開発本の見どころを私の独断と偏見を交えながら、弾丸特急でお伝えします
(1)
(1)表紙がかっこいい!
(1)かっこいい!ジャケ買いだね
(1)ね!
(2)
(2)章末のコード全部入りに注目!
(2)写経時に迷わない!
(2)写経ビリティUP!
(2)t-wadaに感謝!
(2)ありがとう!!
(2)実際に手で動かして学ぶ(写経)はまじでオススメ!
”本書『 テスト 駆動 開発』 の第 I 部、第II部が特殊な書き方をされているのは、 この「 過程」を読者に追体験してもらうためです。テスト駆動開発の本質 をつかむためには、 まとまった量の、手を動かしながら学べる良質なチュートリアルが必要なのです。KentBeck. テスト駆動開発 (Kindle の位置No.5260-5263). Kindle 版. 付録Cより
(3)
(3)TODOリストの変更過程に注目!
(3)途中までTODOを追ってみましょう!
(3)TODOリスト≒テスト項目+リファクタリング項目
アウトプットから学びを得て、(3)
TODOリストを更新
遠目で眺めれば、エクストリームプログラミングやリーンスタートアップとやってることは、だいたい一緒
だいたい一緒
try and error!するほど憂鬱になるではなく
try and error!するほどやったー!!となる
“テスト駆動開発 は、 プログラミング中の不安をコントロールする手法だ。ここでは「 不安」を悪い意味で使って いるのではない(我々は 赤ちゃんでは ないからね)。「 これは困難な問題なので、最初からすべてを見通せるわけではない」という真っ当な感覚のことだ。KentBeck . テスト駆動開発 (Kindle の位置No.59-62). Kindle 版.
写経以外にも、TODOリストを追ってみるもおすすめの学習方法!
(3)各章ごとのふりかえりに注目!
何が書いてあるか少し追って見ましょう
どうなったら嬉しいかを小さいテストコードで表現した
大罪!?
恥知らずにコピー&ペースト!?
重複を取り除くまでは家に帰らない!!
感情をテストに翻訳する!?
1. 気分を交えながらやったことを短く書いている2. まれに、考察が入るふりかえりに書いていること
写経で迷子になったら各章のふりかえがオススメ。ふりかえりの項目を読んでわからない箇所があれば、わからない箇所を中心に章の文を追って、KentBeckがやってみせたこと、感じたことをもう一度トレースする。ふりかえりの他、1部は章タイトル(日本語)からも推測できるように t-wadaが工夫している。
(4)おちゃめなKentBeckに注目!
そう、あれは私が若かったころ。とてもとても昔の話だ。あのころはビットを雪の中から掘り出して、バケツいっぱいのビットを裸足で仕事場に運ばなければならなかった。小さい足は血まみれになり、その足跡をオオカミがつけてきたものだった……失敬、思い出に浸ってしまったようだ。KentBeck.テスト駆動開発 (Kindle の位置No.3215-3217). Kindle 版.
オオカミ?血?唐突に思い出に浸る!?なんだ?(4)
(4)KentBeck流のSingletonの説明
“Singleton パターングローバル変数の無いプログラミング言語でグローバル変数を作るにはどうすればよいだろうか―― 決してやってはならない。そんなことを考える時間は設計に回して、コードをきれいにしよう。KentBeck. テスト駆動開発 (Kindle の位置No.4323-4324). Kindle 版.(4)
決してやってはならない。
そんなことを考える時間は設計に回して、コードをきれいにしよう。
以上!!
わかった。グローバル変数やりません☻(4)
KentBeck流の説明が時々「ぬ!?」「 」もありますがそれも楽しみましょう!
(5)
(5)3部のパターンに注目!!
(5)3部はTDDのためのパターン集です!名前を眺めてみよう!
第 III 部 テスト駆動開発のパターンテスト駆動開発のパターン● テスト(名詞)● 独立したテスト● TODOリスト● テストファースト● アサートファースト● テストデータ● 明示的なデータレッドバーのパターン● 一歩を示すテスト● はじめのテスト● 説明的なテスト● 学習用テスト● 脱線はTODOリストへ● 回帰テスト● 休憩● やり直す● 安い机に良い椅子
第 III 部 テスト駆動開発のパターンテスティングのパターン● 小さいテスト● Mock Object● Self Shunt● Long String● Crash Test Dummy● 失敗させたままのテスト● きれいなチェックイングリーンバーのパターン● 仮実装を経て本実装へ● 三角測量● 明白な実装● 一から多
第 III 部 テスト駆動開発のパターンxUnitのパターン● アサート● フィクスチャー● 外部フィクスチャー● テストメソッド● 例外のテスト● まとめテストデザインパターン● Command● Value Object● Null Object● Template Method● Pluggable Object● Pluggable Selector● Factory Method● Imposter● Composite● Collecting Parameter● Singletone
第 III 部 テスト駆動開発のパターンリファクタリング● 差異をなくす● 変更の差分● データ構造の変更● メソッドの抽出● メソッドのインライン化● インタフェースの抽出● メソッドの移動● メソッドオブジェクト● パラメータの追加● メソッド から コンス トラクタ への パラメータ の移動
パターンなので、「全部やれ!」ではなく、(5)
(5)【自分】が感じている課題感に沿って、合いそうなパターンを【取捨選択】し、課題を解消するか試すが肝
1.有機的秩序の原理2.参加の原理3.漸進的成長の原理4.パタンの原理5.診断の原理6.調整の原理(オレゴン大学の実験)
自分で考えて選択!!
不安に立ち向かう
(5)ちょっとづつプログラミングの好循環ループを育てていく
課題は自分の今の感情に気付くところから(5)
憂鬱な悪循環ループ
(5)「わからないことがたくさん。どこから手をつけたら良いのやら><」
(5)「問題が大き過ぎて解けないよ><」
(5)「つまり期待結果はなに?」
「何回も打鍵&クリック操作で、指がつかれたよ」(5)
(5)「このコードさっぱり理解できない><」
(5)「目視確認で目がショボショボ><」
「確認作業は単調で退屈だなぁ」(5)
(5)「ログが流れて確認が辛い!」
(5)「毎回確認めんどくさいな。後にするか」
(5)「結果わかるまで時間かかるなぁ。めんどくさいなぁ。後にするか」
(5)「やゔぇぇ。動かない!?いつ壊れたんだろう ??>
「現実装の仕様がわかんないよ!何が期待通りなの><トホホ」(5)
(5)「修正したけど動くのかなぁ><」
(5)「ごめん壊しちゃった!!」
(5)「なにこれ!コピペの嵐。><」
(5)「似たIf文が増殖!?。これは。。」
(5)「ありゃりゃうまくいかない。袋小路だ」
(コードを見て or 作業して、感じて)うぎゃー(5)
うぎゃー(5)
憂鬱な悪循環ループのデベロッパー体験をどうやって抜け出す?(5)
ヒントが3部に!(5)
実装がうまく行かなかったらどうする?(5)
(5)休憩疲れたり手詰まりになったりしたときはどうすればいいだろうか―― 休憩 を 取ろ う。KentBeck. テスト駆動開発 (Kindle の位置No.3473-3474). Kindle 版.
(5)やり直す手詰まりで途方に暮れてしまったときはどうするべきか―― コードを捨てて、やり直そう。KentBeck. テスト駆動開発 (Kindle の位置No.3502-3503). Kindle 版.
(5)僕達には休んだり・来た道を戻る選択肢がある!
● リファクタリングを強化してみる○ 差異をなくす○ メソッドの抽出● 更にTDDのRedGreenRefactorのリズムに近づく○ テストファースト○ アサートファースト● うまく行かなかったら○ パターン適用を一旦中断し、適切なタイミングで再度チャレンジする悪循環ループから抜け出し好循環ループを育てていこう● 例えば少し制約を緩めて次から始める○ TODOリスト○ テスト(名詞)○ 小さいテスト○ 明白な実装● 実装につまずいたら○ ”仮実装を経て本実装へ ”で歩幅を小さくするを試す
まだ多すぎるというのなら、この2つから仮実装を経て本実装へテスト(名詞)
仮実装を経て本実装へ実装で躓いた場合はこれ!!まだ多すぎるというなら 1つから
ベイビーステップ(漸近的成長)でつくる真髄がこのパターンの中に!仮実装を得て本実装へ(Fake It)
TDD自体をはじめてみるに不安を感じたら?(5)
(5)ベイビーステップTDD---TDDを始めるのが難しいと思ったら?安心して失敗できる写経からはじめてみよう。テストファーストは後にして、小さなリファクタリングのみを試してみよう。不安で立ち止まってしまうよりもずっと良い。うまく行けば更に課題感にそって優先順の高そうな解決案を1つ試そう。うまく行かなかったら、休憩するか、やり直そう。プログラミング体験のカイゼンTRYのステップ幅を小さくして、ゆっくりで再度トライしよう。(eiji.ienaga)
パターンなので、参照するだけでなく、繰り返し発生している課題と解について自分で書いて整理するのも良い!(5)
プログラミング中の悪循環から好循環へトランスフォームのヒントは3部の中に(5)
(6)
(6)電子書籍に注目!
電子書籍なら気軽にジャンプできていサマリーが読めてオススメ
リアル本もいよ!
サインがもらえる!
用途に合わせて複数冊、買いましょう!
(7)
(7)付録Cに注目!
歴史、これから等が記載されて良いことたくさんありますが今日は1つだけピックアップ
”テスト駆動開発におけるテストは、確認を繰り返すことによって、 既知の領域の輪郭線を際立たせ、そこから未知の領域に踏み込んでいくための相棒なのです。未知の領域を進むための明かりが足りないと思ったとき、テスト駆動開発を思い出してみてください。KentBeck. テスト駆動開発 (Kindle の位置No.5301-5303). Kindle 版. 付録C
確認を繰り返すことによって
既知の領域の輪郭線を際立たせ、
未知の領域に踏み込んでいくための相棒
try and error するほど強くなる!!
テスト駆動開発 は、 プログラミング中の不安をコントロールする手法だ。ここでは「 不安」を悪い意味で使っているのではない(我々は 赤ちゃんでは ないからね)。「 これは困難な問題なので、最初からすべてを見通せるわけではない」という真っ当な感覚のことだ。KentBeck . テスト駆動開発 (Kindle の位置No.59-62). Kindle 版.
2018年も未知の領域に対して、期待と不安の入り混じった感情をもちながらもプログラミングを楽しんでいきましょう
2018もHappy Programming!!