SlideShare a Scribd company logo
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

PDF
テスト駆動開発へようこそ
KEY
テスト駆動開発の導入ーペアプログラミングの学習効果ー
PDF
Introduction to Continuous Testing
PDF
CodeZineAcademy TDD実践講座PR資料
PDF
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
PDF
テストエンジニアの品格 #automatornight
PDF
Tddのすゝめ
PDF
テストファースト、自動テストを導入するという事について(@社内勉強会)
テスト駆動開発へようこそ
テスト駆動開発の導入ーペアプログラミングの学習効果ー
Introduction to Continuous Testing
CodeZineAcademy TDD実践講座PR資料
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
テストエンジニアの品格 #automatornight
Tddのすゝめ
テストファースト、自動テストを導入するという事について(@社内勉強会)

What's hot (20)

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

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

PDF
C# から java へのプログラム移植で体験したtddの効果は?
PPTX
TDDをやってみた
PPTX
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
PDF
Hey It's Not My TDD!
PDF
Test Yourself - テストを書くと何がどう変わるか
KEY
テストコードのリファクタリング
PDF
TDDを研ぎ究める
PDF
テスト駆動開発入門 - C4K Meetup#2
KEY
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
PPTX
FlexUnit4でテスト駆動開発
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PDF
TDD を自分の道具にしよう
PDF
テスト観点に基づくテスト開発方法論 VSTePの概要
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PDF
テストを分類してみよう!
PPT
wankuma #28
KEY
テストとの上手な付き合い方
PDF
2014/3/30 ミニTDDBC presented by yokhama.devtesting
KEY
TDD #NagoyaTesting
PDF
Emergent Design - ObLove 2009 summer
C# から java へのプログラム移植で体験したtddの効果は?
TDDをやってみた
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
Hey It's Not My TDD!
Test Yourself - テストを書くと何がどう変わるか
テストコードのリファクタリング
TDDを研ぎ究める
テスト駆動開発入門 - C4K Meetup#2
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
FlexUnit4でテスト駆動開発
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
TDD を自分の道具にしよう
テスト観点に基づくテスト開発方法論 VSTePの概要
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テストを分類してみよう!
wankuma #28
テストとの上手な付き合い方
2014/3/30 ミニTDDBC presented by yokhama.devtesting
TDD #NagoyaTesting
Emergent Design - ObLove 2009 summer
Ad

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