Vă mulțumim pentru susținere

Cum se utilizează combinații de seturi ca date de testare

Aș dori să testez o funcție cu o tuplă dintr-un set de cazuri și valori normale. De exemplu, în timp ce testează o funcție care returnează true ori de câte ori se dau trei lungimi care formează un triunghi valid, aș avea cazuri specifice, numere negative / mici / mari, valori apropiate de depășire etc. mai mult, scopul principal este generarea de combinații ale acestor valori, cu sau fără repetare, pentru a obține un set de date de testare.

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

Ca o notă: Știu de fapt răspunsul la acest lucru, dar ar putea fi de ajutor pentru ceilalți și o provocare pentru oamenii de aici! - va posta răspunsul meu mai târziu.

0
adăugat editat
Aceasta nu este o întrebare WordPress. Cel puțin nu așa cum l-ai întrebat.
adăugat autor Anonymous User
Aceasta nu este o întrebare WordPress. Cel puțin nu așa cum l-ai întrebat.
adăugat autor Anonymous User
Mike are dreptate, mai multe informații au nevoie de răspunsuri stupide, cum ar fi "pentru că aveți un nou e-mail!" veniți în minte și nu cred că este util.
adăugat autor steve_mtl
Abacus github o bibliotecă combinatorică pentru Node.JS, Python, PHP, Actionscript (ps eu sunt autorul )
adăugat autor Nikos M.
Bună ziua: Vă rugăm să ne oferiți mai multe detalii astfel încât 1.) să avem o șansă rezonabilă de a vă ajuta și 2.) pentru ca alții care au configurația și aceeași problemă în viitor să poată fi ajutați de această întrebare să răspundă. De exemplu, presupun că utilizați un plugin? Este așa, ce? Ce setare ai folosit? Unde găzduiți? Și orice altceva care ar putea fi relevant. Mulțumesc anticipat.
adăugat autor MikeSchinkel

11 răspunsuri

Dacă utilizați pluginul pluginul WP-DB Manager , accesați opțiunile acestuia și să creați o copie de siguranță manuală. Dacă acest lucru nu reușește, inspectați mesajul de eroare și încercați să aflați ce s-ar putea întâmpla greșit. Dacă nu vă puteți da seama, postați aici mesajul de eroare.

Dacă copia de rezervă manuală se termină bine, este probabil o eroare la configurarea e-mailului. Verificați toate setările de e-mail și asigurați-vă că acestea sunt corecte. Ce furnizor de e-mail folosiți pentru a trimite e-mailurile (ce server SMTP)? Ce furnizor de e-mail utilizați pentru a primi e-mailurile (ce server POP3 și IMAP)?

Dacă nu utilizați WP-DB Manager, trebuie să știți cum faceți aceste copii de siguranță și toate informațiile pe care vi sa cerut să le furnizați de mine și de ceilalți.

1
adăugat

Dacă utilizați pluginul pluginul WP-DB Manager , accesați opțiunile acestuia și să creați o copie de siguranță manuală. Dacă acest lucru nu reușește, inspectați mesajul de eroare și încercați să aflați ce s-ar putea întâmpla greșit. Dacă nu vă puteți da seama, postați aici mesajul de eroare.

Dacă copia de rezervă manuală se termină bine, este probabil o eroare la configurarea e-mailului. Verificați toate setările de e-mail și asigurați-vă că acestea sunt corecte. Ce furnizor de e-mail folosiți pentru a trimite e-mailurile (ce server SMTP)? Ce furnizor de e-mail utilizați pentru a primi e-mailurile (ce server POP3 și IMAP)?

Dacă nu utilizați WP-DB Manager, trebuie să știți cum faceți aceste copii de siguranță și toate informațiile pe care vi sa cerut să le furnizați de mine și de ceilalți.

1
adăugat

Absolut, în special cu multe dintre aceste permutări / combinații, văd clar că prima trecere ar fi o problemă.

O implementare interesantă în Python, deși am scris o notă frumoasă în C și Ocaml bazată pe "Algorithm 515" (vezi mai jos). El a scris în Fortran, așa cum a fost comun atunci pentru toate lucrările "Algoritm XX", bine, acea adunare sau c. A trebuit să o scriu din nou și să fac niște îmbunătățiri minore pentru a lucra cu mese, nu cu numere de numere. Acest lucru are acces la întâmplare, eu încă lucrez la obținerea unor implementări frumoase ale celor menționate în fascicolul 2 al volumului Knuth. Voi explica cum funcționează acest lucru pentru cititor. Deși dacă cineva este curios, nu aș face nici un motiv să scriu ceva.

