Testautomatisering. Ruby Repetition

Relevanta dokument
Testautomatisering. BDD, RSpec

Imperativ programmering. Föreläsning 2

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

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?

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Användarhandledning Version 1.2

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

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

Programmering för språkteknologer II, HT2011. Rum

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

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

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

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

Testautomatisering. Labbar, FitNesse, TDD, BDD

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Prova på-laboration i Ruby

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

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

Objektorienterad Programmering (TDDC77)

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

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

Erfarenheter från labben

Tentamen Grundläggande programmering

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

DD1314 Programmeringsteknik

Förstå grunderna i LINQ. Mål med lektionen!

Planering Programmering grundkurs HI1024 HT 2014

Konstruktion av datorspråk

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

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

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Programmering B med Visual C

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

OOP Objekt-orienterad programmering

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

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

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Programmeringsteknik I

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Exempel på ett litet Ada-program

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Konstruktion av datorspråk

Planering Programmering grundkurs HI1024 HT data

Föreläsning 2 Programmeringsteknik och C DD1316

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Stackar, köer, iteratorer och paket

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Classes och Interfaces, Objects och References, Initialization

Funktionell programmering DD1361

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Länkade strukturer. (del 2)

F4. programmeringsteknik och Matlab

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

TDDE44 Programmering, grundkurs

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

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

Övning2. Variabler. Data typer

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Repetition C-programmering

Övning 6. Ali Tofigh 24 Oktober, 2006

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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.

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

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

729G04 Programmering och diskret matematik. Python 3: Loopar

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

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

Deklarationer/definitioner/specifikationer

Imperativ programmering. Föreläsning 4

Introduktion till MATLAB, med utgångspunkt från Ada

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

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

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

Planering Programmering grundkurs HI1024 HT TIDAA

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Introduktion C-programmering

Föreläsning 18 Filer och avbildningar

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

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

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Språket Python - Del 1 Grundkurs i programmering med Python

TDIU01 - Programmering i C++, grundkurs

Transkript:

Testautomatisering

FM: Kort utvärdering Lab 1 Idag

Unit Test Intro Bra Unit Test, TDD, Videoföreläsning Denna veckan

1. Uppskatta hur mycket tid du lagt på lab 1 (h) 2. Uppskatta kvarvarande tid för lab 1 (h) 3. Svårighet: För Lätt / Lagom / För Svår 4. Lärdommar - Jag ser... : Ingen praktisk nytta (-) Viss praktisk nytta (0) Stor praktisk nytta (+) Utvärdering Lab 1

Jag hör hemma i C# Jag kan en stor rad språk Begreppen är ibland olika i olika språk Jag slarvar en del med uttrycken Ex: metod/funktion Metod är en funktion som hör hemma i en klass Vi oklarheter: Fråga Ngt om språkbruk

Syfte Vi skriver Unit Tests i Ruby Ex: Klass TestUser Lab 2 kommer innebära Implementation skriven i Ruby Unit Tester skriven i Ruby Unit Tester innebär inte så mycket nytt Men kräver förståelse för grunderna i språket Sammantaget behöver vi veta något om ruby för att kunna genomföra detta

Road Map Hur lång tid tar det att bli en bra programmerare? Vilka steg bör man ta?

Road Map 1. Codecademy eller Learn Ruby The Hard Way typ: tutorial eller intro-bok scope: timmar till dagar

Road Map 2a. Annan bok - helst Uppslagsverk ex: Ruby Programming 1.9 2b. Börja koda enkla exempel - använd google + språkets API typ: mer uttömmande bok eller API scope: dagar till veckor

Road Map Nu kan du något om språket - plocka på ramverk för det du är intresserad av Ex: Rails - Ramverk för att skapa webbapplikationer med Ruby Eller: test/unit för att skapa enhetstester i ruby

Road Map 3. Nettuts om Ruby on Rails typ: tutorial scope: timmar till dagar

Road Map 4. Sätt dig in i ramverket typ: mer uttömmande scope: dagar till veckor anmärkning: De flesta genrella ramverk av denna typ är mer omfattande än språket i sig

