Testautomatisering. Labbar, FitNesse, TDD, BDD

Relevanta dokument
Guide Ett FitNesse-test

Testautomatisering. BDD, RSpec

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

Laboration: Whitebox- och blackboxtesting

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Dugga Datastrukturer (DAT036)

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Övning 1 - Abstrakta datatyper

729G04 Programmering och diskret matematik. Python 3: Loopar

Deklarativ programmering

Grundläggande datalogi - Övning 2

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

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

DD1314 Programmeringsteknik

Föreläsning 8: Exempel och problemlösning

Konstruktion av datorspråk

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

DAT043 Objektorienterad Programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Föreläsning 1 & 2 INTRODUKTION

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

Design och konstruktion av grafiska gränssnitt

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

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

Testautomatisering. Ruby Repetition

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsningsanteckningar F6

JavaScript del 3 If, Operatorer och Confirm

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

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

Design och konstruktion av grafiska gränssnitt

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Deklarativ programmering

Tentamen Datastrukturer (DAT037)

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Lab 6: ASP.NET 2.0 Providermodellen

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

Identitet och ekvivalens

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

729G04 Programmering och diskret matematik

TUTORIAL: SAMLING & KONSOLL

Föreläsning 10. Pekare (Pointers)

Lektion 2: Sökagenter. Robin Keskisärkkä

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Grundläggande Datalogi

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

TUTORIAL: KLASSER & OBJEKT

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Föreläsning 14. Filhantering

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Objektorienterad analys och design

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Användarhandledning Version 1.2

Lösningsförslag till exempeltenta 2

Statistik över heltal

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

MVC med Javascript och Ajax. Filip Ekberg

Testplanering, test-first, testverktyg

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objektorienterad Programmering (TDDC77)

"if"-satsen. Inledande programmering med C# (1DV402)

Sätt att skriva ut binärträd

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

729G04 Programmering och diskret matematik. Föreläsning 7

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Hur man programmerar. Exempel på problemlösning i Python

Praktisk hantering av automatiserade testfall T U A C A P T M F T W!

Webbprogrammering - 725G54 PHP. Foreläsning II

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

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Föreläsning 2 Datastrukturer (DAT037)

Mer om språk och Ruby

Testautomatisering. Intro

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Metoder (funktioner) Murach s: kap Winstrand Development

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Transkript:

Testautomatisering Labbar, FitNesse, TDD, BDD

Lab 4 Utökad deadline? Lab 4

FM: Lab 1-3 snack FitNesse TDD BDD EM: Handledning Idag

Watir::Wait.until {"OK"} Lab 1-3

I Ruby: False: false eller nil True: Allt annat if ( false ) puts Detta kommer skrivas ut! end Lab 1-3

Konotrollera om URL stämmer Kontrollera om Text finns => Dess genereras dynamiskt och kan vara olika från användare till användare Undvika att testa mot dessa Lab 1-3

require behövs bara en gång Browser.new behövs potentiellt bara en gång Lab 1-3

if logged_in == true Innebär if true == true eller if false == true Ändra till if logged_in Eller ännu bättre if is_logged_in? Lab 1-3

Verifiera att *Obligatorisk finns på sidan Denna text fanns på sidan från början, så den säger ingenting om att ett felmeddelande dykt upp. Lab 1-3

Random crashes: Förmodligen så försöker ni använda ett objekt som inte finns ännu wait_until_present(button) Lab 1-3

Om vi vill ha längden på något: Vi kan göra på massa olika sätt rätt sätt är nästan alltid.length,.count Lab 1-3

assert_equal(true, actual, "...") Ersätt med: assert(actual,"...")...också: definiera i detta fall ingen expected under arrange Lab 1-3

Använd inte: return false Använd: return false false är truthy return "false" => potentiella problem med if (...) Blanda inte ihop false och "false" Lab 1-3

om vi är ute efter beskrivningen av en product använd: product.description använd inte: product.to_s + ex. regexp + match Lab 1-3

Cartline - om den hanterar en product initiera med ett objekt av typen Product Initiera inte med en sträng "Product (generellt) Lab 1-3

Håll tungan rätt i mun: expected = "-" actual = @user.fullname assert_equal(expected, -, ) Se till att er assert gör något. (Några labbar var misstänkt lika andra labbar ;) Kopiering från nätet är vardag i branschen jag tänker absolut inte säga att ni inte skall göra det. När ni kopierar från (felaktiga?) källor på nätet: fundera över vad ni lärt er och ifall ni förstår Lab 1-3

