Mer om språk och Ruby

Relevanta dokument
Konstruktion av datorspråk

Mer om språk och Ruby

Funktioner. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 8. Peter Dalenius Institutionen för datavetenskap

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

Domänspecifika språk. TDP007 Konstruktion av datorspråk Föreläsning 5. Peter Dalenius Institutionen för datavetenskap

TDP007 Konstruktion av datorspråk Hemtentamen

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

729G09 Språkvetenskaplig databehandling

Några grundläggande begrepp

Funktioner. TDDD64 Programmering i Python Föreläsning 7. Peter Dalenius Institutionen för datavetenskap

Introduktion till Ruby

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

Introduktion till Ruby

Programmering i C++ Kompilering från kommandoraden

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Introduktion till programmering och Python Grundkurs i programmering med Python

Testning av program. Verklig modell för programutveckling

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

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

Övning 5 - Tillämpad datalogi 2013

Deklarativ programmering

Konstruktion av datorspråk

Grundkurs i programmering - intro

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

Konstruktion av datorspråk

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

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

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

Labb 1 - Textbearbetning med reguljära uttryck. Formella språk. Definitioner. Chomskyhierarkin. Formella språk. Formella språk

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

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Visual Basic, en snabbgenomgång

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

SKOLFS. beslutade den XXX 2017.

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Konstruktion av datorspråk

Föreläsning 2. Operativsystem och programmering

Länkade listor och automatisk testning

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Programmering för språkteknologer II. OH-serie: Ändliga automater. reguljära uttryck i Java. Deterministiska ändliga automater

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Testautomatisering. BDD, RSpec

Enhetstester på.netplattformen

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

Föreläsning 3. Programmering, C och programmeringsmiljö

Deklarativ programmering

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

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

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Testplan Cykelgarage

729G09 Språkvetenskaplig databehandling

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

DAB760: Språk och logik

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

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

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

PH Bicycle Storage 8000 Testplan

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

Föreläsning 7: Syntaxanalys

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

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

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

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

Prova på-laboration i Ruby

Planering Programmering grundkurs HI1024 HT 2014

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Föreläsning 2 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk

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

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Grundläggande datalogi - Övning 9

Mjukstart i programmering

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?

i LabVIEW. Några programmeringstekniska grundbegrepp

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

kl Tentaupplägg

Konstruktion av datorspråk

Uppgift v1: Teststrategi i sammanhang Terese Berger. Teststrategi. Projekt CiviCRM. Version 0.9. Sida 1(7)

Testning av applikationer

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Karlstads Universitet, Datavetenskap 1

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

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.

Programmering för alla!

NetBeans 7. Avsikt. Projektfönster

TDIU01 (725G67) - Programmering i C++, grundkurs

Uppgift 1 ( Betyg 3 uppgift )

Planering Programmering grundkurs HI1024 HT data

Inlämningsuppgift, EDAF30, 2018

Transkript:

Mer om språk och Ruby TDP007 Konstruktion av datorspråk Föreläsning 2 Peter Dalenius Institutionen för datavetenskap 2014-01-21

Översikt över dagens föreläsning 1. Hur kan man bedöma ett språk? 2. Enhetstestning 3. Likhet i Ruby 4. Reguljära uttryck

1. Hur kan man bedöma ett språk? Exempel Historik Språk Verktyg Utvecklare Dokumentation 3

Hur skriver jag Hello World!? Hur ser syntaxen ut? Liknar språket något som jag redan kan? Vilka av de vanliga konstruktionerna finns och hur ser de ut? Vilka datatyper finns? Vad är omfattningen på de Språk kodbibliotek som följer med språket? Finns det någon speciell kodningsstil som används? Hur utbyggbart är språket? Kodbibliotek Språk Särskilda konstruktioner Baskonstruktioner Vad finns det för särskilda konstruktioner i det här språket som inte finns i andra språk? Finns det några särskilda sorters uppgifter som det här språket verkar lämpat för? 4

Verktyg Hur kommer jag över huvud taget igång med att skriva och testa program? Språk Är språket interpreterat eller kompilerat? Vilka utvecklingsmiljöer finns och vilket stöd ger de programmeraren? Hur funkar det med driftsättning av programvara som ska köras på riktigt? Utvecklingsmiljö Verktyg Körmiljö 5

