Pairwise testen: het realiseren van een optimale dekking van diverse testcombinaties

De mens probeert zichzelf altijd te omringen kwaliteit dingen. Trek mooie en praktische kleding aan, eet natuurlijke producten, rijd betrouwbare auto– is dit niet een natuurlijk verlangen van iedereen? IN deze lijst we kunnen en veilig opnemen.

Wat is "kwaliteit" software"? Dit is een product dat de beoogde taken uitvoert en voldoet aan de verwachtingen van de gebruiker. Om dit resultaat te bereiken, wordt elk programma eerst getest en komt het pas daarna in handen van de eindgebruiker. Omdat het testen van tijdsbestekken (zoals elk proces) de neiging heeft om het oneindige te benaderen, hebben we een competent ontwerp van het proces nodig. En hier kun je niet zonder testontwerp.

Testontwerper - wat voor dier is dit en waarmee eet je het?

Ontwerp testen– dit is de fase van het softwaretestproces waarin testgevallen (testgevallen) worden ontworpen en gemaakt in overeenstemming met vooraf gedefinieerde kwaliteitscriteria en testdoelen. Dienovereenkomstig is een testontwerper een medewerker wiens verantwoordelijkheden onder meer bestaan ​​uit het creëren van een reeks testgevallen die optimale resultaten garanderen dekking testen toepassingen.

6. Testen van domeinanalyse.
Deze techniek is gebaseerd op het verdelen van het bereik van mogelijke waarden van een variabele (of variabelen) in subbereiken (of domeinen), en vervolgens het selecteren van een of meer waarden uit elk domein om te testen. In veel opzichten overlapt het testen van domeinen met de technieken die we kennen over het verdelen in gelijkwaardigheidsklassen en het analyseren van grenswaarden. Maar domeintesten zijn niet beperkt tot de genoemde technieken. Het omvat zowel de analyse van afhankelijkheden tussen variabelen als het zoeken naar die waarden van variabelen die een hoog risico met zich meebrengen (niet alleen aan de grenzen).

7. Use-case-testen.
Een Use Case beschrijft een scenario van interactie tussen twee of meer deelnemers (meestal een gebruiker en een systeem). De gebruiker kan een persoon of een ander systeem zijn. Voor testers vormen Use Cases een uitstekende basis voor het maken van testscenario’s (testcases), omdat ze de context beschrijven waarin elke gebruikersactie moet worden uitgevoerd. Use Cases zijn standaard testbare vereisten, omdat ze altijd het doel aangeven dat moet worden bereikt en de stappen die moeten worden herhaald om dit te bereiken.

Waar moet je aan denken, je moet schudden!

Zoals de bekende definitie zegt: Programmeren gaat over denken, niet over typen . De auteur is er vrij zeker van dat hetzelfde kan worden gezegd over testen. Dus waarom hebben we testontwerpers nodig? Waarom tijd verspillen aan analyse en ontwerp als je het zou kunnen gebruiken voor een hoop extra tests?

Uit de bovenstaande voorbeelden wordt duidelijk dat het gebruik van design ons in staat stelt het aantal tests aanzienlijk te verminderen en ons te concentreren op de meest kwetsbare en belangrijke functionaliteitsgebieden. Het is niet voor niets dat veel bedrijven nu niet alleen aparte functies van ‘testontwerper’ of ‘testanalist’ introduceren, maar ze ook opleiden in speciale functies.

Sterker nog: wat heeft het voor zin om bijvoorbeeld het machtigingsformulier volledig te testen als het betalingsmechanisme voor goederen in de webwinkel niet correct werkt? Terwijl de tester met 100 tests 100 waarden controleert, bedenkt de testontwerper immers hoe hij 1000 waarden in 10 tests kan controleren! De inspanningen die aan het testontwerp worden besteed, zullen dus ruimschoots vruchten afwerpen in de kwaliteit van de testuitvoering.

Hoewel het modewoord ‘pairwise’ niet meer zo populair is als vroeger, wordt in interviews nog steeds de vraag gesteld wat deze testontwerptechniek is. Niet alle testers (zowel degenen die voor het interview komen als degenen die het interview afnemen) kunnen echter duidelijk een antwoord op de vraag formuleren, Waarvoor we hebben combinatorische technieken nodig in het algemeen en paarsgewijze in het bijzonder (de overgrote meerderheid van de fouten betreft echter atomaire parameterwaarden en is niet afhankelijk van andere). Het simpele antwoord op deze vraag is naar mijn mening het vinden van bugs die ontstaan ​​als resultaat van expliciete en impliciete afhankelijkheden tussen parameters. Voor eenvoudige gevallen Het is onwaarschijnlijk dat technieken van groot nut zullen zijn, omdat ze handmatig kunnen worden gecontroleerd groot nummer parameters en complexe afhankelijkheden daartussen, zal het aantal tests hoogstwaarschijnlijk te groot zijn voor handmatig testen. Daarom is de belangrijkste toepassing van combinatorische technieken (en dienovereenkomstig van tools die combinaties van parameters genereren) de geautomatiseerde compilatie van testgegevenssets volgens bepaalde wetten.

