SlideShare a Scribd company logo
1 of 40
Download to read offline
Import Test First 
2014/11/18 
kyon_mm
Self 
Introduction 
kyon_mm 
Test Architect 
TDD/BDD Expert 
27 years old.
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Test Last 
Automation Test Merit 
社内Wiki参照
Test Last 
社内Wiki参照 
Automation Test Merit
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Test First
納期に間に合わなかっ 
たらどうしよう。。。 
Complicated … 
やったほうがいいのはわか 
るけど 
ベストな方法がわからな 
い 
時間もスキルもない
Important Thing 
私も、bleisさんも最初から上 
手にテストファーストを出来た 
訳でも、奇麗なテストコードを 
書けた訳でもありません。 
プライベートでも業務でも、イ 
ンプットとアウトプットをひた 
すら繰り返して、試行錯誤して 
少しずつ成長しました。
弊社 
私たちの配慮不足によって相 
談しにくさもありましたが、 
「テスト可能な設計」 
「BDD」に関する知見に関し 
て、弊社は日本でも類をみな 
いほどのスキルを持った人に 
相談出来ます。 
もっと、社内全体に私やbleis 
さんのスキルを広めて、より 
よい開発に変化させていきま 
す。 
みんなでよりよくしましょう。 
(お互いに能動的になろう
Step By Step 
常に検討する(やってから悩め) 
出来るところから始める 
やってはいけないことを守る
RDBなどの情報 
をもとにした、 
複雑な条件分 
岐や繰り返し 
HTTPヘッダで 
条件分岐して、 
XMLをパースし 
て、 
内容で条件分 
岐して、 
RDBにアクセス 
して、 
XMLを返す 
For Example 
内容を条件分岐するところだけで 
もテストファーストでやる
RDBなどの情報 
をもとにした、 
複雑な条件分 
岐や繰り返し 
HTTPヘッダで 
条件分岐して、 
XMLをパースし 
て、 
内容で条件分 
岐して、 
RDBにアクセス 
して、 
XMLを返す 
For Example 
大まかな条件をまずはテストコー 
ドのパラメタライズとして表現し 
てみる
Mikado-Method テストファーストできない!そ 
う思ったときは、Mikado-Method 
の出番です。 
テストコードを書く難しさは、 
スキルと同じかそれ以上に、課 
題の定義や分析が不十分である 
ことが上げられます。 
それをサポートする「開発者用 
課題発見および管理手法」です。
Test First 
常に「まずは挑戦する」 
バランス感、スキル、リスク分 
析、戦略、レビュー、見積もり 
など 有識者と協力する。 
Test Firstを選択肢にいれな 
いっていうのは、恥ずかしい事 
です。
First Step 
1. 「テンプレートがあればテス 
トコード書ける」 
2. 「テンプレートなしでテスト 
コードを書く」 
3. 「テンプレートなしでほとん 
どのコードをテストファース 
トする」
Second Step(一人前) 
1. 「奇麗なテストコードを心が 
ける」 
2. 「いろんなテストをテストコー 
ドにする」 
3. 「いろんなテストでテスト 
ファーストする」
Third Step 
1. 真面目にテスト設計を取り入 
れたテストコードにする 
2. テスト周辺のライブラリやツー 
ルなどをカスタマイズ、自作 
する 
3. kyon_mmと殴り合う
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Test Level
コンポーネント 
統合 
システム 
受け入れ 
ユニット 
インテグレーション 
システム 
Test Level 
テストを実行するときに動作 
させる「プロダクトの範囲」 
や「担当する責務の範囲」を 
基準に 
テストを分割する方法 
分割したテストの総称
単体テスト 
結合テスト 
Our Unit Test 
アプリケーションの提供する 
クラスやメソッドといった 
API(内部API)を呼出し、 
想定した事象が起こるかどう 
か(期待した戻り値が返ってく 
るかなど)を確認するテスト
単体テスト 
内部APIを呼び出すことなくシ 
ステムを実際に使用し、 
想定した事象が起こるかどう 
か(正しいレスポンスが返って 
くるかや、DBの状態が正しい 
かなど)を確認するテストを結 
合テストと定義する。 
結合テスト 
Our Integration Test
Difficulty Unit Test 
「自分が作りにくいデータ構造」をどう 
やって切り離すか。 
HTTP, RDB, ファイル, 時刻 
異常系をどうやって起こすか。 
例外発生時の挙動は正しいか 
どんなテストを書けばいいのか? 
書く必要があるのか?書かないとダメ 
なやつは何か?
From My Experience 
「今までUnit Testでテストファー 
スト」していない人に関して(自信 
も含めて)経験論で言えば 
「手間を惜しんでいる」「やり方を 
変えたくない」「怠惰」なだけ。 
それ以外には存在しない。 
常にそうやってがんばることで、品 
質と進捗に貢献出来る。
Data Structure 
「ユニットテスタビリティが高い」と言うため 
の1つの指標が「自分たちがつくっていないデー 
タ構造と切り離してテストできているか」にな 
ります。 
「テストに必要な分だけのデータ」をつくれる 
ようにする。 
抽象クラスやインターフェース経由 
データ構造を「ドメイン」や「テストしたい 
単位」に詰め替える(BDDをすると自然にだい 
たい一緒になる)
Error Path 大抵の例外発生は結合テスト環境で動作させる 
のは難しい。単体テストの段階で例外をわざと 
起こしたテストをするのは大切です。 
例外に対処していること、異常なデータを受け 
取ったときの挙動は保証されているのか? 
スタブやアダプタクラスをつかって、異常系 
を発生させる。 
「そのテストは一部が本物のコードじゃない 
ですよね?」→「テストしていないコードと 
どっちが信頼高いんですか?」「テスト対象 
が違う」
Which Test 意味のあるテストを書く事は大切です。また、 
テストコードは「ラフスケッチのように使う」 
こともあります。 
正しくいろんなAPIを呼び出せている事を確認 
するために書きます。そして、テスト対象の 
振る舞いがテストファーストによって様々な 
コードによって網羅されれば、最初のテスト 
コードは不要になります。削除します。 
「リリースに必要なコード」と「そのときに必 
要なコード」は一致しません。だからといって、 
「そのときに必要なコード」を実装しないこと 
は品質と進捗に悪影響を及ぼします。つまり、 
手抜きです。
Which Test 
まず、いわゆる最初に目指すべき自動テストと 
しては次の2つのためにテストケースを選択し 
てください。 
「どのようなソフトウェアを実装しようとし 
ているかを表現する」(定義するため) 
「ソフトウェアが仕様に沿っているかを表現 
する」(開発と詳細な仕様化のため)
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Judgement
単体テスト 
結合テスト 
テストファースト 
テストラスト 
機能性 
構成 
保守性 
Judgement 
とは言っても、どのような自 
動テストを導入するのか、し 
ないのか? 
しないときに、どうすればい 
いのか?
単体テストのテスト 
ファースト 
Not Import Unit Test 
テストファーストしなくても、 
ほとんどバグが出ないし、デ 
バッグしやすいコードを書け 
る 
結合テストの自動化 
例) FizzBuzzなら単体テスト 
からではなく、結合テストか 
らやる。
単体テストのテスト 
ファースト 
複数の人がその同じテストを 
頻繁に(1日に10回以上)繰り 
返すことが出来る 
自動化する事がそもそも難し 
すぎる(ツールやAPIが用意さ 
れていない、副作用が大きす 
ぎる 
結合テストの自動化 
Not Import 
Integration Test
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Conclusion
テストファーストを 
しないのは毒を飲み 
続けること。 
忘れがちだけど大切 
な習慣 
Conclusion 
テスト自動化はつらい。だけ 
ど、やらないと更につらいだ 
けだ。 
勘に頼った成果物は出さない 
というプロ意識。 
普段からやらないと急になん 
て出来ません。
Agenda 
Test First 
Test Level 
Judgement 
Conclusion 
Reference
Reference
Reference(Wiki) 
「テストはあとで書く」について 
テストを書くメリット 
テストを考えた設計 
テストレベル入門

More Related Content

What's hot

TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkankyon mm
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
テストスキルを測ってみよう
テストスキルを測ってみようテストスキルを測ってみよう
テストスキルを測ってみようAkira Ikeda
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
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
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略Masaki Nakagawa
 
テストを分類してみよう!
テストを分類してみよう!テストを分類してみよう!
テストを分類してみよう!Kenji Okumura
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話H Iseri
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてtecopark
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプラインkyon mm
 
ソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verKosuke Fujisawa
 
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
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-崇 山﨑
 

What's hot (19)

TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkan
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
テストスキルを測ってみよう
テストスキルを測ってみようテストスキルを測ってみよう
テストスキルを測ってみよう
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 
テストを分類してみよう!
テストを分類してみよう!テストを分類してみよう!
テストを分類してみよう!
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化について
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
 
ソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年verソフトウェアテストことはじめ2016年ver
ソフトウェアテストことはじめ2016年ver
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
 

Similar to テストファースト、自動テストを導入するという事について(@社内勉強会)

失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdfRakuten Commerce Tech (Rakuten Group, Inc.)
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオンkyon mm
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかったMakoto Iguchi
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考えるyasuohosotani
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナーTomoyuki Sato
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みHideki Sugimoto
 
ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2Tomoyuki Sato
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りkyon mm
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カットRakuten Group, Inc.
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4favril1
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous TestingAtsuhiro Kubo
 
タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発HIDEKAZU MATSUURA
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 智治 長沢
 

Similar to テストファースト、自動テストを導入するという事について(@社内勉強会) (20)

失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
Nds#24 単体テスト
Nds#24 単体テストNds#24 単体テスト
Nds#24 単体テスト
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
 
ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作り
 
ITS fidel
ITS fidelITS fidel
ITS fidel
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous Testing
 
タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 

More from kyon mm

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016kyon mm
 
ICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJkyon mm
 
焦らず急いでの意味
焦らず急いでの意味焦らず急いでの意味
焦らず急いでの意味kyon mm
 
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syobobenkyon mm
 
Gradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugGradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugkyon mm
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugkyon mm
 
@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAAkyon mm
 
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAJenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAkyon mm
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugkyon mm
 
契る意味 #pykonjp2014
契る意味 #pykonjp2014契る意味 #pykonjp2014
契る意味 #pykonjp2014kyon mm
 
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAいつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAkyon mm
 
Test Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in TokyoTest Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in Tokyokyon mm
 
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumiソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumikyon mm
 
TDDの自殺 #TDDeX
TDDの自殺 #TDDeXTDDの自殺 #TDDeX
TDDの自殺 #TDDeXkyon mm
 
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpUnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpkyon mm
 
Cafetesting12
Cafetesting12Cafetesting12
Cafetesting12kyon mm
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBasekyon mm
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり kyon mm
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたkyon mm
 
Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-kyon mm
 

More from kyon mm (20)

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016
 
ICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJ
 
焦らず急いでの意味
焦らず急いでの意味焦らず急いでの意味
焦らず急いでの意味
 
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
 
Gradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugGradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggug
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA
 
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAJenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggug
 
契る意味 #pykonjp2014
契る意味 #pykonjp2014契る意味 #pykonjp2014
契る意味 #pykonjp2014
 
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAいつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYA
 
Test Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in TokyoTest Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in Tokyo
 
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumiソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
 
TDDの自殺 #TDDeX
TDDの自殺 #TDDeXTDDの自殺 #TDDeX
TDDの自殺 #TDDeX
 
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpUnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
 
Cafetesting12
Cafetesting12Cafetesting12
Cafetesting12
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
 
Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

テストファースト、自動テストを導入するという事について(@社内勉強会)

  • 1. Import Test First 2014/11/18 kyon_mm
  • 2. Self Introduction kyon_mm Test Architect TDD/BDD Expert 27 years old.
  • 3. Agenda Test First Test Level Judgement Conclusion Reference
  • 4. Test Last Automation Test Merit 社内Wiki参照
  • 5. Test Last 社内Wiki参照 Automation Test Merit
  • 6. Agenda Test First Test Level Judgement Conclusion Reference
  • 8. 納期に間に合わなかっ たらどうしよう。。。 Complicated … やったほうがいいのはわか るけど ベストな方法がわからな い 時間もスキルもない
  • 9. Important Thing 私も、bleisさんも最初から上 手にテストファーストを出来た 訳でも、奇麗なテストコードを 書けた訳でもありません。 プライベートでも業務でも、イ ンプットとアウトプットをひた すら繰り返して、試行錯誤して 少しずつ成長しました。
  • 10. 弊社 私たちの配慮不足によって相 談しにくさもありましたが、 「テスト可能な設計」 「BDD」に関する知見に関し て、弊社は日本でも類をみな いほどのスキルを持った人に 相談出来ます。 もっと、社内全体に私やbleis さんのスキルを広めて、より よい開発に変化させていきま す。 みんなでよりよくしましょう。 (お互いに能動的になろう
  • 11. Step By Step 常に検討する(やってから悩め) 出来るところから始める やってはいけないことを守る
  • 12. RDBなどの情報 をもとにした、 複雑な条件分 岐や繰り返し HTTPヘッダで 条件分岐して、 XMLをパースし て、 内容で条件分 岐して、 RDBにアクセス して、 XMLを返す For Example 内容を条件分岐するところだけで もテストファーストでやる
  • 13. RDBなどの情報 をもとにした、 複雑な条件分 岐や繰り返し HTTPヘッダで 条件分岐して、 XMLをパースし て、 内容で条件分 岐して、 RDBにアクセス して、 XMLを返す For Example 大まかな条件をまずはテストコー ドのパラメタライズとして表現し てみる
  • 14. Mikado-Method テストファーストできない!そ う思ったときは、Mikado-Method の出番です。 テストコードを書く難しさは、 スキルと同じかそれ以上に、課 題の定義や分析が不十分である ことが上げられます。 それをサポートする「開発者用 課題発見および管理手法」です。
  • 15. Test First 常に「まずは挑戦する」 バランス感、スキル、リスク分 析、戦略、レビュー、見積もり など 有識者と協力する。 Test Firstを選択肢にいれな いっていうのは、恥ずかしい事 です。
  • 16. First Step 1. 「テンプレートがあればテス トコード書ける」 2. 「テンプレートなしでテスト コードを書く」 3. 「テンプレートなしでほとん どのコードをテストファース トする」
  • 17. Second Step(一人前) 1. 「奇麗なテストコードを心が ける」 2. 「いろんなテストをテストコー ドにする」 3. 「いろんなテストでテスト ファーストする」
  • 18. Third Step 1. 真面目にテスト設計を取り入 れたテストコードにする 2. テスト周辺のライブラリやツー ルなどをカスタマイズ、自作 する 3. kyon_mmと殴り合う
  • 19. Agenda Test First Test Level Judgement Conclusion Reference
  • 21. コンポーネント 統合 システム 受け入れ ユニット インテグレーション システム Test Level テストを実行するときに動作 させる「プロダクトの範囲」 や「担当する責務の範囲」を 基準に テストを分割する方法 分割したテストの総称
  • 22. 単体テスト 結合テスト Our Unit Test アプリケーションの提供する クラスやメソッドといった API(内部API)を呼出し、 想定した事象が起こるかどう か(期待した戻り値が返ってく るかなど)を確認するテスト
  • 23. 単体テスト 内部APIを呼び出すことなくシ ステムを実際に使用し、 想定した事象が起こるかどう か(正しいレスポンスが返って くるかや、DBの状態が正しい かなど)を確認するテストを結 合テストと定義する。 結合テスト Our Integration Test
  • 24. Difficulty Unit Test 「自分が作りにくいデータ構造」をどう やって切り離すか。 HTTP, RDB, ファイル, 時刻 異常系をどうやって起こすか。 例外発生時の挙動は正しいか どんなテストを書けばいいのか? 書く必要があるのか?書かないとダメ なやつは何か?
  • 25. From My Experience 「今までUnit Testでテストファー スト」していない人に関して(自信 も含めて)経験論で言えば 「手間を惜しんでいる」「やり方を 変えたくない」「怠惰」なだけ。 それ以外には存在しない。 常にそうやってがんばることで、品 質と進捗に貢献出来る。
  • 26. Data Structure 「ユニットテスタビリティが高い」と言うため の1つの指標が「自分たちがつくっていないデー タ構造と切り離してテストできているか」にな ります。 「テストに必要な分だけのデータ」をつくれる ようにする。 抽象クラスやインターフェース経由 データ構造を「ドメイン」や「テストしたい 単位」に詰め替える(BDDをすると自然にだい たい一緒になる)
  • 27. Error Path 大抵の例外発生は結合テスト環境で動作させる のは難しい。単体テストの段階で例外をわざと 起こしたテストをするのは大切です。 例外に対処していること、異常なデータを受け 取ったときの挙動は保証されているのか? スタブやアダプタクラスをつかって、異常系 を発生させる。 「そのテストは一部が本物のコードじゃない ですよね?」→「テストしていないコードと どっちが信頼高いんですか?」「テスト対象 が違う」
  • 28. Which Test 意味のあるテストを書く事は大切です。また、 テストコードは「ラフスケッチのように使う」 こともあります。 正しくいろんなAPIを呼び出せている事を確認 するために書きます。そして、テスト対象の 振る舞いがテストファーストによって様々な コードによって網羅されれば、最初のテスト コードは不要になります。削除します。 「リリースに必要なコード」と「そのときに必 要なコード」は一致しません。だからといって、 「そのときに必要なコード」を実装しないこと は品質と進捗に悪影響を及ぼします。つまり、 手抜きです。
  • 29. Which Test まず、いわゆる最初に目指すべき自動テストと しては次の2つのためにテストケースを選択し てください。 「どのようなソフトウェアを実装しようとし ているかを表現する」(定義するため) 「ソフトウェアが仕様に沿っているかを表現 する」(開発と詳細な仕様化のため)
  • 30. Agenda Test First Test Level Judgement Conclusion Reference
  • 32. 単体テスト 結合テスト テストファースト テストラスト 機能性 構成 保守性 Judgement とは言っても、どのような自 動テストを導入するのか、し ないのか? しないときに、どうすればい いのか?
  • 33. 単体テストのテスト ファースト Not Import Unit Test テストファーストしなくても、 ほとんどバグが出ないし、デ バッグしやすいコードを書け る 結合テストの自動化 例) FizzBuzzなら単体テスト からではなく、結合テストか らやる。
  • 34. 単体テストのテスト ファースト 複数の人がその同じテストを 頻繁に(1日に10回以上)繰り 返すことが出来る 自動化する事がそもそも難し すぎる(ツールやAPIが用意さ れていない、副作用が大きす ぎる 結合テストの自動化 Not Import Integration Test
  • 35. Agenda Test First Test Level Judgement Conclusion Reference
  • 37. テストファーストを しないのは毒を飲み 続けること。 忘れがちだけど大切 な習慣 Conclusion テスト自動化はつらい。だけ ど、やらないと更につらいだ けだ。 勘に頼った成果物は出さない というプロ意識。 普段からやらないと急になん て出来ません。
  • 38. Agenda Test First Test Level Judgement Conclusion Reference