0
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), 3...
チェック関数●   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] "...
テストの実行1 ファイルのテストを実行          runTestFile(absFileName)●   absFileName    ●        テスト関数を書いてるファイル
テストの実行1 ファイルのテストを実行 > runTestFile("../test/runit.sample.R") Executing test function test.c2f ... Error in 9/5 * c : non- n...
テストスイート複数のファイルのテストを実行したい場合は    テストスイートを作成するtestsuite <-defineTestSuite(name,                  dirs,                  testF...
テストスイート> testsuite.c2f <- defineTestSuite(name = "c2f",                      dirs = "../test",                      testFi...
テストスイート> printTextProtocol(testResult)RUNIT TEST PROTOCOL -- Sat May 28 08:45:02 2011*************************************...
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 <- ...
テストに組み込む●    条件式がある例を作成     bar <- function(x, y = NULL)     {       if (is.null(y)) {         y <- x       }       if (al...
テストに組み込む●    check 関数のタイミングで組み込むtest.bar <- function() {  checkTrue(is.numeric(inspect(bar(1:100), track)))}
出力結果漏れてるケースがないかが分かる
AGENDA●    自己紹介●    RUnit とは●    テストの実行●    テストケースをチェックする●    まとめ
まとめ●    RUnit でコードの信頼性を高めることが出来る●    Code Inspector でテストの漏れを発見出来る
AGENDA●    自己紹介●    RUnit とは●    テストの実行●    テストケースをチェックする●    まとめ
次回以降の発表者を募集しています!
Upcoming SlideShare
Loading in...5
×

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

3,967

Published on

Published in: Business, Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,967
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
25
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

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

  1. 1. R 言語でユニットテスト @yokkuns: 里 洋平 2011.05.28 Tokyo.R#14
  2. 2. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  3. 3. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  4. 4. 自己紹介● ID: yokkuns● 名前 : 里 洋平● 職業 : データマイニングエンジニア
  5. 5. 自己紹介Tokyo.R の主催をやっています!
  6. 6. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  7. 7. 目的● R のコードの信頼性を高める● バグの出にくいコードを書けるようになる
  8. 8. R の普及● 統計解析やデータマイニングなどの需要● R を使う人が増えてきている
  9. 9. R の普及R 使いの人材募集とか
  10. 10. R の普及R 使いの人材募集とか
  11. 11. R の普及R 使いの人材募集とかyohei0511@gmail.com
  12. 12. コードの質良い結果が出ました!
  13. 13. コードの質良い結果が出ました!
  14. 14. コードの質 良い結果が出ました! 実はバグでした・・・ってことになると、非常にまずい
  15. 15. ユニットテスト通常の開発では、ユニットテストが行われている● JUnit● CppUnit● PHPUnit● ...
  16. 16. ユニットテスト通常の開発では、ユニットテストが行われている● JUnit● CppUnit● PHPUnit● ... RUnit は、これらの R 言語版
  17. 17. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  18. 18. RUnit を使う準備install.packages(“RUnit”)library(RUnit)
  19. 19. ファイルの配置● ここでは、以下のように配置 ● R/sample.R ● test/runit.sample.R
  20. 20. RUnit のやること● ある命名規則で定義されたテスト関数を実行● テストが成功したか否かを保存● 最後に結果を出力
  21. 21. 命名規則テスト関数は、 test.×× という関数名 c2f <- function(c) { return(9/5 * c + 32) } test.c2f <- function() { checkEquals(c2f(0), 32) checkEquals(c2f(10), 50) checkException(c2f("xx")) }
  22. 22. チェック関数● checkEquals● checkEqualsNumeric● checkTrue● checkException● checkIdentical● ...
  23. 23. 意図していない挙動の例hoge <- function(x) return( ifelse(x>20, "OK", "NG") )> hoge(100)[1] "OK"> hoge("100")[1] "NG"> hoge("xx")[1] "OK"
  24. 24. テストの実行1 ファイルのテストを実行 runTestFile(absFileName)● absFileName ● テスト関数を書いてるファイル
  25. 25. テストの実行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
  26. 26. テストスイート複数のファイルのテストを実行したい場合は テストスイートを作成するtestsuite <-defineTestSuite(name, dirs, testFileRegexp, ... )runTestSuite(testsuite)printTextProtocol(testData)printHTMLProtocol(testData)
  27. 27. テストスイート> testsuite.c2f <- defineTestSuite(name = "c2f", dirs = "../test", testFileRegexp = "^runit.+.R" )> testResult <- runTestSuite(testsuite.c2f)
  28. 28. テストスイート> printTextProtocol(testResult)RUNIT TEST PROTOCOL -- Sat May 28 08:45:02 2011***********************************************Number of test functions: 1Number of errors: 0Number of failures: 01 Test Suite :c2f - 1 test function, 0 errors, 0 failuresDetails***************************Test Suite: c2fTest function regexp: ^test.+Test file regexp: ^runit.+.RInvolved directory:../test---------------------------Test file: ../test/runit.sample.R
  29. 29. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  30. 30. テストケースは十分か? 自分で書いたテストケースが全ての組み合わせに対して網羅しているか?
  31. 31. tracker の初期化コードをトラッキンングするオブジェクトを生成 track <- tracker() track$init() ● ※ 変数名は、 track で無ければならない
  32. 32. コードの追跡コードのどこを通ったかを追跡するinspect(expr, track = track)resTrack <- track$getTrackInfo()printHTML.trackInfo(object, baseDir =".")
  33. 33. 出力結果● 実行された回数が出力● 1 回も呼ばれてない行は赤色になる
  34. 34. テストに組み込む● テストを呼び出す箇所で、 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")
  35. 35. テストに組み込む● 条件式がある例を作成 bar <- function(x, y = NULL) { if (is.null(y)) { y <- x } if (all(y > 100)) { y <- y - 100 } res <- x^y return(res) }
  36. 36. テストに組み込む● check 関数のタイミングで組み込むtest.bar <- function() { checkTrue(is.numeric(inspect(bar(1:100), track)))}
  37. 37. 出力結果漏れてるケースがないかが分かる
  38. 38. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  39. 39. まとめ● RUnit でコードの信頼性を高めることが出来る● Code Inspector でテストの漏れを発見出来る
  40. 40. AGENDA● 自己紹介● RUnit とは● テストの実行● テストケースをチェックする● まとめ
  41. 41. 次回以降の発表者を募集しています!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×