Testing av programvareprodukter. Hvordan teste funksjonaliteten til en funksjon som bruker andre funksjoner i den? Endre relatert testing

Selv om du er så tolerant at du kan starte programmet på nytt 18 ganger etter en krasj innen en halv time og først deretter kaste skjermen direkte mot vinduet, er du enig i at det ville være mer behagelig å jobbe med dette programmet hvis det ikke "krasjet" ".

Hvordan kan du sørge for at tilfeller av krasj, frysing eller unnlatelse av å utføre de nødvendige handlingene til programmet du har utviklet blir svært sjeldne?

Det eksakte svaret på dette spørsmålet Nei. Men gjennom århundrene har de klokeste forskerne tenkt på dette emnet i årevis og klart å finne et middel som, hvis det ikke eliminerer alle programfeil, i det minste skaper en illusjon av handling for å eliminere dem.

Og dette middelet kalles TESTING programvareprodukt .

Ifølge kloke mennesker er testing en av de mest etablerte måtene å sikre kvaliteten på utviklingen programvare og er inkludert i settet effektive midler moderne systemå sikre kvaliteten på programvareproduktet.

Kvaliteten til et programvareprodukt er preget av et sett med egenskaper som bestemmer hvor "bra" produktet er fra interessentenes synspunkt, som produktkunden, sponsoren, sluttbrukeren, produktutviklere og testere, støtteingeniører, markedsføring , opplæring og salgspersonell. Hver av deltakerne kan ha en annen idé om produktet og hvor bra eller dårlig det er, det vil si hvor høy kvalitet på produktet er. Å sette problemet med å sikre produktkvalitet resulterer i oppgaven med å identifisere interessenter, deres kvalitetskriterier og deretter finne den optimale løsningen som tilfredsstiller disse kriteriene.

Når og hvem?

I følge erfarne utviklere bør testing av et programvareprodukt utføres helt fra begynnelsen av opprettelsen. Men samtidig bør ikke erfarne utviklere selv delta i testingen, siden dette ikke er en kongelig sak. Programvareproduktet må testes av spesialtrente ansatte kalt testere, fordi selv den mest erfarne utvikleren ikke vil kunne se feilen sin, selv ved å bruke de nyeste optiske instrumentene.

Imidlertid er alle utviklere enige om at testing av et programvareprodukt fra et synspunkt om klassifisering etter formål bør deles inn i to klasser:

  • Funksjonstesting
  • Ikke-funksjonell testing

Funksjonstesting

Funksjonell testing betyr å kontrollere at et programvareprodukt samsvarer med funksjonskravene spesifisert i de tekniske spesifikasjonene for å lage dette produktet. For å si det enkelt, funksjonstesting sjekker om programvareproduktet utfører alle funksjonene det skal.

Så du bestemte deg til slutt for å gjennomføre funksjonstesting. Du ser nærmere på den tekniske spesifikasjonen, leser funksjonskravene og innser at de i det minste ikke er i den rekkefølgen testingen kan gjøres i. Du vil bli overrasket over at andre allerede for ganske lenge siden la merke til denne uoverensstemmelsen og fant ut hvordan de skulle overvinne den.

For å gjennomføre funksjonstesting utvikler personalet ved teknisk kontrollavdeling et dokumentprogram og metodikk for å teste funksjonaliteten til applikasjonen (API). PMI-dokumentet inneholder en liste over testscenarier for programvareprodukt (testcases) med Detaljert beskrivelse trinn. Hvert trinn i testscenarioet er preget av handlingene til brukeren (testspesialisten) og de forventede resultatene - programmets respons på disse handlingene. Testprogrammet og metodikken må simulere driften av programvareproduktet i reell modus. Dette betyr at testscenarioet bør bygges på grunnlag av en analyse av operasjonene som fremtidige brukere av systemet vil utføre, og ikke være en kunstig kompilert sekvens av manipulasjoner som bare er forståelig for utvikleren.

Vanligvis utføres funksjonell testing på to nivåer:

  • Komponent (enhet) testing. Testing av individuelle komponenter i et programvareprodukt, fokusert på deres spesifikke, formål og funksjonelle egenskaper.
  • Integrasjonstesting. Denne typen testing utføres etter komponenttesting og er rettet mot å identifisere defekter i samspillet mellom ulike delsystemer på nivå med kontrollflyt og datautveksling.

Ikke-funksjonell testing

Ikke-funksjonell testing evaluerer kvalitetene til et programvareprodukt, for eksempel ergonomi eller ytelse.

Jeg tror viktigheten av denne typen testing er tydelig og krever ingen begrunnelse. Tross alt forstår alle at hvis for eksempel systemytelsen ikke er tilstrekkelig, må brukerne vente en halv dag på svar på handlingene deres, noe som kan føre til deres massedvale.

Som navnet antyder, verifiserer ikke-funksjonell testing at et programvareprodukt oppfyller de ikke-funksjonelle kravene til mandat for dens tilblivelse. Og, som i tilfellet med funksjonell testing, utvikles et testprogram og metodikk for ikke-funksjonell testing.

Innebygd programvaretesting og samsvar i den smidige æraen

