Skip to content
Snippets Groups Projects
Commit d796142a authored by George Adrian Stoica's avatar George Adrian Stoica
Browse files

lecture 2 slides

parent 8136d127
No related branches found
No related tags found
No related merge requests found
......@@ -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
== !
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment