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