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

JavaScript TDD Bootcamp

KAZUMA Ukyo
November 26, 2012

JavaScript TDD Bootcamp

まずかったら消す

KAZUMA Ukyo

November 26, 2012
Tweet

More Decks by KAZUMA Ukyo

Other Decks in Programming

Transcript

  1. TDD Bootcamp
    #1

    View Slide

  2. 今日やる事
    今日はやらない事
    突っ込んだ話
    まずは始めよう
    自信を持とう
    デベロップメントテスト

    View Slide

  3. 一限目
    物理

    View Slide

  4. そもそもなんで
    テスト
    かくんですか?

    View Slide

  5. そもそもなんで
    テスト
    かくんですか?

    View Slide

  6. 某インターネット上のフリー百科事典によると

    View Slide

  7. ソフトウェアテスト(software test)と
    は、コンピュータのプログラムを実行し、正
    しく動作するかどうか確認する作業のことで
    ある。ソフトウェアテストは、プログラム中
    の欠陥(バグ)をできる限り多く発見するこ
    とを目標として行われる。ソフトウェアテス
    トに成功するとは、欠陥を発見することであ
    る。ソフトウェアテストでは、欠陥が存在す
    ることを示すことはできるが、欠陥が存在し
    ないことは証明できない。(続く)

    View Slide

  8. こんな人がいるとします
    たとえ話

    View Slide

  9. View Slide

  10. View Slide

  11. 要するにダサくなりたくなかったら
    黙ってテスト書けってことです

    View Slide

  12. でもテストって
    手間
    でしょ?

    View Slide

  13. でもテストって
    手間
    でしょ?

    View Slide

  14. テメーらのコードを手で
    確認する方が手間だ

    View Slide

  15. チーム内だけだし
    レビュー
    あれば大丈夫でしょ?

    View Slide

  16. チーム内だけだし
    レビュー
    あれば大丈夫でしょ?

    View Slide

  17. コードを触るのが
    チーム内だけだと思うな

    View Slide

  18. 「今日からよろ」
    「テストないん
    すか、はっは」
    「レビュー履歴
    を全部みろ?」
    「そんなぁ」

    View Slide








  19. View Slide

  20. けど

    View Slide

  21. 全部解決
    できたら?

    View Slide

  22. 綺麗でバグの少ない
    動くソフトウェアを
    自信をもって開発できる

    View Slide

  23. かっこいい
    ですよね?

    View Slide

  24. 自信を持とう

    View Slide

  25. 二限目
    心理学

    View Slide

  26. なんでテスト
    先に
    かくんですか?

    View Slide

  27. 某インターネット上のフリー百科事典によると

    View Slide

  28. テスト駆動開発 (てすとくどうかいはつ、
    test-driven development; TDD) とは、プロ
    グラム開発手法の一種で、プログラムに必要
    な各機能について、最初にテストを書き(こ
    れをテストファーストと言う)、そのテスト
    が動作する必要最低限な実装をとりあえず
    行った後、コードを洗練させる、という短い
    工程を繰り返すスタイルである。多くのア
    ジャイルソフトウェア開発手法、例えばエク
    ストリーム・プログラミングに (続く)

    View Slide

  29. 要するにどうせ後でかかねーから
    黙って先に書けってことです

    View Slide

  30. 存在しないコードに
    どうやって
    テストかくんですか?

    View Slide

  31. 存在しないコードに
    どうやって
    テストかくんですか?

    View Slide

  32. テストをパスする
    コードだけ書く

    View Slide

  33. APIなんかの仕様を
    テストに落とす

    View Slide

  34. いきなり大きな処理は
    書けないので
    自然と小さくなる

    View Slide

  35. 綺麗に
    書けないといけない

    View Slide

  36. 綺麗に
    書けないといけない

    View Slide

  37. テストは
    開発するために書く

    View Slide

  38. 定石は存在するが
    正しい解答はない

    View Slide

  39. 全部テスト
    しないといけない

    View Slide

  40. 全部テスト
    しないといけない

    View Slide

  41. テストは
    開発するために書く

    View Slide

  42. 開発する上で
    不安な要素を網羅する

    View Slide

  43. 安心できる
    さじ加減を身につける

    View Slide

  44. デベロップメントテスト
    を意識しましょう

    View Slide

  45. 三限目
    人間学

    View Slide

  46. TDDする気に
    ならなかった人

    View Slide

  47. TDDする気に
    ならなかった人

    View Slide

  48. 休憩
    後半は実技です

    View Slide

  49. 四限目
    保健体育

    View Slide

  50. ここから実技にはいります

    View Slide

  51. CoffeeScriptで解説します
    今回はJavaScript編
    javascriptで書いてもOKです
    jQueryは使ってOKです

    View Slide

  52. 答え合わせはありません
    実際に書いてみましょう
    自分が安心できるところまで
    お約束
    何人かに解説してもらいます

    View Slide

  53. QUnitを使います
    実行環境
    https://github.com/
    yaakaito/js-tdd-bootcamp

    View Slide

  54. 肩ならし

    View Slide

  55. QUnitを動かしてみよう

    View Slide

  56. test/first_test.coffee
    test “sample test”

    View Slide

  57. test/first_test.coffee
    test “sample test”, ()->

    View Slide

  58. test/first_test.coffee
    test “sample test”, ()->
    ok 1 == 1, “Passed!”

    View Slide

  59. test_runner.html


    <br/>
    <br/>

    View Slide

  60. こんな感じになればOKです

    View Slide

  61. 課題1
    数値を2つ受け取って
    足し算、引き算、
    かけ算、割り算、
    を行う関数を
    それぞれ実装してください
    これくらいならテストファイルに
    そのまま実装書いてしまっても構いません
    15分

    View Slide

  62. 0で割るケース
    ちゃんとテストしましたか?

    View Slide

  63. JavaScript
    っぽいテスト

    View Slide

  64. DOM操作をテストしよう

    View Slide

  65. test/dom_test.coffee
    test “dom test”, ()->

    View Slide

  66. test/dom_test.coffee
    test “dom test”, ()->
    fuga();
    ok $(“#e”).html() == “fuga!”, “Passed!”

    View Slide

  67. test/dom_test.coffee
    test “dom test”, ()->
    fuga();
    ok $(“#e”).html() == “fuga!”, “Passed!”
    fuga = ()->
    $(“#e”).html(“fuga!”)

    View Slide

  68. test_runner.html


    <br/>
    <br/>

    View Slide

  69. test_runner.html


    <br/>
    <br/>



    View Slide

  70. 課題2
    「いいね!」ボタンを作って
    ください。
    「いいね!」の取り消しと、
    取り消し後に「いいね!」し
    なおすことが、できるように
    してください。
    25分

    View Slide

  71. JavaScript
    っぽいテスト2

    View Slide

  72. XHRをテストしよう

    View Slide

  73. やり方はいろいろ
    サービスに投げてしまう
    テスト用のサーバーを立てる
    モックを使う

    View Slide

  74. やり方はいろいろ
    サービスに投げてしまう
    テスト用のサーバーを立てる
    モックを使う

    View Slide

  75. モックの使い方

    View Slide

  76. 必ずしも
    ライブラリは必要はない

    View Slide

  77. test/mock_test.coffee
    test “mock test”, ()->
    ok user.login() == “ok!”, “Passed!”
    user =
    service : null # ·ͩͳ͍
    login : ()->
    @service.login() # ·ͩͳ͍

    View Slide

  78. test/mock_test.coffee
    test “mock test”, ()->
    user.service = serviceMock
    ok user.login() == “ok”
    user =
    service : null # ·ͩͳ͍
    login : ()->
    @service.login() # ·ͩͳ͍
    serviceMock =
    login : ()->
    “ok!”

    View Slide

  79. 課題3
    XHRのラッパーを作ってください。
    内部的にjQueryを使ったりする設計で
    もOKです。
    ネットワークにつながっていなくと
    も、テストが動くようにしてくださ
    い。
    35分

    View Slide

  80. 五限目
    社会

    View Slide

  81. すごく簡単なことだけ
    説明してきましたが

    View Slide

  82. これくらいの知識で
    テストは十分書けます

    View Slide

  83. テストを書いて
    新しいアハ体験を!

    View Slide

  84. View Slide