SlideShare a Scribd company logo
1 of 13
Download to read offline
TDDを一年やってみました
~シロート集団がTDDをやってはまったこと~


       NECビッグローブ
      梶田 朋己 (@kajip)
自己紹介

• NECビッグローブ サービス開発本部 サービスラボG 所属

• 2年前まで WebLogic Server のサポートしてました
• プログラム経験、ちょうど1年ぐらい

• 趣味は、車、写真、水上バイク etc.
• 愛車は、アルファロメオ GTV(1998年式)

• 最近好きな言葉:人を燃やさなあかん!


             Copyright(C) NEC BIGLOBE, Ltd. 2011
プロローグ


開発は、TDD(テスト駆動開発)でやる
よ!


 はぁ?TDDって何!?

                 すべてはここからはじまりました。
      Copyright(C) NEC BIGLOBE, Ltd. 2011
テスト駆動開発って何?

• プロダクトコードを書き出す前に、これから作るプロダクトコー
  ドを評価するためのテストを作成する
• テストコードが通るように、プロダクトコードを作っていく
• 必要な機能を一度に全て実装するのではなく、簡単なところ
  から1Stepづつ作っていく
               椋本 彦之



詳しくは、「テスト駆動開発入門」(ケントベック著)を読んだり、
 各地で開催されているTDD勉強会に参加すると良いです。
むしろ、そっちで聞いた方が良いです。

          Copyright(C) NEC BIGLOBE, Ltd. 2011
現状

• 開発は、ZendFramework を使ってます。
• PHPUnit & eclipse plugin の MakeGood を使ってます。
• テストコードは、プロダクトコードの概ね2倍ぐらいのライン数
  になってます。

• これまで、TDDを進めていく上ではまったことを紹介していき
  ます。




               Copyright(C) NEC BIGLOBE, Ltd. 2011
テストメソッドが増えすぎ

パラメータが一つ違うだけでも、新たにテストメソッドを作成する

症状
  •テスト項目の追加、変更の手間がひどい
  •メソッド名が思いつかない(自分のボキャ貧ぶりにモチベーションが低下)


処方
  DataProvider を利用する
     • メソッド数が激減(20 ⇒ 2)
     • テストコードのメンテナンス性が向上
*DataProvider:テストコードと テストで利用するデータを分離して実装する機能


                Copyright(C) NEC BIGLOBE, Ltd. 2011
テストの実行速度が遅い

DatabaseTestCase を利用する

症状
  • テスト項目が増えると遅くなる
  • Read処理しかしていないのに、DBの初期化が実行される


処方
     DatabaseTestCase を使わない
     ⇒ ダミーのテストケースを作り、その中で DBを初期化
     ⇒ 更新系のテストを実行するときは、都度DBを初期化
     • テストの実行速度の改善


               Copyright(C) NEC BIGLOBE, Ltd. 2011
Twitterさんの機嫌に振り回される

外部サービスを呼び出すメソッドをそのまま呼び出している

症状
 • テストがTwitterと運命共同体に。。。



処方
     Mock を使う。
     • 外部通信が発生しないので、Twitterの機嫌に影響されなくなる

     ⇒ 利用するFWによっては、Mockの埋め込み方が課題になること
     も。。。

                 Copyright(C) NEC BIGLOBE, Ltd. 2011
テスト書くのがめんどくせぇ

FW固有機能(CVMのコントローラ系統など)で通常の方法でテス
トコードが書けない

症状
 • テストコード作成が後回し
 • そのまま、テストコードを作り忘れることも…。

処方
     テストケースのテンプレート作成
     FWが用意したテストユーティリティを活用
     ⇒ まだまだ、検討の余地がある


              Copyright(C) NEC BIGLOBE, Ltd. 2011
やってみてよかったこと

• プロダクトの品質にそれなりに自身が持てる
  プロダクトの品質にそれなりに自身が
        品質にそれなりに自身

• ちょっとしたバグ、デグレードが早い段階で検出できる
  ちょっとしたバグ、デグレードが早 段階で検出できる

• リファクタリングしようという気にさせる
  リファクタリングしようという気




          Copyright(C) NEC BIGLOBE, Ltd. 2011
これからの課題

• テストをどこまで書けば良いのか。
  テストをどこまで書けば良いのか。
  厳密に作りすぎると壊れやすいテストになって死ぬ。死
                               死ぬよね~。
  WF(ウォータフォール)のUT感覚でTDDのテストを書くと死ぬよね~。


• テストコードの品質をどう担保すれば良いのか。
  テストコードの品質をどう担保すれば良いのか。
         品質をどう担保すれば
  テストコードがバグって死ぬ。
             死

• テストし易いクラス、メソッドの構造を設計しているか。
  テストコードを後回しにするとテストを書くときに死ぬ。
                         死


• テストデータをどう作りこむか。
  作り込み過ぎるとテストが壊れやすくなり死ぬ。                  死
  適当すぎるとリファクタリングの際、信用できなくなり死ぬ。
           Copyright(C) NEC BIGLOBE, Ltd. 2011 死
まとめ

• まずは、ツールの基本的な使い方をマスターしよう
• プロダクトコードのテストを書くのではなく、これから作るプロ
  ダクトコードの設計をテストコードに書く
  ⇒ このことにようやく気づいてきました。




TDDについて知りたければ、
「テスト駆動開発入門」(ケントベック著)を読んだり、各地で開催されている
TDD勉強会に参加すると良いです。
むしろ、そっちで聞いた方が良いです。
           Copyright(C) NEC BIGLOBE, Ltd. 2011
最後に




ご清聴ありがとうございました。




  Copyright(C) NEC BIGLOBE, Ltd. 2011

More Related Content

What's hot

どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasstkyon mm
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hacktkyon mm
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talkkyon mm
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDDTakuto Wada
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話H Iseri
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkankyon mm
 
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Masanori Satoh
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返りAkira Suenami
 
JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?Teppei Sato
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercariVishal Banthia
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daikyon mm
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Seiichi Sugahara
 
テストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常ですテストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常ですryuji koyama
 

What's hot (20)

どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hackt
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkan
 
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返り
 
JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000dai
 
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325
 
テストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常ですテストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常です
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 

Similar to TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~

TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようToshiyuki Hirata
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りkyon mm
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景Koichi ITO
 
TDD for Embedded C -5章-
TDD for Embedded C -5章-TDD for Embedded C -5章-
TDD for Embedded C -5章-Yudai Hashimoto
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2Masashi Shibata
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験についてRakuten Group, Inc.
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)seichi23
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり kyon mm
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会ko ty
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法Toshiyuki Hirata
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」Hiroyuki Ohnaka
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - Makoto SAKAI
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!Yasui Tsutomu
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1Hiro Yoshioka
 

Similar to TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~ (20)

TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作り
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
 
TDD for Embedded C -5章-
TDD for Embedded C -5章-TDD for Embedded C -5章-
TDD for Embedded C -5章-
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 

TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~