[討論] multi-function test 技巧.
顯少看到版上發這類型的討論文,也可能較少人專門做測試這塊。
先提最大疑問:
目前有沒有 tool 可以自動生成測資,
測試程式直接 redirect 至該 file 即可?
每次自己寫的 function 自己測,要完整測試所花時間,
根本和開發時間沒什麼兩樣
Orz..
接下來提的例子算有點特例,有一批作用目的相同,方法不同之 function,
要測其準確性,像是
int f1(int);
int f2(int);
...
int fn(int);
這方式要手動測不難,
typedef int (*pFunc)(int);
pFunc p[] = {f1, f2, ..fn};
int y[MAX]={0};
for(i=0; i<sizeof(p)/sizeof(*p); ++i)
for(j=low; j<=up; j+=step) {
y[j] = p[i](j);
/* log y[j] */
}
比較常見到的是,裡面需要「額外」的幾個引數
( 這也是前提,是 extension,不是 different)
int f1(int a);
int f2(int a, int b); // 多了 b
int f3(int a, int b, int c); // 又多了 c
這時候要測就有不少可議性,
最沒問題的方法是一個一個測,但如果有近 10 個方法,就要寫 10 次測試函式,
於是想出了異想天開的方式, 拿最長的引數為基準,其它的全都擴出去,也就是
int fa(int a, int b, int c); // b, c 沒用
int fb(int a, int b, int c); // c 沒用
int fc(int a, int b, int c); // 都用
再以 function pointer 方式呼叫,不過這樣下來就改到了原 function,不好。
於是嚐試了較危險的作法,以上述 f1, f2, f3 為例。
typedef int (*pfLong)(int, int , int); // 定義最長的引數
pfLong p[] = {(pfLong)f1, (pfLong)f2, f3}; /* 硬轉型 */
int y[MAX]={0};
for(i=0; i<sizeof(p)/sizeof(*p); ++i)
for(j=low; j<=up; j+=step) {
y[j] = p[i](j,j,j); /* 沒用到的塞 garbge */
/* log y[j] */
}
目前這作法試過 vc, gcc, 是沒什麼大問題, 只怕到時會出包,
所以也不敢建議有相同困擾之同好以此法解決。
不知各位版友對於是否也有類似的測試經驗可提出一起討論?
( 小弟也蠻好奇 c++ 那塊有沒有較特殊的作法 )
謝謝各位細心閱讀,最後懇請不吝賜教。
--
No matter how gifted you are,
alone, can not change the world.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
推
12/02 00:19, , 1F
12/02 00:19, 1F
→
12/02 00:23, , 2F
12/02 00:23, 2F
→
12/02 00:23, , 3F
12/02 00:23, 3F
→
12/02 00:30, , 4F
12/02 00:30, 4F
→
12/02 02:20, , 5F
12/02 02:20, 5F
→
12/02 02:20, , 6F
12/02 02:20, 6F
→
12/02 02:21, , 7F
12/02 02:21, 7F
→
12/02 02:21, , 8F
12/02 02:21, 8F
先謝謝提供 keyword, 但 3-As pattern 指的是 ?
指的是先將 n 個 function 引數模式為 m 類,再寫 m 份測試 pattern 嗎?
我該舉個例子,這和大多之 ECP, BVA 舉的 username / password 不同,
假設寫了一份 C(m,n),和另一份 fastC(m,n,eps),
這目的應都屬相同,參數不同,引數、精準度也不同,
(在一些場合裡根本用不到那麼高精準度,只需要速度),
在測試時我想是可被綁在一起測的,以正確性而言,只是裡面要紀錄的是
max_err_x / max_err_y,原文裡全都用 log y[j] 確實不合適。
※ 編輯: tropical72 來自: 180.177.78.41 (12/02 03:01)
→
12/02 03:00, , 9F
12/02 03:00, 9F
→
12/02 03:00, , 10F
12/02 03:00, 10F
→
12/02 03:04, , 11F
12/02 03:04, 11F
→
12/02 08:48, , 12F
12/02 08:48, 12F
推
12/02 17:44, , 13F
12/02 17:44, 13F
→
12/02 18:56, , 14F
12/02 18:56, 14F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):