From d796142a5036b1b63d199c609da8bd172128522e Mon Sep 17 00:00:00 2001 From: georgeas <george.a.stoica@ntnu.no> Date: Tue, 27 Aug 2019 13:44:17 +0200 Subject: [PATCH] lecture 2 slides --- .../revealjs/02-software-development.adoc | 379 +++++++++++++++++- 1 file changed, 378 insertions(+), 1 deletion(-) diff --git a/lectures/revealjs/02-software-development.adoc b/lectures/revealjs/02-software-development.adoc index e0fde07..f8dd6c1 100644 --- a/lectures/revealjs/02-software-development.adoc +++ b/lectures/revealjs/02-software-development.adoc @@ -13,21 +13,165 @@ IT1901 Fall 2019 - 2nd Lecture [color = "#fff6d5"] == Overview +- Administrative issues - About software development - Software development methods - Software quality. - Practices used in modern agile development +[background-color = "#124990"] +[color = "#fff6d5"] +== Administrative issues + +== Feedback +[.left] +Go to: + +app.one2act.no + +Session: + +RIBOO + + +[.right] +image::../images/lecture02/qr-app-one2act-no.svg[width=400] + +== Example code on gitlab + +Have you managed to build and run the example? + +- A) Yes +- B) No + + +== Example code on gitlab (2) + +What IDE are you using ? + +- A) Eclipse +- B) IntelliJ + + +== Example code on gitlab (3) + +Are there any issues encountered ? + +- A) no issues +- B) could not clone the project +- C) could not build the project +- D) could not run the project +- E) other issue + + +== ! + +image::../images/lecture02/groups-padding.png[canvas, size=contain] + +== Reference Group + +- Tommy Chan +- Vivi Cecilie Galschiødt Svendsen +- Johan Ludvig Holst +- Aksel Kirknes +- Aksel Saugestad +- Lars-Olav Vågene + +== Deliverable 1 + + - each student group has assigned a group (folder) in gitlab gr19xx + - in the folder there is a repository with name gr19xx which will be used for delivering the code + - deadline September 9th, 2019 + - group contract has deadline on September 3rd, 2019 + + [background-color = "#124990"] [color = "#fff6d5"] == About Software Development == What is Software Development +[.center-paragraph] +“Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components.†+ +[.smaller-60] +https://en.wikipedia.org/wiki/Software_development + +== What is Software Development (2) + +[.center-paragraph] +“Software development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software.†+ +[.smaller-60] +IBM Research + +== Engineering perspective + +[.center-paragraph] +Engineering refers to the practice of organizing the design and construction of any artifice which transforms the physical world around us to meet some recognized need. + +[.smaller-60] +Rogers, G.F.C. (1983) + +== Exercise + +[.smaller-60] +Engineering refers to the practice of organizing the design and construction of any artifice which transforms the physical world around us to meet some recognized need. Rogers, G.F.C. (1983) + +- Discuss with a colleague sitting next to you. Look at Rogers’ definition of engineering. How would you relate elements of that definition to your understanding of software development? + +[.smaller-40] +Adapted from _An introduction to software development (Open University)_ + + [background-color = "#124990"] [color = "#fff6d5"] == Software development methods +== Software development method + +- A set of activities, work-flows and artifacts that aim at organizing the process of designing, constructing and testing software and deploying it and maintaining it within its context of use. + +** waterfall +** agile (SCRUM) + +== Waterfall model + +[.center-paragraph] +image::../images/lecture02/Waterfall model.svg[width=650] + +[.smaller-40] +https://en.wikipedia.org/wiki/Waterfall_model + +== SCRUM model + +[.center-paragraph] +image::../images/lecture02/scrum-sprint.png[width=700] + +[.smaller-40] +https://www.visual-paradigm.com/scrum/what-is-sprint-in-scrum/ + +== Activities + +[.smaller-80] +- *Analysis* - understanding the problem +- *Design* - describing, conceptually the software solution +- *Implementation* - creating such a solution in software. +- *Testing* - check that the software solution has certain desired properties +- *Deployment* - deliver the solution in its context of operation and use + +== Activities (2) + + +** Maintenance - ensure that the software solution keeps working +** The world and the context of any software solution is dynamic + + +== Activities (3) + +- Software needs to be updated to keep up with +** operating system updates, +** updates of software on which the solution requires +** security vulnerabilities +** changing technology +** changing requirements + [background-color = "#124990"] [color = "#fff6d5"] @@ -35,6 +179,40 @@ IT1901 Fall 2019 - 2nd Lecture == What is software quality ? +Software quality is the degree to which a software solution meets the design requirements and the user needs and expectations. + +== Feedback +[.left] +Go to: + +app.one2act.no + +Session: + +RIBOO + + +[.right] +image::../images/lecture02/qr-app-one2act-no.svg[width=400] + +== Exercise + +- Discuss with the colleague next to you about what properties influence software quality. +- Type 3-5 keywords that you consider to be most important. + +== Quality attributes + +- Reliability +- Efficiency +- Security +- Maintainability +** adaptability, +** portability and +** transferability (from one development team to another). + +== Quality attributes (2) + +- Usability +** Effectiveness +** Efficiency +** Satisfaction + [background-color = "#124990"] [color = "#fff6d5"] @@ -54,11 +232,210 @@ IT1901 Fall 2019 - 2nd Lecture - Mercurial +== Kildekodehåndtering + +* lagring av kode +* sporing av endringer +* versionering +* distribusjon + +[.grid-left-right-50-50] +== `git` + +[.smaller-60] +[.area-left] +* sporing og deling av kodeendringer i såkalte _repo_ (repository) +* både sentrale og lokale repo har all endringshistorikk +* initiell kopi hentes ved å _kloning_ (clone) +* endringer (i filer) registreres i _commits_ +* commits deles med andre ved å _dytte_ (push) til en server +* andre kan da _dra_ (pull) endringene inn i lokalt repo + +[.area-right] +image::../images/git-local-remote-repo.png[] + +[.grid-left-right-50-50] +== 4 repo-"kopier" + +[.smaller-60] +[.area-left] +* originalen (_origin_), hentet fra server (`pull`) +* arbeidsområdet (_working directory_), lokale filer som kan være endret +* indeksen (_staging area_ eller _index_), endringer du har lagt til med (`add`) +* lokalt repo, endringene du har commitet (`commit`) + +[.area-right] +image::../images/git-repo-copies.png[] + +== repo-kommandoer + +image::../images/git-repo-copies.png[width="400px"] +image::../images/git-repo-commands.png[width="500px"] + +== Typisk sekvens + +[.smaller-80] +* `git pull` (eller `clone` første gang) - henter ned endringer fra serveren +* gjør egne endringer +* `git status` - viser hva som er endret +* `git add <fil eller mappe>` - legger endringer til fremtidig commit +* `git commit -m <melding, m/oppgavenummer>` - registrerer all endringene (lagt til med `add`) +* `git pull` - henter andres endringer, i tilfelle konflikt +* `git push` - deler endringer med andre via serveren + +== Exercise + +- Go to your group repository +- https://gitlab.stud.idi.ntnu.no/it1901/gr19xx +- add any members that might not have access +- modify the readme and add your name in a list + +== Forgreining (branching) + +[.smaller-60] +[.left-70] +* greiner (branches) +** sporer egne utviklingstråder +** gjør jobbing i parallell ryddigere +* sammenslåing (merging) +** en (hoved)grein slås gjerne sammen med en annen, når den andre er ferdig (nok) +** etter sammenslåing, så deles gjerne resultatet med andre +** andre henter så ned for å være oppdatert + +[.right] +image::../images/git-branching.png[width="200px"] + +== Sekvens m/forgreining + +[.smaller-80] +* `git pull` - henter ned endringer fra serveren +* `git checkout -b <navn på (ny) grein>` - lager ny grein, med utgangspunkt i den du jobber med +* gjør egne endringer +* `git add ...` og `git commit ...` - registrerer all endringene +* `git checkout master` - bytter til hovedgrein +* `git merge <navn på grein>` - slår annen grein (den nye) sammen med denne (hovedgreina) +* ... + +== Eclipse-støtte for git + +[.smaller-60] +* Egne Eclipse-tillegg - JGit (git-impl) og EGit (UI) +* Git Repositories-panel - oversikt over repo +** klone repo fra server eller registrere lokalt repo +** utføre `pull` og `push` +** utføre `checkout` inkl. lage ny grein +** ... + +image::../images/git-repositories-view.png[height="200px"] + +== Eclipse-støtte forts. + +[.smaller-60] +* Git Staging - statusoversikt +** filer i arbeidsområdet som er endret +** filene i indeksen +** legge til (`add`) eller fjerne (`remove`) fra indeksen + +image::../images/git-staging-view.png[width="800px"] + +== Endringsforespørsler + +[.smaller-60] +* en `pull`/`merge`-forespørsel (request) brukes for mer formell godkjenning av endringer +** Pull Request er github-termen, mens Merge Request brukes i gitlab +* brukes ofte for å inkludere endringer utenfra, f.eks. +** utviklere utenfor kjerne-teamet +** brukere av åpen kildekode som har fikset feil +* forenkler administrasjon av åpne prosjekter + +== PR/MR-prosedyre + +[.smaller-60] +* (utenforstående oppretter kopi på egen server) +* lager en grein for endringene og utfører dem lokalt +* i stedet for å slå sammen med egen hovedgrein +** `push` grein til egen server +** lag en `pull`/`merge`-forespørsel (PR/MR), som (potensielt) kan inkluderes i hovedgreina +** UI for dette finnes på github/i gitlab +** forespørselen får en egen dialog/diskusjonstråd +** en utvikler med rettigheter kan så godkjenne evt. avslå forespørsel + + == Issue Tracking +== 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! + +== Kontinuerlig integrasjon (CI) + +Automatisering av alt som fremmer kvalitet, men som tar tid, f.eks. + +* kompilering og bygging av jar-filer (generelt avledete artifakter) +* kjøring av enhets- og integrasjonstester +* analyser av ulike typer kvalitet (formatering, kodingsstandarder, vanlige feil, ...) +* bygging av kjørbart system og kjøring av systemtester + +== Smidig utfordring + +[.smaller-60] +* Hvordan iterere raskt? +** skrive korrekt kode raskt +** være trygg på kvaliteten +** levere ofte, for å få tilbakemelding fra brukere + +[.smaller-60] +* Mange nivåer av testing +** egen kode - enhetstesting +** koden innen teamet - integrasjonstesting +** hele systemet - systemtesting (og evt. deployment) -== Continuous Integration (CI) +== Smidig løsning +[.smaller-80] +* Kontinuerlig - bygg, sett sammen og test +* Innimellom - lever (release) og sett i drift/prod. (deploy) +* Alt for mye arbeid uten støtte +** _byggeverktøy_ automatiserer prosessen +** _byggetjenere_ sikrer reproduserbar prosess == ! -- GitLab