Jak používat kombinace klade za testovacích dat

hlasů
18

Chtěl bych vyzkoušet funkci s tice ze sady případů okrajové a normálními hodnotami. Například, při testování funkce, která se vrací true, když dané tři délky, které tvoří platný trojúhelník, bych mají specifické případy, negativní / malé / velké množství, hodnoty detailní k bytí přetekl, atd .; Co je víc, hlavním cílem je vytvářet kombinace těchto hodnot, s nebo bez opakování, s cílem získat sadu testovacích dat.

(inf,0,-1), (5,10,1000), (10,5,5), (0,-1,5), (1000,inf,inf),
...

Jako poznámku: Já vlastně znát odpověď na to, ale to by mohlo být užitečné pro ostatní, a výzvou pro lidi tady! --will zveřejnit svou odpověď později.

Položena 02/08/2008 v 22:34
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
14

Rozhodně, zejména zabývající se spoustou těchto obměn / kombinací Určitě mohu vidět, že první průchod by být problém.

Zajímavé realizace v pythonu, když jsem napsal hezký jeden v C a ocaml založený na „Algoritmus 515“ (viz níže). Napsal svůj ve Fortranu, jak to bylo běžné v té době pro všechny „Algorithm XX“ papíry, no, montáž nebo c. Musel jsem znovu zapsat a provést některé drobné vylepšení pro práci s poli ne rozsahy čísel. Tento člověk dělá náhodný přístup, jsem stále pracujeme na získání nějaké pěkné implementace těch uvedených v Knuth 4. objemu chomáči 2. budu vysvětlení toho, jak to funguje pro čtenáře. Ale pokud je někdo zvědavý, tak bych nic proti psaní něco vymyslet.

/** [combination c n p x]
 * get the [x]th lexicographically ordered set of [p] elements in [n]
 * output is in [c], and should be sizeof(int)*[p] */
void combination(int* c,int n,int p, int x){
    int i,r,k = 0;
    for(i=0;i<p-1;i++){
        c[i] = (i != 0) ? c[i-1] : 0;
        do {
            c[i]++;
            r = choose(n-c[i],p-(i+1));
            k = k + r;
        } while(k < x);
        k = k - r;
    }
    c[p-1] = c[p-2] + x - k;
}

~ „Algoritmus 515: Generování vektoru z lexikografické Index“; Přezky, BP, a Lybanon, M. ACM Transactions on Mathematical Software, Vol. 3, No. 2, červen 1977.

Odpovězeno 03/08/2008 v 20:06
zdroj uživatelem

hlasů
4

Se zbrusu nový Python 2.6, máte standardní řešení s modulem itertools která vrátí kartézský součin iterables:

import itertools

print list(itertools.product([1,2,3], [4,5,6]))
   [(1, 4), (1, 5), (1, 6),
   (2, 4), (2, 5), (2, 6),
   (3, 4), (3, 5), (3, 6)]

Můžete zadat „opakovat“ argument provedení výrobku s iterable a sám:

print list(itertools.product([1,2], repeat=3))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2),
(2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

Můžete také vyladit něco s kombinacemi stejně:

print list(itertools.combinations('123', 2))
[('1', '2'), ('1', '3'), ('2', '3')]

A pokud pořadí otázek, existují permutace:

print list(itertools.permutations([1,2,3,4], 2))
[(1, 2), (1, 3), (1, 4),
   (2, 1), (2, 3), (2, 4),
   (3, 1), (3, 2), (3, 4),
   (4, 1), (4, 2), (4, 3)]

Samozřejmě vše, co Vychytávky nejsou přesně to samé, ale můžete je použít v tak či onak, aby vám vyřešit problém.

Jen nezapomeňte, že můžete převést tuple nebo seznam do souboru a naopak pomocí seznamu (), n-tice () a set ().

Odpovězeno 04/10/2008 v 09:52
zdroj uživatelem

hlasů
4

Zajímavá otázka!

Já bych to tak, že vybírání kombinace, něco jako následující v pythonu. Nejtěžší je asi první ověření pass, tedy if f(1,2,3) returns true, je to, že správnému výsledku? Poté, co jste ověřili, že pak je to dobrý základ pro regresní testování.

Pravděpodobně je to dobrý nápad, aby se sady testovacích případů, které víte, že bude všechno pravda (např 3,4,5 tohoto trojúhelníku případě), a sadu testovacích případů, které víte, že je vše nepravdivé (např 0,1 , inf). Pak můžete snadněji ověřit testy jsou správné.

# xpermutations z http://code.activestate.com/recipes/190465
od xpermutations import *

délky = [- 1,0,1,5,10,0,1000, 'inf']
pro c v xselections (délky, 3): # nebo xuniqueselections
    print c
(-1, -1, -1);
(1, -1,0);
(1, -1,1);
(1, -1,5);
(-1, -1,10);
(1, -1,0);
(-1, -1,1000);
(-1, -1, inf);
(-1,0, -1);
(-1,0,0);
...
Odpovězeno 03/08/2008 v 01:04
zdroj uživatelem

hlasů
2

Myslím si, že to může udělat s Row test atribut (k dispozici v MbUnit a novějších verzích NUnit), kde byste mohli specifikovat několik sad k naplnění jedné jednotky test.

Odpovězeno 16/08/2008 v 14:31
zdroj uživatelem

hlasů
0

I když je možné vytvořit velké množství údajů o zkoušce, a uvidíme, co se stane, je to efektivnější, aby se pokusili minimalizovat rozsah dat, která používají.

Od typického QA pohledu byste se měli identifikovat různé klasifikace vstupů. Vytvoření souboru vstupních hodnot pro každý druh a určit odpovídající výstupy.

Zde je ukázka z tříd vstupních hodnot

  • Platné trojúhelníky s malými čísly, jako je (1 miliarda, 2 miliardy, 2000000000)
  • Platné trojúhelníky s velkými čísly, jako je (0.000001, 0,00002, 0,00003)
  • Platné tupé trojúhelníky, které jsou ‚almost'flat jako je (10, 10, 19,9999)
  • Platné akutní trojúhelníky, které jsou ‚téměř‘ plochý, jako je (10, 10, 0000001)
  • neplatné trojúhelníky s alespoň jednou zápornou hodnotou
  • neplatné trojúhelníky, přičemž součet dvou stran se rovná třetině
  • neplatné trojúhelníky, přičemž součet obou stranách je větší než třetí
  • vstupní hodnoty, které jsou jiné než číselný

...

Jakmile jste spokojeni se seznamem vstupních klasifikace pro tuto funkci, pak si můžete vytvořit skutečné testovací data. Pravděpodobné, že by bylo užitečné, aby testovat všechny permutace každé položky. (Např (2,3,4), (2,4,3), (3,2,4), (3,4,2), (4,2,3), (4,3,2)) obvykle zjistíte, existuje několik klasifikace jste vynechal (jako koncept inf jako vstupní parametr).

Náhodná data na určitou dobu může být užitečná také, že lze najít podivné chyby v kódu, ale obecně není produktivní.

Větší pravděpodobnost, tato funkce se používá v některých specifických kontextu, ve kterém jsou použity další pravidla. (Např pouze hodnoty nebo celočíselné hodnoty musí být v krocích 0,01, atd.), Tyto do seznamu klasifikací vstupních parametrů.

Odpovězeno 17/09/2008 v 04:15
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more