De meeste tools voor het genereren van combinatorische tests kunnen het resultaat produceren in de vorm van een gegevensbestand, dat kan worden doorgegeven als invoer voor de overeenkomstige autotests. Een dergelijk voorbeeld (met behulp van de PICT-tool) zal hieronder worden besproken.

Voorbeeld 1. Serie en paspoortnummer

Onder voorbehoud van gebruik geautomatiseerd testen voor de serie en het paspoortnummer kunt u een uitgebreide reeks positieve tests maken, aangezien de vereisten voor dit veld streng zijn - precies twee hoofdletters Oekraïens alfabet (behalve о, Ї, b) en zes cijfers van 0 tot 9. In totaal zullen er (33-3) 2 *10 6 = 9*10 8 van dergelijke tests zijn. Er zijn echter zelden gevallen waarin de veldvereisten zo streng zijn, en het is onwaarschijnlijk dat uitgebreide tests nodig zullen zijn. Hoogstwaarschijnlijk is het voldoende om de mogelijkheid te controleren om respectievelijk elke afzonderlijke letter en elk afzonderlijk cijfer op elke positie in te voeren. De taak van het samenstellen van dergelijke tests kan eenvoudig worden opgelost door een combinatorische testtool:
SERIES_1: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T, U, F, X, C, CH, W, SH, Y, I SERIE_2: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T ,U,F,X,C,H,W,SH,Y,Y NUMBER_1: 0,1,2,3,4,5,6,7,8,9 NUMBER_2: 0,1,2,3,4 ,5,6,7,8,9 NUMBER_3: 0,1,2,3,4,5,6,7,8,9 NUMBER_4: 0,1,2,3,4,5,6,7,8 ,9 NUMBER_5: 0,1,2,3,4,5,6,7,8,9 NUMBER_6: 0,1,2,3,4,5,6,7,8,9 (SERIES_1, SERIES_2, NUMBER_1 , NUMBER_2, NUMBER_3, NUMBER_4, NUMBER_5, NUMBER_6) @ 1 Model 1
Ø 4 6 3 1 1 5 И Є 8 3 8 9 9 3 А Н 3 0 5 8 6 2 М С 4 3 4 1 3 1 И И 4 6 7 3 1 4 ГЦ 0 2 4 5 2 0

Negatieve tests kunnen op dezelfde manier worden aangemaakt (met PICT kunt u ze markeren). speciaal karakter "~").
SERIES_1: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T, U, F, X, C, CH, W, SH, Y, I SERIE_2: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T ,U,F,X,C,H,Sh,Sh,Y,Y NUMBER_1: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~ D,~E,~F NUMBER_2: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F NUMBER_3: 0, 1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E,~F NUMMER_4: 0,1,2,3,4,5,6 ,7,8,9,~A,~B,~C,~D,~E,~F NUMBER_5: 0,1,2,3,4,5,6,7,8,9,~A,~ B,~C,~D,~E,~F NUMBER_6: 0,1,2,3,4,5,6,7,8,9,~A,~B,~C,~D,~E, ~F Model 2
ZU 1 3 7 2 7 4 L Y ~B 7 3 2 7 9 A Є 8 8 2 0 ~A 8 Onderdeel van de simulatieresultaten

Voorbeeld 2. Testdekking vergroten met behulp van een extra parameter

Soms zijn bugs die verband houden met validaties afhankelijk van de manier waarop de gebruiker ongeldige gegevens invoert: via het toetsenbord (fysiek of op het scherm), met behulp van contextmenu kopiëren en plakken, sneltoetsen, geselecteerde tekst slepen. Vaak wordt het slepen en neerzetten van tekst bijvoorbeeld niet verwerkt door validatie aan de clientzijde als op deze manier onjuiste gegevens worden ingevoerd. De invoermethode kan in het model worden ingevoerd als extra parameter en houd er rekening mee bij het samenstellen van autotests.
SERIES_1: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T, U, F, X, C, CH, W, SH, Y, I SERIE_2: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T ,U,F,X,C,H,W,SH,Y,Y NUMBER_1: 0,1,2,3,4,5,6,7,8,9 NUMBER_2: 0,1,2,3,4 ,5,6,7,8,9 NUMBER_3: 0,1,2,3,4,5,6,7,8,9 NUMBER_4: 0,1,2,3,4,5,6,7,8 ,9 NUMBER_5: 0,1,2,3,4,5,6,7,8,9 NUMBER_6: 0,1,2,3,4,5,6,7,8,9 INPUT: toetsenbord, schermtoetsen , contextmenu, kopiëren en plakken, slepen en neerzetten Model 3
M L 0 8 0 8 5 9 toetsenbord Y U 0 0 2 3 2 2 slepen en neerzetten S Ch 5 3 6 2 1 0 schermtoetsen Y D 3 9 4 1 6 7 contextmenu U Sh 9 9 0 7 4 4 kopiëren en plakken Onderdeel van de simulatieresultaten

