12. Kodapan
Skriver kod. That’s it.
Ett kugghjul i ett maskineri:
– Skriver kod mekaniskt
– Saknar överblick
– Utan egentligt ansvar
– Väldigt utbytbar
13. Cowboy-kodaren
Skriver kod. That’s it.
En “fri själ”, men inte så bra:
– Ofta orutinerad
– Ostrukturerad
– Saknar kvalitetstänk
– Inte hållbar
14. Programmeraren
Skriver bra kod. Programmerar.
En renässansmänniska:
– Skapande
– Konstnärlig
– Ensamt geni
– Inte hållbar i längden
16. Hur blir vi ordentliga utvecklare?
Genom att arbeta strukturerat och rationellt!
– Tänk först – skriv kod sedan. Gör vi rätt saker?
– Kan vi återanvända tidigare skriven kod? Hur?
– Kan vi effektivt samarbeta kring vår mjukvara?
– Hur dokumenterar vi?
– Hur säkerställer vi att koden fungerar?
18. VĂĄrt problem
â—Ź
Riktiga mjukvaruprojekt är stora
â—Ź
Riktiga mjukvaruprojekt kommer
att innebära flera – och parallella
– releaser av samma mjukvara
â—Ź
Hur hanterar vi detta pĂĄ ett
effektivt sätt?
19. Vad är versionshantering?
Versionshantering är den metod med vilken vi kan hantera flera
parallella versioner av en mjukvara
– Möjliggör samtidig utveckling av olika delar av mjukvaran
– Ger oss möjligheter att känna till – och dra nytta av –
tidigare versioner av mjukvaran
– Möjliggör samtidig utveckling av nischade versioner eller
utgĂĄvor av en mjukvara
20. Fördelarna med versionshantering
• EN SANNING – Vi kan alla vara överens om vilken kod som är den aktuella
• Samtidig utveckling
– Gör det enklare att dela och återanvända kod
– Olika team kan arbeta på samma projekt
• Historia och spårbarhet
– Återgå till tidigare versioner av ett projekt
â—Ź
Förstörde din kursare din kod? Ingen fara, den finns kvar!
– Underhåll flera olika releaser av samma fil, modul eller applikation
– Vem gjorde vad? Nu kan vi veta!
• Minskade risker
– Ha inte all kod på en enda dator
– Låt inte vem som helst förändra koden
21. Viktiga begrepp
• Versioner eller revisioner – en uppsättning förändringar till källkoden.
• Brancher eller grenar – ett tillfälligt arbetsspår som lever parallellt med
huvudarbetsspĂĄret.
• Trunk eller master – projektets huvudarbetsspår. Här lever den “senaste”, “riktiga”
versionen av mjukvaran.
• Merge eller sammanslagning – en punkt där två eller flera grenar slås samman till en.
• Konflikter – uppstår när versionshanteringsmjukvaran inte själva kan lösa en
sammanslanging.
• Resolve – den manuella handpåläggning som utförs för att lösa en konflikt.
• Commit eller incheckning – den händelse som skapar en ny revision av koden.
22. Viktiga begrepp
• Repository – den plats där all kod och historik finns sparad. Kan vara på en extern
server, men kan även vara lokal.
• Intialisering – skapandet av ett nytt repository.
• Working copy eller arbetskopia – den ögonblickskopia av koden som du just nu
arbetar med. Fram tills att den checkas in i ett repsitory pĂĄverkar den ingen annan.
• Checkout – skapar en arbetskopia av en specifik revision av koden.
• Push/pull – kopiering av ändringar mellan två olika repositories. En push innebär
att du skickar en ändring, en pull innebär att du hämtar en ändring.
• Kloning – den händelse som skapar en exakt kopia – en klon – av ett annat
repository.
23. • Det för tillfället flitigast användna verktyget för versionshantering
• Välprövat
– Hanterar ohemult stora projekt (exempelvis Linux)
– Snabbt!
• Hanterar arbetsflöden på ett bra sätt
– Byggt för att vara bra på att dela upp projekt och slå samman dem igen
â—Ź
Fork/pull request och branch/merge
• Distribuerat – ingen central server krävs
– Pull/Push
• Open Source!
Git: https://git-scm.com
24. • En tjänst för lagring och delning av Git-repositories
• Stor i open source-världen
• Erbjuder även kringtjänster såsom wikis och viss
ärendehantering
Github: https://github.com
GitHub
27. VĂĄrt problem
â—Ź
Riktiga mjukvaruprojekt är stora
â—Ź
Riktiga mjukvaruprojekt
innehĂĄller oftast externt skriven
mjukvara
â—Ź
Hur hanterar vi detta pĂĄ ett
effektivt sätt?
28. Vad är pakethantering?
Modulbaserad mjukvara behöver kontrolleras – detta görs
med fördel med en pakethanterare
– Återanvänd din (och andras) kod
– Separation of concerns
– Slipp ifrån jobbet med att dra ner paket manuellt
Usch!
29. NĂĄgra viktiga termer
â—Ź
Paket: En samling av filer som levereras tillsammans. Kan vara körbara filer, bibliotek eller
andra resurser, sĂĄ som media, typsnitt eller konfigurationsfiler. I JavaScript kallas dessa
allmänt för moduler.
â—Ź
Pakethanterare: En mjukvara som hanterar paket.
â—Ź
Repository (eller repo): En plats där paket kan publiceras, sökas efter och laddas ner från.
â—Ź
Beroende: Ett eller flera paket som behövs för att ett specifikt paket ska kunna användas.
â—Ź
Beroendekonflikt: Ett tillstĂĄnd som uppstĂĄr dĂĄ tvĂĄ paket beror pĂĄ samma paket.
â—Ź
Version: En specifik utgåva av ett specifikt paket. Genom att känna till versionsinformation
kan en pakethanterare hålla koll på flera versioner av ett paket, vilket minskar risken för
beroendekonflikter.
33. Varför beroendehantera i mjukvaruprojekt?
â—Ź
Robustare projekt och mjukvara
â—Ź
Enklare att starta nya projekt
â—Ź
Enklare för nya utvecklare att börja arbeta
â—Ź
Mindre kod i era kod-repositories
34. Pakethanteraren npm
â—Ź
De facto-standard för vettig beroendehantering i JavaScript
â—Ź
Bygger på Node.js – npm (Node Package Manager) är dess
pakethanterare
â—Ź
Bygger pĂĄ en kodstandard som heter CommonJS
â—Ź
Går att använda till annat än just Node.js
â—Ź
Sköter installation av moduler åt dig
â—Ź
Du behöver inte längre versionshantera och leverera alla
beroenden – bara en fil som berättar vilka paket som krävs
35. Pakethanteraren npm
â—Ź
Hanterar beroenden i flera led
â—Ź
Kan skilja mellan olika versioner av moduler
â—Ź
Förenklar uppdatering av mjukvaran när underliggande
moduler uppdateras
39. npmjs.com
â—Ź
Npm:s repository för JavaScript-moduler
â—Ź
Modulerna är fria att använda i dina projekt
â—Ź
Använder semantisk versionering för att skilja mellan
olika versioner av moduler
42. VĂĄrt problem
â—Ź
Riktiga mjukvaruprojekt är stora
â—Ź
Riktiga mjukvaruprojekt behöver
paketeras innan de levereras
â—Ź
Hur hanterar vi detta pĂĄ ett
effektivt sätt?
43. Vad är paketering?
Utvecklad mjukvara innehĂĄller som regel kod och artefakter
som är ointressanta för slutanvändaren. Dessa tar stor plats
och kan dessutom vara säkerhetshål. En paketerare tar bort
alla onödiga artefakter och levererar en färdig mjukvara.
44. Begreppen “build” och “bundle”
• En build är den process som tar din utvecklingskod –
källkod, grafiska element och annat – och slår samman dem
till en enhet.
• En bundle är den artefakt som är resultatet av din build-
process.
45. Paketering med Webpack
• Webpack är en av många – men en av de mer användna – paketeringsverktygen för
webbprojekt
• Skrivet i JavaScript
• Slår samman flera filer av samma typ till en (se demo)
– Flera JavaScriptfiler blir en
– Flera CSS-dokument blir ett, etc
• Genererar en uppsättning filer per HTML-dokument som ska användas
– Sparar mycket laddningstid
• Klarar i grunden av JavaScript, men kan utökas med andra filtyper
• Hanteras med hjälp av konfigurationsfiler – precis som pakethanterarna
49. Vad är testning?
“Software testing is an investigation conducted to provide
stakeholders with information about the quality of the product or
service under test.”
Enl. Wikipedia
• Validering → Bygger vi rätt saker?
• Verifikation → Bygger vi sakerna på rätt sätt?
Wikipedia, Software testing – https://en.wikipedia.org/wiki/Software_testing
51. Varför testar vi våra applikationer?
• Tekniska skäl
• Utvecklingsteamets skäl
• Ekonomiska skäl
52. Tekniska skäl: Säkerställ funktionaliteten
Det här är validering och verifiering!
• Fungerar koden som den är tänkt att göra?
– Hanteras indatan på rätt sätt?
– Fungerar koden med felaktig indata?
– Är koden feltolerant?
• Kommer programmet att fungera i produktion?
– Matchar vår utvecklingsmiljö produktionsmiljön?
– Fungerar all kod tillsammans?
54. Utvecklingsteamets skäl: Förtroende
• En bra utvecklare kan visa att hens kod fungerar
• Bra tester säkerställer att koden fungerar
– Tester är bra att ha under utvecklingen av en funktion
– De är ännu bättre att ha när koden har levt en tid
• Tester kan användas som bas i diskussioner
55. Utvecklingsteamets skäl:
Historik och nya utvecklare
Tester är dokumentation → förenklar introduktion av
nya utvecklare
• Väl utformade och beskrivna tester visar hur en klass eller funktion
ska fungera
• BDD-tester (user stories-baserade tester) beskriver hur applikationen
ska fungera
• Lösta buggar och fel visas med tester
56. Ekonomiska skäl:
Driftstörningar är dyrare än utvecklingstid
• Mjukvarutestning är dyrt
– Längre utvecklingstid
– Fler utvecklare/testare
– Mer infrastruktur
• Fel i mjukvaran är dyrare
– Nertid (se nästa slide)
– Dålig PR/goodwill
57. Ekonomiska skäl:
Driftstörningar är dyrare än utvecklingstid
Morpheus, How to manage app uptime like a boss -
https://www.morpheusdata.com/blog/2016-04-06-how-to-manage-app-uptime-like-a-boss
58. Olika typer av testning
• Statisk testning
• Enhetstestning
• Integrationstestning
• End-to-end/acceptanstest
59. Statisk testning
• Kräver ingen körning av mjukvaran
• Innefattar analys av:
– Krav
– Designdokument
– Koden
• Kan göras både manuellt och med verktyg
Statiska tester
60. Enhetstestning
• Testning av små delar – enheter – av koden,
exempelvis klasser eller funktioner
• Körs ofta – så fort koden ändras
• Testfallen bör definieras innan
koden skrivs
• Utförs med verktyg, oftast automatiskt
• Kan ses som specifikation och dokumentation
Statiska tester
Enhetstester
61. Integrationstestning
• Tester som involverar flera enheter
av koden – exempelvis två moduler,
klasser eller funktioner
• Görs för att säkerställa att
enheterna fungerar tillsammans
• Testerna körs ofta som en del av förberedelserna inför en
release – projekt tenderar att använda specifika verktyg för
detta
Statiska tester
Enhetstester
Integrationstester
62. End-to-end-testning
• Testar användarflöden i mjukvaran
• Heltäckande och testar många
funktionaliteter samtidigt
• Körs inför leveranser
• Görs påfallande ofta av vanliga
människor, men kan även göras med hjälp av
automatiserade verktyg
Statiska tester
Enhetstester
Integrationstester
End-to-end