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

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

eiji.ienaga
January 25, 2018
990

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

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

eiji.ienaga

January 25, 2018
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

  3. 祝!2017年秋 新訳!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. それが!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. (1)
    ね!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  29. TODOリストを更新

    View full-size slide

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

    View full-size slide

  31. だいたい一緒

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  51. 以上!!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  64. 不安に立ち向かう

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  67. 憂鬱な悪循環ループ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  86. うぎゃー
    (5)

    View full-size slide

  87. 憂鬱な悪循環ループ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  104. リアル本もいよ!

    View full-size slide

  105. サインがもらえる!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  113. それが!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  117. 2018も
    Happy Programming!!

    View full-size slide