Konstruktion av datorspråk

Relevanta dokument
Mer om språk och Ruby

Mer om språk och Ruby

Funktioner. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 8. 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

TDP007 Konstruktion av datorspråk Hemtentamen

729G09 Språkvetenskaplig databehandling

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

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

Några grundläggande begrepp

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Konstruktion av datorspråk

Programmering i C++ Kompilering från kommandoraden

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

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

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

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

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

Introduktion till programmering och Python Grundkurs i programmering med Python

Grundkurs i programmering - intro

Testning av program. Verklig modell för programutveckling

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

Konstruktion av datorspråk

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

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

SKOLFS. beslutade den XXX 2017.

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

Föreläsning 2. Operativsystem och programmering

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

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

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

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Introduktion till Ruby

Enhetstester på.netplattformen

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

Övning 5 - Tillämpad datalogi 2013

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

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 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk

Introduktion till Ruby

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

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

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

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

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

Deklarativ programmering

Testautomatisering. BDD, RSpec

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

i LabVIEW. Några programmeringstekniska grundbegrepp

Planering Programmering grundkurs HI1024 HT 2014

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

729G09 Språkvetenskaplig databehandling

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,

DAB760: Språk och logik

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

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

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

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

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

Visual Basic, en snabbgenomgång

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

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

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

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

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

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

Objektorienterad Programmering (TDDC77)

Planering Programmering grundkurs HI1024 HT data

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

Grundläggande datalogi - Övning 9

Länkade listor och automatisk testning

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

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?

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

TDDI16: Datastrukturer och algoritmer

kl Tentaupplägg

Konstruktion av datorspråk

Testplan Cykelgarage

Testning av applikationer

PH Bicycle Storage 8000 Testplan

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Programmering för alla!

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

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.

Föreläsning 7: Syntaxanalys

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

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

Testautomatisering. Labbar, FitNesse, TDD, BDD

Transkript:

Konstruktion av datorspråk Fö2: Funderingar kring hur man kan bedöma programspråk samt några fler detaljer i Ruby Peter Dalenius peter.dalenius@liu.se Institutionen för datavetenskap Linköpings universitet 2012-01-19

Ö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

Språk 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 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?

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ö

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 Verktyg Dokumentation Dokumentation Utbildningsmaterial

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

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 Språk var det ursprungliga syftet med att skapa språket? Talas det om språket? Vad har hänt den senaste tiden? Verktyg Utvecklare Dokumentation

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

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

Testklass Vi vill här testa funktionen faculty i filen faculty.rb. require 'faculty' require 'test/unit' 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 (två sätt) a) Köra direkt från kommandoraden ruby test_faculty.rb b) Vid prompten i irb require 'test/unit/ui/console/testrunner' Test::Unit::UI::Console::TestRunner.run(TestFaculty) Resultat av körning Loaded suite TestFaculty Started. Finished in 0.0 seconds. 1 test, 4 assertions, 0 failures, 0 errors

Några fler sätt att testa Det finns fler sätt att testa som man kan hitta i modulen Test::Unit::Assertions. Här är några exempel: assert(a<5) Testar uttrycket är sant assert_equal(a, b) Testar om a==b assert_not_equal(a,b) Motsatsen till ovanstående assert_nil(my_array) 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

Övning Hämta filerna 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 på 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 moon is 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. 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.

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?