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

Relevanta dokument
Några grundläggande begrepp

Sammanfattningar Essentials of Software Engineering

Testning på 3 föreläsningar. PV7180 Verifiering och Validering. Litteratur. Vad är testning? Varför testa och olika syn? Målet med testning

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Platina och kvalité. Rasmus Staberg, Teknisk direktör,

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Classes och Interfaces, Objects och References, Initialization

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

Programdesign. Dokumentera. Dokumentera

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

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

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

Testning av program. Verklig modell för programutveckling

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objektorienterad programmering

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

Vad är RTCA DO-178C? och: Hur arbetar Saab med dessa krav? Lars Ljungberg, Saab AB, Avionics Systems

Föreläsning 23. Tobias Wrigstad. Refaktorering

Linköpings universitet 1

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

Testplanering, test-first, testverktyg

Lunds Universitet LTH Ingenjörshögskolan IDa1, IEa1 Helsingborg. Laboration nr 4 i digitala system ht-15. Ett sekvensnät. grupp. namn.

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

Föreläsning 2 Datastrukturer (DAT037)

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

REGELVERK & HANDBÖCKER

Unit testing methodology

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

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

Labb 1: Vad, hur, och varför?

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Konstruktion av datorspråk

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Teoretisk del. Facit Tentamen TDDC (6)

Enhetstester på.netplattformen

Algoritmer och datastrukturer. HI1029 8,0 hp Introduktion

Mer om språk och Ruby

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

OOP Objekt-orienterad programmering

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

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

Mer om språk och Ruby

Problemlösning. Planering av program. Konstruktion. Programmeringsmetaforer. Problemlösning. Programmering = Problemlösning

Mina listor. En Android-applikation. Rickard Karlsson Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Formell Verifiering. Hur vet man att ett system fungerar korrekt? Lisa Kaati

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Några principer för effektiv enhetstestning

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

Fem framgångsfaktorer för acceptanstest. Jesper Högberg Magnus C. Ohlsson

Laboration i datateknik

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TUTORIAL: SAMLING & KONSOLL

Filhanterare med AngularJS

Programmering B med Visual C

Laboration 1 - Grunderna för OOP i Java

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

ISTQB Testarens ledstjärna

Programmeringsteknik II

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

ALM Live: Testfokus bättre mjukvarukvalitét med Visual Studio 2008 Team System

Regressionstestning teori och praktik

TPK Teknisk Polymerkemi QMS. Några erfarenheter från att arbeta inom kvalitetssäkringssystem. 11-Jan-2007 N.Kullberg 1

Laboration: Whitebox- och blackboxtesting

Felhantering TDDD78, TDDE30, 729A

Hur hanterar vi risk? Vad är TKO? Skillnad på agil och trad? Agil/Lean: Defer Commitment, Build knowledge, Fail fast

SCRUM. Marcus Bendtsen Institutionen för datavetenskap

Laboration 3, uppgift En klass för en räknare

Länkade listor och automatisk testning

Agil programutveckling

Introduktionsmöte Innehåll

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Decentraliserad administration av gästkonton vid Karlstads universitet

Configuration Management

L 37/74 Europeiska unionens officiella tidning

Försättsblad till skriftlig tentamen vid Linköpings Universitet

NetBeans 7. Avsikt. Projektfönster

Tentamen i DD2387 Programsystemkonstruktion med C++

EDAA01 Programmeringsteknik - fördjupningskurs

Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Kursplanering Objektorienterad programmering

Imperativ programmering. Föreläsning 4

NetBeans 5.5. Avsikt. Projektfönster

Slutrapport för Pacman

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

Universe Engine Rapport

Inlämningsuppgifter, EDAF30, 2015

Transkript:

Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault En bra implementation Correctness Fel Failure Readability Error Performance Programmers Storlek på funktioner/metoder Who? Testers Namn med flera ord Users Indentering och mellanslag Unit testing Speciella egenskaper i ett språk Guidelines What? Functional testing Namngivning Integration and system testing Namn på filer Acceptance testing Referens till externa dokument Conformance testing Förklaring av koden Configuration testing Why? Vad det är tänkt att koden ska göra Performance testing Kommentarer Skriva om koden som kommentar Stress testing Techniques Markeringar Implementation Implementation och Testning Testning User interface testing En summering av koden Intuition Verifiera Specification testing Black-box testing Hitta Assertions What test cases? Code White-box testing Fixa Reproducera Debugging Profiler Algoritm Optimering Testing Equivalence Class Partitioning Existing test case Faults Regression testing Avundsjuka För intimt Verktyg för optimering Implementation Boundary Value Analysis Path Analysis Swicth-statements (OOP) Combinations of conditions Stora klasser Code smell Refactoring TDD Långa metoder När ska man sluta testa? Duplicerad kod Planning Overview Inspection and reviews Steg Preparation Examination Rework Follow-up Formal methods Intermediate documents Static Analysis Structured format Source code Executable files

/Implementation och Testning/Testning Eftersom att det är ganska svårt att bevisa att ett program är korrekt så finns det egentligen bara ett sätt att ta reda på om ett program fungerar som tänkt eller inte: testa det. Nackdelen med testning är givetvis att det inte är någon garanti för att allting är korrekt, det är bara en indikation på att de fall som testades fungerar under de omständigheter som testen skedde i. /Implementation och Testning/Testning/Hitta fel/inspections and reviews En systematisk genomgång av systemet av två eller flera personer. /Implementation och Testning/Testning/Hitta fel/formal methods Bevisa att ett program är korrekt genom att analysera programmet och genom någon form av bevissystem visa på att det är korrekt. /Implementation och Testning/Testning/Hitta fel/static analysis Använda verktyg för att kolla på kod och/eller binärer för att se om det finns några fel. /Implementation och Testning/Testning/Testing/Techniques/Equivalence Class Partitioning Dela upp det möjliga indatat i sådana grupper att innehållet i varje grupp kan anses vara lika när det gäller testning - dvs om ett värde i en grupp ger korrekt resultat borde alla andra värden i samma grupp också ge korrekt resultat. /Implementation och Testning/Testning/Testing/Techniques/Boundary Value Analysis Att kolla olika gränsvärden är ofta en bra strategi, med gränsvärden menar jag då de värden som finns mellan olika grupper av värden. T.ex. när jag sätter upp ett kalkylblad för att beräkna betyg för en kurs så testar jag alltid gränserna mellan U och 3, 3 och 4, 4 och 5 men sällan alla värden som t.ex. ger en 3:a. Jag använder mig alltså av equivalence class partitioning och boundary value analysis tillsammans. /Implementation och Testning/Testning/Testing/Techniques/Path Analysis Försök att använda sådana indata att alla exekveringsvägar testas. /Implementation och Testning/Testning/Testing/Techniques/TDD Jonas /Implementation och Testning/Testning/Testing/När ska man sluta testa? Jonas

/Implementation och Testning/Testning/Testing/Formal methods Bevisföring att ett program är korrekt /Implementation och Testning/Implementation Målet med implementation är givetvis att komma fram till något som fungerar och som kunden kan använda på ett bra sätt. /Implementation och Testning/Implementation/En bra implementation Alla vill väl göra en bra implementation men frågan är hur man gör och kanske framför vad bra betyder. Vi har tidigare nämnt: /Implementation och Testning/Implementation/En bra implementation/completeness Förhoppningsvis så ska systemet vara komplett också, dvs innehålla de delar du och kunden har kommit överens om. /Implementation och Testning/Implementation/En bra implementation/maintainability I de allra flesta fall så konstrueras inte ett program för att sedan användas tills det ersätts med något annat program. Det normala är att programmet konstrueras, tas i drift,fel upptäcks, fel fixas, det upptäcks att programmet behöver ytterligare funktionalitet, implementation av denna funktionalitet, osv. Det är alltså nödvändigt att det är någorlunda lätt att underhålla ett system. /Implementation och Testning/Implementation/En bra implementation/traceability Det ska vara möjligt att se varför olika koddelar existerar. Det ska alltså gå att spåra varför koddel X är implementerad till t.ex. en user story. /Implementation och Testning/Implementation/En bra implementation/correctness Programmet ska ju inte bara gå att köra, det ska ju ge rätt resultat också!! Och med rätt resultat menar jag det resultat som kunden förväntar sig - inte det du tycker att det ska vara. /Implementation och Testning/Implementation/En bra implementation/readability Att skriva kod är ganska lätt, att skriva kod som är lätt att läsa och förstå är inte lika lätt. Här gäller det att få till både algoritm, dokumentation och implementation på ett sätt som gör att de som senare tittar på koden har lätt att förstå och modifiera.

