şÝşÝߣ

şÝşÝߣShare a Scribd company logo
Utvecklingsmetodik
En rejäl crash course i versionskontroll, pakethantering, testning
och paketering
Johan Holmberg 2019-05-07
Dagens föreläsning
• Versionshantering
• Pakethantering
• Paketering
• Testning
Metodik
But why?
Mjukvaruutveckling är dyrt!
• Våra verktyg är dyra
• Våra miljöer är dyra
• Vi är dyra
• Våra fel är dyra
Felen vi gör resluterar i:
Produktionsbortfall
Tappad försäljning
Olyckor
¶Ůö»ĺ˛ő´Ú˛ą±ô±ô
Eller värre...
Ja, men varför?
Metodik - Versionshantering, pakethantering, paketering och testning
Kodapan
Skriver kod. That’s it.
Ett kugghjul i ett maskineri:
– Skriver kod mekaniskt
– Saknar överblick
– Utan egentligt ansvar
– Väldigt utbytbar
Cowboy-kodaren
Skriver kod. That’s it.
En “fri själ”, men inte så bra:
– Ofta orutinerad
– Ostrukturerad
– Saknar kvalitetstänk
– Inte hållbar
Programmeraren
Skriver bra kod. Programmerar.
En renässansmänniska:
– Skapande
– Konstnärlig
– Ensamt geni
– Inte hållbar i längden
Utvecklaren
Skapar lösningar. Utvecklar.
En ingenjörstyp:
– Metodisk och strukturerad
– Grupporienterad
– Kvalitetstänkande
– Hållbar
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?
Versionshantering
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?
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
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
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.
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.
• 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
• 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
Demo
Johan leker med git
Pakethantering
VĂĄrt problem
â—Ź
Riktiga mjukvaruprojekt är stora
â—Ź
Riktiga mjukvaruprojekt
innehĂĄller oftast externt skriven
mjukvara
â—Ź
Hur hanterar vi detta pĂĄ ett
effektivt sätt?
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!
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.
Beroenden Ditt projekt
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Beroenden
Ditt projekt
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Ditt projekt
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Ditt projekt
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Ditt projekt #2
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Ditt projekt
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Ditt projekt #54
Bibliotek Bibliotek Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Beroendehantering i mjukvaruprojekt
â—Ź
Python: pip
â—Ź
Java: Maven/Gradle
â—Ź
PHP: Composer
â—Ź
C#/.NET: NuGet
â—Ź
Javascript: npm
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
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
Pakethanteraren npm
â—Ź
Hanterar beroenden i flera led
â—Ź
Kan skilja mellan olika versioner av moduler
â—Ź
Förenklar uppdatering av mjukvaran när underliggande
moduler uppdateras
Paketbeskrivning: package.json
{
"name": "thin-red-line",
"version": "0.5.7",
"private": true,
"scripts": {
"start": "grunt docs && node ./bin/www",
"test": "mocha --recursive test/unit_test -R dot",
"system-test": "jasmine-node test/system_test"
},
"dependencies": {
"bluebird": "~3.0.6",
"body-parser": "~1.10.2",
"xml2js": "^0.4.9"
},
"devDependencies": {
"chai": "^3.0.0",
"chai-as-promised": "5.1.*",
"rewire": "~2.5.1"
}
}
Demo
Johan leker med npm
npmjs.com
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
Semantisk versionering
Semantisk versionering: http://semver.org/
Paketering
VĂĄrt problem
â—Ź
Riktiga mjukvaruprojekt är stora
â—Ź
Riktiga mjukvaruprojekt behöver
paketeras innan de levereras
â—Ź
Hur hanterar vi detta pĂĄ ett
effektivt sätt?
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.
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.
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
Demo
Johan leker med Webpack
Testning
Metodik - Versionshantering, pakethantering, paketering och testning
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
Varför testar vi våra applikationer?
Varför testar vi våra applikationer?
• Tekniska skäl
• Utvecklingsteamets skäl
• Ekonomiska skäl
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?
Metodik - Versionshantering, pakethantering, paketering och testning
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
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
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
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
Olika typer av testning
• Statisk testning
• Enhetstestning
• Integrationstestning
• End-to-end/acceptanstest
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
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
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
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
Demo
Johan leker med Jest
Till sist
Glöm inte att programmering är kul!
Det är okej att vara cowboy ibland

More Related Content

Metodik - Versionshantering, pakethantering, paketering och testning

  • 1. Utvecklingsmetodik En rejäl crash course i versionskontroll, pakethantering, testning och paketering Johan Holmberg 2019-05-07
  • 2. Dagens föreläsning • Versionshantering • Pakethantering • Paketering • Testning
  • 4. Mjukvaruutveckling är dyrt! • VĂĄra verktyg är dyra • VĂĄra miljöer är dyra • Vi är dyra • VĂĄra fel är dyra Felen vi gör resluterar i:
  • 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
  • 15. Utvecklaren Skapar lösningar. Utvecklar. En ingenjörstyp: – Metodisk och strukturerad – Grupporienterad – Kvalitetstänkande – HĂĄllbar
  • 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.
  • 30. Beroenden Ditt projekt Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek
  • 31. Beroenden Ditt projekt Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Ditt projekt Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Ditt projekt Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Ditt projekt #2 Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Ditt projekt Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Ditt projekt #54 Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek Bibliotek
  • 32. Beroendehantering i mjukvaruprojekt â—Ź Python: pip â—Ź Java: Maven/Gradle â—Ź PHP: Composer â—Ź C#/.NET: NuGet â—Ź Javascript: npm
  • 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
  • 36. Paketbeskrivning: package.json { "name": "thin-red-line", "version": "0.5.7", "private": true, "scripts": { "start": "grunt docs && node ./bin/www", "test": "mocha --recursive test/unit_test -R dot", "system-test": "jasmine-node test/system_test" }, "dependencies": { "bluebird": "~3.0.6", "body-parser": "~1.10.2", "xml2js": "^0.4.9" }, "devDependencies": { "chai": "^3.0.0", "chai-as-promised": "5.1.*", "rewire": "~2.5.1" } }
  • 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
  • 50. Varför testar vi vĂĄra applikationer?
  • 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
  • 65. Glöm inte att programmering är kul!
  • 66. Det är okej att vara cowboy ibland