Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer



Relevanta dokument
Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

Deluppgift 2 Kravhantering a) (2p) När man diskuterar krav brukar man ange två olika typer av krav. Beskriv dessa och ge exempel.

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Testdriven utveckling. Teorin bakom testdriven utveckling. Bakgrund. Januari 2009, KTH. Alexander Tarnowski

Några grundläggande begrepp

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Testplanering, test-first, testverktyg

Versionshantering. Jan Erik Moström

Institutionen för datavetenskap HT /2008. Testning med JUnit

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

Agil testning i SCRUM

Konstruktion av datorspråk

F4 Testning och Parprogrammering i XP. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson,Datavetenskap, LTH

TDDI02. På denna föreläsning: Programmeringsprojekt, Föreläsning 3. Verifikation, validering och testning

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

TDDI02. På denna föreläsning: Programmeringsprojekt, Föreläsning 3. Filip Strömbäck. Verifikation, validering och testning

Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

F4 Testning och Parprogrammering i XP EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson,Datavetenskap, LTH

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Presentation. Fredrik Runnsjö 1996 Utvecklare 2004 Testare ~2006 Scrum/Canban

Regressionstestning teori och praktik

Objektorienterad Programmering DAT043. Föreläsning 10 13/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Mer om språk och Ruby

Mer om språk och Ruby

Kursinformation. Metodik för programvaruutveckling. Utvecklingsprocessen för programvara. Innehåll. Processmodell. Exempel

Identitet och ekvivalens

Enhetstester på.netplattformen

Den Röda Tråden. Vi kan ta fram arkitekturkrav. Vi kan ta fram arkitektur och design. Vi kan skriva Clean Code KRAV DESIGN IMPLEMENT VISION TEST

Visuell GUI Testning

Föreläsning 3 Verifiering och Validering

Sammanfattningar Essentials of Software Engineering

Några principer för effektiv enhetstestning

Länkade listor och automatisk testning

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Testautomatisering. BDD, RSpec

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3 Verifiering och Validering

Är instruktionerna oklara, projektet rörigt och allmänt frustrerande?

Laboration: Whitebox- och blackboxtesting

Användning av testautomation inom Extendas utvecklingsorganisation

AGILA METODER. (för oss som inte kodar) Nina Berlin

Therese Hansson & Magnus Jonsson. Motivationsfaktorer - Test inom Agila utvecklingsprojekt

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

Vad betyder TDD? Test Driven Design?

Testramverk och Model based testing med java i praktiken

ENIMEOS ΣOEMINE. Krav och trender. Praktisk kravhantering och annat nyttigt från industrin. Christian Ehrenborg

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

12 principer of agile practice (rörlig)

Mer om metoder och abstraktioner

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Metoder och verktyg för funktionssäkerhet

UML use cases. Mikael Söderström Institutionen för informatik Umeå universitet

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Föreläsning 3: Booleans, if, switch

Tentamen i Objektorienterad modellering och design Helsingborg

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Klassdeklaration. Metoddeklaration. Parameteröverföring

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Lösningar till tentamen i EDAF25

Konstruktion av klasser med klasser

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Uppgift v1: Teststrategi i sammanhang Terese Berger. Teststrategi. Projekt CiviCRM. Version 0.9. Sida 1(7)

Övningstenta, examinationsfrågor

Agil programutveckling

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Testning av program. Verklig modell för programutveckling

TENTAMEN OOP

Verktyg för agil systemutveckling. Vad är ett verktyg? Olika typer av verktyg för mjukvaruutveckling. Vad kan ett bra verktyg tillföra?

Tentamen Programmering fortsättningskurs DIT950

Support Manual HoistLocatel Electronic Locks

Klasshierarkier - repetition

Testdriven utveckling av Web Services. Ole Matzura

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Tentamen i Objektorienterad modellering och design

Verifiering & Validering. Integrationstest. Enhetstest. Verifiering och & validering rep. -

Teststrategier och Testcertifiering. Per Strandberg, Maj 2013

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

F4. programmeringsteknik och Matlab

Typkonvertering. Java versus C

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Att skriva till och läsa från terminalfönstret

Verifiering & validering -

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Javautvecklare. Utbildningsfakta. 400 YH-poäng, 2 år

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Transkript:

Testning 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

