Hogyan kell használni kombinációját tűzi vizsgálati adatok

szavazat
18

Szeretném kipróbálni a funkciót egy tuple egy sor béren kívüli ügyek és a normál értéket. Például, míg a tesztelés egy függvény, amely megadja true, ha adott három méretben alkotnak érvényes háromszöget, azt konkrét esetben negatív / kis / nagy számok, értékek közeli van túlcsordult, stb .; mi több, a fő cél az, hogy létrehoz ezek kombinációi értékek, a vagy anélkül ismétlés, annak érdekében, hogy egy sor vizsgálati adatok.

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

Mint egy megjegyzés: Igazából tudom a választ, de akkor is hasznos lehet mások számára, és kihívás az emberek ide! --will elhelyezhet a válasz később.

A kérdést 02/08/2008 22:34
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
4

Érdekes kérdés!

Tennék ezt a szedés kombinációk, olyasmi, mint a következő python. A legnehezebb talán az első menetben ellenőrzés, vagyis if f(1,2,3) returns trueaz, hogy a helyes eredményt? Miután ellenőrizte, hogy akkor ez egy jó alapot regressziós tesztelés.

Valószínűleg ez egy jó ötlet, hogy egy sor teszt esetek, hogy tudja, lesz minden igaz (pl 3,4,5 erre háromszög esetében), és egy sor teszt esetek, hogy tudja, lesz minden hamis (pl 0,1 , inf). Akkor könnyebben ellenőrizheti a tesztek helyes.

# Xpermutations származó http://code.activestate.com/recipes/190465
re xpermutations import *

hosszúságú = [- 1,0,1,5,10,0,1000, 'inf']
a C xselections (hosszúságú, 3): # vagy 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);
...
Válaszolt 03/08/2008 01:04
a forrás felhasználó

szavazat
14

Abszolút, különösen a szó sok ilyen permutációk / kombinációk tudom biztosan látni, hogy az első menetben lenne probléma.

Érdekes végrehajtás python, bár írtam egy szép darab C és ocaml alapuló „algoritmus 515” (lásd alább). Ő írta a Fortran, mivel gyakori volt akkoriban az összes „algoritmus XX” papírok, nos, az összeszerelést vagy c. Meg kellett újra írni, és néhány kisebb javításokat dolgozni tömböket nem tartományok számokat. Ez az egyik nem véletlen hozzáférésű, én még mindig dolgozunk, hogy néhány szép megvalósításai is említett Knuth 4. kötet köteg 2. Megyek magyarázatot, hogyan működik az olvasó. Bár ha valaki kíváncsi, én nem ellenzik írásban valamit.

/** [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: Generation Vektor a lexikográfiai Index"; Csatok, BP, és Lybanon, M. ACM Transactions on Mathematical Software, Vol. 3, No. 2, június 1977.

Válaszolt 03/08/2008 20:06
a forrás felhasználó

szavazat
2

Azt hiszem, ezt megteheti a Row Test Képesség (elérhető MbUnit és újabb verziói NUnit), ahol lehetett adja többfajta feltölteni egy egység teszt.

Válaszolt 16/08/2008 14:31
a forrás felhasználó

szavazat
0

Bár lehetséges, hogy hozzon létre egy halom vizsgálati adatok, hogy mi történik, ez hatékonyabb megpróbálja minimalizálni az adatokat használják.

Egy tipikus QA szempontból, amit szeretne, hogy azonosítsa a különböző besorolások a bemeneteket. Készítsen egy sor bemeneti értékeket az egyes besorolási és meghatározni a megfelelő kimeneteket.

Itt egy minta osztályok bemeneti értékek

  • Érvényes háromszögek kis számban, mint a (1 milliárd, 2, milliárd, 2000000000)
  • Érvényes háromszögek nagy számban, mint a (0.000001 0,00002 0,00003)
  • Érvényes tompaszögű háromszög, amelyek „almost'flat mint a (10, 10, 19,9999)
  • érvényes hegyesszögű háromszögek, amelyek „majdnem” lapos, például (10, 10, 0000001)
  • érvénytelen háromszögek legalább egy negatív értéket
  • Érvénytelen háromszögek, ahol az összeg két fél megegyezik a harmadik
  • Érvénytelen háromszögek, ahol az összeg két oldalán nagyobb, mint a harmadik
  • bemeneti értékek, amelyek nem numerikus

...

Ha elégedett a lista beviteli osztályozási erre a funkcióra, akkor hozza létre a tényleges vizsgálati adatok. Valószínű, hogy hasznos lenne, hogy teszteljék az összes permutációt az egyes elemeket. (Pl (2,3,4), (2,4,3), (3,2,4), (3,4,2), (4,2,3), (4,3,2)) Általában talál vannak besorolások kimaradt (például a koncepció inf bemeneti paraméter).

Véletlen adatok bizonyos ideig lehet hasznos is, hogy megtalálja a furcsa hibákat a kódot, de általában nem produktív.

Sokkal valószínűbb, hogy ezt a funkciót használják néhány speciális környezetben, ahol további szabályokat alkalmazzák. (Például csak egész értékeket vagy kell lennie 0,01 lépésekben, stb) Ezek hozzá a listához osztályozás a bemeneti paramétereket.

Válaszolt 17/09/2008 04:15
a forrás felhasználó

szavazat
4

A vadonatúj Python 2.6, van egy szabványos megoldás a itertools modul, amely visszaadja a Descartes-szorzat a 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)]

Ön tud nyújtani „ismétlő” érv, hogy végre a terméket egy iterable és maga:

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)]

Azt is csípés valamit kombinációk is:

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

És, ha a rendelés ügyek vannak permutációk:

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)]

Természetesen minden jó dolgok, nem pontosan ugyanazt csinálja, de lehet használni őket oly módon, vagy egy másik, hogy megoldja Önnek problémát.

Ne feledd, hogy képes átalakítani egy est vagy egy listát, hogy egy sor, és fordítva segítségével list (), tuple () és a set ().

Válaszolt 04/10/2008 09:52
a forrás felhasználó

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