Upgrade to Pro — share decks privately, control downloads, hide ads and more …

書籍『テスト駆動開発』7つの魅力のご紹介

eiji.ienaga
January 25, 2018
900

 書籍『テスト駆動開発』7つの魅力のご紹介

2018 アジャイル事業部 年始のご挨拶 LTの資料。
ぜんぜん最後までいかなかったけどね

eiji.ienaga

January 25, 2018
Tweet

Transcript

  1. 1/24 アジャイル事業部 年始のご挨拶
    @fkino に代わりまして
    代打 家永英治
    書籍『テスト駆動開発』
    7つの魅力のご紹介

    View Slide

  2. (最後のページに辿りつけなさそうなので)
    2018も
    Happy Programming!!

    View Slide

  3. 祝!2017年秋 新訳!

    View Slide

  4. Q:
    ● 買った人?
    ● 付録Cだけ読んだ人?
    ● 一通り読んだ人は?
    ● 1部、2部実際に手を動かして試した人?

    View Slide

  5. 新訳出版のピッチ
    ”『テスト駆動開発』は、自分たちのコードに自信を持って開発を続けたいプログラマ、
    チームリーダー向けの書籍である。これはテスト駆動開発の考案者自身によって書か
    れた原典であり、テスト駆動開発とは単にテスト自動化を行うことではなく、ユニットテ
    ストとリファクタリングを両輪とした小さいサイクルを回すことで不確実性を制御し、不
    断の設計進化を可能にする手法であることを、読者は実例を通して学ぶことができる。
    http://t-wada.hatenablog.jp/entry/tddbook

    View Slide

  6. ”テスト駆動開発とは単に
    テスト自動化を行うことで
    はなく
    http://t-wada.hatenablog.jp/entry/tddbook

    View Slide

  7. ”ユニットテストとリファクタリング
    を両輪とした
    http://t-wada.hatenablog.jp/entry/tddbook

    View Slide

  8. http://t-wada.hatenablog.jp/entry/tddbook
    ”小さいサイクルを回すことで不
    確実性を制御し

    View Slide

  9. ”不断の設計進化を可能にする
    手法であることを
    http://t-wada.hatenablog.jp/entry/tddbook

    View Slide

  10. ”読者は実例を通して学ぶことが
    できる
    http://t-wada.hatenablog.jp/entry/tddbook

    View Slide

  11. それが!

    View Slide

  12. View Slide

  13. ソフトウェアのバージョンを最新に(JUnit5、Python3)
    判型を小さく(持ち運びやすさUP)
    脱落しにくい構成に(写経ビリティUP)
    新規書き下ろしの訳者解説を追加(付録Cで歴史が学べる)
    http://t-wada.hatenablog.jp/entry/tddbook
    新訳版の工夫

    View Slide

  14. お買い得です!
    未だな人は今すくクリックを!

    View Slide

  15. 今日は、テスト駆動開発本の見どころを私
    の独断と偏見を交えながら、弾丸特急でお
    伝えします

    View Slide

  16. (1)

    View Slide

  17. (1)表紙がかっこいい!

    View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. (1)
    かっこいい!
    ジャケ買いだね

    View Slide

  22. (1)
    ね!

    View Slide

  23. (2)

    View Slide

  24. (2)章末のコード全部入りに注
    目!

    View Slide

  25. (2)
    写経時に迷わない!

    View Slide

  26. (2)
    写経ビリティUP!

    View Slide

  27. (2)
    t-wadaに感謝!

    View Slide

  28. (2)
    ありがとう!!

    View Slide

  29. (2)
    実際に手で動かして学ぶ
    (写経)はまじでオスス
    メ!

    View Slide

  30. ”本書『 テスト 駆動 開発』 の第 I 部、第II部が特殊な書き方をさ
    れているのは、 この「 過程」を読者に追体験してもらうためです。
    テスト駆動開発の本質 をつかむためには、 まとまった量の、手
    を動かしながら学べる良質なチュートリアルが必要なのです。
    KentBeck. テスト駆動開発 (Kindle の位置No.5260-5263). Kindle 版. 付録Cより

    View Slide

  31. (3)

    View Slide

  32. (3)TODOリストの変更過程に
    注目!

    View Slide

  33. (3)
    途中までTODOを追って
    みましょう!

    View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. (3)
    TODOリスト≒
    テスト項目+リファクタリング項目

    View Slide

  41. アウトプットから
    学びを得て、
    (3)

    View Slide

  42. TODOリストを更新

    View Slide

  43. 遠目で眺めれば、
    エクストリームプログラミングや
    リーンスタートアップと
    やってることは、だいたい一緒

    View Slide

  44. だいたい一緒

    View Slide

  45. try and error!するほど
    憂鬱になるではなく

    View Slide

  46. try and error!するほど
    やったー!!となる

    View Slide

  47. “テスト駆動開発 は、 プログラミング中の不安をコントロールす
    る手法だ。ここでは「 不安」を悪い意味で使って いるのではない
    (我々は 赤ちゃんでは ないからね)。「 これは困難な問題なの
    で、最初からすべてを見通せるわけではない」という真っ当な感
    覚のことだ。
    KentBeck . テスト駆動開発 (Kindle の位置No.59-62). Kindle 版.

    View Slide

  48. 写経以外にも、TODOリストを追ってみるも
    おすすめの学習方法!

    View Slide

  49. (3)

    View Slide

  50. (3)各章ごとの
    ふりかえりに注目!

    View Slide

  51. 何が書いてあるか少し
    追って見ましょう

    View Slide

  52. View Slide

  53. どうなったら嬉しいかを小さいテ
    ストコードで表現した

    View Slide

  54. 大罪!?

    View Slide

  55. View Slide

  56. 恥知らずにコピー&ペー
    スト!?

    View Slide

  57. 重複を取り除くまでは
    家に帰らない!!

    View Slide

  58. View Slide

  59. 感情をテストに翻訳する!?

    View Slide

  60. 1. 気分を交えながらやったことを短く書い
    ている
    2. まれに、考察が入る
    ふりかえりに書いていること

    View Slide

  61. 写経で迷子になったら各章のふりかえがオ
    ススメ。
    ふりかえりの項目を読んでわからない箇所があれば、わからない箇所を中心に章の文を追って、KentBeckがやってみせたこと、感じたことをもう一度トレースする。
    ふりかえりの他、1部は章タイトル(日本語)からも推測できるように t-wadaが工夫している。

    View Slide

  62. (4)おちゃめなKentBeckに注
    目!

    View Slide

  63. そう、あれは私が若かったころ。とてもとても昔の話だ。あのころ
    はビットを雪の中から掘り出して、バケツいっぱいのビットを裸足
    で仕事場に運ばなければならなかった。小さい足は血まみれに
    なり、その足跡をオオカミがつけてきたものだった……失敬、思い
    出に浸ってしまったようだ。
    KentBeck.テスト駆動開発 (Kindle の位置No.3215-3217). Kindle 版.

    View Slide

  64. オオカミ?血?
    唐突に思い出に浸る!?
    なんだ?
    (4)

    View Slide

  65. (4)
    KentBeck流の
    Singletonの説明

    View Slide

  66. “Singleton パターン
    グローバル変数の無いプログラミング言語でグローバル変数を作るにはどうすればよい
    だろうか―― 決してやってはならない。そんなことを考える時間は設計に回して、コード
    をきれいにしよう。
    KentBeck. テスト駆動開発 (Kindle の位置No.4323-4324). Kindle 版.
    (4)

    View Slide

  67. 決してやってはならな
    い。

    View Slide

  68. そんなことを考える時間は設計
    に回して、コードをきれいにしよ
    う。

    View Slide

  69. 以上!!

    View Slide

  70. わかった。グローバル変
    数やりません☻
    (4)

    View Slide

  71. KentBeck流の説明が時々
    「ぬ!?」「 」もありますがそれ
    も楽しみましょう!

    View Slide

  72. (5)

    View Slide

  73. (5)3部のパターンに注目!!

    View Slide

  74. (5)
    3部はTDDのためのパターン集
    です!名前を眺めてみよう!

    View Slide

  75. 第 III 部 テスト駆動開発のパターン
    テスト駆動開発のパターン
    ● テスト(名詞)
    ● 独立したテスト
    ● TODOリスト
    ● テストファースト
    ● アサートファースト
    ● テストデータ
    ● 明示的なデータ
    レッドバーのパターン
    ● 一歩を示すテスト
    ● はじめのテスト
    ● 説明的なテスト
    ● 学習用テスト
    ● 脱線はTODOリストへ
    ● 回帰テスト
    ● 休憩
    ● やり直す
    ● 安い机に良い椅子

    View Slide

  76. 第 III 部 テスト駆動開発のパターン
    テスティングのパターン
    ● 小さいテスト
    ● Mock Object
    ● Self Shunt
    ● Long String
    ● Crash Test Dummy
    ● 失敗させたままのテスト
    ● きれいなチェックイン
    グリーンバーのパターン
    ● 仮実装を経て本実装へ
    ● 三角測量
    ● 明白な実装
    ● 一から多

    View Slide

  77. 第 III 部 テスト駆動開発のパターン
    xUnitのパターン
    ● アサート
    ● フィクスチャー
    ● 外部フィクスチャー
    ● テストメソッド
    ● 例外のテスト
    ● まとめテスト
    デザインパターン
    ● Command
    ● Value Object
    ● Null Object
    ● Template Method
    ● Pluggable Object
    ● Pluggable Selector
    ● Factory Method
    ● Imposter
    ● Composite
    ● Collecting Parameter
    ● Singletone

    View Slide

  78. 第 III 部 テスト駆動開発のパターン
    リファクタリング
    ● 差異をなくす
    ● 変更の差分
    ● データ構造の変更
    ● メソッドの抽出
    ● メソッドのインライン化
    ● インタフェースの抽出
    ● メソッドの移動
    ● メソッドオブジェクト
    ● パラメータの追加
    ● メソッド から コンス トラクタ への パラメータ の
    移動

    View Slide

  79. パターンなので、「全部やれ!」ではなく、
    (5)

    View Slide

  80. (5)
    【自分】が感じている課題感に沿って、
    合いそうなパターンを【取捨選択】し、
    課題を解消するか試すが肝

    View Slide

  81. 1.有機的秩序の原理
    2.参加の原理
    3.漸進的成長の原理
    4.パタンの原理
    5.診断の原理
    6.調整の原理
    (オレゴン大学の実験)

    View Slide

  82. 自分で考えて選
    択!!

    View Slide

  83. 不安に立ち向かう

    View Slide

  84. (5)
    ちょっとづつプログラミン
    グの好循環ループを育て
    ていく

    View Slide

  85. 課題は自分の今の感情に気付
    くところから
    (5)

    View Slide

  86. 憂鬱な悪循環ループ

    View Slide

  87. (5)
    「わからないことがたくさん。どこ
    から手をつけたら良いのやら
    ><」

    View Slide

  88. (5)
    「問題が大き過ぎて解けないよ
    ><」

    View Slide

  89. (5)
    「つまり期待結果は
    なに?」

    View Slide

  90. 「何回も打鍵&クリック操
    作で、指がつかれたよ」
    (5)

    View Slide

  91. (5)
    「このコードさっぱり理解
    できない><」

    View Slide

  92. (5)
    「目視確認で目がショボ
    ショボ><」

    View Slide

  93. 「確認作業は
    単調で退屈だなぁ」
    (5)

    View Slide

  94. (5)
    「ログが流れて確認が辛
    い!」

    View Slide

  95. (5)
    「毎回確認めんどくさい
    な。後にするか」

    View Slide

  96. (5)
    「結果わかるまで時間かかる
    なぁ。めんどくさいなぁ。
    後にするか」

    View Slide

  97. (5)
    「やゔぇぇ。動かない!?
    いつ壊れたんだろう ??>

    View Slide

  98. 「現実装の仕様がわかんない
    よ!何が期待通りなの><
    トホホ」
    (5)

    View Slide

  99. (5)
    「修正したけど動くの
    かなぁ><」

    View Slide

  100. (5)
    「ごめん壊しちゃっ
    た!!」

    View Slide

  101. (5)
    「なにこれ!コピペの嵐。
    ><」

    View Slide

  102. (5)
    「似たIf文が増殖!?。
    これは。。」

    View Slide

  103. (5)
    「ありゃりゃうまくいかな
    い。袋小路だ」

    View Slide

  104. (コードを見て or 作業して、感じて)
    うぎゃー
    (5)

    View Slide

  105. うぎゃー
    (5)

    View Slide

  106. 憂鬱な悪循環ループ

    View Slide

  107. 憂鬱な悪循環ループのデベロッパー体験
    をどうやって抜け出す?
    (5)

    View Slide

  108. ヒントが3部に!
    (5)

    View Slide

  109. 実装がうまく行かなかっ
    たらどうする?
    (5)

    View Slide

  110. (5)
    休憩
    疲れたり手詰まりになったりしたときはどうすればいいだろうか
    ―― 休憩 を 取ろ う。
    KentBeck. テスト駆動開発 (Kindle の位置No.3473-3474). Kindle 版.

    View Slide

  111. (5)
    やり直す
    手詰まりで途方に暮れてしまったときはどうするべきか
    ―― コードを捨てて、やり直そう。
    KentBeck. テスト駆動開発 (Kindle の位置No.3502-3503). Kindle 版.

    View Slide

  112. (5)
    僕達には
    休んだり・来た道を戻る
    選択肢がある!

    View Slide

  113. ● リファクタリングを強化してみる
    ○ 差異をなくす
    ○ メソッドの抽出
    ● 更にTDDのRedGreenRefactorのリズムに近づ

    ○ テストファースト
    ○ アサートファースト
    ● うまく行かなかったら
    ○ パターン適用を一旦中断し、適切なタイミ
    ングで再度チャレンジする
    悪循環ループから抜け出し
    好循環ループを育てていこう
    ● 例えば少し制約を緩めて次から始める
    ○ TODOリスト
    ○ テスト(名詞)
    ○ 小さいテスト
    ○ 明白な実装
    ● 実装につまずいたら
    ○ ”仮実装を経て本実装へ ”で歩幅を小さく
    するを試す

    View Slide

  114. まだ多すぎるというのなら、この2つから
    仮実装を経て本実装へ
    テスト(名詞)

    View Slide

  115. 仮実装を経て本実装へ
    実装で躓いた場合はこれ!!
    まだ多すぎるというなら 1つから

    View Slide

  116. ベイビーステップ(漸近的成長)
    でつくる真髄がこのパターンの
    中に!
    仮実装を得て本実装へ(Fake It)

    View Slide

  117. TDD自体をはじめてみる
    に不安を感じたら?
    (5)

    View Slide

  118. (5)
    ベイビーステップTDD
    ---TDDを始めるのが難しいと思ったら?
    安心して失敗できる写経からはじめてみよう。テストファーストは後にして、小さなリファ
    クタリングのみを試してみよう。不安で立ち止まってしまうよりもずっと良い。
    うまく行けば更に課題感にそって優先順の高そうな解決案を1つ試そう。うまく行かな
    かったら、休憩するか、やり直そう。プログラミング体験のカイゼンTRYのステップ幅を
    小さくして、ゆっくりで再度トライしよう。
    (eiji.ienaga)

    View Slide

  119. パターンなので、参照するだけでなく、
    繰り返し発生している課題と解について自
    分で書いて整理するのも良い!
    (5)

    View Slide

  120. プログラミング中の
    悪循環から好循環へ
    トランスフォームの
    ヒントは3部の中に
    (5)

    View Slide

  121. (6)

    View Slide

  122. (6)電子書籍に注目!

    View Slide

  123. 電子書籍なら気軽にジャンプできていサマリーが読めてオススメ

    View Slide

  124. リアル本もいよ!

    View Slide

  125. サインがもらえる!

    View Slide

  126. 用途に合わせて
    複数冊、
    買いましょう!

    View Slide

  127. (7)

    View Slide

  128. (7)付録Cに注目!

    View Slide

  129. 歴史、これから等が記載されて
    良いことたくさんありますが
    今日は1つだけピックアップ

    View Slide

  130. ”テスト駆動開発におけるテストは、確認を繰り返すことによっ
    て、 既知の領域の輪郭線を際立たせ、そこから未知の領域に踏
    み込んでいくための相棒なのです。未知の領域を進むための明
    かりが足りないと思ったとき、テスト駆動開発を思い出してみてく
    ださい。
    KentBeck. テスト駆動開発 (Kindle の位置No.5301-5303). Kindle 版. 付録C

    View Slide

  131. 確認を繰り返すことによって

    View Slide

  132. 既知の領域の輪郭線を際立た
    せ、

    View Slide

  133. 未知の領域に踏み込ん
    でいくための相棒

    View Slide

  134. それが!

    View Slide

  135. View Slide

  136. try and error するほ
    ど強くなる!!

    View Slide

  137. テスト駆動開発 は、 プログラミング中の不安をコントロールする
    手法だ。ここでは「 不安」を悪い意味で使っているのではない
    (我々は 赤ちゃんでは ないからね)。「 これは困難な問題なの
    で、最初からすべてを見通せるわけではない」という真っ当な感
    覚のことだ。
    KentBeck . テスト駆動開発 (Kindle の位置No.59-62). Kindle 版.

    View Slide

  138. 2018年も未知の領域に対して、
    期待と不安の入り混じった感情を
    もちながらも
    プログラミングを
    楽しんでいきましょう

    View Slide

  139. 2018も
    Happy Programming!!

    View Slide