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