Voorbeeld 3. Tests voor besluitvormingssystemen, validatie van eisen

Voor besluitvormingssystemen worden soms uitputtende testgevallen samengesteld, die vervolgens niet alleen kunnen worden gebruikt voor het testen, maar ook voor het valideren van eisen. Door de regels van het systeem opeenvolgend op elke test toe te passen, kunt u zien of er inconsistente resultaten worden verkregen.

Validatie van vereisten is een zeer belangrijk onderdeel van testen in dit geval, omdat verborgen tegenstrijdigheden kunnen worden opgespoord. Met de combinatorische tool voor het genereren van tests kunt u niet alleen tests maken, maar ook voorwaarden instellen die aan de invoergegevens worden opgelegd. Als deze omstandigheden een van de mogelijke gegevens onbereikbaar maken, zal de tool dit aangeven, wat als signaal kan dienen om de vereisten voor consistentie zorgvuldig te controleren.
LEEFTIJD: 0-17, 18-21, 22-65, >=66 KINDEREN: Y, N ROKEN: Y, N WERK: 0-5, 6-10, >=11 (LEEFTIJD, KINDEREN, ROKEN, WERK) @ 4 ALS = "0-17" DAN<>">=11"; ALS = ">=11" DAN = "0-17"; Model 4
Beperkingen Waarschuwing: beperkende beperkingen. De uitvoer zal de volgende waarden WORK niet bevatten: >=11 Hulpmiddel als reactie op tegenstrijdige eisen

Dit model heeft tegenstrijdige vereisten die de waarde van WORK afsnijden: >=11, en het komt in geen enkele test voor. Helaas geeft de tool geen antwoord op de vraag welke omstandigheden de tegenstrijdigheid veroorzaken; het laat alleen zien welke waarde is uitgesloten van de tests. Deze informatie kan echter voldoende zijn om uit de hele reeks beperkingen de beperkingen te identificeren die van invloed zijn op deze parameter en deze te analyseren op inconsistentie.

Een uitgebreide reeks tests kan later worden gebruikt voor de oorzaak-gevolg-testontwerptechniek.

Voorbeeld 4. Vorming van omgevingsparameters voor configuratietests

Met combinatorische testtools kunt u ook een lijst met mogelijke configuraties maken, die vervolgens kunnen worden gesorteerd op gebruikspopulariteit, de ongeschikte configuraties kunnen elimineren, enz. Als u niet alle tests voor elke configuratie hoeft uit te voeren, kunt u deze gelijkmatig verdelen over de geselecteerde omgevingen door de omgeving toe te voegen als een andere parameter voor het genereren van testgegevens (zoals is gedaan in het voorbeeld van de gegevensinvoermethode).
BROWSER: IE, Firefox, Chrome, Opera LANG: en, ru, ua OS: win, linux, android (BROWSER, LANG, OS) @ 1 IF = "linux" THEN<>"D.W.Z"; Model 5
IE ua win Firefox en win Opera ua linux Chrome ru android Simulatie resultaten

SERIES_1: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T, U, F, X, C, CH, W, SH, Y, I SERIE_2: A, B, C, D, E, E, E, F, Z, I, J, K, L, M, N, O, P, R, S, T ,U,F,X,C,H,W,SH,Y,Y NUMBER_1: 0,1,2,3,4,5,6,7,8,9 NUMBER_2: 0,1,2,3,4 ,5,6,7,8,9 NUMBER_3: 0,1,2,3,4,5,6,7,8,9 NUMBER_4: 0,1,2,3,4,5,6,7,8 ,9 NUMBER_5: 0,1,2,3,4,5,6,7,8,9 NUMBER_6: 0,1,2,3,4,5,6,7,8,9 MILIEU: IE je wint, Firefox en win, Opera ua linux, Chrome ru android Model 6

Voorbeeld 5. Samenstellen van meerdere testen, rekening houdend met een groot aantal restricties

