Upload
koichiro-sumi
View
5.322
Download
3
Embed Size (px)
DESCRIPTION
SideCI主催のVenturesCI.rb #1のLT資料です。 「どうやらテスト駆動型開発は死んだようです。これからのCI」です。 要約すると、TDD死んじゃった。テスト自体は否定しないし有用だと思う。でも、ユーザに触れるEndToEndの振る舞いのテストを主に書き、テストカバレッジ100%を目指す時代は終わった(コストが高過ぎる。自転車の補助輪のようなものだ、テスト駆動型はもう外そう!)。EndToEndテストはCapybaraがよさそうだね。という内容です。
Citation preview
[Confidential] © 2013 Actcat, Inc.
04/10/2023Actcat, Inc.
どうやらテスト駆動型開発は死んだようです。これからの CI
[Confidential] © 2013 Actcat, Inc.
速報 : 一昨日、
TDDが死にました。
2
[Confidential] © 2013 Actcat, Inc.
どうやら皆が愛して憎んでやまない、テスト駆動型開発が死んだらしいのです。
「小さなチーム、大きな仕事」などの著書でも有名な会社の CTOであり Railsの開発者である Davidさんが 2014/4/23に下記のような投稿をしました。「 TDD is dead. Long live testing.」
「 TDD 死んだ」でググると翻訳している人がたくさんいますので参考にどうぞ
3
[Confidential] © 2013 Actcat, Inc.
そもそも TDD とは何だったのか?
テスト駆動型開発 (TDD)。テストを書いてから、コードを書こう。テストを満たすコードを書こう。
そうしたらコードカバレッジも 100%になるし、テスタブルなコードになるし、リーダブルになるし、いいことづくめだよね
サービスの変更にもテストがあるから安心して臨めるよね
4
[Confidential] © 2013 Actcat, Inc.
TDD で作ったテストは継続的インテグレーションしよう
Jenkins, TravisCIなどで自動テストをCOMMIT毎や Push毎、 NightyBuildでしよう
テストが通ったらデプロイ出来る、という状態を維持しよう
そして、デプロイを高速化しよう
5
[Confidential] © 2013 Actcat, Inc.
でも、 TDD はお亡くなりになりました
TDDは主にユニットテスト (部分的なコードのテスト )を行ってました
しかしながら、結合した時の問題点については TDDの体制では書きづらかったり
そして、結合テストをコードで書く文化・技術が新しく出てきたので、ユニットテストファーストな時代は終わったという
6
[Confidential] © 2013 Actcat, Inc.
代表的なツール
Capybara
7
https://github.com/jnicklas/capybara
[Confidential] © 2013 Actcat, Inc.
テストシナリオを DSL で書ける
8
[Confidential] © 2013 Actcat, Inc.
Rspec とも同居できる
9
[Confidential] © 2013 Actcat, Inc.
Selenium VS Capybara
Capybaraはコードで書くテストなので、Seleniumとは時代と使用するユーザが代わる
Selenium: ブラウザでテストを作るテスト職人
Capybara: プログラマ
10
[Confidential] © 2013 Actcat, Inc.
テストの作成はプログラマの仕事に
TDDでもテストの作成はプログラマの仕事だった
それが結合テストを作るのがプログラマの仕事に変わる、と思われる
以降、結合テストは全て自動で CIサーバで実行されるようになる、だろう
11
[Confidential] © 2013 Actcat, Inc.
TDD => 結合テスト のメリット
12
プロジェクトスタート リリース
ユーザは公開物しか見ない
結合テストがカバレッジ100%+Successならリリース可能テスト
書く
開発
テスト書く
結合テスト開発
リリース開発の積み重ねによるテストカバレッジ 100%は厳しく、テストの寿命も短い
[Confidential] © 2013 Actcat, Inc.
なぜ単体テストのほうが寿命が短いか?
ロジックはころころ変更になる
結合テストはたしかにテキストレベルまで追うと変更コストが非常に高い、が、ユーザ体験・機能レベルなら変更は多くない
結合テストはユーザ体験だけテストすればよい。単体テストは今後、単体で機能を有するものにだけ書くようにすればいいと思う
13
[Confidential] © 2013 Actcat, Inc.
というわけで、 Capybara へ
Capybara
14
https://github.com/jnicklas/capybara