/Implementation och Testning/Implementation/En bra implementation/performance Prestandan på ett program är ofta av mindre betydelse än en del tror. Naturligtvis är det så att bättre prestanda är bra om alla andra relevanta problem är lösta. Men det är kanske inte det viktigaste och det man ska ägna allra mest tid åt (beror naturligtvis på vad det är man implementerar). Det kan också vara dumt att ägna mycket tid åt optimering om det är oklart vad som behöver optimeras, bättre att göra systemet klart för att sedan titta på vart flaskhalsarna finns. /Implementation och Testning/Implementation/Guidelines De flesta större organisationer har någon sorts standard över hur kod ska skrivas. Denna standard kan innefatta triviala saker som namngivning och indentering men ibland så finns det även riktlinjer för vilka språkkonstruktioner som inte får användas eller hur något ska implementeras. Oftast är det inte t.ex. antalet mellanslag som är det viktiga, det viktiga är att alla gör likadant. På det viset blir det mycket lättare att sätta sig in i existerande kod. De flesta av er har ju redan provat att följa en kodstandard på AP-Javan. Vanliga saker som man tar upp är: /Implementation och Testning/Implementation/Guidelines/Indentering och mellanslag Detta borde inte vara någon nyhet för er vid det här laget men indenteringen ska vara sådan att det avspeglar kodstrukturen på ett lämpligt sätt. /Implementation och Testning/Implementation/Guidelines/Speciella egenskaper i ett spr... Detta är kanske inte det första du tänker på men en del organisationer förbjuder användningen av vissa programkonstruktioner eller språkegenskaper. Jag har själv stött på tre olika saker när jag har hälsat på hos olika företag: rekursion (svårt, tar mycket minne, komplicerat), templates i C++ (code explosion), trådar ( generellt så klarar inte våra programmerare av detta så det är bara två stycken som får skriva den koden och de andra får använda färdiga klasser ) /Implementation och Testning/Implementation/Guidelines/Namngivning Har tycker jag att det är viktigt att man kallar en sak för samma sak hela tiden. Samt att man som Jonas sa använder termer som ligger i problemdomänen. /Implementation och Testning/Implementation/Kommentarer/Förklaring av koden Dvs koden är så komplex att man behöver förklara vad som händer, fundera på om koden kan förenklas. /Implementation och Testning/Implementation/Kommentarer/Vad det är tänkt att koden ska... Dvs det är denna kommentar som koden ska uppfylla, om inte koden gör detta så är koden fel.

/Implementation och Testning/Implementation/Kommentarer/Skriva om koden som kommentar i = i + 1 // Öka i med 1 /Implementation och Testning/Implementation/Kommentarer/Markeringar // FIXME // TODO - add blablabla to blipp /Implementation och Testning/Implementation/Kommentarer/En summering av koden Vad koden gör - om detta är en del av en funktion/metod borde det kanska vara en separat funktion/metod/klass. /Implementation och Testning/Implementation/Assertions Dvs denna kod antar att följande villkor är sanna. Post-condition - denna kod garanterar att följande villkor gäller efter exekvering /Implementation och Testning/Implementation/Debugging/Hitta Vart i koden finns felet? Det bästa som finns här är en källkodsdebugger och något sorts logförfarande - beroende på typ av fel. /Implementation och Testning/Implementation/Debugging/Reproducera Dvs reproducera felet så att det är möjligt att genomför felsökning /Implementation och Testning/Implementation/Optimering Som sagt: inte för tidigt /Implementation och Testning/Implementation/Refactoring Skriva om kod så att den blir bättre uppdelad /Implementation och Testning/Implementation/Refactoring/Code smell Intressant men kan vara svårt att ge en klar definition av. /Implementation och Testning/Implementation/Refactoring/Code smell/ Avundsjuka En klass använder ett objekt från en annan klass i stor utsträckning /Implementation och Testning/Implementation/Refactoring/Code smell/för intimt En klass använder interna delar av andra klasser.