Natuurlijk kunnen combinatorische tests ook worden gebruikt om tests te genereren die handmatig worden uitgevoerd, maar het lijkt mij dat dit alleen moet worden gedaan als er zeer een groot aantal van beperkingen die moeilijk in gedachten te houden zijn. Door de aanwezigheid van voorwaarden kan het aantal tests als het ware beperkt worden, en met de tool kunt u alle mogelijke testgegevens verkrijgen die voldoen aan alle voorwaarden die eraan worden opgelegd. Testen kunnen echter ook handmatig worden uitgevoerd.
LEEFTIJD: 0-17, 18-21, 22-65, >=66 KINDEREN: 0, 1, 2, 3, 4, 5 ROKEN: J, N WERK: 0-5, 6-10, >=11 ALS = "0-17" DAN<>">=11"; ALS = "0-17" DAN = 0; ALS = "18-21" DAN< 2; IF >0 DAN = "N"; ALS = ">=66" DAN<>"0-5"; ALS = "0-17" OF = "18-21" DAN = "0-5"; Model 6
22-65 2 N 0-5 18-21 1 N 0-5 >=66 2 N 6-10 22-65 4 N 6-10 22-65 5 N 6-10 22-65 3 N 6-10 >= 66 4 N >=11 22-65 5 N >=11 0-17 0 J 0-5 >=66 3 N >=11 22-65 4 N 0-5 22-65 2 N >=11 18-21 0 J 0-5 22-65 0 J >=11 22-65 1 N 6-10 22-65 3 N 0-5 >=66 1 N >=11 0-17 0 N 0-5 >=66 0 J 6 -10 >=66 5 N >=11 22-65 5 N 0-5 Simulatieresultaten - 21 tests

Paarsgewijs testen is een techniek voor het genereren van testdatasets uit volledige set voer gegevens in het systeem in, waardoor u het aantal testgevallen aanzienlijk kunt verminderen.

De essentie van paarsgewijs testen kan als volgt worden geformuleerd: het vormen van datasets waarin elke geteste waarde van elk van de geteste parameters minimaal één keer wordt gecombineerd met elke geteste waarde van alle andere geteste parameters.

Belangrijkste doelstellingen van Pairwise Testen:

  • verwijder overbodige cheques;
  • zorg voor een goede testdekking;
  • identificeren grootste aantal bugs op een minimale set tests.

Laten we de essentie van paarsgewijze testen eens nader bekijken aan de hand van voorbeelden.

voorbeeld 1

Laten we ons voorstellen dat we parameters A, B en C hebben met de waarden Ja of Nee. Maximaal aantal combinaties van waarden van deze parameters – 8. Maar bij gebruik van paarsgewijze tests zijn vier combinaties voldoende, omdat er met alle rekening wordt gehouden mogelijke paren parameters (paar A en B, paar B en C, paar A en C):

Voorbeeld 2

Laten we zeggen dat een waarde (bijvoorbeeld belasting) voor een persoon wordt berekend op basis van zijn geslacht, leeftijd en aanwezigheid van kinderen - we krijgen er drie invoerparameter, voor elk waarvan we een van de mogelijke waarden voor tests selecteren. Bijvoorbeeld: geslacht – mannelijk of vrouwelijk; leeftijd – tot 25 jaar, van 25 tot 60 jaar, ouder dan 60 jaar; aanwezigheid van kinderen - ja of nee. Om de juistheid van de berekeningen te controleren, kunt u uiteraard alle combinaties van waarden van alle parameters doorlopen:

Vloer Leeftijd Kinderen
1 mantot 25heb geen kinderen
2 vrouwtot 25heb geen kinderen
3 man25-60 heb geen kinderen
4 vrouw25-60 heb geen kinderen
5 manboven de 60heb geen kinderen
6 vrouwboven de 60heb geen kinderen
7 mantot 25Heeft u kinderen?
8 vrouwtot 25Heeft u kinderen?
9 man25-60 Heeft u kinderen?
10 vrouw25-60 Heeft u kinderen?
11 manboven de 60Heeft u kinderen?
12 vrouwboven de 60Heeft u kinderen?

Of je kunt besluiten dat je combinaties van alle parameterwaarden niet met allemaal hoeft te controleren, maar er alleen voor moet zorgen dat alle unieke paren parameterwaarden worden aangevinkt. Vanuit het oogpunt van geslachts- en leeftijdsparameters moeten we er bijvoorbeeld voor zorgen dat we nauwkeurig een man onder de 25, een man tussen 25 en 60, een man na 60, evenals een vrouw onder de 25, een vrouw tussen 25 en 60 jaar, en ook een vrouw na 60 jaar. En op dezelfde manier voor alle andere parameterparen. En daardoor kunnen we veel minder waardensets krijgen (ze bevatten alle waardenparen, hoewel sommige twee keer):

Vloer Leeftijd Kinderen
1 mantot 25heb geen kinderen
2 vrouwtot 25Heeft u kinderen?
3 man25-60 Heeft u kinderen?
4 vrouw25-60 heb geen kinderen
5 manboven de 60heb geen kinderen
6 vrouwboven de 60Heeft u kinderen?

