SlideShare a Scribd company logo
1 of 51
実践JUnit
xUnitTestPatternsから学ぶユニットテスト


   2012.06.16 OSC 2012 北海道
   Shuji Watanabe (@shuji_w6e)




                                 1
本日の内容
本日の内容

    ユニットテストの目的
本日の内容

    ユニットテストの目的

ユニットテストの実践
本日の内容

    ユニットテストの目的

ユニットテストの実践

    ユニットテストの問題
SHUJI Watanabe
Java デベロッパー

 要件定義からテストまで全領域対応

Blog「やさしいデスマーチ」

札幌Javaコミュニティ

Java, Groovy, JavaFX, MongoDB

TDD, ユースケース駆動開発, テスト
WEB+DB PRESS vol.69
JUnit実践入門

 カスタムMatcher

 パラメータ化テスト

 テストの構造化

 カスタムRule

 Cucumebr-junit
XUnit Test Patterns
 http://xunitpatterns.com/

 Webで読めます(英語)
ユニットテストの目的
テストが
                                      必要なワケ




http://www.flickr.com/photos/essecento/4297955162/
スキル不足
仕様変更


                                     経験不足
複雑な要件

                                                   不安
   http://www.flickr.com/photos/yopse/3772030400/
不完全な人間




   http://www.flickr.com/photos/sharynmorrow/3948100/
ユニットテストとは?
ソフトウェアを構成する最小部品のテスト

主にクラスやメソッドが対象

対象が期待される振る舞いをするかを検証
テストの4象限モデル
                ビジネス面
                                   手動


            機能テスト      受け入れテスト




                                   製品を批評
 チームを支援




          ストーリーテスト    ユーザビリティテスト




                        負荷テスト
          ユニットテスト     パフォーマンステスト



 自動
                    技術面
テストの4象限モデル
                ビジネス面
                                   手動


            機能テスト      受け入れテスト




                                   製品を批評
 チームを支援




          ストーリーテスト    ユーザビリティテスト




                        負荷テスト
          ユニットテスト     パフォーマンステスト



 自動
                    技術面
テストの4象限モデル
                ビジネス面
                                   手動


            機能テスト      受け入れテスト




                                   製品を批評
 チームを支援




          ストーリーテスト    ユーザビリティテスト




                        負荷テスト
          ユニットテスト     パフォーマンステスト



 自動
                    技術面
チームを支援するテスト
自分のコードへの自信

積極的なリファクタリング

安心できるリリース
技術面のテスト
プログラマが行う

プロダクションコードの作成を支援する

ビジネス的価値 < 技術的負債の低減
ユニットテストの特徴
プログラマが行い、

開発チームを支援し、

技術面に属し、

自動化が可能。
セーフティネット




   http://www.flickr.com/photos/32010000@N08/2987901256/
品質とユニットテスト
ユニットテストで直接の品質はあがらない

品質を高めるにはビジネス面のテストが必要

要件を満たしているか?(受け入れテスト)

使いやすいか?(ユーザビリティテスト)

ユニットテストにより技術的負債が減る

変化や追加要求に強くなる
ユニットテストの実践
テストケースとは?
テスト対象(sut: System Under Test)に
特定の操作を行い、
実測値(Actual Value)が
期待値(Expected Value)となることを
検証(Verify)する
テストデータのサンプリング
「完璧なテスト」はできない

少ない入力値で効率良くテストを行う

様々なテスト技法

境界値分析

同値クラス

ペア構成テスト
テストケースの条件
再現性がある

曖昧さがない

自動化されたテスト(Automated Test)
4フェイズ テスト
初期化処理(SetUp)

実行(Exercise)    @Test
                public void test() {
検証(Verify)        // SetUp
                  // Exercise
後処理(TearDown)     // Verify
                  // TearDown
                }
アサーション
 アサーションとは「こうなる」という表明
assertThat(actual, is(expected));

  static importされたメソッド

  自然言語風の記述
  assert that actual is expected
  変数名(actual, expected)
Matcher API
 JUnit4の機能

 一致する条件を定義したオブジェクト
assertThat(actual, is(expected));

  isはIsオブジェクトを返す

  Isはequalsを使った一致を行うMatcher

  他にも多くのMatcherがある
リファクタリング
ユニットテストの主目的はリファクタリング

技術的負債を蓄積させない

安心してプロダクションコードを修正できる

内部実装に依存するテストは避けること
ユニットテストと設計
ユニットテストはサンプルコード

自分が最初のユーザー(Eat your own dog food)

APIが使いやすいかをテストする

テストできないAPIは再設計する
例)計算機クラス
public class Calculator {