Overholdelse av industristandarder er ikke noe du kan overse eller gjøre senere; det er en integrert del av utviklingsprosessen for innebygd programvare (programvare). For noen bransjer - som flyelektronikk, bilindustrien og helsevesenet - er streng overholdelse av kvalitetsstandarder i utviklingen av komplekse og problemfrie innebygde systemer avgjørende for å bringe et produkt til markedet. Tradisjonelt har testing spilt en viktig rolle i utviklingen av innebygde systemer for standardregulerte bransjer. Imidlertid har etablerte testpraksis og -prosesser, deres plass og rolle i slike prosjekter, endret seg betydelig de siste årene. Det var en game changer, og når spillereglene endres, må du endre med dem for å vinne.

Med den konstante utviklingen av nye, banebrytende teknologier, må bedrifter raskt tilby produkter til markedet som er pålitelige, trygge, enkle å bruke og kompatible med andre systemer – bare for å unngå å gå seg vill i den raskt skiftende teknologiske verdenen. I en slik situasjon blir den tradisjonelle fossefallsmodellen, hvor programvareutviklingsprosessen er strengt sekvensiell og testing utføres helt på slutten, en saga blott. DevOps og Agile-metoder blir stadig mer populære fordi de lar ingeniører fullføre oppgaver som tidligere fulgte hverandre samtidig.

Ytelsestesting

I løpet av ytelsestestfasen er det første trinnet lasttesting, hvis formål er å sjekke om systemet vil reagere tilstrekkelig på ytre påvirkninger i en modus nær virkelighetens drift.

I tillegg til belastningstesting utføres tester under forhold med minimal maskinvare og maksimal belastning - stresstesting, samt tester under forhold med maksimale mengder bearbeidet informasjon - volumetrisk testing.

Det er en annen type testing: stabilitets- og pålitelighetstesting, som ikke bare inkluderer langtidstesting av et programvareprodukt under normale forhold, men også dets evne til å gå tilbake til normal drift etter korte perioder med stressende belastninger.

Dokumentasjon for testing

Som nevnt ovenfor utføres testing i samsvar med programmet og testmetodikken, som er utviklet i samsvar med GOST 34.603-92.

For å gjennomføre testing utvikles en testcase, som må inneholde nok data til å teste alle driftsmåter av programvareproduktet. Vanligvis lages en testcase i fellesskap av kunden og entreprenøren basert på reelle data.

For å gjennomføre alle typer ytelsestesting opprettes oftest en såkalt datagenerator, som tillater automatisk modus opprette en tilstrekkelig mengde data for å oppnå et objektivt resultat ved vurdering av ytelse.

Under testing utarbeides det en testprotokoll som inneholder informasjon om gjennomføring av alle teststadier og -trinn og kommentarer mottatt under testingen.

Hvis testresultatet er negativt, blir manglene rettet og testet på nytt.

Utforskende testing