1. Tutorial för språket 2. Programmering Experiment/Djupare bok för språket 3. Tutorial för ramverk (ex. webbutveckling) 4. Programmering Experiment/Djupare bok för ramverket => 5. Skapa webbapplikationer 6. Best Practices (fokus på detta först här) Shortcuts: En van programmerare kan göra steg 1-4 på några timmar => kanske ok kod En programmerare som inte är van kan hoppa över saker och genomföra 1-4 på några timmar => dålig kod/dålig förståelse

Hur lång tid tar det att bli en bra programmerare? snävt område, ex. variabler: veckor bredare område, ex. skapa en blog i RoR: månader generellt område, ex. skapa webbapplikationer i Ruby on Rails: år mer generellt område, ex. skapa webbapplikationer: år++ Snabbt svar: 5-10 effektiva år, aktiv inom flera områden/språk

Låt inte detta skrämma er Anställningsbar utvecklare: görbart på 6 mån? Gissningsvis har ni redan nu insikter som en normal nybörjare inte har. Ni kommer ha nytta av detta långt, långt innan ni är bra

Hur lång tid tar det att bli en bra programmerare? Intelligens / Talang har väldigt lite med detta att göra (många vill dock påskina detta) Nyfikenhet, Envishet och Tid är nödvändigt Om du vet hur du lär dig bäst så kan du korta ned tiden ordentligt

En första varning Jag kommer inte fokusera särskilt mycket på vad som är korrekt/bra programmering (Däremot kommer jag prata om vad som utgör ett bra enhetstest)

En första varning Ni kommer höra saker som använd inte for - loopen, använd each Detta har ett syfte, men är inte särskilt behjälpligt för nybörjare

En första varning Använd inte for-loopen Syftet är att en viss kodbas skall vara konsistent Syftet är också att vana programmerare skall veta vad de förväntas använda Inget av ovanstående är särskilt viktigt när du lär dig programmera

Som nybörjare bör ni prioritera dessa frågor: 1. Funkar det? (inga felmeddelanden) 2. Är det korrekt? (rätt output) 3. Vet du varför det funkar? Om inte: skriv mer kod (4. Finns det bättre sätt att göra det på?)

Varför bör vi inte prioritera: (4. Finns det bättre sätt att göra det på?) Vad är bäst (som i effektivast/snabbast) För det mesta: Det beror på För det mesta: Det spelar ingen roll Vad är bäst (som i vad kommer vara enklast att förstå/underhålla?) Om ni måste veta: resurser om några slides

Varför bör vi inte prioritera: (4. Finns det bättre sätt att göra det på?) Lär oss gå innan vi springer Jag kommer dock nämna något om detta i förbifarten under lektionerna Jag kommer säkerligen tipsa om saker som hör hit under handledningen Ni får gärna fråga

Bra kod : OBS!!! Se till att ni är hyfsat trygga med språket ifråga, ex. Ruby, innan ni funderar över detta. Ni bör ta en första titt på detta hyfsat tidigt, men inte direkt (~Några veckor/månader in) Återvänd till detta kontinuerligt

Bra kod : Resurser - För Ruby: Ruby Style Guide (Nätresurs) - För Ruby: Ruby Best Practices (Nätresurs) - Allmänt: Clean Code (Bok - Java) - Allmänt: Code Complete (Bok - C/Java)

Bra kod i korthet Lätt att underhålla Lätt att förstå Modulär Vi kontrollerar våra antaganden

Och nu: Ruby

Snabbt om klasser En klass är en samling data och beteende som hör ihop Data: Variabler i klassen Beteende: Metoder för klassen

Snabbt om klasser Generellt sett ett abstrakt koncept Ett objekt är en konkret instans av en klass Ex: Vi kan prata om Bil som ett abstrakt koncept Bilen i mitt garage är en konkret instans av klassen Bil

Snabbt om klasser Exempel: class Car def start puts Starting the engine end End concrete_car = Car.new concrete_car.start

Snabbt om klasser Kodexempel

Snabbt om klasser Vi återkommer till detta senare idag

Variabler har: Namn ex: my_num Värde ex: 3 Scope ex: endast tillgänglig i aktuell metod Exempel my_num = 3