Dokumentation Vilken information om grundspråket finns (specifikationer, läroböcker)? Vilken information om kodbibliotek finns? Hur dokumenterar jag den kod som jag skriver själv? Finns det bra utbildningsmaterial tillgängligt (ex. tutorials)? Språk Dokumentation Dokumentation Utbildningsmaterial Verktyg 6

Utvecklare Vem bestämmer hur språket ska se ut? Har språket en bred bas av aktiva utvecklare? Vilka är det som använder språket? Språk Verktyg Utvecklarcommunity Utvecklare Ägare Dokumentation 7

Historik Historik Trender Bakgrund Hur länge har språket funnits? Hur stabilt är språket? Görs det drastiska ändringar fortfarande? Finns det olika implementationer? Vad var det ursprungliga syftet med att skapa språket? Språk Talas det om språket? Vad har hänt den senaste tiden? Verktyg Utvecklare Dokumentation 8

Exempel Tillgängliga program Exempel Framgångsexempel Hur mycket används språket till verkliga projekt? Historik Språk Finns det några dokumenterade framgångsexempel? Finns det fria exempelprogram eller öppen källkod-projekt? Verktyg Utvecklare Dokumentation 9

2. Testning: Fyra nivåer Enhetstest (eng. unit testing) Varje enhet, t.ex. funktion, testas för sig. Integrationstest Test av flera enheter tillsammans. Systemtest Hela systemet testas, t.ex. säkerhet, prestanda, användbarhet. Acceptanstest Slutligt test av kunden.

Testning: Två strategier Black box test Den som utformar testerna har inte sett koden utan utgår från specifikationen. White box test Testerna baseras på analys av programkoden.

Enhetstestning Fördelar Underlättar förändring Underlättar integrationstestning Kan i viss utsträckning ersätta design och dokumentation Enhetstestning i Ruby Grundtanken är att vi paketerar testfall som kan köras automatiskt med hjälp av modulen Test::Unit Testfall är egentligen en uppsättning assertions eller förväntningar på utdata

require./faculty' require 'test/unit' Testklass Vi vill här testa funktionen faculty i filen faculty.rb. class TestFaculty < Test::Unit::TestCase def test_simple assert_equal(1, faculty(0)) assert_equal(1, faculty(1)) assert_equal(120, faculty(5)) assert_equal(2432902008176640000, faculty(20)) end end

Körning av tester Alternativ 1: Köra direkt från kommandoraden (rekommenderas) ruby test_faculty.rb Alternativ 2: Vid prompten i irb require './faculty' require './test_faculty' require 'test/unit Test::Unit::Runner.new(TestFaculty).run Resultat av körning Run options: # Running tests:. Finished tests in 0.008113s, 123.2628 tests/s 1 tests, 3 assertions, 0 failures, 0 errors, 0 skips

Några fler sätt att testa Det finns fler sätt att testa som man kan hitta i paketet Test::Unit::Assertions. Här är några exempel: assert(a<5) assert_equal(a, b) assert_not_equal(a,b) assert_nil(my_array) Testar uttrycket är sant Testar om a==b Motsatsen till ovanstående Testar om uttrycket är nil assert_nothing_thrown { do_stuff(a) } Testar att koden inte kastar några undantag assert_in_delta(a, 100.0, 0.01) Testar om a är inom intervallet Gå till www.ruby-doc.org, välj Stanard Library API, leta upp paketet test/unit och klassen Test::Unit::Assertions.

Övning Hämta filerna faculty.rb och test_faculty.rb från föregående exempel från kurswebben (sidan med föreläsningar) och kör testet. Hämta också filen some_functions.rb och utforma testfall för dessa funktioner.

3. Likhet i Ruby a == b testar om a och b är samma objekt. Flera klasser har egna definitioner av ==. Till exempel är 1 == 1.0 trots att det är olika klasser. Likhet beror alltså på klassen. För att alltid kunna jämföra objekt finns a.equal?(b) En svagare form av likhet a.eql?(b) används bl.a. av Hash för att testa likhet. a === b används bl.a. av case-satsen. Den är oftast samma som ==.

