SlideShare ist ein Scribd-Unternehmen logo
1 von 70
Downloaden Sie, um offline zu lesen
単体テストのすすめ
 A recommendation of
      unit testing

   KOMATSU Seiji (comutt)
        atWare, Inc.
     September 14, 2012
   skomatsu [at] atware.co.jp
     facebook.com/comutt
           @comutt
About

名前: 小松 聖司
職業: システムエンジニア
職歴: 株式会社アットウェアにて、
    Web アプリ開発に携わること4年目
言語: 日本語, 英語, Java, Python, etc
Note

ソースコードは、(ハンズオン完成版ですが)
以下で公開しています。
https://github.com/comutt/unittest-study
まったくもって Timetable 通りには進みませ
んでした。(タイムアップ)
Purpose


 単体テストを
おすすめ・布教する
Timetable
19:00 - 19:30
  単体テストについて説明
19:30 - 20:00
  単体テストを実際に書いてみよう
20:00 - 20:15
  自動テスト(CI)について説明
20:15 - 20:30
  自動テスト(CI)の実演
20:30 - 20:40
  まとめ
20:40 - 21:00
  質疑応答、撤収
Target
対象
Lv.0 単体テストを知らない方
Lv.1 単体テストの書き方を知らない方
Lv.2 単体テストの書き方は知ってるけど、
     書くメリットがわからない方
非対象
Lv.3 単体テストを書くメリットは
     理解してるけど、面倒な方
Lv.4 ばりばり単体テストを書いてる方
What is Unit Test?
Unit Test?

ユニット(モジュール、クラス、メソッド)
単位でテストするからユニットテストと
いいます
(日本語訳: 単体テスト)
アプリケーションを横断的・全体的に
テストする結合テストに比べて、
非常に小さい、軽量なテストです
Principle
  モジュールの数だけ、
 テストコードを書きます
               Pair
Module1               Test for Module1
               Pair
Module2               Test for Module2
               Pair
Module3               Test for Module3

Application           Test for Application
Principle
 パターンの数だけ、
テストコードを書きます

                   Test for Input1
            Pair
Function           Test for Input2

                   Test for Input3

                   Test for Function
Example 1
コード

 int sum(int n, int m) {
     return n + m;
 }



テストパターン

  1 + 1 = 2    // 正常系1
  -1 + -1 = -2 // 正常系2
Example 2
コード
 // n を m で割った値を返す
 int divide(int n, int m) {
     // 0除算防止
     if (m == 0)
         return 2147483647;

       return n / m;
 }

テストパターン
     9/ 2 = 4             // 正常系1
     -5 / 3 = -1          // 正常系2
     1 / 0 = 2147483647   // 異常系
Point

テストコードは正常系だけではなく、異常系も
書きます
アプリが「予期せずエラーを吐いて終了」
そんな経験ありませんか?
 テストコードを書けば、
 その可能性をぐんと減らせます
Point

テストコードは、適切な粒度で書きます
実は何気に難しいスキルです
パターンを網羅することを意識しすぎると、
冗長すぎるテストコードが完成します
テストコードがないことに比べれば
1000倍良いですが、
保守性を低下させるなどの弊害が生じます
Principle


テストコードは、
 実装ではなく
仕様に基づいて書く
Reason



実装に基づいてテストコードを書いてしまう
と、仕様との相違を検出できません
Merit


ソースコードレベルで仕様が明確になります
仕様書と辻褄の合わないソースコード、
経験ありませんか?
Merit


機能追加やリファクタリングが容易になります
機能追加・リファクタリングしたら、
動作が変わってしまう(デグレ)かもしれな
い、という不安・リスクから解放されます
Optional Merit


引き継ぎのコストが下がります
テストコードで仕様が分かること
ソースコードを修正するリスクが低いこと
が主な理由です
Principle


テストコードは
こまめに書く
Reason

間違っても、「アプリケーション組み上げたら
まとめて書く」なんて考えてはいけません
テストによって見つけられるはずの
早期不具合発見ができなくなります
実装を忘れてしまうリスクがあります
往々にして、
一気にテストコードを書くのは「苦痛」です
More


できる限り、関数・メソッド単位で
テストコードを追加していきましょう
つきつめると、
TDD (Test Driven Development)、
ないしはそれに近い形になります
Cycle
 実装(修正)する
→テストコード書く
→テストを実行する
→実装(修正)する

 Write          Write
 Impl           Test


         Run
         Test
Principle


 テストコードは、
常にアップデートする
Reason

「仕様に基づいて書く」のだから、
仕様がアップデートされるたびに、
テストコードがアップデートされなければ
なりません
そうしないと、テストコードが腐ります
自動テスト(CI)を活用します(後述)
1 Minute Break
How to write
 Unit Test?
