SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
R 言語でユニットテスト


  @yokkuns: 里 洋平
 2011.05.28 Tokyo.R#14
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
自己紹介
●   ID: yokkuns
●
    名前 : 里 洋平
●
    職業 : データマイニングエンジニア
自己紹介
Tokyo.R の主催をやっています!
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
目的
●
    R のコードの信頼性を高める
●
    バグの出にくいコードを書けるようになる
R の普及
●
    統計解析やデータマイニングなどの需要
●
    R を使う人が増えてきている
R の普及
R 使いの人材募集とか
R の普及
R 使いの人材募集とか
R の普及
R 使いの人材募集とか




yohei0511@gmail.com
コードの質

良い結果が出ました!
コードの質

良い結果が出ました!
コードの質

  良い結果が出ました!




  実はバグでした・・・
ってことになると、非常にまずい
ユニットテスト
通常の開発では、ユニットテストが行われている


●   JUnit
●   CppUnit
●   PHPUnit
●   ...
ユニットテスト
通常の開発では、ユニットテストが行われている


●   JUnit
●   CppUnit
●   PHPUnit
●   ...

          RUnit は、これらの R 言語版
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
RUnit を使う準備



install.packages(“RUnit”)
library(RUnit)
ファイルの配置
●
    ここでは、以下のように配置
    ●   R/sample.R
    ●   test/runit.sample.R
RUnit のやること
●
    ある命名規則で定義されたテスト関数を実行
●
    テストが成功したか否かを保存
●
    最後に結果を出力
命名規則
テスト関数は、 test.×× という関数名

 c2f <- function(c) {
   return(9/5 * c + 32)
 }

 test.c2f <- function() {
    checkEquals(c2f(0), 32)
    checkEquals(c2f(10), 50)
    checkException(c2f("xx"))
 }
チェック関数
●   checkEquals
●   checkEqualsNumeric
●   checkTrue
●   checkException
●   checkIdentical
●   ...
意図していない挙動の例
hoge <- function(x) return( ifelse(x>20, "OK", "NG") )



> hoge(100)
[1] "OK"

> hoge("100")
[1] "NG"

> hoge("xx")
[1] "OK"
テストの実行
1 ファイルのテストを実行



          runTestFile(absFileName)


●   absFileName
    ●
        テスト関数を書いてるファイル
テストの実行
1 ファイルのテストを実行

 > runTestFile("../test/runit.sample.R")

 Executing test function test.c2f ... Error in 9/5 * c : non-
 numeric argument to binary operator
 done successfully.

 Number of test functions: 1
 Number of errors: 0
 Number of failures: 0
テストスイート
複数のファイルのテストを実行したい場合は
    テストスイートを作成する


Testsuite ← defineTestSuite(name,
                  dirs,
                  testFileRegexp,
                  ...
                  )
runTestSuite(testsuite)
printTextProtocol(testData)
printHTMLProtocol(testData)
テストスイート



> testsuite.c2f <- defineTestSuite(name = "c2f",
                      dirs = "../test",
                      testFileRegexp = "^runit.+.R"
                      )
> testResult <- runTestSuite(testsuite.c2f)
テストスイート
> printTextProtocol(testResult)
RUNIT TEST PROTOCOL -- Sat May 28 08:45:02 2011
***********************************************
Number of test functions: 1
Number of errors: 0
Number of failures: 0


1 Test Suite :
c2f - 1 test function, 0 errors, 0 failures

Details
***************************
Test Suite: c2f
Test function regexp: ^test.+
Test file regexp: ^runit.+.R
Involved directory:
../test
---------------------------
Test file: ../test/runit.sample.R
test.c2f: (3 checks) ... OK (0 seconds)
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
テストケースは十分か?




   自分で書いたテストケースが
全ての組み合わせに対して網羅しているか?
tracker の初期化
コードをトラッキンングするオブジェクトを生成



         track <- tracker()
         track$init()

 ●
     ※ 変数名は、 track で無ければならない
コードの追跡
コードのどこを通ったかを追跡する


inspect(expr, track = track)
resTrack <- track$getTrackInfo()
printHTML.trackInfo(object, baseDir =
".")
出力結果
●
    実行された回数が出力
●
    1 回も呼ばれてない行は赤色になる
テストに組み込む
●
    テストを呼び出す箇所で、 tracker を初期化
●
    テスト完了後、結果を出力する

      track <- tracker()
      track$init()
      testsuite.c2f <- defineTestSuite(name = "c2f",
                            dirs = "../test",
                            testFileRegexp = "^runit.+.R"
                            )
      testResult <- runTestSuite(testsuite.c2f)
      printTextProtocol(testResult)

      printHTML.trackInfo(track$getTrackInfo(), "../test")
