DD2487 Storskalig programvaruutveckling 7,5 hp
Denna kurs är under avveckling.
Sista planerade examination: HT 2024
Avvecklingsbeslut:
Kursen avvecklas vid utgången av HT 2024 enligt skolchefsbeslut: J-2023-1523.
Beslutsdatum: 2023-06-12
Kursen gavs sista gången HT 2022. Sista möjlighet till examination i kursen ges HT 2024.
Examinationen genomförs under övergångsperioden inom ramen för kursen DD2489.

Det största problemet med utveckling och förvaltning av stora system är komplexitet — stora system är svåra att förstå. [Out of the Tar Pit, av Moseley och Marks, 2006].
En stor del av denna komplexitet är oavsiktligt introducerad av vårt sätt att hantera programmens tillstånd.
Den här kursen kommer att berika deltagarna i hur funktionell programmering drastiskt kan minska oavsiktlig komplexitet och skapa en kodbas som är enklare att förvalta och resonera kring.
Funktionell programmering är ett paradigm som fokuserar på värden och matematiska funktioner istället för muterbara objekt och imperativa instruktioner. I ett funktionellt programspråk så är hantering av tillstånd typiskt förflyttat till randen av programmet.
Eftersom god koddesign är ett intersubjektivt begrepp så måste vi ha en bra dialog tillsammans i kursen. Vi behöver vara öppna för varandras idéer, dela våra perspektiv och erfarenheter och kontinuerligt reflektera kring egna och andras erfarenheter i kursen.
Ökade erfarenheter ger empirisk kunskap, intuition och sensorer som hjälper till att undvika oavsiktlig komplexitet, skapa lämpliga abstraktioner och utveckla en hållbar kodbas.
Vi kommer att använda principen entydig källa för sanning (single source of truth) med atomära uppdateringar. På kurswebben kan du se hur biblioteket re-frame beskriver dessa begrepp.
Innehåll och lärandemål
Kursinnehåll
Föreläsningarna består av mycket livekodning, praktisk vägledning, kodgranskning och dialog kring hur vi kan förbättra programkodens arkitektur och design. Detta kräver ett aktivt deltagande och en öppen positiv atmosfär på föreläsningarna. Tanken med föreläsningarna är att entusiasmera och bredda perspektiven kring storskalig programvaruutveckling.
Föreläsningarna är obligatoriska eftersom kursen baseras på vår gemensamma dialog och det aktiva deltagande som inkluderas i den.
Huvudsakligt innehåll: funktionell programmering, kodkvalitet, läsbarhet, förvaltningsbarhet, samarbete, versionshantering (git), globalt tillstånd, beroenden, matematiska funktioner, persistenta data strukturer, hantering av applikationers tillstånd, reaktiv programmering, webbutveckling, testbarhet, test som dokumentation, jämförelse med objektorienterad programmering, atomära uppdateringar av tillstånd, samtidiga förlopp (concurrency), DSL, Lisp och REPL.
Programspråken Clojure och ClojureScript används för att förverkliga kursens innehåll i ett projekt. Därmed kommer även kursen att ge gedigna kunskaper i Lisp, Clojure, Clojure Spec och REPL workflow.
Varje vecka kommer studenterna att få se en video med en konferenspresentation. Tanken är att den ska ge inspiration och öppna nya dörrar. Under föreläsningarna kommer vi att reflektera över innehållet.
Lärandemål
Efter godkänd kurs ska studenten kunna
- designa, med hjälp av funktionell programmering, stora system så att de blir enkla att testa, förstå och förvalta
- modellera information i ett program genom endast icke-muterbara data
- reflektera över och diskutera hur arkitektur och design kan förbättras
- reflektera över begreppen identitet, tillstånd och värde
- skapa entiteter och komponenter så att de blir enkla att testa samt skriva test för dem
- skydda intern design av ett program vid integration med andra system
- utveckla ett program i samarbete med andra
- granska och reflektera över given programkod
- förvalta given programkod
i syfte att
- förstå och behärska de parametrar inom programvaruutveckling som gör programkod hållbar, återanvändbar och flexibel inför förändrade krav.
Kursupplägg
Kursen består av föreläsningar (med krav på minst 80 % närvaro) och eget arbete i projektgrupper om tre personer.
Kurslitteratur och förberedelser
Särskild behörighet
Programutvecklingsteknik motsvarande någon av kurserna DD2480, DD1369/DD1392/DD1393, DD1346, DD1387/DD1388/DD2387, IV1303, HI1027/HI1201 eller DD1385/DD2385.
Rekommenderade förkunskaper
Utrustning
Kurslitteratur
Examination och slutförande
När kurs inte längre ges har student möjlighet att examineras under ytterligare två läsår.
Betygsskala
Examination
- PRO1 - Programvaruutvecklingsprojekt, 7,5 hp, betygsskala: P, F
Examinator beslutar, baserat på rekommendation från KTH:s handläggare av stöd till studenter med funktionsnedsättning, om eventuell anpassad examination för studenter med dokumenterad, varaktig funktionsnedsättning.
Examinator får medge annan examinationsform vid omexamination av enstaka studenter.
Övriga krav för slutbetyg
Närvaro vid minst 80 procent av föreläsningarna är obligatoriskt.
Möjlighet till komplettering
Möjlighet till plussning
Examinator
Etiskt förhållningssätt
- Vid grupparbete har alla i gruppen ansvar för gruppens arbete.
- Vid examination ska varje student ärligt redovisa hjälp som erhållits och källor som använts.
- Vid muntlig examination ska varje student kunna redogöra för hela uppgiften och hela lösningen.
Ytterligare information
Kurswebb
Ytterligare information om kursen kan hittas på kurswebben via länken nedan. Information på kurswebben kommer framöver flyttas till denna sida.
Kurswebb DD2487Ges av
Huvudområde
Utbildningsnivå
Påbyggnad
Kontaktperson
Övrig information
Kursen ersätter DD2386 och kan inte kombineras med denna.
Från och med 2023 ersätts kursen av DD2489.
I denna kurs tillämpas EECS hederskodex, se:
http://www.kth.se/eecs/utbildning/hederskodex
Övriga föreskrifter
Denna kurs innehåller ett grupparbete. Kursregistrering efter den officiella registreringensperioden är därför inte möjligt, eftersom vi behöver skapa grupperna i början av kursen.