Unit Testing Library
単体テストのライブラリが存在するので、
言語・開発環境に合わせて選択します。
(標準で用意されている言語・開発環境もあります)

一例
 C: CUnit, CCUnit
 C++: CppUnit
 .NET Framework: Visual Studio 標準, NUnit
 Java: JUnit, TestNG
 iOS: Xcode 標準
 Android: Android SDK 標準 (JUnit)
 PHP: PHPUnit
 JavaScript: Jasmine, QUnit
How to Write?


言語、ライブラリ次第なので、
それに併せて覚える必要があります。
言語習得するのと同じように、
テスト記法を習得する必要がある、
と考えればよいと思います。
Try with JavaScript

本日は JavaScript で
単体テストを書いてみます
JavaScript を選んだ理由
 とりあえずブラウザがあれば動くためです
 「単体テストってどういうもの?」
 を理解するためには、言語は関係ないです
Jasmine

JavaScript の単体テストに使うライブラリは
「Jasmine」です
 以前に函館で Android ICS の講演をして
 くださったわかめさん (@vvakame) に
 おすすめされたので使ってみることにしました
 「Jasmineのここが優れているよ!」
 という趣旨ではありません
Jasmine
Jasmine を導入するためには、
 公式サイトから Standalone Release 版を取得
 ruby gems で gem install jasmine
 github リポジトリから clone
 のいずれかの方法でライブラリを取得します

 今回使用するのは、
 Standalone Release 版です
Jasmine
Jasmine 公式サイト
 http://pivotal.github.com/jasmine/
Jasmine
jasmine-1.2.0/
├── SpecRunner.html            テスト実行用HTML
├── lib/
│   └── jasmine-1.2.0/         Jasmine ライブラリ
│        ├── MIT.LICENSE
│        ├── jasmine-html.js
│        ├── jasmine.css
│        └── jasmine.js
├── spec/
│   ├── PlayerSpec.js
                               テストコード配置先
│   └── SpecHelper.js
└── src/                       ソースコード配置先
    ├── Player.js
    └── Song.js
Run Jasmine
お好きなブラウザで、
SpecRunner.html を開いてください。




上記のような画面が出力されればOKです。
Jasmine Spec

Jasmine のテストコードを記述したソース
ファイルは、決まりではありませんが、
<テスト対象js名> + Spec.js
とすることにします。
Jasmine に限らず、ほかの言語でも、
このような規則で、テストコードファイルの名
前を付けるのが一般的です。
Jasmine Spec
 Jasmine のテストコードは、
 おおざっぱに言って以下のように記述します。
describe( テスト説明1 , function() {
  // テスト対象クラスのインスタンス
  var target;
 beforeEach(function() {
   // インスタンス生成
   target = new TestTarget();
 });

  // テスト実行
  describe(“テスト説明1.1”, function() {
    it(“テスト説明1.1.1”, function() {
      expect(target.doSome()).toEqual(“期待値”);
    });
  });
});
Jasmine Spec

describe( テスト説明 , function(){...});
 第一引数は、「これが何のテストか」
 という説明文字列です。
 describeがネストされると、テスト結果も
 ネストされて表示されます。
 クラス名やメソッド名など、
 適切な説明文字列を指定します。
Jasmine Spec


it( テスト説明 , function(){...});
 第一引数は、describeと同じです
 こっちは、「どのパターンのテストか」
 という説明文字列にするのがおすすめです。
Jasmine Spec

expect(target.doSome()).toEqual( 期待値 );
 実際にテストを実行する文です。
 上記の場合は、doSome() が 期待値 を正
 しく返すかどうか、のテストです。
 toEqual以外にも、trueかどうかを検査する
 toBeTruthyなどがあります。
Try Jasmine


実際に、Jasmine を使ってテストコード
の作成をしてみましょう。
もちろん、ソースコードの実装も
してもらいます。
Try Jasmine
SpecRunner.html と同じところに、
GreetingSpecRunner.html があります。
これをブラウザで開くと、
テストが失敗します。
これを成功するように、実装およびテストコー
ドの作成を行ってください。
なお、 Greeting.html が、テスト対象のソー
スコードを使ったサンプルアプリです。
Try Jasmine
src/Greeting.js がソースコード、
spec/GreetingSpec.js がテストコードです。
src/Greeting.js は、肝心要の部分が全て未実
装です。
src/Greeting.js は、テストケースが1つ書か
れています。
このテストケースが成功したら、
テストケースを最低2つ追加してください。
Specification
仕様 ver.1 は以下の通りです。
午前の時間は「おはよう」を表示する
午後の時間は「こんにちは」を表示する
夕方の時間は「こんばんは」を表示する
未定義の時間の場合は、「エラー」を表示する
getGreeting の第1引数には、以下が渡される
  午前: morning
  午後: afternoon
  夕方: evening
  第1引数に未定義の時間が渡されたときは、
  undefined を返却する