Testning ü Testningens huvudsakliga syfte är att reducera risker. ü Osäkerhetsfaktorer inom utvecklingen av ny programvara kan få ett projekt att spåra ur. ü Även mindre risker kan orsaka förseningar ü Genom att kontinuerligt testa och lösa påkomna problem kan man Identifiera risknivåer. Fatta väl underbyggda beslut Därmed reducera osäkerhet och risker och få bort fel.

Testprocesser ISO29119 (jmf. med UP) Organisationens testprocess Testhanteringsprocesser Statiska tester Dynamiska tester Integritet!!!

Dynamiska tester (Phase) Test Management Process (Phase) Test Plan Control Directives Dynamic Test Processes Test Measures Test Design & Implementation Test Specification Test Execution Test Results [No Issues Noticed] [Issue Noticed or Retest Result] Test Environment Requirements Test Environment Set-up Test Environment Readiness Report Test Incident Reporting Incident Report

Test Suite Testsvit ü En samling av testfall för att testa ett mjukvarusystem ü En testsvit innehåller Testfall för olika objekt, mål och tekniker. Information om hur man skall konfigurera SUT (System Under Test) ü Dessutom beskrivs hur systemomgivningen skall sättas upp Organisational Test Process Organisational Test Documentation Feedback on Organisational Test Documentation Test Management Processes Test Plan Updates Test Completion Report Test Planning Test Plan Test Monitoring & Control Test Completion Test Plan, Control Directives Test Plan, Control Directives Test Plan, Test Completion Report, Test Measures Test Plan, Control Directives Test Measures Test Measures Static Test Processes Test Management Processes Dynamic Test Processes

Testobjekt, målsättning & tekniker 1. Identifiera - Test Object è Vad! 2. Definiera - Test Objective è Varför! 3. Välj - Test Technique è Hur! Testsvit Organisational Test Documentation Organisational Test Process Feedback on Organisational Test Documentation Test Management Processes Test Planning Test Plan Updates Test Plan Test Monitoring & Control Test Completion Test Completion Report Test Plan, Control Directives Test Measures Test Plan, Control Directives Test Plan, Test Completion Report, Test Measures Test Plan, Control Directives Test Measures Static Test Processes Test Management Processes Dynamic Test Processes

Test nivåer kopplat till faser ü I varje iteration kan vi testa på olika nivåer ü Unit-test kopplas oftast direkt till utvecklare ü Funktions/Integrationstester ü Systemtester ü Acceptanstest, sent i transition-fasen Kravspec. Arkitekturdesign Detaljerad design Implementation Acceptanstest Systemtest Integrationstest Unit-test

Unittester (UT) ü UT, verifiera de minsta testbara enheterna i ett system. ü Test Object är unit (typiskt en klass eller metod) ü Test Objective är att identifiera fel/defekter i koden. ü Dynamisktestning UT använder ofta white box testning. Utförs därför oftast av utvecklare med direkt tillgång till koden Man mäter kodtäckning (code coverage) ü Statisk testning Granskningar Kodstandard

White-box testning Täckningskriteria ü Alla-vägar(omöjligt) ü Instruktion ü Gren ü Villkor (Multi-villkor) x >= 9 y > -3 T T T F F T F F int ex(int x, int y) {! int z = 0;! if ((x >= 9) && (y > -3)) {! z = x++;! }! return z-22;! }!

Täckning - Example if if else else if else endif Instruktion 5/10, 50% Gren 2/6, 33% Väg 1/4, 25%

Mäta täckningsgrad Instrumentering ü Instrumentering är en teknik som lägger till funktionalitet som endast används under utvecklingsfasen. Vanligast är att man instrumenterar källkod Även möjligt att instrumentera genererad kod, exempelvis binärkod ü Instrumenteringar kan läggas till tas bort allt eftersom behov finns. ü Varför? Påverkar exempelvis prestanda negativt! Komplicerar felsökning.

Anropsgraf (Call-graph) ü En grafnotation för alla möjliga exekveringsvägar. ü En graf består av noder och bågar (kanter) ü Varje nog representerar ett så kallat basic block (basblock) Basblock: en följd av kod utan hopp (ut) eller hopp mål (in) Mål påbörjar ett block Hopp avslutar ett block. Riktade bågar representerar hopp i anropsflödet. Två speciella block: Ingångsblock, genom vilket programflödet påbörjas i anropsgrafen Exitblock, genom vilket allt flöde lämnar anropsgrafen.

Call-graph (Anropsgraf) T 2 F 1 public int p(int x, int y) { 2 while (x > 10 ) { 3 x = x - 10; 4 if (x == 10) break; 5 } 6 if ( y < 20 && x % 5 == 0) { 7 y = y+ 20; 8 } 9 else { 10 y = y - 20; 11 } 12 return 4*(x+y); 13} 3 4 F T 7 T 6 10 12 F

Exempel CFG, Instruktionstäckning 1 public int p(int x, int y) { 2 while (x > 10 ) { 3 x = x - 10; 4 if (x == 10) break; 5 } 6 if ( y < 20 && x % 5 == 0) { 7 y = y+ 20; 8 } 9 else { 3 10 y = y - 20; 11 } 12 return 4*(x+y); T 13} F 4 T 7 T 12 F 10 2 F 6

Testfall 1: Instruktionstäckning 2 Let X = 20, Y = 10 T 3 F F 4 T 6 1 public int p(int x, int y) { 2 while (x > 10 ) { 3 12 x = x - 10; 4 if (x == 10) break; 5 } 6 if ( y < 20 && x % 5 == 0) { 7 y = y+ 20; 8 } 79 else { 10 y = 10 y - 20; 11 } 12 return 4*(x+y); T 13} F

Testfall 2: Instruktionstäckning Let X = 20, Y = 30 12 3 7 10 T F 4 T T F 2 F 6

Exempel CFG, Grentäckning (Branch) 1 public int p(int x, int y) { 2 while (x > 10 ) { 3 x = x - 10; 4 if (x == 10) break; 5 } 6 if ( y < 20 && x % 5 == 0) { 7 y = y+ 20; 8 } 9 else { 3 10 y = y - 20; 11 } 12 return 4*(x+y); T 13} F Testfall 1, Let X = 20, Y = 10 Testfall 2, Let X = 20, Y = 30 2 F 4 T 6 7 T 12 F 10

Täckningsverktyg EclEmma

Exempel EclEmma ü Visar om källkoden exekverats eller ej ü Grön Fullständigt ü Gult delvis ü Rött Inte alls

xunit Arkitektur för Testramverk ü Testningsramverk som används för att skriva och utföra upprepade automatiska tester ü Ger en struktur för att skriva testdrivare ü xunit inkluderar: Assertions för att testa förväntade resultat Möjligheter att dela gemensam testdata, testfixturer Möjlighet att skapa testsviter Grafiska och textbaserade testrunners ü Exempel, JUnit junit.org xunit xunit.github.io

xunit Arkitekturen Tester ü ü xunit används för att testa ett helt testobjekt (t.ex. en klass) en del av ett objekt (t.ex. en metod eller ett antal samverkande metoder) interaktion mellan flera objekt (Integrationstestning) En testklass innehåller fler än ett test Varje test skrivs i en testmetod ü Testklassen omfattar även : ü Testrunners för att exekvera testerna ( main() ) En uppsättning testmetoder (test cases) med assertions Metoder för att (fixtures) korrigera tillståndet före ett test uppdatera tillståndet efter varje test och/eller efter alla tester Mer information finns på junit.org Sequencing

En gång till, men nu i bilder test runner ü Ett enhetstest testar metoderna i en klass ü Ett testfall testar en metod ü Du har flera testfall för varje metod ü En testsvit innehåller och kombinerar flera olika testfall ü Testsviten får stöd från en testfixtur som sätter upp och tar ned testomgivningen ü testrunner some kör enstaka enhetstester eller hela sviter Testsvit ett enhetstest till testfall (för en metod) ett testfall till ett enhetstest till ett testfall till ett testfall till ett testfall till enhetstest(för en klass) testfall (för en metod) ett testfall till testfixtur

Att skriva tester för xunit exempel JUnit ü @test ü Använd metoder i klassen junit.framework.assert ü Varje metod kontrollerar ett villkor (assertion) och återrapporterar till testrunnern om ett test gick fel eller inte ü Testrunnern använder resultatet för att rapportera tillbaka till användaren. ü Alla testmetoder returnerar void ü Exempel på några metoder i junit.framework.assert asserttrue (boolean) asserttrue (String, boolean) assertequals (Object, Object) assertnull (Object) Fail (String)

Att ta fram testfall från användningsfall Orginal: Chris Collins, www.christophertcollins.com/presentations/understandingusecases.ppt ü Liknar whiteboxtestning och siktar på hög täckningsgrad ü En process i fyra steg Steg 1: Identifiera vägarna genom ett användningsfall {Scenario} Steg 2: Identifiera testfallen ett eller flera för varje scenario Steg 3: Identfiera testfallen Steg 4: Lägg till testdata så att testfallen blir kompletta

Exempel Användningsfall Lås upp skärmen Unlock Screen ü Primärflöde 1. The user selects unlock command 2. System brings up logon screen 3. The user enters valid user Id and password 4. The user selects to logon 5. The system unlocks the screen ü Alternativflöde 1 Invalid Password 3a. The user enters valid user Id and invalid password 4a. The user selects to logon to the system 5a. The system indicates error logging on and returns to logon screen ü Alternativflöde 2 Cancel 3b. The user select to cancel 4b. The system does not log user on and returns locked screen

Steg 1: Scenarios för användningsfallet Start användningsfall Alternativflöde 1 Primärflöde Alternativflöde 2 Slut användningsfall Slut användningsfall

Steg 1: Scenariomatris Identifiera scenarios Scenario # Ursprungsflöde Alternativflöde Nästa Alternativ Nästa Alternativ 1 Primärflöde 2 Primärflöde Alternativflöde 1 3 Primärflöde Alternativflöde 1 Alternativflöde 2 4 Primärflöde Alternativflöde 2

Exempel Användningsfall Lås upp skärmen Unlock Screen ü Primärflöde 1. The user selects unlock command 2. System brings up logon screen 3. The user enters valid user Id and password 4. The user selects to logon 5. The system unlocks the screen ü Alternativflöde 1 Invalid Password 3a. The user enters valid user Id and invalid password 4a. The user selects to logon to the system 5a. The system indicates error logging on and returns to logon screen ü Alternativflöde 2 Cancel 3b. The user select to cancel 4b. The system does not log user on and returns locked screen

Steg 2: Testfall Test Case Id Scenario Unlock Screen Cmd UserId Pwd Logon Cmd Expected Result Actual Result 1 Scenario 1 2 Scenario 2 3 Scenario 4

Steg 3: Testvillkor Test Case Id Scenario Unlock Screen Cmd UserId Pwd Logon Cmd Expected Result Actual Result 1 Scenario 1 Valid Valid Valid Yes Logon 2 Scenario 2 Valid Valid Invalid Yes Failure Return to logon 3 Scenario 4 Valid N/A N/A No Return to Screen Lock

Steg 4. Lägg till testdata till testfallen Test Case Id Scenario Unlock Screen Cmd UserId Pwd Logon Cmd Expected Result Actual Result 1 Scenario 1 Ctr-atldel ctc abc Ok Btn Logon Logged on 2 Scenario 2 Ctr-atldel ctc abd Ok Btn Failure Return to logon Returned to Logon 3 Scenario 4 Ctr-atldel N/A N/A Cancel Btn Return to Screen Lock Returned to Screen lock

Test Driven Development If it's worth building, it's worth testing. If it's not worth testing, why are you wasting your time working on it? ü Testet ugör en designspecifikation Pre och Post Villkor Metodsignatur ü Tvingar designern att tänka hur skall den användas innan hur skall den impelmenteras Skriv test Koda Omstrukturera TDD handlar inte om testning, det handlar om design!

Test First Development ü En av det grundläggande principerna ü Detta är ingen process ü Är en princip (practice) inom agile development ü Kan användas för att skapa hierarkiska design strukturer

TDD Två nivåer ü Acceptansnivå Högnivå Integration Specifikation för ü Utvecklarnivå Detaljeradnivå Unit nivå

Acceptans-TDD (ATDD). ü Skriv ett acceptans-test (eller behavioral specification) ü Sedan skriver du precis tillräckligt med kod för att testet skall gå igenom ü Målet med acceptans-tdd är att skapa exekverbara specifikationer ü Kallas även Behavior Driven Development (BDD).

Omstrukturering (Refactoring) ü Ändra strukturen på koden utan att förändra beteendet ü Exempel: Ändra namn Bryt ut metod eller interface Ta bort metodanrop (inline) Pull up /Push down Flytta en metod från en subklass till en superklass Flytta en metod från en superklass till en subklass ü De flesta IDEer (t.ex. Eclipse) erbjuder automatiska omstruktureringar Skriv test Koda Omstrukturera

Denna vecka ü Torsdag SCRUM