/** [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< x);
        k = k - r;
    }
    c[p-1] = c[p-2] + x - k;
}

~ "Algoritmul 515: Generarea unui vector din indexul lexicografic"; Buckles, B. P. și Lybanon, M. ACM Transactions on Mathematical Software, voi. 3, nr. 2, iunie 1977.

0
adăugat
@mkb Desigur.
adăugat autor nlucaroni
"auto-reflexiv" este un termen incorect pentru acest lucru. Se numește "recursiv" și este o parte fundamentală a informaticii. Funcția "alege" în cauză este C (N, K), en.wikipedia.org/wiki/Binomial_coefficient .
adăugat autor nlucaroni
Trebuie remarcat faptul că x este bazată pe 1, nu pe baza 0 așa cum se așteaptă.
adăugat autor Andrew Savinykh
Ce face choose () ? În acest caz, n-c [i] returnează p- (i + 1) 1 ?
adăugat autor mkb
Îmi pare rău, nu urmăresc comportamentul ales. Se pare că este definit ca fiind auto-reflexiv - alege alege. Îmi poți spune ce face în termeni mai simpli?
adăugat autor CuppM
Chiar și matricea c pare să se refere la elementele setate ca bază bazată pe 1 și nu pe baza 0. Având în vedere că noi creștem cu catifela, niciodată nu se poate referi la elementul 0. Sau îmi lipsește ceva? Sau a însemnat OP să ini c i cu -1 și să spunem alege (n-c [i] -1, ...)?
adăugat autor Subu Sankara Subramanian

O intrebare interesanta!

Aș face acest lucru prin alegerea combinațiilor, ceva de genul următor în Python. Cea mai dificilă parte este probabil verificarea primului pas, adică dacă f (1,2,3) returnează true , este rezultatul corect? După ce ați verificat acest lucru, atunci aceasta este o bază bună pentru testarea de regresie.

Probabil este o idee bună să faceți un set de cazuri de testare pe care știi că toate vor fi adevărate (de ex., 3,4,5 pentru acest caz triunghi) și un set de cazuri de testare pe care îl cunoașteți va fi total fals (de ex. 0,1 , inf). Apoi, puteți verifica mai ușor dacă testele sunt corecte.

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

lengths=[-1,0,1,5,10,0,1000,'inf']
for c in xselections(lengths,3):        # or 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);
...
0
adăugat

Cred că puteți face acest lucru cu atribut de testare a rândurilor (disponibil în MbUnit și versiunile ulterioare ale NUnit) unde puteți specifica mai multe seturi pentru a popula un test de unitate.

0
adăugat

Cu noul Python 2.6, aveți o soluție standard cu modulul itertools care returnează produsul cartezian al iterabililor:

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

Puteți oferi un argument "repetat" pentru a efectua produsul cu un termen iterabil și însuși:

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

Puteți, de asemenea, să optimizați ceva cu combinații:

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

Și dacă ordinea contează, există permutări:

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

Desigur, toate lucrurile interesante nu fac exact același lucru, dar le puteți folosi într-un fel sau altul pentru a vă rezolva problema.

Amintiți-vă că puteți converti un tuplu sau o listă la un set și invers utilizând lista (), tuple () și set ().

0
adăugat

În timp ce este posibil să creați o mulțime de date de testare și să vedeți ce se întâmplă, este mai eficient să încercați să minimalizați datele utilizate.

Din perspectiva QA tipică, doriți să identificați diferite clasificări ale intrărilor. Produceți un set de valori de intrare pentru fiecare clasificare și determinați rezultatele corespunzătoare.

Iată un exemplu de clase de valori de intrare

  • triunghiuri valide cu număr mic, cum ar fi (1 miliard, 2, miliarde, 2 miliarde)
  • triunghiuri valide cu numere mari, cum ar fi (0.000001, 0.00002, 0.00003)
  • triunghiuri obtuse valide care sunt "aproape", cum ar fi (10, 10, 19.9999)
  • triunghiuri acute valide care sunt "aproape" plate, cum ar fi (10, 10, 0000001)
  • triunghiuri nevalide cu cel puțin o valoare negativă
  • triunghiuri nevalide unde suma celor două părți este egală cu a treia
  • triunghiuri nevalide unde suma celor două laturi este mai mare decât a treia
  • valori de intrare care nu sunt numerice

...

Odată ce sunteți mulțumit de lista de clasificări de intrare pentru această funcție, puteți crea datele de testare reale. Probabil, ar fi util să testați toate permutările fiecărui element. (2,3,4), (2,4,3), (3,2,4), (3,4,2), (4,2,3), (4,3,2) În mod tipic, veți găsi că există unele clasificări pe care le-ați pierdut (cum ar fi conceptul inf ca parametru de intrare).

Datele aleatorii pentru o anumită perioadă de timp pot fi de asemenea de ajutor, care pot găsi bug-uri ciudate în cod, dar în general nu sunt productive.

Mai mult, această funcție este folosită într-un context specific în care se aplică reguli suplimentare (de exemplu, numai valorile întregi sau valorile trebuie să fie în incremente de 0,01 etc.). Acestea se adaugă la lista clasificărilor parametrilor de intrare.

0
adăugat

Iată o posibilă problemă: printre altele, asigurați-vă că nu aveți spațiu pe disc pe serverul dvs. Programul de backup va avea nevoie de un pic de spațiu pentru a .zip extrasul și zipul bazei de date înainte ca acesta să o trimită.

0
adăugat

Iată o posibilă problemă: printre altele, asigurați-vă că nu aveți spațiu pe disc pe serverul dvs. Programul de backup va avea nevoie de un pic de spațiu pentru a .zip extrasul și zipul bazei de date înainte ca acesta să o trimită.

0
adăugat

Eu folosesc același plugin (pentru o lungă perioadă de timp deja) și acest lucru mi sa întâmplat de 2-3 ori. Nu am reușit niciodată să-mi dau seama de motiv.

Dezactivarea și reactivarea plugin-ului fixat pentru mine în fiecare caz.

0
adăugat

Eu folosesc același plugin (pentru o lungă perioadă de timp deja) și acest lucru mi sa întâmplat de 2-3 ori. Nu am reușit niciodată să-mi dau seama de motiv.

Dezactivarea și reactivarea plugin-ului fixat pentru mine în fiecare caz.

0
adăugat