仕様 ver.1 では、第2引数 name を無視する
Know How


テストは Greeter クラスの
getGreeting に対して行います。
Java Script では、
引数を省略することができます。
(省略時、undefined が渡される)
Test Patterns

仕様 ver.1 で必要なテストパターン(例)
 ( morning ) -> おはよう
 ( afternoon ) -> こんにちは
 ( evening ) -> こんばんは
 ( 不正な文字列 ) -> undefined
Run in Browser


    テストが全て通ったら、
 ブラウザでも確認してみてください。

当たり前ですが、問題なく動くと思います。
Specification


仕様 ver.2 は以下の通りです。
名前が指定されたときは、「∼さん、∼」を表示する。
getGreeting の第2引数 name には、名前が渡される。
名前が指定されない場合は、ver.1 と同じ挙動をする。
Run in Browser



   テストが全て通ったら、
ブラウザでも確認してみてください。
Test Patterns

仕様 ver.2 で必要な追加テストパターン(例)
 ( morning , 中村 ) -> 中村さん、おはよう
 ( afternoon , 山中 ) -> 山中さん、こんにちは
 ( evening , 黒田 ) -> 黒田さん、こんばんは
 ( 不正な文字列 , 田中 ) -> undefined
How do you feel?

いかがでしたでしょうか?
「仕様に合わせてテストを書き、テストが通るよ
うに実装する」という一連の流れが、なんとなく
お分かりいただけたでしょうか。
テストを書くというのは、この作業の繰り返すこ
とです。
5 Minute Break
Continuous
Integration
Continuous Integration
        (CI)
 繰り返しになりますが、
 テストコードを書くのは一回きりではありません。
 実装を続ける限り、
 テストコードの作成と実行を続けなければ
 意味がありません。
 そのために、
 継続的な統合(Continuous Integration; CI)
 と呼ばれる試みが必要になります。
 この会では、継続的な統合を「自動テスト」
 として呼ぶことにします。
What is CI?

日本語訳の「継続的な統合」は、
いまいち意味が掴めない方が多いのではないで
しょうか。
簡単にいうと、ソフトウェアの品質を維持する
ために、継続的に、高頻度で品質管理(QC)を行う
仕組みです。
といってもまだ分かりづらいので、
さらに単純に言うと、定期的にテストコードを
実行する仕組みです。
CI System
CIサーバは、リポジトリからソースコード全体
を取得し、常にテストを実行する役割です。


                           CI
      Repository
                         Server




Dev     Dev        Dev
PC      PC         PC
CI Notifaction
CIサーバは、ビルド、テスト実行後、
その結果を通知することができます。


                                    CI
      Repository
                   2. Checkout    Server
                                 3. Build &
      1. Commit                  Run Tests

Dev                               4. Notify
PC         ex) Mail, RSS, etc
Merit
ビルドやテストが自動ですべてなされるため、
テストを全て実行するコストが
基本的にかかりません。(初期設定のみ)
定期的にビルドされるため、
万が一ビルドが壊れてもすぐに
開発者(チーム)が知ることができます。
また、どのコミットで、どの部分が壊れたか、
が簡単に分かります。
Merit
プロジェクトが大きくなれば大きくなるほ
ど、テストコードも増えます。
それらを、人の目だけでメンテナンスするこ
とは不可能です。
全テストの実行は、機械的に実行するのが
一番効率的です。
なので、全テスト実行は、
素直にコンピュータにお任せしましょう。
Jenkins
CI用ソフトウェアはいくつかあります。
その中でも、使いやすいと定評のある、
Jenkins がおすすめです
Jenkins

様々なプラットフォームに
対応しており、
専門的な知識がなくても、
簡単に導入できるのが
特徴です。
Jenkins

Jenkins のインストール・設定方法は、
ここでは触れません。
ほとんどのプラットフォームで動作するので、
お試しで動かすだけなら
どこで動かしてもよいです。
プロジェクトで本採用するときは、
きちんとCIサーバ用PCを構築しましょう。
Jasmine on Jenkins

Jasmine のテストケースを、
Jenkins で実行することは可能です。
ここでは、
Rhino + Jasmine + jasmine-reporters
にて動かしてみます。
興味のある方は、 GitHub をご覧ください。
Jasmine on Jenkins



      実演タイム
Conclusion
Conclusion
テストコードを書くのは当たり前、
と考えるようにしてください。
テストコードを書くコストは当然必要です。
が、それも、品質の良いソースコードを書くの
に必要なコストです。
テストコードを書くコストを削減することは、
ソフトウェアの品質を自分から下げている
ことに他なりません。
Conclusion