4. Reguljära uttryck Vad är poängen? Den enklaste formen av formellt språk Används oftast för att söka i textsträngar Exempel: wildcards är en enklare form grep m.fl. kommandon tar reguljära uttryck scriptspråk, t.ex. Perl Det finns några olika uppsättningar, olika kraftfulla, en del till och med mer än riktiga reguljära uttryck

Reguljära uttryck i Ruby >> /be/ =~ "To be, or not to be..." => 3 >> /o+/ =~ "Moo mooo moooo!" => 1 >> "23, 18, 45"=~/1[0-9]/ => 4 >> /\w\d/ =~ "ABC123" => 2 >> /kul/ =~ "Inget roligt här!" => nil Testa reguljära uttryck i Ruby själv på webbsidan rubular.com

Enskilda tecken Alla tecken utom \/^$.+*?()[]{} matchar sig själva. Dessa måste föregås av \ om man vill matcha dem.. matchar ett godtyckligt tecken. [characters] matchar ett av de uppräknade tecknen. [aeiouyåäö] matchar en vokal [a-za-z] matchar en (engelsk) bokstav [^characters] matchar ett tecken som inte ingår i uppräkningen Det finns genvägar för några klasser av tecken: \w matchar ett alfanumeriskt tecken \d matchar en siffra \s matchar ett white space

Sammansättning Låt a och b vara två reguljära uttryck: ab matchar de två strängarna efter varann a b matchar endera av a eller b a* matchar noll eller fler förekomster av a a+ matchar en eller fler förekomster av a a{m} matchar exakt m förekomster av a a{m,} matchar minst m förekomster av a a{m,n} matchar m till n förekomster av a

Förankring ^ och $ matchar början/slutet av en rad \A och \z matchar början/slutet av strängen \b matchar ordgränser (\B tvärtom)

Funktioner som använder regexp >> s = "The stars, like dust" => "The stars, like dust >> s.sub(/e/,'$') => "Th$ stars, like dust >> s.gsub(/[aeiouy]/,'*') => "Th* st*rs, l*k* d*st >> s.gsub(/(^, \s)\w/) { m m.upcase } => "The Stars, Like Dust >> s.split(/[\s,]+/) => ["The", "stars","like", "dust"] >> s.scan(/[aeiouy]\w/) => ["ar", "ik", "us"]

Resultat av matchning >> /[aeiouy]{2,}/ =~ "the moon is a cheese" => 5 >> [$`, $&, $'] => ["the m", "oo", "n is a cheese"] >> /(\d\d):(\d\d):(\d\d)/ =~ "Klockan är 12:35:40 nu" => 12 >> [$1, $2, $3] => ["12", "35", "40"]

Resultat av matchning >> s = "the moonis a cheese" => "the moon is a cheese" >> re = /[aeiouy]{2,}/ => /[aeiouy]{2,}/ >> md = re.match(s) => #<MatchData:0xdf65ed4> >> [md.pre_match, md[0], md.post_match] => ["the m", "oo", "n is a cheese"] >> md2 = /(\d\d):(\d\d)/.match("14:45") => #<MatchData:0xdb94f94> >> md2.captures => ["14", "45"]

Övning Hitta på ett reguljärt uttryck som matchar en svensk postadress, t.ex. 584 31 Linköping. Finns det några postorter vars namn innehåller något annat än bara vanliga bokstäver? Baka in det i en funktion som svarar sant eller falskt, givet en sträng som kanske innehåller en postadress. Gör en testklass med lämpliga testfall. Ta även med negativa tester, dvs det reguljära uttrycket får inte matcha strängar som inte är postadresser. Testa reguljära uttryck i Ruby på rubular.com

Inför första seminariet Hur kan man sätta sig in i den andra gruppens kod med begränsad tid? Läs deras utvecklarblogg! Kör deras testerna! Hur gör man en bra opposition? Om någon ska beskriva en lösning för dig, hur vill du att de ska göra? Tänk ut ett par frågor att ställa till gruppen. Utgå från frågorna som finns i anvisningarna för utvecklarbloggen. Lärde ni er något av gruppens lösning?

www.liu.se