    // 割り算を行うメソッド
    public int divide(int x, int y) {
      return x / y;
    }
}
例)テストコード
@Test
public void test() {
  // SetUp
  Calculator sut = new Calculator();
  float expected = 1.5;
  // Exercise
  float actual = sut.divide(6, 4);
  // Verify
  assertThat(actual, is(expected));
}
例)APIの設計ミス
public class Calculator {

    // 割り算を行うメソッド
    public float divide(float x, float y) {
      return x / y;
    }
}
API設計とユニットテスト
テストコードでAPI設計を検証出来る

 期待値が検証出来ないAPI

 使いにくい/解りにくいAPI

テストコードを意識してAPIを設計する

突き詰めるとテスト駆動開発(TDD)

 テストを先に書く(テストファースト)
TDDのサイクル
                            1.設計する
5.リファクタリング



               Heuristics




                               2.テストを書く



 4.テストを成功させる

                        3.コードを書く
ドキュメントとしてのテスト
テストコードは動作するドキュメント

具体的なサンプルコード

具体的な入力値と期待値

テスト成功による保証

JavaDocや仕様書より正確なドキュメント
ユニットテストの問題
不安定なテスト
テスト結果が不定

ランダム性やシステム時間に依存したテスト

環境に依存したテスト

テスト結果が一定でないと信頼できない

オオカミ少年問題

常にすべてのテストが成功することを維持
脆いテスト
少しの変更で多くのテストに影響する

疎結合になっていない

データの影響範囲が大きい

インターフェイス(API)の設計が甘い

いずれもテストのメンテナンスコストを増大
増えるテストコード
重複

DRY原則(Don t Repeat Yourself)

やり過ぎると可読性が落ちる

テストはテストケースで独立すべき

ネストしたクラスの利用(Enclosed)

パラメータ化テスト
Enclosedテストクラス
 テストクラスの構造化

 テストをコンテキスト(文脈)で整理
@RunWiht(Enclosed.class)
public void ArrayListTest {
  public static class 初期状態のとき {
    @Test public void test() {}
  }
  public static class 要素が1つのとき {
    @Test public void test() {}
  }
}
Enclosedテストクラス
 テストクラスの構造化

 テストをコンテキスト(文脈)で整理
@RunWiht(Enclosed.class)
public void ArrayListTest {
  public static class 初期状態のとき {
    @Test public void test() {}
  }
  public static class 要素が1つのとき {
    @Test public void test() {}
  }
}
パラメータ化テスト
 テストデータとテストメソッドを分離

@RunWiht(Theories.class)
public void CalculatorTest {
  @DataPoints public static Param[] PARAMS = {
        new Param(3, 4, 12), new Param(1, 5, 5), ....
  };
  @Theory public void divideのテスト(Param p) {
     //
  }
}
パラメータ化テスト
 テストデータとテストメソッドを分離

@RunWiht(Theories.class)
public void CalculatorTest {
  @DataPoints public static Param[] PARAMS = {
        new Param(3, 4, 12), new Param(1, 5, 5), ....
  };
  @Theory public void divideのテスト(Param p) {
     //
  }
}
詳しくはWEB+DB vol.69で
JUnit実践入門

 カスタムMatcher

 パラメータ化テスト

 テストの構造化

 カスタムRule

 Cucumebr-junit
テストしにくいオブジェクト
システム時間や外部API

モックやスタブの活用

多用は禁物

内部実装に依存しないように注意して使う

mockito, EasyMock
まとめ
ユニットテストを学ぼう
目的は開発の支援

基本となる「型」を習得(4フェイズテスト)

テスト技法を学び効率良くサンプリング

パターンを学ぶ

API設計とテストは密な関係(TDD)

テスティングフレームワークを活用する
ユニットテストを超えて...
継続的インテグレーション(テスト)

テストによる実行網羅率(カバレッジ)

テスト駆動開発

自動化された受け入れテスト

振る舞い駆動開発

探索的テスト
おしまい

More Related Content

What's hot

大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
infinite_loop
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
土岐 孝平
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 

What's hot (20)

Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
GitLabをバックアップしてみた
GitLabをバックアップしてみたGitLabをバックアップしてみた
GitLabをバックアップしてみた
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Kotlinミニアンチパターン
KotlinミニアンチパターンKotlinミニアンチパターン
Kotlinミニアンチパターン
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 

Viewers also liked

iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
Yusuke Hosonuma
 

Viewers also liked (16)

モックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-Cモックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-C
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
Team Foundation Server 2015 Update 2.1 アップグレード 手順書 ~ Team Foundation Server 2...
Team Foundation Server 2015 Update 2.1アップグレード 手順書~ Team Foundation Server 2...Team Foundation Server 2015 Update 2.1アップグレード 手順書~ Team Foundation Server 2...
Team Foundation Server 2015 Update 2.1 アップグレード 手順書 ~ Team Foundation Server 2...
 
Team Foundation Server 2015 Update 1 インストール 手順書
Team Foundation Server 2015 Update 1インストール 手順書Team Foundation Server 2015 Update 1インストール 手順書
Team Foundation Server 2015 Update 1 インストール 手順書
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 
SSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevioSSMでマネージドEC2 #reinvent #cmdevio
SSMでマネージドEC2 #reinvent #cmdevio
 
iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
iOSテスト自動化勉強会 -やはり俺達の回帰テストは間違っている-
 
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
 
テスト駆動開発のはじめ方
テスト駆動開発のはじめ方テスト駆動開発のはじめ方
テスト駆動開発のはじめ方
 
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
 
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
 
Team Foundation Server / Visual Studio Team Services 手順書
Team Foundation Server /Visual Studio Team Services 手順書Team Foundation Server /Visual Studio Team Services 手順書
Team Foundation Server / Visual Studio Team Services 手順書
 
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
 
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio  とTeam Foundation Server /Visual Studio Team Services で実現するビル...Visual Studio  とTeam Foundation Server /Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
 
Nds#24 単体テスト
Nds#24 単体テストNds#24 単体テスト
Nds#24 単体テスト
 
Team Foundation Server 2015 による テスト工数削減
Team Foundation Server 2015 によるテスト工数削減Team Foundation Server 2015 によるテスト工数削減
Team Foundation Server 2015 による テスト工数削減
 

Similar to JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト

アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
favril1
 
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
Satoshi Masuda
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
atsushi_tmx
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
Kinji Akemine
 

Similar to JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト (20)

テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリング
 
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
 
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-アジャイルテスト  -高品質を追求するアジャイルチームにおけるテストの視点-
アジャイルテスト -高品質を追求するアジャイルチームにおけるテストの視点-
 
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development (仮)
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development (仮)【システムテスト自動化カンファレンス2013 LT】 Data Driven Development (仮)
【システムテスト自動化カンファレンス2013 LT】 Data Driven Development (仮)
 
アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。
 
テストを分類してみよう!
テストを分類してみよう!テストを分類してみよう!
テストを分類してみよう!
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
ITS fidel
ITS fidelITS fidel
ITS fidel
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 

More from Shuji Watanabe

Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Shuji Watanabe
 
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevioクラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
Shuji Watanabe
 
ソフトウェア開発の3本柱
ソフトウェア開発の3本柱ソフトウェア開発の3本柱
ソフトウェア開発の3本柱
Shuji Watanabe
 

More from Shuji Watanabe (20)

Serverless - Developers.IO 2019
Serverless - Developers.IO 2019Serverless - Developers.IO 2019
Serverless - Developers.IO 2019
 
Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017Ansible ハンズオン on AWS - DevelopersIO 2017
Ansible ハンズオン on AWS - DevelopersIO 2017
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
 
ELBの概要と勘所
ELBの概要と勘所ELBの概要と勘所
ELBの概要と勘所
 
AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -AWSによるWebサイト構築と運用 - concrete5 編 -
AWSによるWebサイト構築と運用 - concrete5 編 -
 
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003
 
CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01
 
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevios3+cloud frontによる静的コンテンツ配信 - Sphinx編  #cmdevio
s3+cloud frontによる静的コンテンツ配信 - Sphinx編 #cmdevio
 
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevioクラスメソッド会社説明会in札幌 — メンバー紹介   #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
 
テスト駆動開発へようこそ
テスト駆動開発へようこそテスト駆動開発へようこそ
テスト駆動開発へようこそ
 
ユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へユースケースからテスト駆動開発へ
ユースケースからテスト駆動開発へ
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
 
アジャイルテスティング
アジャイルテスティングアジャイルテスティング
アジャイルテスティング
 
テストリストの見つけ方
テストリストの見つけ方テストリストの見つけ方
テストリストの見つけ方
 
TDDをはじめよう
TDDをはじめようTDDをはじめよう
TDDをはじめよう
 
Jenkins導入事例
Jenkins導入事例Jenkins導入事例
Jenkins導入事例
 
ソフトウェア開発の3本柱
ソフトウェア開発の3本柱ソフトウェア開発の3本柱
ソフトウェア開発の3本柱
 

Recently uploaded

Recently uploaded (11)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: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...
 
論文紹介: 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
 
論文紹介: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
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n