Voorbeeld 3

Er zijn er twee Opera-browser en Firefox. Er zijn twee operatiekamers Windows-systemen en Linux. Er valt hier niets te verminderen, omdat ze kunnen worden gecombineerd in 4 configuraties:

Browser Besturingssysteem
1 Operaramen
2 FirefoxLinux
3 OperaLinux
4 Firefoxramen

Laten we zeggen dat de site in twee talen is: Russisch (RU) en Engels (EN). Laten we voor een compleet experiment deze vier configuraties vermenigvuldigen met 2, d.w.z. controleer elk van de voorgaande configuraties in beide talen. Maar waarom? In plaats daarvan gebruiken we een paarsgewijze benadering en in plaats van 8 configuraties krijgen we er weer 4:

Browser Besturingssysteem Taal
1 OperaramenRU
2 FirefoxLinuxRU
3 OperaLinuxNL
4 FirefoxramenNL

Verder kan de site MySQL, Oracle en MSSQL als database gebruiken. Door simpelweg paarsgewijze tests te gebruiken, krijgen we 7 configuraties (en niet 12 - de vorige 4x3, en vooral niet 24 = 2x2x2x3). Maar ook hier is het de moeite waard om na te denken of het belangrijk is om elke database in combinatie met andere parameters te controleren. Duidelijk niet. Het is belangrijk om bijvoorbeeld te kijken hoe elke database met elke taal werkt. Door beperkingen in te voeren, krijgen we dus in plaats van 7 6 configuraties (3 bases x 2 talen):

Browser Besturingssysteem Taal Database
1 OperaramenRUMySQL
2 FirefoxLinuxNLMySQL
3 OperaLinuxNLMSSQL
4 FirefoxramenRUMSSQL
5 OperaLinuxRUOrakel
6 FirefoxramenNLOrakel

Voorbeeld 4
Het belangrijkste principe van paarsgewijze testen is dat het in de overgrote meerderheid van de gevallen niet nodig is om een ​​volledig factorieel experiment uit te voeren (dat wil zeggen, alle configuraties te herhalen waarbij alle waarden van alle parameters elkaar ontmoeten). En dit is vaak onmogelijk vanwege een gebrek aan middelen. Daarom wordt verklaard dat het voldoende is om te controleren hoe de software werkt wanneer elke waarde van elke parameter minstens één keer voldoet aan een andere waarde van elke andere parameter.
Stel dat u combinaties van instellingen voor de lettertypevensterparameters in een tekstverwerker moet testen:

Laten we aannemen dat bugs mogelijk zijn vanwege combinaties van parameters. Hoeveel tests zijn er nodig om alle waarden te dekken?
Laten we het meenemen om te testen volgende parameters en hun betekenissen:

Parameter Waarde 1 Waarde 2 Waarde 3 Waarde 4
Lettertype TTAriaal
Stijl NormaalCursiefVetgedruktVet cursief
Maat minnormaalmaximaal
Kleur zwartwitrood
Onderstreep stijl geenalleen woordenander
Doorhalen opuit
Dubbele doorhaling opuit
Superscript opuit
Abonnement opuit
Schaduw opuit
Overzicht opuit
Embosseren opuit
Graveren opuit
Kleine kapjes opuit
In hoofdletters opuit
Verborgen opuit

2 * 4 * 3 * 3 * 3 * 2^11 = 442 368.


Met de methode "Alle paren" kunt u dus het aantal controles aanzienlijk verminderen.

2. Gereedschap

Compilatie vereiste combinaties data is vaak niet de gemakkelijkste taak, maar gelukkig zijn er veel tools om dit op te lossen. verschillende niveaus kwaliteit.

IN dit materiaal instrument zal worden herzien FOTO (Paarsgewijze onafhankelijke combinatorische tests– een paarsgewijze testtool van Microsoft).

PICT maakt het genereren van een compacte set testparameterwaarden mogelijk die alle testgevallen vertegenwoordigen voor uitgebreide combinatorische parameterdekking.

Laten we overwegen om met het programma te werken. Voer PICT uit vanaf de opdrachtregel.


Het programma neemt als invoer een simple tekstbestand met parameters en hun waarden, een model genoemd, en output genereerde testscenario's.

Laten we de werking van het programma bekijken aan de hand van voorbeeld 2, dat hierboven werd gegeven. We hebben de volgende parameters en hun waarden: geslacht – mannelijk of vrouwelijk; leeftijd – tot 25 jaar, van 25 tot 60 jaar, ouder dan 60 jaar; aanwezigheid van kinderen - ja of nee. Als we alle mogelijke waarden doorlopen, is het aantal scenario's 12. Laten we een model maken en kijken welk resultaat het programma oplevert.

