まずかったら消す
TDD Bootcamp#1
View Slide
今日やる事今日はやらない事突っ込んだ話まずは始めよう自信を持とうデベロップメントテスト
一限目物理
そもそもなんでテストかくんですか?
某インターネット上のフリー百科事典によると
ソフトウェアテスト(software test)とは、コンピュータのプログラムを実行し、正しく動作するかどうか確認する作業のことである。ソフトウェアテストは、プログラム中の欠陥(バグ)をできる限り多く発見することを目標として行われる。ソフトウェアテストに成功するとは、欠陥を発見することである。ソフトウェアテストでは、欠陥が存在することを示すことはできるが、欠陥が存在しないことは証明できない。(続く)
こんな人がいるとしますたとえ話
要するにダサくなりたくなかったら黙ってテスト書けってことです
でもテストって手間でしょ?
テメーらのコードを手で確認する方が手間だ
チーム内だけだしレビューあれば大丈夫でしょ?
コードを触るのがチーム内だけだと思うな
「今日からよろ」「テストないんすか、はっは」「レビュー履歴を全部みろ?」「そんなぁ」
死の宣告まさに
けど
全部解決できたら?
綺麗でバグの少ない動くソフトウェアを自信をもって開発できる
かっこいいですよね?
自信を持とう
二限目心理学
なんでテスト先にかくんですか?
テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD) とは、プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。多くのアジャイルソフトウェア開発手法、例えばエクストリーム・プログラミングに (続く)
要するにどうせ後でかかねーから黙って先に書けってことです
存在しないコードにどうやってテストかくんですか?
テストをパスするコードだけ書く
APIなんかの仕様をテストに落とす
いきなり大きな処理は書けないので自然と小さくなる
綺麗に書けないといけない
テストは開発するために書く
定石は存在するが正しい解答はない
全部テストしないといけない
開発する上で不安な要素を網羅する
安心できるさじ加減を身につける
デベロップメントテストを意識しましょう
三限目人間学
TDDする気にならなかった人ノ
休憩後半は実技です
四限目保健体育
ここから実技にはいります
CoffeeScriptで解説します今回はJavaScript編javascriptで書いてもOKですjQueryは使ってOKです
答え合わせはありません実際に書いてみましょう自分が安心できるところまでお約束何人かに解説してもらいます
QUnitを使います実行環境https://github.com/yaakaito/js-tdd-bootcamp
肩ならし
QUnitを動かしてみよう
test/first_test.coffeetest “sample test”
test/first_test.coffeetest “sample test”, ()->
test/first_test.coffeetest “sample test”, ()->ok 1 == 1, “Passed!”
test_runner.html<br/><br/>
こんな感じになればOKです
課題1数値を2つ受け取って足し算、引き算、かけ算、割り算、を行う関数をそれぞれ実装してくださいこれくらいならテストファイルにそのまま実装書いてしまっても構いません15分
0で割るケースちゃんとテストしましたか?
JavaScriptっぽいテスト
DOM操作をテストしよう
test/dom_test.coffeetest “dom test”, ()->
test/dom_test.coffeetest “dom test”, ()->fuga();ok $(“#e”).html() == “fuga!”, “Passed!”
test/dom_test.coffeetest “dom test”, ()->fuga();ok $(“#e”).html() == “fuga!”, “Passed!”fuga = ()->$(“#e”).html(“fuga!”)
課題2「いいね!」ボタンを作ってください。「いいね!」の取り消しと、取り消し後に「いいね!」しなおすことが、できるようにしてください。25分
JavaScriptっぽいテスト2
XHRをテストしよう
やり方はいろいろサービスに投げてしまうテスト用のサーバーを立てるモックを使う
モックの使い方
必ずしもライブラリは必要はない
test/mock_test.coffeetest “mock test”, ()->ok user.login() == “ok!”, “Passed!”user =service : null # ·ͩͳ͍login : ()->@service.login() # ·ͩͳ͍
test/mock_test.coffeetest “mock test”, ()->user.service = serviceMockok user.login() == “ok”user =service : null # ·ͩͳ͍login : ()->@service.login() # ·ͩͳ͍serviceMock =login : ()->“ok!”
課題3XHRのラッパーを作ってください。内部的にjQueryを使ったりする設計でもOKです。ネットワークにつながっていなくとも、テストが動くようにしてください。35分
五限目社会
すごく簡単なことだけ説明してきましたが
これくらいの知識でテストは十分書けます
テストを書いて新しいアハ体験を!