テストコードを書かずに、
実装後の結合テストでテストを
全て行う、というのはよくありません。
テストコードを書けば、
実装中にバグを早期に発見でき、
リファクタリングも安全に行うことができます。
Conclusion

アプリケーションを修正するコストは、
実装してからの経過時間が増すほど増える傾向に
あります。
その増えるコストを無視して、
「テストコードによって実装コストが増え、全体
のコストが増えてしまう」
と考えるのは短絡的といえます。
Conclusion

テストコードを書くことは、
チーム開発においてより威力を発揮します。
が、チーム内でテストコードを書く人、
書かない人が混在していては意味がありません。
テストコードは、「実装者全員が必ず書かなけれ
ばならない」と、あらかじめコミットすることが
大切です。
Conclusion
(まとめが5枚目になった。。。)
テストコードを書くためのコストは、
学習初期はある程度大きくなりますが、
数をこなすことで、要領が分かってきます。
「テストコードを書かないと不安だ。書かないな
んてあり得ない。」と思えれば、あなたは数段レ
ベルアップしています。そこを目指してくださ
い。

Weitere ähnliche Inhalte

Was ist angesagt?

PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
Appresso Engineering Team
 
デグレを防ぐテストの書き方
デグレを防ぐテストの書き方デグレを防ぐテストの書き方
デグレを防ぐテストの書き方
Wataru Terada
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
Funato Takashi
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
Kentarou Takeda
 
Eclipseデバッガを活用するための31のtips
Eclipseデバッガを活用するための31のtipsEclipseデバッガを活用するための31のtips
Eclipseデバッガを活用するための31のtips
Hiroki Kondo
 

Was ist angesagt? (20)

8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
初めての単体テスト
初めての単体テスト初めての単体テスト
初めての単体テスト
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
 
wankuma #28
wankuma #28wankuma #28
wankuma #28
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
デグレを防ぐテストの書き方
デグレを防ぐテストの書き方デグレを防ぐテストの書き方
デグレを防ぐテストの書き方
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
 
Introduction to boost test
Introduction to boost testIntroduction to boost test
Introduction to boost test
 
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
 
xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19
 
Eclipseデバッガを活用するための31のtips
Eclipseデバッガを活用するための31のtipsEclipseデバッガを活用するための31のtips
Eclipseデバッガを活用するための31のtips
 
Magento Test Automation Framework
Magento Test Automation FrameworkMagento Test Automation Framework
Magento Test Automation Framework
 

Andere mochten auch

Introduction to Zeder - a production rules toolkit for Clojure
Introduction to Zeder - a production rules toolkit for ClojureIntroduction to Zeder - a production rules toolkit for Clojure
Introduction to Zeder - a production rules toolkit for Clojure
Mike Fogus
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情
Soudai Sone
 

Andere mochten auch (6)

Introduction to Zeder - a production rules toolkit for Clojure
Introduction to Zeder - a production rules toolkit for ClojureIntroduction to Zeder - a production rules toolkit for Clojure
Introduction to Zeder - a production rules toolkit for Clojure
 
地方における勉強会事情
地方における勉強会事情地方における勉強会事情
地方における勉強会事情
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
 
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
 
バラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげようバラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげよう
 
社内勉強会を続けるには(2016.10.07 DevLove 関西)
社内勉強会を続けるには(2016.10.07 DevLove 関西)社内勉強会を続けるには(2016.10.07 DevLove 関西)
社内勉強会を続けるには(2016.10.07 DevLove 関西)
 

Ähnlich wie はこだてIKA 第4回勉強会 単体テスト

テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
urasandesu
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
Kinji Akemine
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
 
リファクタリング読書会20120220
リファクタリング読書会20120220リファクタリング読書会20120220
リファクタリング読書会20120220
Suguru Shirai
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
Yohei Sato
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
kyon mm
 

Ähnlich wie はこだてIKA 第4回勉強会 単体テスト (20)

テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
Casper導入資料
Casper導入資料Casper導入資料
Casper導入資料
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
Code complete ch22_developper_test
Code complete ch22_developper_testCode complete ch22_developper_test
Code complete ch22_developper_test
 
テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリング
 
ソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テストソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
 
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
 
リファクタリング読書会20120220
リファクタリング読書会20120220リファクタリング読書会20120220
リファクタリング読書会20120220
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
 
pytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメpytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメ
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
後期講座07
後期講座07後期講座07
後期講座07
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 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の勉強会で発表されたものです。
 

はこだてIKA 第4回勉強会 単体テスト

Hinweis der Redaktion

  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
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n
  172. \n
  173. \n
  174. \n
  175. \n
  176. \n
  177. \n
  178. \n
  179. \n
  180. \n
  181. \n
  182. \n