Model:


We gebruiken het model in PICT en krijgen 6 testscenario’s (in plaats van 12):


Het verschil is niet zo merkbaar, maar zal steeds merkbaarder worden naarmate het aantal parameters of hun waarden toeneemt.

Laten we ons voorstellen dat we de volgende testparameters hebben, die betrekking hebben op het testen van het maken van partities op een harde schijf (het voorbeeld is overgenomen uit de PICT-handleiding):


7 * 7 * 2 * 3 * 8 * 2 = 4704

Het zal heel moeilijk zijn om ze binnen een redelijke tijd te testen. Uit onderzoek blijkt dat het testen van alle paren mogelijke waarden een zeer goede dekking oplevert en het aantal testgevallen binnen redelijke grenzen blijft. (Primair, FAT) is bijvoorbeeld één paar en (10, langzaam) een ander; één testgeval kan vele paren bestrijken. Voor de bovenstaande set parameters zal PICT in totaal 60 testgevallen creëren:

In plaats van de gebruikelijke uitvoer naar de console kunt u ook directe uitvoer gebruiken en testgevallen opslaan in MS Excel:


Als gevolg hiervan zal het worden gemaakt Excel bestand met de volgende inhoud:

Maar het meest interessant zijn de mogelijkheden die PICT biedt voor het genereren van dergelijke scenario's. Ze worden allemaal zorgvuldig besproken in de gebruikershandleiding. Hier zijn er een aantal:

  1. U kunt de volgorde opgeven waarin waarden worden gegroepeerd. De standaard is volgorde 2 en er worden combinaties van waardeparen gemaakt (wat paarsgewijze testen inhoudt). Maar u kunt voorbeeld 3 specificeren en dan worden drielingen gebruikt, geen paren. De maximale volgorde voor een eenvoudig model is gelijk aan het aantal parameters, waardoor een set van allemaal ontstaat mogelijke opties.
  2. U kunt parameters groeperen in submodellen en deze een aparte volgorde voor combinaties geven. Dit is nodig als combinaties van bepaalde parameters grondiger getest moeten worden of afzonderlijk van andere parameters gecombineerd moeten worden.
  3. U kunt voorwaarden en beperkingen instellen. U kunt bijvoorbeeld opgeven dat een van de parameters alleen een bepaalde waarde krijgt als verschillende andere parameters de gewenste waarde aannemen. Hiermee kunt u het creëren van onnodige controles voorkomen.
  4. U kunt ongeldige parameterwaarden aangeven bij het maken van combinaties voor negatieve testgevallen.
  5. Met behulp van wegingscoëfficiënten kunt u het programma vertellen de voorkeur te geven aan bepaalde waarden bij het genereren van combinaties.
  6. U kunt de minimalisatieoptie gebruiken (het programma meerdere keren uitvoeren en telkens een beperkt aantal testgevallen gebruiken) om een ​​minimumaantal testgevallen te verkrijgen.

Concluderend zou ik willen zeggen dat PICT voldoende is handig hulpmiddel Voor snelle creatie een set combinaties van testgegevens, vooral als er een groot aantal parameters is die niet sterk met elkaar verband houden (wat het mogelijk maakt om niet alle mogelijke opties te testen). U moet echter zorgvuldig creëren vereiste model zodat de testdekking bevredigend is.

3. Waar en wanneer wordt Pairwise-testen gebruikt?

De methode is alleen effectief in een laat ontwikkelingsstadium, of aangevuld met functionele basistesten. Als u bijvoorbeeld configuratietests uitvoert, moet u, voordat u paarsgewijze tests gebruikt, ervoor zorgen dat het hoofdscenario op iedereen functioneert besturingssystemen ah met standaardparameters (uitvoeren Rook testen (Rook testen) of Bouwverificatietest (Het testen van de constructie)). Dit zal de lokalisatie van toekomstige bugs aanzienlijk vergemakkelijken, omdat tijdens paarsgewijze tests één test veel parameters bevat met niet-standaardwaarden, die elk een fout kunnen veroorzaken en de lokalisatie ervan in dit geval erg moeilijk is. En als het testen van de assemblage mislukt, moet u stoppen met het gebruik van de gepaarde testmethode, omdat veel tests zullen mislukken, en het uitsluiten van zelfs maar één test meestal het verlies van meerdere paren met zich meebrengt, en de betekenis van het gebruik van de methode verloren gaat.

Daarom moet de methode alleen worden gebruikt voor stabiele functionaliteit, wanneer de huidige tests hun effectiviteit al verliezen.

Pairwise Testing is dus een bijzondere methode om de voorbereiding van testgevallen te optimaliseren.

De essentie van de Pairwise Testing-techniek is niet om alle combinaties van alle waarden te testen, maar om alle waardenparen te testen.