Unexptected keyword: end Indentering class def my_method # end def my methdod2 #... end Lab 1-3

Unexptected keyword: end Indentering class def my_method # end def my methdod2 #... end end Lab 1-3

Blanda inte ihop implementation av en applikation med implementation av tester Lab 1-3

Slut Lab 1-3 snack Lab 1-3

Problem med mjukvara: För buggigt => Enhetstester (Unit Tests) Enhetstester

3 st. Problem med att utveckla enhetstester sist Vi hinner inte utveckla dem Vi har skrivit för mycket / onödig logik i implementationen av det som skall testas Att veta hur mycket enhetstester som är tillräckligt är ofta väldigt svårt TDD

Red -> Green -> Refactor Red: Skriv ett test som inte passerar Green: Skriv minimal implementation för att få testet att passera Refactor: Snygga till implementation/tester TDD

Problem med att utveckla enhetstester sist Vi hinner inte utveckla dem TDD => Test first, vi kommer inte ha implementation utan tester TDD

Problem med att utveckla enhetstester sist Vi har skrivit för mycket / onödig logik i implementationen av det som skall testas TDD => skriv minimal implementation för att få testet att passera. TDD

Problem med att utveckla enhetstester sist Att veta hur mycket enhetstester som är tillräckligt är ofta väldigt svårt TDD => När vi känner att implementationen är klar så har vi tester som täcker det vi implementerat iom. att vi utvecklar testerna först och vi bara har skrivit en minimal implementation. TDD

Ett problem med klassisk TDD: Ingenting i processen tvingar oss att fundera kring affärsvärdet i det vi utvecklar (gäller både tester och implementionen som skall testas). Jag har rackat ned på TDD under denna kursen. Få inte intrycket att TDD är dåligt. Min bedömning: Fortfarande vanligare än BDD De flesta som jobbar med TDD har en strategi för att fånga ovanstående problem. BDD

Ett problem med klassisk TDD: Affärsvärde? BDD-lösningen: Lägg till ytterligare en Red -> Green -> Refactor cykel som har ett utifrånperspektiv. BDD

2 Red->Green->Refaktor-cykler Yttre cykel: Affärsvärde? Utifrån-perspektiv Implementera rätt features! Inre cykel: Korrekt implementation? Innifrån-perspektiv Implementera features på rätt sätt! BDD

BDD

FitNesse Lab 4: Kolla post på hemsidan med frågor jag svarat på. FitNesse

FitNesse Hur hänger det ihop FitNesse

Målbild: Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Målbild: När vi kommit hit innebär ett nytt test bara att vi lägger till en ny rad i en tabell på aktuell testsida: Ex: Nytt Test Nytt Test Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

FitNesse Servern behöver startas Ex: java jar fitnesse-standalone.jar p 8080 Normalt: FitNesse ligger på en dedikerad server och är alltid igång. Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

RubySlim: Kopplar ihop FitNesse med Fixture Behöver initiering på t.ex. en startsida i FitNesse. Vi behöver också en Import-tabell på en SetUp-sida. Lite krångligt, men görs en gång Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Koppling till Fixture Sökvägar på startsidan:!path /to/your/lib/fixtures!path /to/your/lib Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Fixture-klass Behöver skrivas i ex. ruby Namn på klass: bygger på tabellen i fitnesse Input från tabeller i fitnesse: metod, set_ Output till tabeller i fitness: metod Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Koppling mellan Fixture <-> klass som skall testas En require i Fixture-klassen Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Klass som skall testas I vårt fall, för G-uppgiften: MyString Test-tabeller i FitNesse Fixture Klass vi vill testa FitNesse

Målbild: När vi kommit hit innebär ett nytt test bara att vi lägger till en ny rad i en tabell på aktuell testsida: Ex: 3 3 6 class MyTest My Test in1 in2 o? 2 3 5 3 3 6 FitNesse def initialize @my =MyPlus.new def set_in1(arg) @a = arg def set_in2(arg) @b = arg def o @my.add(@a,@b) class MyPlus def add(a,b) a + b

Vi vill testa flera metoder i en klass => utöka fixture med fler input-metoder och output-metoder MyFixture input first1 input first2 first method? in in expected out MyFixture input second1 input second2 second method? in in another expected out FitNesse

Vi vill testa flera metoder i en klass exempel FitNesse

Implementation av MyString + Fixture Exempel.replace(str) FitNesse

Orientering Continuous Integration Handledning samtliga labbar Hemtenta Nästa vecka

Fin