Utforskende testing (ad hoc-testing er en undertype av funksjonstesting. Den brukes i raskt voksende prosjekter med fleksible utviklingsmetoder, hvor det ikke er klar dokumentasjon og krav. Utforskende testing er den høyeste aerobatikken innen programvaretesting. Kvalitativ testing er tilgjengelig for høyt kvalifiserte spesialister og nesten helt avhengig av utøveren, hans erfaring, kunnskap (både i fagområdet og i testmetoder), og evnen til raskt å komme til essensen.

Stresstesting

Lasttesting er prosessen med å analysere ytelsen til systemet som testes under belastning. Hensikten med lasttesting er å fastslå applikasjonens evne til å motstå ytre belastninger. Vanligvis utføres tester i flere stadier.

1. Generering av testskript

For effektiv analyse må scenarier være så nærme som mulig faktiske brukstilfeller. Det er viktig å forstå at unntak alltid er mulig, og selv den mest detaljerte testplanen dekker kanskje ikke et enkelt tilfelle.

2. Utvikling av en testkonfigurasjon

Ved å ha testscenarier er det viktig å fordele rekkefølgen på økende belastning. For vellykket analyse er det nødvendig å identifisere ytelsesevalueringskriterier (svarhastighet, forespørselsbehandlingstid osv.).

3. Gjennomføring av en testtest

Når du utfører tester, er det viktig å overvåke gjennomføringen av scenarier og responsen til systemet som testes. Å emulere høye belastninger krever seriøs maskinvare- og programvareinfrastruktur. I noen tilfeller brukes matematiske modelleringsmetoder for å redusere arbeidskostnadene. Data innhentet ved lav belastning er lagt til grunn og tilnærmet. Jo høyere nivå av simulert belastning, desto lavere er nøyaktigheten av estimatet. Denne metoden reduserer imidlertid kostnadene betydelig.

Test automatisering

Hovedtrekket ved automatisert testing er muligheten til raskt å utføre regresjonstester. Hovedfordelene med automatisering (ifølge en rapport fra Worksoft) er økt personaleffektivitet, tidligere oppdagelse av feil og mer høy kvalitet forretningsprosesser. Disse fordelene oppveies av en betydelig ulempe: høye kostnader - på grunn av de høye kostnadene ved å implementere og støtte testautomatisering, bruker omtrent 50 % av bedriftene fortsatt hovedsakelig manuell testing.

Brukbarhetstesting

Enhver applikasjon opprettes for å kunne brukes. Brukervennlighet er en viktig kvalitetsindikator for et program. IT-bransjen kjenner til mange eksempler på at prosjekter tar fart etter en vellykket brukervennlighetsfiks. Jo bredere publikum er, desto viktigere er brukervennlighetsfaktoren. Usability testing involverer detaljert analyse av brukeratferd. For å vurdere ergonomi er det viktig å ha data ikke bare om hastigheten på å fullføre en forretningsoppgave, men også om brukerens følelser, ansiktsuttrykk og stemmeklang.

Konfigurasjonstesting

Konfigurasjonstesting gir trygghet for at applikasjonen vil fungere på forskjellige plattformer, og derfor for maksimalt antall brukere. For WEB-applikasjoner velges vanligvis testing på tvers av nettlesere. For Windows-applikasjoner - testing på div operativsystemer og bitstørrelser (x86, x64). En viktig komponent i konfigurasjonstesting er testinfrastrukturen: for å utføre tester, må du hele tiden vedlikeholde en flåte av testmaskiner. Antallet deres varierer fra 5 til flere dusin.

Integrasjonstesting

Hvis prosjektet ditt har mer enn én komponent, trenger det integrasjonstesting. Med en kompleks applikasjonsarkitektur er en nødvendig betingelse for kvalitetssikring å sjekke samspillet mellom programdeler. Testing oppnås ved å utvikle og gjennomføre "ende-til-ende"-saker. Integrasjonstesting utføres etter komponenttesting. Derfor er det svært viktig å ta hensyn til erfaringen med komponenttesting, samtidig som man respekterer testsakenes forretningsorientering.

Stresstesting

Hvert system har en grense normal funksjon. Når grensen overskrides, går systemet inn i en stresstilstand og endrer atferden betydelig. Stresstesting tester driften av en applikasjon under forhold som overskrider normale funksjonsgrenser. Dette er spesielt viktig for "kritiske" programmer: bankprogramvare, flyindustriprogrammer, medisin. Stresstesting utføres ikke bare på programvareutviklingsstadiet, men også gjennom hele driftssyklusen for å innhente og behandle systematferdsdata over lang tid.

La oss anta at det er en get-data-funksjon, som returnerer et kart med informasjon om bruker-ID-en som passerte. Nå bruker denne funksjonen 3 funksjoner kilde-a, kilde-b og kilde-c for å produsere tre forskjellige typer kart. Nå skal vi kombinere alle disse kartene til ett kart og returnere fra get-data.

Når jeg tester get-databør jeg se etter datatilgjengelighet for nøkler? Er det fornuftig at denne funksjonen mislykkes i enhetstester hvis en av kilde-a, kilde-b og kilde-c feiler? Hvis jobben til denne funksjonen er å slå sammen data, og det gjør den, burde det være nok, ikke sant?

1

2 svar

La oss anta at det er en get-data-funksjon som returnerer et kart med informasjon om bruker-IDen som sendes til.

Flott. Da bør du sjekke det ut. Returnerer du riktige data for en gitt ID?

nå bruker denne funksjonen 3 funksjoner kilde-a, kilde-b og kilde-c for å produsere tre forskjellige typer kart.

Hvilken implementeringsdetalj bør du ignorere i testen. Alt du tester er at arbeidsenheten din (denne metoden) gjør det den skal gjøre (ta en ID og returnere XYZ-data for den IDen). Hvordan denne metoden spiller ingen rolle - tross alt er den viktigste fordelen med denne enhetstesten at du kan refaktorere metodens implementering og testen vil sjekke at du gjorde det riktig.

Imidlertid må du sannsynligvis håne datakildene, så på et tidspunkt må testen sannsynligvis vite hvordan denne koden fungerer. Du må balansere tre konkurrerende mål her: å gjøre testen isolert (ved å håne dataene), samtidig som testen fokuserer på krav og pragmatisme.

Tross alt er dette viktig kode. Det er tester for å støtte den faktiske koden, å bruke mye tid og bryet med å sjekke polish er ikke like nyttig som tester lager .

I enhetstesting bør du kun teste funksjonaliteten til én klasse, hvis kilde-a-, kilde-b- og kilde-c-metodene dine kaller andre klasser bør du håne dem (de bør enhetstestes i sine klasser).

I integrasjonstesting tester du oppførselen til flere klasser som samhandler mellom dem, dette betyr at get-data-funksjonen din må sjekke at dataene som hentes er korrekte (kilde-a, kilde-b og kilde-c er korrekte og dataene er riktig tilkoblet).

Enhetstester er enklere og mer fokuserte og bør skrives av utviklere. Integrasjonstester blir vanligvis utdaterte relativt raskt (hvis noen intern komponent har blitt endret), noe som gjør dem vanskeligere å utføre. Må opprettes av en QA-profil.

Selv om du er så tolerant at du kan starte programmet på nytt 18 ganger etter en krasj innen en halv time og først deretter kaste skjermen direkte mot vinduet, er du enig i at det ville være mer behagelig å jobbe med dette programmet hvis det ikke "krasjet" ".

Hvordan kan du sørge for at tilfeller av krasj, frysing eller unnlatelse av å utføre de nødvendige handlingene til programmet du har utviklet blir svært sjeldne?

Det finnes ikke noe eksakt svar på dette spørsmålet. Men gjennom århundrene har de klokeste forskerne tenkt på dette emnet i årevis og klart å finne et middel som, hvis det ikke eliminerer alle programfeil, i det minste skaper en illusjon av handling for å eliminere dem.

Og dette middelet kalles TESTE programvareproduktet.

Ifølge kloke mennesker er testing en av de mest etablerte måtene å sikre kvaliteten på programvareutvikling og er inkludert i settet med effektive verktøy til et moderne kvalitetssikringssystem for programvareprodukter.

Kvaliteten til et programvareprodukt er preget av et sett med egenskaper som bestemmer hvor "bra" produktet er fra interessentenes synspunkt, som produktkunden, sponsoren, sluttbrukeren, produktutviklere og testere, støtteingeniører, markedsføring , opplæring og salgspersonell. Hver av deltakerne kan ha en annen idé om produktet og hvor bra eller dårlig det er, det vil si hvor høy kvalitet på produktet er. Å sette problemet med å sikre produktkvalitet resulterer i oppgaven med å identifisere interessenter, deres kvalitetskriterier og deretter finne den optimale løsningen som tilfredsstiller disse kriteriene.

Når og hvem?

I følge erfarne utviklere bør testing av et programvareprodukt utføres helt fra begynnelsen av opprettelsen. Men samtidig bør ikke erfarne utviklere selv delta i testingen, siden dette ikke er en kongelig sak. Programvareproduktet må testes av spesialtrente ansatte kalt testere, fordi selv den mest erfarne utvikleren ikke vil kunne se feilen sin, selv ved å bruke de nyeste optiske instrumentene.

Imidlertid er alle utviklere enige om at testing av et programvareprodukt fra et synspunkt om klassifisering etter formål bør deles inn i to klasser:

  • Funksjonstesting
  • Ikke-funksjonell testing

Funksjonstesting

Funksjonell testing betyr å kontrollere at et programvareprodukt samsvarer med funksjonskravene spesifisert i de tekniske spesifikasjonene for å lage dette produktet. For å si det enkelt, funksjonstesting sjekker om programvareproduktet utfører alle funksjonene det skal.

Så du bestemte deg til slutt for å gjennomføre funksjonstesting. Du ser nærmere på den tekniske spesifikasjonen, leser funksjonskravene og innser at de i det minste ikke er i den rekkefølgen testingen kan gjøres i. Du vil bli overrasket over at andre allerede for ganske lenge siden la merke til denne uoverensstemmelsen og fant ut hvordan de skulle overvinne den.

For å gjennomføre funksjonstesting utvikler personalet ved teknisk kontrollavdeling et dokumentprogram og metodikk for å teste funksjonaliteten til applikasjonen (API). PMI-dokumentet inneholder en liste over scenarier for testing av programvareprodukt (testtilfeller) med en detaljert beskrivelse av trinnene. Hvert trinn i testscenarioet er preget av handlingene til brukeren (testspesialisten) og de forventede resultatene - programmets respons på disse handlingene. Testprogrammet og metodikken må simulere driften av programvareproduktet i reell modus. Dette betyr at testscenarioet bør bygges på grunnlag av en analyse av operasjonene som fremtidige brukere av systemet vil utføre, og ikke være en kunstig kompilert sekvens av manipulasjoner som bare er forståelig for utvikleren.

Vanligvis utføres funksjonell testing på to nivåer:

  • Komponent (enhet) testing. Testing av individuelle komponenter i et programvareprodukt, fokusert på deres spesifikke, formål og funksjonelle egenskaper.
  • Integrasjonstesting. Denne typen testing utføres etter komponenttesting og er rettet mot å identifisere defekter i samspillet mellom ulike delsystemer på nivå med kontrollflyt og datautveksling.

Ikke-funksjonell testing

Ikke-funksjonell testing evaluerer kvalitetene til et programvareprodukt, for eksempel ergonomi eller ytelse.

Jeg tror viktigheten av denne typen testing er tydelig og krever ingen begrunnelse. Tross alt forstår alle at hvis for eksempel systemytelsen ikke er tilstrekkelig, må brukerne vente en halv dag på svar på handlingene deres, noe som kan føre til deres massedvale.

Som navnet antyder, kontrollerer ikke-funksjonell testing at et programvareprodukt samsvarer med ikke-funksjonelle krav fra de tekniske spesifikasjonene for opprettelsen. Og, som i tilfellet med funksjonell testing, utvikles et testprogram og metodikk for ikke-funksjonell testing.

Innebygd programvaretesting og samsvar i den smidige æraen

Overholdelse av industristandarder er ikke noe du kan overse eller gjøre senere; det er en integrert del av utviklingsprosessen for innebygd programvare (programvare). For noen bransjer - som flyelektronikk, bilindustrien og helsevesenet - er streng overholdelse av kvalitetsstandarder i utviklingen av komplekse og problemfrie innebygde systemer avgjørende for å bringe et produkt til markedet. Tradisjonelt har testing spilt en viktig rolle i utviklingen av innebygde systemer for standardregulerte bransjer. Imidlertid har etablerte testpraksis og -prosesser, deres plass og rolle i slike prosjekter, endret seg betydelig de siste årene. Det var en game changer, og når spillereglene endres, må du endre med dem for å vinne.

Med den konstante utviklingen av nye, banebrytende teknologier, må bedrifter raskt tilby produkter til markedet som er pålitelige, trygge, enkle å bruke og kompatible med andre systemer – bare for å unngå å gå seg vill i den raskt skiftende teknologiske verdenen. I en slik situasjon blir den tradisjonelle fossefallsmodellen, hvor programvareutviklingsprosessen er strengt sekvensiell og testing utføres helt på slutten, en saga blott. DevOps og Agile-metoder blir stadig mer populære fordi de lar ingeniører fullføre oppgaver som tidligere fulgte hverandre samtidig.

Ytelsestesting

I løpet av ytelsestestfasen er det første trinnet lasttesting, hvis formål er å sjekke om systemet vil reagere tilstrekkelig på ytre påvirkninger i en modus nær virkelighetens drift.

I tillegg til belastningstesting utføres tester under forhold med minimal maskinvare og maksimal belastning - stresstesting, samt tester under forhold med maksimale mengder bearbeidet informasjon - volumetrisk testing.

Det er en annen type testing: stabilitets- og pålitelighetstesting, som ikke bare inkluderer langtidstesting av et programvareprodukt under normale forhold, men også dets evne til å gå tilbake til normal drift etter korte perioder med stressende belastninger.

Dokumentasjon for testing

Som nevnt ovenfor utføres testing i samsvar med programmet og testmetodikken, som er utviklet i samsvar med GOST 34.603-92.

For å gjennomføre testing utvikles en testcase, som må inneholde nok data til å teste alle driftsmåter av programvareproduktet. Vanligvis lages en testcase i fellesskap av kunden og entreprenøren basert på reelle data.

For å gjennomføre alle typer ytelsestesting opprettes oftest en såkalt datagenerator, som lar deg automatisk lage en tilstrekkelig mengde data for å oppnå et objektivt resultat ved vurdering av ytelse.

Under testing utarbeides det en testprotokoll som inneholder informasjon om gjennomføring av alle teststadier og -trinn og kommentarer mottatt under testingen.

Hvis testresultatet er negativt, blir manglene rettet og testet på nytt.

Utforskende testing

Utforskende testing (ad hoc-testing er en undertype av funksjonstesting. Den brukes i raskt voksende prosjekter med fleksible utviklingsmetoder, hvor det ikke er klar dokumentasjon og krav. Utforskende testing er den høyeste aerobatikken innen programvaretesting. Kvalitativ testing er tilgjengelig for høyt kvalifiserte spesialister og nesten helt avhengig av utøveren, hans erfaring, kunnskap (både i fagområdet og i testmetoder), og evnen til raskt å komme til essensen.

Stresstesting

Lasttesting er prosessen med å analysere ytelsen til systemet som testes under belastning. Hensikten med lasttesting er å fastslå applikasjonens evne til å motstå ytre belastninger. Vanligvis utføres tester i flere stadier.

1. Generering av testskript

For effektiv analyse må scenarier være så nærme som mulig faktiske brukstilfeller. Det er viktig å forstå at unntak alltid er mulig, og selv den mest detaljerte testplanen dekker kanskje ikke et enkelt tilfelle.

2. Utvikling av en testkonfigurasjon

Ved å ha testscenarier er det viktig å fordele rekkefølgen på økende belastning. For vellykket analyse er det nødvendig å identifisere ytelsesevalueringskriterier (svarhastighet, forespørselsbehandlingstid osv.).

3. Gjennomføring av en testtest

Når du utfører tester, er det viktig å overvåke gjennomføringen av scenarier og responsen til systemet som testes. Å emulere høye belastninger krever seriøs maskinvare- og programvareinfrastruktur. I noen tilfeller brukes matematiske modelleringsmetoder for å redusere arbeidskostnadene. Data innhentet ved lav belastning er lagt til grunn og tilnærmet. Jo høyere nivå av simulert belastning, desto lavere er nøyaktigheten av estimatet. Denne metoden reduserer imidlertid kostnadene betydelig.

Test automatisering

Hovedtrekket ved automatisert testing er muligheten til raskt å utføre regresjonstester. Hovedfordelene med automatisering (ifølge en rapport fra Worksoft) er økt personaleffektivitet, tidligere oppdagelse av feil og høyere kvalitet på forretningsprosesser. Disse fordelene oppveies av en betydelig ulempe: høye kostnader - på grunn av de høye kostnadene ved å implementere og støtte testautomatisering, bruker omtrent 50 % av bedriftene fortsatt hovedsakelig manuell testing.

Brukbarhetstesting

Enhver applikasjon opprettes for å kunne brukes. Brukervennlighet er en viktig kvalitetsindikator for et program. IT-bransjen kjenner til mange eksempler på at prosjekter tar fart etter en vellykket brukervennlighetsfiks. Jo bredere publikum er, desto viktigere er brukervennlighetsfaktoren. Usability testing involverer detaljert analyse av brukeratferd. For å vurdere ergonomi er det viktig å ha data ikke bare om hastigheten på å fullføre en forretningsoppgave, men også om brukerens følelser, ansiktsuttrykk og stemmeklang.

Konfigurasjonstesting

Konfigurasjonstesting gir trygghet for at applikasjonen vil fungere på forskjellige plattformer, og derfor for maksimalt antall brukere. For WEB-applikasjoner velges vanligvis testing på tvers av nettlesere. For Windows-applikasjoner - testing på ulike operativsystemer og bithastigheter (x86, x64). En viktig komponent i konfigurasjonstesting er testinfrastrukturen: for å utføre tester, må du hele tiden vedlikeholde en flåte av testmaskiner. Antallet deres varierer fra 5 til flere dusin.

Integrasjonstesting

Hvis prosjektet ditt har mer enn én komponent, trenger det integrasjonstesting. Med en kompleks applikasjonsarkitektur er en nødvendig betingelse for kvalitetssikring å sjekke samspillet mellom programdeler. Testing oppnås ved å utvikle og gjennomføre "ende-til-ende"-saker. Integrasjonstesting utføres etter komponenttesting. Derfor er det svært viktig å ta hensyn til erfaringen med komponenttesting, samtidig som man respekterer testsakenes forretningsorientering.

Stresstesting

Ethvert system har en grense for normal funksjon. Når grensen overskrides, går systemet inn i en stresstilstand og endrer atferden betydelig. Stresstesting tester driften av en applikasjon under forhold som overskrider normale funksjonsgrenser. Dette er spesielt viktig for "kritiske" programmer: bankprogramvare, flyindustriprogrammer, medisin. Stresstesting utføres ikke bare på programvareutviklingsstadiet, men også gjennom hele driftssyklusen for å innhente og behandle systematferdsdata over lang tid.

Blant alle typer inntar funksjonell testing med rette en ledende posisjon, siden programmet først og fremst må fungere riktig, ellers vil brukervennlighet, sikkerhet og tilstrekkelig hastighet være til ingen nytte. I tillegg til å mestre ulike testteknikker, må hver spesialist forstå hvordan man utfører en test riktig for å oppnå det mest effektive resultatet.

Funksjonstesting: hvor skal hovedinnsatsen rettes?

For enhets- og systemtesting;

For å sjekke "hvit" eller "svart" boksen;

For manuell testing og automatisering;

For å teste ny funksjonalitet eller;

For "negative" eller "positive" tester.

Mellom alle disse aktivitetsområdene er det viktig å finne den rette veien, som vil være "midten", for å balansere innsatsen, og utnytte fordelene til hvert av områdene maksimalt.

Programvareverifisering utføres forskjellige måter, hvorav en er svart boks eller datadrevet testing.

Programmet i dette tilfellet presenteres fra synspunktet til en "svart boks", og testen utføres for å bestemme omstendighetene der oppførselen til programmet ikke vil samsvare med spesifikasjonen. Alle feil identifiseres gjennom datahåndtering, som utføres gjennom uttømmende testing, det vil si ved bruk av alle mulige

Hvis utførelsen av en kommando for et program avhenger av hendelsene som går foran det, vil det kreve å sjekke alle mulige sekvenser. Det er ganske åpenbart at for de fleste tilfeller er det ganske enkelt umulig å utføre uttømmende testing, så oftere velger de et akseptabelt eller rimelig alternativ som er begrenset til å kjøre programmet på en liten delmengde av alle inndata. Dette alternativet garanterer fullt ut ingen avvik fra spesifikasjonene.

Funksjonstesting innebærer å velge riktig test. Samtidig er det vanlig å skille mellom følgende metoder for å generere sett for dem:

Grenseverdianalyse;

Ekvivalent partisjon;

Feilantagelse;

Analyse av sammenhenger mellom årsaker og virkninger.

Du kan vurdere hver av dem separat.

Grenseverdianalyse. Grenseverdier forstås vanligvis som de som ligger på grensene til ekvivalensklasser. På slike steder er det mest sannsynlig å finne en feil. Bruken av en slik metode krever en viss kreativitet fra spesialisten, samt spesialisering i dette spesifikke problemet som vurderes.

Tilsvarende partisjon. Alle mulige sett med inngangsparametere er delt inn i flere ekvivalensklasser. Dataene er kombinert basert på prinsippet om å oppdage lignende feil. Det er generelt akseptert at hvis et sett med en klasse viser en feil, vil de tilsvarende også indikere det. Funksjonstesting av denne metoden utføres i to trinn: i det første identifiseres ekvivalensklasser, og i det andre er det allerede dannet spesielle tester.

Analyse av årsakssammenhenger. Systemet kan velge tester med høy ytelse ved å utføre slike kontroller. I dette tilfellet tas en egen inngangstilstand som årsak, og utgangstilstanden blir sett på som effekten. Metoden er basert på ideen om å tilskrive alle typer årsaker til visse konsekvenser, det vil si å avklare de samme årsak-og-virkning-forhold. Testing av et programvareprodukt utføres i flere stadier, noe som resulterer i en liste over årsaker og påfølgende konsekvenser.

  • utilsiktede avvik fra utviklere fra arbeidsstandarder eller implementeringsplaner;
  • spesifikasjoner av funksjons- og grensesnittkrav er laget uten å overholde utviklingsstandarder, noe som fører til forstyrrelse av funksjonen til programmer;
  • organisering av utviklingsprosessen - ufullkommen eller utilstrekkelig styring av prosjektlederens ressurser (menneskelige, tekniske, programvare, etc.) og spørsmål om testing og integrering av prosjektelementer.

La oss se på testprosessen basert på anbefalingene i ISO/IEC 12207-standarden, og gi hvilke typer feil som oppdages i hver livssyklusprosess.

Kravutviklingsprosess. Når analytikere bestemmer det første konseptet til systemet og de første kravene til systemet, gjør analytikere spesifikasjonsfeil toppnivå systemer og bygge en konseptuell modell av fagområdet.

Typiske feil i denne prosessen er:

  • mangelfulle kravspesifikasjoner for sluttbrukere - feil spesifikasjon av programvarens interaksjon med driftsmiljøet eller med brukere;
  • manglende overholdelse av kundekrav for individuelle og generelle programvareegenskaper;
  • feil beskrivelse av funksjonelle egenskaper;
  • mangel på tilgjengelighet av verktøy for alle aspekter ved implementering av kundekrav osv.

Design prosess.Feil i design av komponenter kan oppstå ved beskrivelse av algoritmer, kontrolllogikk, datastrukturer, grensesnitt, dataflytmodelleringslogikk, input-output formater osv. Disse feilene er basert på feil i analytikerspesifikasjoner og designfeil. Disse inkluderer feil relatert til:

  • med definisjonen av brukergrensesnittet med miljøet;
  • med en beskrivelse av funksjonene (utilstrekkelighet av målene og målene for komponentene som oppdages ved kontroll av et sett med komponenter);
  • med definisjonen av og samspillet mellom prosesser (resultatet av feil bestemmelse av forholdet mellom komponenter og prosesser);
  • med feil spesifikasjon av data og deres strukturer når du beskriver individuelle komponenter og programvaren som helhet;
  • med feil beskrivelse av modulalgoritmer;
  • med fastsettelse av forekomstbetingelsene mulige feil i et program;
  • i strid med standardene og teknologiene som er vedtatt for prosjektet.

Kodingstadium.På dette stadiet oppstår feil som er et resultat av designfeil, feil fra programmerere og ledere under utvikling og feilsøking av systemet. Årsakene til feil er:

  • mangel på kontroll over verdiene til inngangsparametere, matriseindekser, loopparametere, utdataresultater, divisjon med 0, etc.;
  • feil håndtering av uregelmessige situasjoner ved analyse av returkoder fra kalte subrutiner, funksjoner osv.;
  • brudd på kodestandarder (dårlige kommentarer, irrasjonelle tildeling av moduler og komponent, etc.);
  • bruken av ett navn for å angi forskjellige objekter eller forskjellige navn på ett objekt, dårlige navneminner; - inkonsekvente endringer i programmet av forskjellige utviklere, etc.

Testprosess.I denne prosessen blir det gjort feil av programmerere og testere når de utfører montering og testing av teknologi, velger testsett og testscenarier osv. Feil i programvare forårsaket av denne typen feil må identifiseres, elimineres og ikke påvirke statistikken til komponent og programvarefeil generelt.

Vedlikeholdsprosess.Under vedlikeholdsprosessen oppdages feil som er forårsaket av mangler og mangler ved driftsdokumentasjon, utilstrekkelige indikatorer på modifiserbarhet og lesbarhet, samt inkompetanse til personer som er ansvarlige for vedlikehold og/eller forbedring av programvaren. Avhengig av arten av endringene som gjøres, kan nesten alle feil som ligner de tidligere oppførte feilene på tidligere stadier forekomme på dette stadiet.

Alle feil som oppstår i programmer er vanligvis delt inn i følgende klasser [7.12]:

  • logiske og funksjonelle feil;
  • beregnings- og kjøretidsfeil;
  • inn-/utdata- og datamanipulasjonsfeil;
  • grensesnittfeil;
  • datavolumfeil osv.

Logiske feil er årsaken til brudd på logikken til algoritmen, intern inkonsekvens av variabler og operatører, samt programmeringsregler. Funksjonelle feil er en konsekvens av feil definerte funksjoner, brudd på rekkefølgen på deres applikasjon eller mangel på fullstendig implementering, etc.

Beregningsfeil oppstår på grunn av unøyaktighet av kildedata og implementerte formler, metodefeil, feil bruk av beregningsoperasjoner eller operander. Kjøretidsfeil er assosiert med unnlatelse av å gi nødvendig forespørselsbehandlingshastighet eller programgjenopprettingstid.

I/O-feil og datamanipulering er en konsekvens av dårlig kvalitet på forberedelse av data for programkjøring, feil når de legges inn i databaser eller når de hentes fra dem.

Grensesnittfeil refererer til feil i forholdet mellom individuelle elementer med hverandre, som manifesterer seg under overføring av data mellom dem, så vel som under interaksjon med driftsmiljøet.

Volumfeil relaterer seg til data og er en konsekvens av at de implementerte tilgangsmetodene og databasestørrelsene ikke tilfredsstiller de reelle volumene av systeminformasjon eller intensiteten i behandlingen av dem.

De gitte hovedklassene av feil er karakteristiske for ulike typer programvarekomponenter og de manifesterer seg i programmer på ulike måter. Når du arbeider med en database, oppstår det derfor feil i datapresentasjon og manipulasjon, logiske feil i å spesifisere anvendte databehandlingsprosedyrer osv. I beregningsprogrammer dominerer beregningsfeil, og i kontroll- og prosesseringsprogrammer dominerer logiske og funksjonelle feil. Programvare, som består av mange forskjellige programmer som implementerer forskjellige funksjoner, kan inneholde feil forskjellige typer. Grensesnittfeil og volumbrudd er typiske for alle typer system.

Å analysere typene feil i programmer er en forutsetning for å lage testplaner og testmetoder for å sikre programvareriktighet.

På det nåværende utviklingsstadiet av støtteverktøy for programvareutvikling (CASE-teknologier, objektorienterte metoder og verktøy for utforming av modeller og programmer), utføres et design der programvaren er beskyttet mot de vanligste feilene og dermed forhindrer at det oppstår programvarefeil.

Sammenheng mellom feil og feil.Tilstedeværelsen av en feil i et program fører som regel til feil i programvaren under driften. For å analysere årsak-og-virkning-forholdet til "feil-feil", utføres følgende handlinger:

  • identifisering av feil i design- og programmeringsteknologier;
  • forholdet mellom feil i designprosessen og menneskelige feil;
  • klassifisering av feil, feil og mulige feil, samt mangler i hvert utviklingsstadium; - sammenligning av menneskelige feil gjort i en viss utviklingsprosess og mangler i objektet, som en konsekvens av feil i prosjektspesifikasjonen, programmodeller;
  • verifisering og feilbeskyttelse i alle stadier av livssyklusen, samt påvisning av defekter i hvert utviklingsstadium;
  • sammenligning av defekter og feil i programvare for å utvikle et system med sammenkoblinger og metoder for lokalisering, innsamling og analyse av informasjon om feil og defekter;
  • utvikling av tilnærminger til prosessene med å dokumentere og teste programvare.

Det endelige målet med feil-feil årsakssammenheng er å definere metoder og midler for å teste og oppdage feil i visse klasser, samt kriterier for å fullføre testing på flere datasett; i å identifisere måter å forbedre organiseringen av prosessen med programvareutvikling, testing og vedlikehold.

Her er følgende klassifisering av feiltyper:

  • maskinvare, der systemomfattende programvare er ubrukelig;
  • informasjon, forårsaket av feil i inngangsdata og dataoverføring via kommunikasjonskanaler, samt feil på inngangsenheter (en konsekvens av maskinvarefeil);
  • ergonomisk, forårsaket av operatørfeil under hans interaksjon med maskinen (denne feilen er en sekundær feil og kan føre til informasjons- eller funksjonsfeil);
  • programvare, hvis det er feil i komponenter osv.

Noen feil kan være et resultat av mangler i kravdefinisjon, design, generering av utgangskode eller dokumentasjon. På den annen side genereres de under utviklingen av et program eller under utviklingen av grensesnitt for individuelle programelementer (brudd på rekkefølgen av parametere, færre eller flere parametere, etc.).

Kilder til feil.Feil kan genereres under utviklingen av prosjektet, komponenter, kode og dokumentasjon. Som regel blir de oppdaget under utførelse eller vedlikehold av programvare på de mest uventede og forskjellige punktene.

Noen feil i et program kan være et resultat av mangler i kravdefinisjon, design, kodegenerering eller dokumentasjon. På den annen side genereres feil under utviklingen av et program eller grensesnittene til elementene (for eksempel når rekkefølgen for innstilling av kommunikasjonsparametere brytes - mindre eller mer enn nødvendig, etc.).

Årsaken til feil er manglende forståelse av kundens krav; unøyaktig spesifikasjon av krav i prosjektdokumenter etc. Dette fører til at det implementeres noen systemfunksjoner som ikke vil fungere som foreslått av kunden. I denne forbindelse gjennomføres en felles diskusjon mellom kunden og utvikleren av noen detaljer om kravene for å avklare dem.

Systemutviklingsteamet kan også endre syntaks og semantikk i systembeskrivelsen. Det kan imidlertid hende at noen feil ikke oppdages (for eksempel er indeksene eller variabelverdiene til disse setningene feil satt).




Topp