UnitTest
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
* UnitTest は [#qc60aa62]
ある機能を提供する関数を作成する場合に,
(1) まず,その挙動を Test する関数を用意し
(2) この Test をパスすることを目的として当該の関数を書...
という方法論です.この Test -> Release -> Test -> Release...
一般的にはオブジェクト指向言語においてクラスの振舞いを Te...
----
CRAN に登録されている[[RUnit:http://cran.md.tsukuba.ac.jp...
[[RUnit を使う]] に使用例が記されています.
----
* alternative approach [#d4119192]
その他には,[[プログラムの正しさのチェック]] に diff を用...
[[プログラムの正しさのチェック]] (7) 注釈より
* 膨大な出力ファイルでもかまわない
* プログラムの改訂があれば,必要に応じて answer ファイ...
* プログラムの改訂があったとき,いつでもこのチェックを...
対照しますと,UnitTest では
* 膨大なチェック個数でもかまわない
* 関数を修正しても,(正常に動作している)テスト関数は...
* 関数の修正があったときには,必ずテストを実行する
という違いがあります.
----
* 疑問 [#cffda34c]
- テスト関数は正しいのか
-- 保証できません.
- 因子分析の出力をテストするには,大変な思いをしなくては...
-- その通りです.
----
R において,UnitTest 的な Test Driven な関数作成を行える...
// とはいえ,関数型言語だといまひとつそぐわないようにも感...
----
* UnitTest のコンセプトを説明するためのサンプル [#o86e9ff4]
- 目的: 二つの数の和を返す myfunc(a, b) を作成する
- 確認項目 1: 1+1 = 2 であれば正常な動作である
- 確認項目 2: 必要なだけ確認項目を用意する
- ...
** (1) ''test.myfunc()'' を用意する. [#m95aa5f6]
test.myfunc <- function()
{
if( myfunc( 1, 1 ) == 2 ) {
return( TRUE )
else
return( FALSE )
}
}
** (2) Test を行う [#t91c23b2]
失敗する.
今回の場合は,そもそもテスト関数にエラーがある.
「テスト自体が間違っている」という可能性は常に存在する.
** (3) test.myfunc() を修正し,再度 Test する [#s9454606]
再び,失敗する.
myfunc() が定義されていない.
しかし,test.myfunc() は正常に実行されることが確認された.
** (4) ''myfunc()'' を書く [#ued28735]
myfunc <- function(a, b)
{
return(a - b)
}
** (5) テストを行う [#vbd40929]
三度目の失敗.myfunc() で差をとっているため.
** (6) myfunc() を修正し,Test する [#j586944e]
成功.
** (7) myfunc() の拡張が決まった [#wd66e162]
- 目的(改): 引数がベクトルであってもよいことにする
- 追加する確認項目:ベクトル引数の足し算が正常に行われる...
** (8) test.myfunc() にチェック項目を追加し,テストする [...
あ,うまくいった.R だからね.
----
* コメント [#td4d4b06]
- test.myfunc 中に関数 myfunc の期待される挙動の検査項目...
-そうです.常に Test をクリアするように記述することで信頼...
-このページを書いたときの例は,RUnit の登場以前に書かれた...
test.myfunc <- function()
{
checkEqualsNumeric(myfunc(1, 1), 2) # checkEqualsNume...
}
myfunc <- function(a, b)
{
return(a - b) # 和ではなくて差を取ってしまった
}
実行結果は
> runTestFile("tests.R")
Error in checkEqualsNumeric(myfunc(1, 1), 2) :
Mean absolute difference: 2
Timing stopped at: 0 0 0 0 0
Number of test functions: 1
Number of errors: 0
Number of failures: 1
となり,つまり定められた仕様に反する値を返していることを...
#comment
* リンク [#l9ff90aa]
//- [[UnitTest:http://c2.com/cgi/wiki?UnitTest]]
- [[SchemeUnit:http://schematics.sourceforge.net/schemeun...
終了行:
* UnitTest は [#qc60aa62]
ある機能を提供する関数を作成する場合に,
(1) まず,その挙動を Test する関数を用意し
(2) この Test をパスすることを目的として当該の関数を書...
という方法論です.この Test -> Release -> Test -> Release...
一般的にはオブジェクト指向言語においてクラスの振舞いを Te...
----
CRAN に登録されている[[RUnit:http://cran.md.tsukuba.ac.jp...
[[RUnit を使う]] に使用例が記されています.
----
* alternative approach [#d4119192]
その他には,[[プログラムの正しさのチェック]] に diff を用...
[[プログラムの正しさのチェック]] (7) 注釈より
* 膨大な出力ファイルでもかまわない
* プログラムの改訂があれば,必要に応じて answer ファイ...
* プログラムの改訂があったとき,いつでもこのチェックを...
対照しますと,UnitTest では
* 膨大なチェック個数でもかまわない
* 関数を修正しても,(正常に動作している)テスト関数は...
* 関数の修正があったときには,必ずテストを実行する
という違いがあります.
----
* 疑問 [#cffda34c]
- テスト関数は正しいのか
-- 保証できません.
- 因子分析の出力をテストするには,大変な思いをしなくては...
-- その通りです.
----
R において,UnitTest 的な Test Driven な関数作成を行える...
// とはいえ,関数型言語だといまひとつそぐわないようにも感...
----
* UnitTest のコンセプトを説明するためのサンプル [#o86e9ff4]
- 目的: 二つの数の和を返す myfunc(a, b) を作成する
- 確認項目 1: 1+1 = 2 であれば正常な動作である
- 確認項目 2: 必要なだけ確認項目を用意する
- ...
** (1) ''test.myfunc()'' を用意する. [#m95aa5f6]
test.myfunc <- function()
{
if( myfunc( 1, 1 ) == 2 ) {
return( TRUE )
else
return( FALSE )
}
}
** (2) Test を行う [#t91c23b2]
失敗する.
今回の場合は,そもそもテスト関数にエラーがある.
「テスト自体が間違っている」という可能性は常に存在する.
** (3) test.myfunc() を修正し,再度 Test する [#s9454606]
再び,失敗する.
myfunc() が定義されていない.
しかし,test.myfunc() は正常に実行されることが確認された.
** (4) ''myfunc()'' を書く [#ued28735]
myfunc <- function(a, b)
{
return(a - b)
}
** (5) テストを行う [#vbd40929]
三度目の失敗.myfunc() で差をとっているため.
** (6) myfunc() を修正し,Test する [#j586944e]
成功.
** (7) myfunc() の拡張が決まった [#wd66e162]
- 目的(改): 引数がベクトルであってもよいことにする
- 追加する確認項目:ベクトル引数の足し算が正常に行われる...
** (8) test.myfunc() にチェック項目を追加し,テストする [...
あ,うまくいった.R だからね.
----
* コメント [#td4d4b06]
- test.myfunc 中に関数 myfunc の期待される挙動の検査項目...
-そうです.常に Test をクリアするように記述することで信頼...
-このページを書いたときの例は,RUnit の登場以前に書かれた...
test.myfunc <- function()
{
checkEqualsNumeric(myfunc(1, 1), 2) # checkEqualsNume...
}
myfunc <- function(a, b)
{
return(a - b) # 和ではなくて差を取ってしまった
}
実行結果は
> runTestFile("tests.R")
Error in checkEqualsNumeric(myfunc(1, 1), 2) :
Mean absolute difference: 2
Timing stopped at: 0 0 0 0 0
Number of test functions: 1
Number of errors: 0
Number of failures: 1
となり,つまり定められた仕様に反する値を返していることを...
#comment
* リンク [#l9ff90aa]
//- [[UnitTest:http://c2.com/cgi/wiki?UnitTest]]
- [[SchemeUnit:http://schematics.sourceforge.net/schemeun...
ページ名: