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



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

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

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

Några grundläggande begrepp

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Testning. 1. Inledning

Övningar Dag 2 En första klass

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

Introduktion till arv

Föreläsning 2: Avlusning och antilustekniker

Övningstenta (Kursplan 2011) Ver 2015,

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

12 principer of agile practice (rörlig)

Programmering A. Johan Eliasson

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

Björn Abelli Programmeringens grunder med exempel i C#

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

UTGÅNGSPUNKT KURSMÅL: Programmering (= kodning) och design (= konstruktion) är teknikområden. Kodning av lite större volym

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

LEGO NXT Robotprogrammering

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

Tentaupplägg denna gång

Skizz till en enkel databas

men borde vi inte också testa kraven? Robert Bornelind

Twincat: PLC Control

Att använda pekare i. C-kod

Exercise 1b: Requirements Evaluation ETSA01 INGENJÖRSPROCESSEN 1 - METODIK VT15

men borde vi inte också testa kraven?

Grunderna i stegkodsprogrammering

Föreläsning 6: Introduktion av listor

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Sammanfattningar Essentials of Software Engineering

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

8-4 Ekvationer. Namn:..

Tentamen OOP

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

Agil programutveckling

Programmeringsteknik med C och Matlab

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Smart låsning utan nyckel.

Systemkonstruktion SERIEKOMMUNIKATION

Pseudokod. Arbetets gång

4-7 Pythagoras sats. Inledning. Namn:..

Version Testteam 4 Testledare: Patrik Bäck

Grundläggande programmering med C# 7,5 högskolepoäng

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Slutrapport för Pacman

LEGO Mindstorm-robot

Senaste version kan hämtas från Internet i PDF 1 format

Kurser och seminarier från AddQ Consulting

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Problem Svar

Nyheter 3LPro 2014.Q2

CSN-rapportering, gymnasiet

Schematransformation SLU

Felsökning av mjukvara

Programmeringsuppgifter 1

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Digital Display VDS / Bus2

Tentaupplägg denna gång

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Concept Selection Chaper 7

Smartair System. TS1000 Version 4.23

Planeringsspelets mysterier, del 1

Steg 4. Lika arbeten. 10 Diskrimineringslagen

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

SAST Örebro Välkomna!

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

Föreläsning 3.1: Datastrukturer, en översikt

Tentamen i Objektorienterad programmering

E t t E k o n o m i s y s t E m s p E c i E l lt a n pa s s at f ö r s v E n s k a k yrka n s v E r ksam het

SCRUM. Marcus Bendtsen Institutionen för datavetenskap

Föreläsning 1 & 2 INTRODUKTION

Om include-filer i PHP

Innehåll. Användarstudier. Användarstudier enligt Microsoft. Varför? Aktivt lyssnande. Intervjuteknik. Intervju Observation Personor Scenarier Krav

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Generell Analys. 3. Det är viktigt att du väljer ett svar i vart och ett av de åttio blocken.

Programdesign. Dokumentera. Dokumentera

Programmeringsolympiaden 2012 Kvalificering

STADSLEDNINGSKONTORET SOA SDK IT-AVDELNINGEN VERSION 2.1. Produktionssättning. Stockholms stad SOA-plattform. Sida 1 (9)

Alla rättigheter till materialet reserverade Easec

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Pragmatisk programmering. Cyberrymden Marcus Rejås Pragmatisk programmering,19 september (26)

Ickelinjära ekvationer

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Föreläsning 3 Verifiering och Validering

Fortnox. För att aktivera bokföring genom Fortnox för er förening finns dessa krav:

8-1 Formler och uttryck. Namn:.

Matematik Åk 9 Provet omfattar stickprov av det centrala innehållet i Lgr b) c) d)

Stärk konkurrenskraften med effektiv HRM.

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Introduktion till PHP

HÖGSKOLAN I KALMAR Institutionen för teknik Erik Loxbo LABORATION I PLC-TEKNIK SEKVENSSTYRNING AV TRANSPORTBAND SIMATIC S7 - GRAPH

Transkript:

TDDI02 Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Verifikation, Validering och Testning XP Extreme Programming

Vad är ett fel? I engelskan kan man skilja på 3 olika typer.. Error Ett misstag begånget av en person under utvecklingen, som kan resultera i.. Fault Ett fel i programvaran, som när det exekveras resulterar i.. Failure Något påtagligt tokigt händer under exekvering! Obs: Errors/faults måste inte automatiskt leda till failures, inte nödvändigtvis en 1-1 mappning mellan de tre åt något håll. 2

Validering/Verifikation..är nästan testning, det med, fast på dokument! Kravanalys: Kompletthet Allt är med, inget underförstått Konsistens Inga motsägelser Genomförbarhet Inte bara rent funktionellt, men även ur ett affärsmässigt perspektiv Testbarhet Kommer det gå att testa kraven, avgöra om de är uppfyllda eller ej? o Skapa testdata för funktionella tester? 3

Validering/Verifikation (cont.) Design: Finns konsistens mellan kravspecifikation och design, beskriver de samma sak? Håller designen rätt kvalitet? (Företagsstandarder, etc..) o Skapa testdata för funktionella tester? Implementation: Finns konsistens mellan implementationen och designen, beskriver de samma sak? Testa implementationen, uppfyller den de tidigare satta kraven? 4

Validering/Verifikation (cont.) Testfasen: Testa moduler Integrationstesta modulerna som sätts ihop (med tidigare testdata?) Systemtest oalphatest? Betatest? Acceptanstest Underhåll: Alla steg i mindre skala, om och om igen 5

Testning av kod Statisk testning: Kan användas på nästan allt Läs/granska Låt andra göra, själv har man inte rätt destruktiva inställning Review som ovan fast mer anonymt och institutionaliserat Walkthrough/Inspection Gå igenom med några inspektörer, resulterar i ett åtgärdsprotokoll Inspection den mer formella av de två, resultaten rapporteras vidare Fo rmella bevis Översätt kod till logiknotation Bevisa från startvillkor att slutvillkoren kommer ske Kan matematiskt bevisa felfrihet 6

Walkthrough/Inspection lista Felaktig användning av data Oinitierade variabler, arrayindex utanför gränser, dangling pointers Deklarationsfel Anvädning av icke-deklarerade storheter, dubbel deklaration i ett block Beräkningsfel Division-by-zero, overflow, typmismatchningar, operatorprioriteter Logikfel < istället för <=, and-or, prioriteter Fel i styrning Oändliga loopar, varvräknarfel Interfacefel Antalet, typerna på parametrar, globala data 7

Testning av kod (cont.) Dynamisk testning: Fungerar endast med kod Funktionell Black box testing Titta ej på koden! Testar bara funktionalitet utifrån specifikationen Strukturell Glass box testing Titta på koden! Testa de svåra delarna Logik i villkorssatser, if, for, while, etc.. Extremvärden Egentligen vill man täcka all kod, få hög coverage Hitta lämplig testdata Identifiera och testa gränsövergångar! 8

Coverage testing Hur många sätt går det att ta sig från början till slut? 4 x ((N + (1 + N)) + 2)??? 9

Effektivitet av felsökning Realtidsprojekt, 400 utvecklare (van Vliet) %-andel %-andel totalfunna funna effektivi.. designfel kodnings fel Designreview: 54% - 54% Kodreview: 33% 84% 64% Testning: 38% 38% 38% Kostnadseffektivitet, samma studie: Designreview: 8.44 Kodreview: 1.38 Testning: 0.17 10

Testning exempel Specifikation : Ett program läser in tre heltalsvärden från en rad. De tre värdena tolkas som längderna på de tre sidorna i en triangel. Programmet skriver ut ett meddelande som anger om triangeln är likbent, liksidig eller om alla tre sidor är olika. Uppgift: Skriv ett antal testfall (dvs kategorier plus några specifika testdata per kategori) som du anser testar programmet på ett bra sätt. 11

Testning exempel (cont.) #include <iostream> using namespace std; int main() { int x, y, z; cout << x << << y << << z << \n ; if (x == y && y == z) { cout << Triangeln är liksidig.\n ; } else if (x == y x == z y == z) { cout << Triangeln är likbent.\n ; } else { cout << Alla sidor i triangeln är olika.\n ; } return 0; } 12

Testning exempel (cont.) Unix > make testprogram Unix> testprogram 1 1 100 Triangeln är likbent. Unix> testprogram 0 0 0 Triangeln är liksidig. Unix> testprogram -1-1 -1 Triangeln är liksidig. Unix> testprogram 3.0 3.0 3.0 Alla sidor i triangeln är olika. Unix> testprogram Klas, Kalle och Lotta Alla sidor i triangeln är olika. // gäller kanske ej i c++11? 13

Testning exempel (cont.) Självevaluering av testfall: 1. Har du testfall som representerar en giltig oliksidig triangel? Obs, fall som 1 2 3 eller 2 5 10 gör inte det, de är inte giltiga trianglar! 2. Har du testfall som representerar en giltig liksidig triangel? 3. Har du testfall som representerar en giltig likbent triangel? Obs, ett testfall som har 2 2 4 är inte en giltig triangel! 4. Har du åtminstone tre testfall som representerar giltiga likbenta trianglar, så att du provar alla tre permutationer av två lika sidor (t.ex. 3 3 4, 3 4 3 och 4 3 3)? 5. Har du ett testfall där en sida är 0? 6. Har du ett testfall där en sida är negativ? 14

Testning exempel (cont.) 7. Har du ett testfall med tre heltal större än noll där summan av två är lika med ett tredje? Med andra ord, om programmet anser att t.ex. 1 2 3 representerar en oliksidig triangel, så är det en bug (då det ej är en giltig triangel)! 8. Har du åtminstone tre testfall i kategori 7 så att du provar alla permutationer där en sida är lika med summan av de övriga två (t.ex. 1 2 3, 1 3 2, 3 1 2, etc..)? 9. Har du ett testfall med tre heltal större än noll så att summan av två är mindre än det tredje (t.ex. 1 2 4 eller 12 15 30)? 10. Har du testat minst tre permutationer av ovanstående? 11. Har du ett testfall där alla sidor är 0? 12. Har du minst ett testfall med värden som inte är heltal? 15

Testning exempel (cont.) 13. Har du åtminstone ett testfall som specificerar fel antal värden? 14. För varje testfall ovan, specificerade du (i förväg!) det förväntade resultatet? 16

Testning minnespunkter Utarbeta och dokumentera tester, inklusive förväntat utfall, i förväg! Gör alltså inga tester i flykten! Använd era mest kompetenta (kreativa!) programmerare som testare! Ett test kan aldrig bevisa frånvaron av fel bara påvisa förekomsten! Ett test som inte påvisar något fel är förmodligen ett undermåligt test..eller? När ska man sluta testa? 17

XP Extreme Programming Vad är extremt med XP? Moment genomförs kontinuerligt Utvecklingscykler är små och korta Lite dokumentation utanför koden skrivs Vad krävs/önskas? Inte för stora projekt Kundrepresentant på plats Planerings- spel, user stories Gärna parprogrammering 18

XP Extreme Progra.. (cont.) Karakteristiskt för XP: Utgår från utvecklares och kunders behov Ingen stor administrativ apparat, inte jättemycket dokumentation Smidig hantering av förändringar Snabba resultat, god kvalitet förväntas Ingen egentlig designspecifikation Kanske inte heller sedvanlig kravspecifikation! Planering: Täta möten mellan kund utvecklare (~2 veckor?) Planerings- spel user stories Små, täta uppdateringar (releases) till kunden Kund deltar i utvecklingsprocessen 19

XP Extreme Progra.. (cont.) Design: Ingen specifikation i förväg Enhetstester och testfall produceras före motsvarande kod, är en form av specifikation för enheten Ofta automatiserat testande Acceptanstest görs för varje story Refactoring Våga bygga om Byt namn på metod/variabel/etc Gör en bit kod till egen metod/motsvarande Flytta på metoder/etc Verktyg finns Görs för ökad läsbarhet och minskad komplexitet 20

XP Extreme Progra.. (cont.) Kodning: Parprogrammering Kollektivt ägande Kontinuerlig integration Fysisk närhet mellan utvecklare Dokumentation: Vissa kundkrav Utöver det kräver XP inte mycket Koden är det viktigaste dokumentet, ska vara av hög kvalitet Story na, diagram, etc.. Acceptanstest kan fungera som kravspecifikation 21