Nog niet zo lang geleden (leef en leer) kwam ik het concept van "pairwise testen" tegen (ik vertaal het direct als "pairwise testen", maar ik gebruik liever de Engelse term), raakte geïnteresseerd en besloot erachter te komen wat het is. Omdat ik snel begreep hoe deze uh... techniek werkt, had ik meteen vragen over de redenen en betekenis van het gebruik ervan, en onlangs kwam ik er eindelijk in geslaagd antwoorden daarop te vinden. Ik besloot hierover te schrijven (het is lang, maar korter is niet gelukt:().


Ik zal meteen zeggen dat ik tot mijn vreugde de meeste informatie over dit onderwerp heb gehaald uit artikelen van Michael Bolton en James Bach in samenwerking met Patrick Schroeder. Tot mijn vreugde - want enerzijds zijn dit bekende en belangrijke mensen voor mij op het gebied van verkennend testen. Aan de andere kant, op een manier die typerend is (naar mijn mening) voor deze auteurs, prijzen de artikelen niet onvoorwaardelijk, maar proberen ze nuchter te evalueren deze techniek, en dat was precies wat nodig was voor de sceptische ik en mijn vragen.

1. Wat is het?

Sinds ik begon te schrijven over paarsgewijs testen, moet ik blijkbaar proberen uit te leggen wat de essentie van deze techniek is. Ik weet niet zeker of ik het duidelijk en correct kan uitleggen, maar ik zal het toch proberen :)

Paarsgewijs testen is dus een techniek voor het genereren van testgegevenssets. De essentie kan bijvoorbeeld als volgt worden geformuleerd: het vormen van datasets waarin elke geteste waarde van elk van de geteste parameters minimaal één keer wordt gecombineerd met elke geteste waarde van alle andere geteste parameters. Het lijkt niet erg duidelijk (en het is geen feit dat het correct is), dus je kunt proberen het uit te leggen met een voorbeeld :)

Laten we zeggen dat een bepaalde waarde (belasting) voor een persoon wordt berekend op basis van zijn geslacht, leeftijd en aanwezigheid van kinderen - we krijgen drie invoerparameters, voor elk waarvan we op de een of andere manier waarden selecteren om te testen. Bijvoorbeeld: geslacht - mannelijk of vrouwelijk; leeftijd - tot 25, van 25 tot 60, ouder dan 60; kinderen krijgen - ja of nee. Om de juistheid van de berekeningen te controleren, kunt u uiteraard alle combinaties van waarden van alle parameters doorlopen:

vloer leeftijd kinderen
1 man tot 25 heb geen kinderen
2 vrouw tot 25 heb geen kinderen
3 man 25-60 heb geen kinderen
4 vrouw 25-60 heb geen kinderen
5 man boven de 60 heb geen kinderen
6 vrouw boven de 60 heb geen kinderen
7 man tot 25 Heeft u kinderen?
8 vrouw tot 25 Heeft u kinderen?
9 man 25-60 Heeft u kinderen?
10 vrouw 25-60 Heeft u kinderen?
11 man boven de 60 Heeft u kinderen?
12 vrouw boven de 60 Heeft u kinderen?

Of u besluit misschien dat we geen combinaties van alle parameterwaarden met alles willen, maar er gewoon zeker van willen zijn dat we alle unieke paren parameterwaarden controleren. Dat wil zeggen dat we, in termen van geslachts- en leeftijdsparameters, er bijvoorbeeld voor willen zorgen dat we nauwkeurig een man onder de 25, een man tussen 25 en 60, een man na 60, evenals een vrouw onder de 25, een vrouw tussen 25 en 60, enz. vrouw na 60. En precies hetzelfde voor alle andere paren parameters. En op deze manier kunnen we veel kleinere waardensets krijgen (ze hebben alle waardenparen, hoewel sommige twee keer):

vloer leeftijd kinderen
1 man tot 25 heb geen kinderen
2 vrouw tot 25 Heeft u kinderen?
3 man 25-60 Heeft u kinderen?
4 vrouw 25-60 heb geen kinderen
5 man boven de 60 heb geen kinderen
6 vrouw boven de 60 Heeft u kinderen?

Deze aanpak is grofweg de essentie van de paarsgewijze testtechniek: we testen niet alle combinaties van alle waarden, maar we testen alle waardenparen.

2. Wat is er goed aan?

Wanneer we het hebben over paarsgewijze testen, wordt dit meestal vergeleken met het zoeken door alle mogelijke combinaties van waarden, en een van de belangrijkste voordelen van paarsgewijze testen is dat het gebruik ervan een veel kleiner aantal oplevert. testkits gegevens dan bij een volledige zoekopdracht, wat in veel gevallen simpelweg onmogelijk is.

