[英]guidelines for testing a statistical function in R?
問題:我正在測試正在開發的程序包中的功能,並想知道您是否可以就如何執行此操作提出一些一般性准則。 這些功能包括各種統計建模,轉換,子集和繪圖。 是否有“標准”或足夠的測試?
范例:測試提示我問這個問題,
函數dtheta:
dtheta <- function(x) {
## find the quantile of the mean
q.mean <- mean(mean(x) >= x)
## find the quantiles of ucl and lcl (q.mean +/- 0.15)
q.ucl <- q.mean + 0.15
q.lcl <- q.mean - 0.15
qs <- c(q.lcl, q.mean, q.ucl)
## find the lcl, mean, and ucl of the vector
c(quantile(x,qs), var(x), sqrt(var(x))/mean(x))
}
步驟1:制作測試數據:
set.seed(100) # per Dirk's recommendation
test <- rnorm(100000,10,1)
步驟2:將功能的預期輸出與功能的實際輸出進行比較:
expected <- quantile(test, c(0.35, 0.65, 0.5))
actual <- dtheta(test)[1:3]
signif(expected,2) %in% signif(actual,2)
步驟3:也許再做一次測試
test2 <- runif(100000, 0, 100)
expected <- c(35, 50, 65)
actual <- dtheta(test2)
expected %in% signif(actual,2)
步驟4:如果為真,則考慮功能為“功能性”
這取決於您要測試的內容。 除了Dirks的建議之外, svUnit
提到了svUnit
或RUnit
包VitoshKa,我想添加一些內容:
replicate()
是在此上下文中使用的很好的函數。 關於數據集擴展測試的示例:在這些情況下,您希望看到什么? 這是您期望的結果嗎? 並非根據您所做的測試。
> test3 <- rep(12,100000) # data with only 1 value
> expected <- c(12, 12, 12)
> actual <- dtheta(test3)
Error in quantile.default(x, qs) : 'probs' outside [0,1]
> test4 <- rbinom(100000,30,0.5) # large dataset with a limited amount of values
> expected <- quantile(test4,c(0.35, 0.50, 0.65))
> actual <- dtheta(test4)
> expected %in% signif(actual,2)
[1] FALSE TRUE TRUE
> test5 <- runif(100,0,100) # small dataset.
> expected <- c(35, 50, 65)
> actual <- dtheta(test5)
> expected %in% signif(actual,2)
[1] FALSE FALSE FALSE
編輯:更正的代碼,因此測試更有意義。
你需要寫
輸入合理值的測試可顯示正確答案
當您輸入廢話時,表明您的功能的測試會正確失敗。
測試所有邊界情況
關於測試軟件的不同策略的文獻很多。 Wikipedia的軟件測試頁和任何開始的地方一樣好。
看你的例子:
輸入字符串/數據框/列表時會發生什么?
負x
或虛x
呢?
向量/數組x
怎么樣?
如果只允許正x
,那么x = 0
時會發生什么?
請注意,子功能(僅由您的函數調用,而不會由用戶調用)需要較少的輸入檢查,因為您可以更好地控制該函數的內容。
好問題。
除了設置種子等一般性功能外,我建議您查看R源中的一些測試。 源代碼中的tests/
目錄中有很多。 R Base中的某些軟件包(例如工具)還具有子目錄tests/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.