Variabler namn Liten bokstav + bokstäver + siffror + _ Vissa ord får inte användas som variabelnamn ex:: if, elsif, def, class,.. google ruby reserved words Bör vara så beskrivande som möjligt Exempel car_to_be_sold, current_user, etc

Variabler namn Kodexempel

Variabler - Värde Man kan se variabler som en behållare som innehåller ett värde och har ett namn Ex: my_int = 3

Variabler - Värde Värdet har en typ Bool, Integer, Float, String, Nil Ex: my_int = 3 my_bool = false my_float = 3.14 Ta reda på typ: puts my_var.class my_var.is_a? Integer

Variabler - Värde Typen för värdet blir intressant då vi blandar värden av olika typ Ex: puts Balance: + balance + USD # Ger fel puts Balance: + balance.to_s + USD Dock: puts Balance: #{balance} USD

Variabler - Värde Integer Float

Variabler - Värde Bool true, false Boolska operatorer: &&! Jämförande operatorer: ==!= <= >= < > Används för programflöde (t.ex. if) / för att hålla status

Variabler - Värde Strängar Text Ex: Jag är en sträng skillnad på #{} och #{} - även what s that? Metoder på strängar: count, + Fler exempel på strängmetoder: http://www.ruby-doc.org/core-1.9.3/string.html

Variabler - Värde symboler Lättviktssträngar Använd för fasta värden ex. :name :name!= name Mer om symbol: http://www.ruby-doc.org/core-1.9.3/symbol.html

Variabler - Värde Klasser Vi kan även tilldela instanser av en klass (objekt) till variabler.

Variabler Något om tilldelning (assignment) += : my_var = my var + -= : my_var = my_var - etc = : my_var = my_var # (default om nil)

Variabler olika scope Variabler är inte tillgängliga överallt after vi definierat dem var de är tillgängliga beror på deras scope

Variabler olika scope local variable: local_variable tillgänglig instance variable: @instance_variable tillgänglig i ett objekt class variable: @@class_variable tillgänglig för alla objekt i en klass global variable: $global_variable tillgänglig överallt i samma projekt Finns fler: (, constant)

Variabler Kan vara ytterliggare typer ex. lambda, proc, etc.

Metoder på objekt.class.nil?.is_a?.eql? För fler metoder på objekt: http://www.ruby-doc.org/core- 1.9.3/Object.html

Array En lista med flera element [ first, second, third ]

Array En lista med flera element Väldigt vanliga En lista över inloggade användare En lista över bloggposter på en sida Etc, etc

Array En lista med flera element Skapa my_array = [ First, Second ] Alt: Array.new Tilldelning my_array[0] = Test Plocka ut värde puts my_array[0]

Array Metoder exempel: clear, collect, count, delete, each, empty?, include?, push, pop, sort, sort! Kan vi lista ut vad ovanstående gör mha länken på nästa sida?

Array Var hittar jag metoder för arrayer? Array API: http://www.ruby-doc.org/core-1.9.3/array.html

hash (dictionary) En uppsättning key/value-par Varje key är associerat med ett visst värde Varje key är unik Väldigt vanliga Se det som en lättvikts -klass Används ofta för att föra över data mellan olika moduler i ett system

hash Skapa my_hash = { key1 => val1, key2 => val2 } my_hash = { key1, val1, key2, val2 } my_hash = Hash.new Lägg till värde my_hash[ name ] = David Ta ut värde puts my_hash[ name ]

hash Exempel på metoder keys, values, clear, delete, include?, size Kan vi lista ut vad dessa metoder innebär med hjälp av länken på nästa sida?

hash Var hittar jag fler metoder? Hash API: http://www.ruby-doc.org/core-1.9.3/hash.html

Flöde villkorat flöde (Conditional) Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_if_else.htm -if, elsif, else kodexempel

Flöde villkorat flöde (Conditional) Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_if_else.htm -unless kodexempel

Flöde villkorat flöde (Conditional) Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_if_else.htm -case when then kodexempel

Flöde villkorat flöde (Conditional) Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_if_else.htm (ternary operator -? : ) kodexempel

