= Smidig praksis og verktøy :customcss: slides.css :icons: font == Smidig praksis og verktøy * fokuserer på bygging av produkt som kan prøves ut * sentrert rundt prosesser for dette, og ikke på verktøy og teknikk * men... forutsetter i praksis verktøystøtte ** smidighet krever automatisering ** verktøy smører prosessene == Ulike typer verktøy * oppfølging av den smidige prosessen ** oversikt over (ulike typer) utviklingsoppgaver ** planlegging av iterasjoner ** samarbeidsstøtte * håndtering av kildekode ** distribuert utvikling ** endringshåndtering ** versjonskontroll == Ulike typer verktøy forts. * kontinuerlig integrasjon (CI) ** testing ** bygging av artifakter == Historien om en utviklingsoppgave Kunden ønsker å kunne importere et gammelt filformat. Dette funksjonsønsket deles opp i to utviklingsoppgaver, én for kjernefunksjonaliteten og én for brukergrensesnittet. Cecilie starter med kjernen og skisserer først hvordan hun tenker å løse det teknisk vha. noen enkle klassediagram. Så defineres oppførselen til hver klasse i form av tester, og tomme klasser opprettes. == Historien om ... forts. Kristian kan starte på brukergrensesnittet til importfunksjonaliteten så snart klassedeklarasjonene er klare, han trenger ikke selve implementasjonskoden i starten. Cecilie jobber seg så gjennom implementasjonen, og sjekker hele tiden at den er som tenkt ved å kjøre testene. Hun er ferdig i god tid før Kristian, og når han er det så... bare virker det! Til slutt oppsummerer de begge hva som ble gjort og gjør funksjonen tilgjengelig for kunden. == Historien om ... og verktøy Hva har dette å si for verktøystøtte? * oppfølging av den smidige prosessen: ** to utviklingsoppgaver knyttet til hhv. Cecilie og Kristian ** del av inneværende iterasjon ** dialog/diskusjonstråd knyttet til oppgaven == Historien om ... og verktøy forts. * håndtering av kildekode: ** Cecilie må kunne dele sin kjernekode med Kristian, men holde den unna de andre ** det må komme frem at koden er knyttet til respektive utviklingsoppgaver ** den nye koden er knyttet til _neste_ versjon == Historien om ... og verktøy forts. * kontinuerlig integrasjon (CI): ** hyppig kjøring av testene ** ny versjon rulles raskt ut til kunden == `gitlab.stud.idi...` [.smaller-80] * profesjonelt støtteverktøy for smidig utvikling * IDI har egen installasjon (tas kanskje over av NTNU IT) ** innlogging med NTNU-navn og -passord * hierarki av _grupper_, med _prosjekter_ (repo) under ** IT1901-emnet er en gruppe: https://gitlab.stud.idi.ntnu.no/it1901[it1901] *** emnet har repo med læringsmateriale inkl. kode ** hver gruppe er egen _undergruppe_ (it1901-gr19xy) *** gruppene opprettes av oss, så inviteres dere inn *** dere oppretter nødvendige repo == Oppgavesporing (issue tracking) En _oppgave_ (issue) er arbeid som skal følges opp * ny funksjon, forbedring, feilretting, konfigurasjon ... * hver oppgave har en dialog/diskusjonstråd * halvautomatisk knytning til _endringer_ (commits) == Oppgavesporing forts. Oppgavesporing er viktig for transparens * kunder trenger innsyn i prosess * teamet trenger å dele kunnskap * løse og distribuerte prosjekter (f.eks. åpen kildekode) har ekstra behov * støtter vurdering... == Oppgavesporing forts. [.smaller-80] * oppgaver opprettes ifm. planlegging av iterasjon, f.eks. fra _brukerhistorier_, _funksjonsønsker_ eller _feilrapporter_ * oppgaver knyttes til ** _milepæl_ for iterasjon ** utviklinger som jobber med den * _merkelapper_ (labels) kan angi _fasen_ en oppgave er i ** f.eks. planlagt, utvikling, testing, godkjent ** _oppgavetavler_ (issue boards) visualiserer fremdrift == Oppgavetavle (issue board) image::https://about.gitlab.com/images/blogimages/workflow.png[size=80%] == Oppgavesporing forts. * dialog/diskusjonstråd dokumenterer prosessen ** designidéer, avgjørelser, avhengigheter, ... ** knyttes til endringer (commits) gjennom oppgavenummer (#) ** oppsummerer hva som ble gjort [.center-paragraph] Viktig for transparens! == Kildekodehåndtering [.center-paragraph] link:scm.html[Source code management (SCM)] == Kontinuerlig integrasjon [.center-paragraph] link:ci.html[Continuous Integration (CI)]