Waarschijnlijk lijkt het op basis van het bovenstaande voorbeeld dat het verschil tussen deze techniek en het opsommen van alle waarden niet zo groot is. Maar dit is alleen met zo’n klein aantal parameters en hun waarden, en hoe meer er zijn, hoe groter het verschil. Laten we zeggen dat als er 50 parameters zijn, die elk twee waarden kunnen aannemen, dan zal voor een volledige zoekopdracht een aantal combinaties nodig zijn gelijk aan 2 tot de macht van 50, d.w.z. 1 125 899 906 842 624 :) En als u paarsgewijs testen gebruikt, kunt u met slechts veertien combinaties rondkomen!

Overigens is het samenstellen van de benodigde combinaties van gegevens vaak niet de gemakkelijkste taak, maar gelukkig zijn er veel tools om dit op te lossen, van verschillende kwaliteitsniveaus en (gratis) :)

3. Waarom koppels

Persoonlijk, toen ik kennis maakte met deze techniek, rees meteen de vraag: waarom precies paren? Waarom geen drietallen van waarden of een soort ‘kwartettest’? Heeft deze aanpak bijvoorbeeld enige wiskundige rechtvaardiging, of komt deze gewoon uit de lucht vallen?

Ik kon de volgende verklaring vinden: ooit werd op basis van een analyse uitgevoerd door iemand die echte gegevens gebruikte, geconcludeerd dat de oorzaak van de meeste fouten individuele waarden of combinaties van waardenparen is (bron). Deze overweging vormde blijkbaar de basis voor de ontwikkeling van paarsgewijs testen.

In principe is de rechtvaardiging min of meer redelijk, omdat er enig onderzoek is gedaan. Uit deze uitleg wordt echter ook duidelijk dat deze regel niet op unieke wijze waar is en dat deze niet voor alle gevallen geldt. Daarnaast is het de moeite waard om na te denken over het concept van “de meeste fouten” :)

4. Hoe en wanneer moet je het (niet) toepassen

Uiteraard moet deze techniek juist worden toegepast in de gevallen waarin dit passend is.

Als we bijvoorbeeld eenvoudigweg een formulier hebben met een bepaald aantal verschillende velden, waarvan de gegevens eenvoudigweg in de database worden opgeslagen, dan heeft het gebruik van deze techniek vrijwel geen zin, omdat de gegevens geen interactie met elkaar hebben ( Hoewel er nuances kunnen zijn, Hoe deze gegevens worden opgeslagen in de database)! En paarsgewijze testen is een techniek die specifiek moet worden gebruikt in het geval van interactief waarden (voor niet-interactieve waarden - meestal is het vrij eenvoudig aparte cheque elk van de parameters).

Met op elkaar inwerkende parameters bedoel ik in de eerste plaats de parameters die het resultaat niet alleen beïnvloeden door hun eigen individuele waarden, maar juist door combinaties met elkaar. Trouwens, hier goed voorbeeld interacties - het definiëren van testomgevingsopties, bijvoorbeeld van meerdere besturingssystemen, browsers en monitorresoluties.

Dus als de parameters van het probleem op elkaar inwerken, lijkt het erop dat paarsgewijze testen die prachtige oplossing zouden zijn die zowel moeite als moeite zou besparen. volledige testen zal voorzien. Maar deze techniek biedt natuurlijk een redelijk hoge dekking, maar is verre van compleet - als er plotseling een fout optreedt wanneer drie, vier of meer parameters worden gecombineerd, helpt paarsgewijs testen misschien niet (het hangt af van je geluk). Op een goede manier moet het gebruik van paarsgewijs testen worden voorafgegaan door een analyse van de te testen applicatie om te bepalen of het testen van specifieke combinaties van parameterparen daarvoor geschikt is.

Hoe dan ook, als je paarsgewijs testen niet vergelijkt met uitputtend testen, is het duidelijk dat zelfs het gebruik van deze techniek behoorlijk arbeidsintensief is. En in andere gevallen kan het beter zijn om meerdere sets van de meest gebruikte sets te testen echte gebruikers gegevens, in plaats van veel moeite te doen en veel gegenereerde sets te testen, die misschien niet echt populaire combinaties bevatten.

5. Dus wat wilde ik zeggen?

Natuurlijk heb ik er maar een paar of drie genoemd, maar er zijn een groot aantal overwegingen waarmee rekening moet worden gehouden bij de beslissing om de paarsgewijze testtechniek te gebruiken - het is de moeite waard om op zijn minst naar de hierboven genoemde artikelen te verwijzen (ze zijn over het algemeen de moeite waard lezen als je interesse hebt in dit onderwerp). En paarsgewijs testen is slechts een hulpmiddel dat, net als andere hulpmiddelen, verstandig moet worden gebruikt.