Flöde Loop Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_loops.htm - while do + break, next (, retry, redo) kodexempel

Flöde Loop Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_loops.htm - until do kodexempel

Flöde Loop Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_loops.htm - for in kodexempel

Flöde Loop Snabb-guide: http://www.tutorialspoint.com/ruby/ruby_loops.htm (- loop) kodexempel

Metoder Varför? Gör koden mer lättläst Återanvänder kod

Metoder Snabbguide: http://www.tutorialspoint.com/ruby/ruby_methods.htm Definition Kodexempel

Metoder Snabbguide: http://www.tutorialspoint.com/ruby/ruby_methods.htm Argument / parametrar Default parametrar Kodexempel

Metoder Snabbguide: http://www.tutorialspoint.com/ruby/ruby_methods.htm Return Att kalla på en metod Kodexempel

Jag tar ej upp Lambda, Proc Detta är kraftfulla byggstenar, men vi klarar oss utan dem. När är det dags att lära sig lambda? Du har stött på det några gånger när du letat lösningar på problem (via ex. google), och blivit imponerad av hur mycket enklare lösningen blir med lambda-uttryck De är definitivt värda att lära sig dock

Klasser Varför? Knyter samman data och beteende för en viss entitet Ex: alla kod som rör användare i vårt system finns i klassen User Gör koden mer lättläst (abstraktioner) Modulariserar kod (enklare att underhålla) Döljer data (Arv, polymorfism, etc )

Klasser Snabbguide: http://www.tutorialspoint.com/ruby/ruby_classes. htm Definition initialize new

Klasser Snabbguide: http://www.tutorialspoint.com/ruby/ruby_classes. htm Metoder

Klasser Snabbguide: http://www.tutorialspoint.com/ruby/ruby_classes. htm instance variabler attr_reader attr_writer attr_accessor

Klasser Snabbguide: http://www.tutorialspoint.com/ruby/ruby_classes. htm public/private

Klasser Snabbguide: http://www.tutorialspoint.com/ruby/ruby_classes. htm klassvariabler (används inte särskillt ofta) klassmetoder (self)

Klasser om arv: vi kommer använda oss av detta då vi utnyttjar vissa ramverk (t.ex. testramverk). Vi klarar oss dock långt utan att själva använda arv Exempel: class InheritedClass < BaseClass

Exceptions Något oväntat har inträffat -> exekvering avbryts

Exceptions Kasta med raise Hantera med begin, rescue, ensure, end

Exceptions Exempel: begin raise 'A test exception.' rescue Exception => e puts e.message puts ensure puts "Ensuring execution" end

Snabbt om att debugga Se först till att du kan reproducera buggen print / puts - kontrollera dina antaganden gå steg för steg utnyttja irb (el. skapa ett minimalt exempel) Steg 2: Unit Test Resurs: Kap 6 i ruby best practices (går även djupare in på detta)

Snabbt om att debugga Ej i denna kurs: debugger

Resurser för denna föreläsning http://net.tutsplus.com/sessions/ruby-for-newbies/ (Video Tutorials) - främst lektion 1-5 http://ruby.learncodethehardway.org/book/ Snabbguide: http://www.tutorialspoint.com/ruby/ruby_quick_guide.htm (mycket vi inte gått igenom) Officiell referens: http://www.ruby-doc.org/core-1.9.3/ (kan vara svårnavigerad innan man fått pejl på språket)

Andra resurser Thomas, Fowler, Hunt: Programming Ruby 1.9 När ni kommit in något i språket Flanagan, Matsumoto: The Ruby Programming Language Alternativ till ovanstående Ruby Best Practices (Hela boken) Efter någon av ovanstående böcker eller när ni programmerat ruby ett tag

Andra resurser Om ni väljer en annan bok: Ruby 1.8 släpptes 2003 Ruby 1.9 släpptes 2007 Ruby 1.9.3 släpptes 2011 Ruby 2.0 släpptes igår Se till att boken ni väljer gäller v.1.9 (bra 2.0 böcker dröjjer nog lite)

Unit Test Intro Lab 1 Nästa gång

Fin