テストに組み込む
●
    条件式がある例を作成

     bar <- function(x, y = NULL)
     {
       if (is.null(y)) {
         y <- x
       }
       if (all(y > 100)) {
         y <- y - 100
       }
       res <- x^y
       return(res)
     }
テストに組み込む
●
    check 関数のタイミングで組み込む



test.bar <- function() {
  checkTrue(is.numeric(inspect(bar(1:100), track)))
}
出力結果
漏れてるケースがないかが分かる
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
まとめ
●
    RUnit でコードの信頼性を高めることが出来る
●
    Code Inspector でテストの漏れを発見出来る
AGENDA
●
    自己紹介
●
    RUnit とは
●
    テストの実行
●
    テストケースをチェックする
●
    まとめ
次回以降の
発表者を募集しています!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
NLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZANLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZA
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 

Semelhante a Tokyor14 - R言語でユニットテスト

Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Takuya Tsuchida
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
 
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
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
Hidekazu Nakamura
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
Hidekazu Nakamura
 

Semelhante a Tokyor14 - R言語でユニットテスト (20)

CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
ソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テストソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
エクストリームエンジニア4
エクストリームエンジニア4エクストリームエンジニア4
エクストリームエンジニア4
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
Junit4
Junit4Junit4
Junit4
 

Mais de Yohei Sato

Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Yohei Sato
 
Tokyor42 ggplot2
Tokyor42 ggplot2Tokyor42 ggplot2
Tokyor42 ggplot2
Yohei Sato
 
Tokyor39 yokkuns
Tokyor39 yokkunsTokyor39 yokkuns
Tokyor39 yokkuns
Yohei Sato
 
EasyHtmlReportの紹介
EasyHtmlReportの紹介EasyHtmlReportの紹介
EasyHtmlReportの紹介
Yohei Sato
 
20131206 japan r
20131206 japan r20131206 japan r
20131206 japan r
Yohei Sato
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生
Yohei Sato
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例
Yohei Sato
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
Yohei Sato
 
Rでレポートメール
RでレポートメールRでレポートメール
Rでレポートメール
Yohei Sato
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
Rでピボットテーブル
Yohei Sato
 
第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション
Yohei Sato
 
Tokyor26 data fusion
Tokyor26 data fusionTokyor26 data fusion
Tokyor26 data fusion
Yohei Sato
 
Tokyor24 yokkuns
Tokyor24 yokkunsTokyor24 yokkuns
Tokyor24 yokkuns
Yohei Sato
 
Tokyowebmining19 data fusion
Tokyowebmining19 data fusionTokyowebmining19 data fusion
Tokyowebmining19 data fusion
Yohei Sato
 
傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling
Yohei Sato
 
Complex network ws_percolation
Complex network ws_percolationComplex network ws_percolation
Complex network ws_percolation
Yohei Sato
 

Mais de Yohei Sato (20)

Tokyor60 r data_science_part1
Tokyor60 r data_science_part1Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
 
Tokyor60 opening
Tokyor60 openingTokyor60 opening
Tokyor60 opening
 
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
 
Tokyor42_r_datamining_18
Tokyor42_r_datamining_18Tokyor42_r_datamining_18
Tokyor42_r_datamining_18
 
Tokyor42 ggplot2
Tokyor42 ggplot2Tokyor42 ggplot2
Tokyor42 ggplot2
 
Tokyor39 yokkuns
Tokyor39 yokkunsTokyor39 yokkuns
Tokyor39 yokkuns
 
EasyHtmlReportの紹介
EasyHtmlReportの紹介EasyHtmlReportの紹介
EasyHtmlReportの紹介
 
20131206 japan r
20131206 japan r20131206 japan r
20131206 japan r
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
 
Rでレポートメール
RでレポートメールRでレポートメール
Rでレポートメール
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
Rでピボットテーブル
 
第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション
 
Tokyor26 data fusion
Tokyor26 data fusionTokyor26 data fusion
Tokyor26 data fusion
 
Tokyor24 yokkuns
Tokyor24 yokkunsTokyor24 yokkuns
Tokyor24 yokkuns
 
Tokyowebmining19 data fusion
Tokyowebmining19 data fusionTokyowebmining19 data fusion
Tokyowebmining19 data fusion
 
傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling
 
Complex network ws_percolation
Complex network ws_percolationComplex network ws_percolation
Complex network ws_percolation
 

Último

Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
Yasuyoshi Minehisa
 

Último (6)

Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 
20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf
 
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 

Tokyor14 - R言語でユニットテスト