SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler 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) 
「テストはあとで書く」について 
テストを書くメリット 
テストを考えた設計 
テストレベル入門

Mais conteúdo relacionado

Mais procurados

テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化について
tecopark
 

Mais procurados (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 初心者向けチュートリアル -初心者からの脱出!-
 

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

#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
kyon mm
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
Hideki Sugimoto
 
ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2ありえるえりあ勉強会@五反田~テスト編~ Part2
ありえるえりあ勉強会@五反田~テスト編~ Part2
Tomoyuki Sato
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
favril1
 

Semelhante a テストファースト、自動テストを導入するという事について(@社内勉強会) (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】
 

Mais de kyon mm

ICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJ
kyon mm
 
@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA
kyon mm
 
Cafetesting12
Cafetesting12Cafetesting12
Cafetesting12
kyon mm
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
kyon mm
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
kyon mm
 
Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-Veracity -次世代DVCSとは俺の事だ-
Veracity -次世代DVCSとは俺の事だ-
kyon mm
 

Mais de 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とは俺の事だ-
 

Último

Último (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

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

  • 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