Skip to content
Snippets Groups Projects
Commit e73b04da authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Merge branch 'lectures2020' of...

Merge branch 'lectures2020' of https://gitlab.stud.idi.ntnu.no/it1901/course-material into lectures2020
parents 6e7b4c05 b1524709
No related branches found
No related tags found
No related merge requests found
= Software Development
:customcss: slides.css
:icons: font
:includedir: revealjs/includes/
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2020 - 3rd Lecture
include::{includedir}dev_content.adoc[]
include::{includedir}footer.adoc[]
\ No newline at end of file
:includedir: revealjs/includes/
[background-color = "#124990"]
[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
== Group registration form
- About half of you filled in the form
- deadline to fill in the form is Wednesday, August 26
https://s.ntnu.no/it1901groups
== Individual Assignment 1
- Requires that you get access to the it1901/studenter-2020 group
** in gitlab (request access)
** gets approved within the day / next day
** only about half of you did that
- the exercise is mandatory to get a grade in the course
== Individual Assignment 1 (cont.)
- deadline August 27th
- on BB post the link to the repo
- the main deliverable is the repo itself
== Provided materials
- very few students did watch the materials
- they contain important information for assignments
- relevant materials for 1st assignment
** gitpod episodes
** git course
** introduction to gitlab
== Reference Group
- Trenger 3-5 medlemmer til referansegruppe i faget
- Mulighet til å påvirke kurset og forbedre kurset for de som skal ta det senere år
- 3 møter / Ca. en time per møte
- Meld deg om du er interessert! (email / chat / group registration form)
- If there are not enough volunteers we will randomly select the rest
[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)
[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"]
== Software quality
== What is software quality ?
Software quality is the degree to which a software solution meets the design requirements and the user needs and expectations.
== 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"]
== Practices used in modern agile development
** source code management (SCM)
** issue tracking
** continuous integration (CI)
== Source Code Management (SCM)
== SCM Tools
- CVS (Concurrent Versioning System, released 1990)
- SVN (Apache Subversion, released 2000)
- Git (created by Linus Torvalds , released 2005)
- Mercurial
include::scm_content.adoc[]
== 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)
== 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
++++
<div id="footer" class="footer">
<div style="display:table-row;">
<span class="element" style="width:150px;">
<a href="https://www.ntnu.no" target="_blank">
<img id="footer-logo" class="footer-logo"
src="images/template/logo_ntnu.png"
alt="ntnu logo" height="28"/>
</a>
</span>
<span class="element" style="width:300px;">| IT1901 </span>
<span class="element">| Software Development </span>
<span class="element">&nbsp;&nbsp;&nbsp;&nbsp;</span>
</div>
</div>
<div id="vertical-ntnu-name" class="vertical-ntnu-name">
<span class="helper"></span>
<img src="images/template/vertical-ntnu-name.png" alt="Norwegian University of Science and Technology" />
</div>
<script type="text/javascript">
window.addEventListener("load", function() {
revealDiv = document.querySelector("body div.reveal")
footer = document.getElementById("footer");
revealDiv.appendChild(footer);
titleSlideDiv = document.querySelector("div.slides section.title")
mainLogo = document.getElementById("main-logo");
titleSlideDiv.prepend(mainLogo);
vertName = document.getElementById("vertical-ntnu-name");
revealDiv.appendChild(vertName);
} );
</script>
++++
\ No newline at end of file
++++
<img id="main-logo" class="main-logo" src="images/template/main_logo_eng_no_text.png" width="300" alt="ntnu logo"/>
++++
== 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
== 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
= SCM - Source Code Management
:customcss: slides.css
:icons: font
:includedir: revealjs/includes/
++++
<img id="main-logo" class="main-logo" src="images/template/main_logo_eng_no_text.png" width="300" alt="ntnu logo"/>
++++
include::{includedir}header.adoc[]
== Kildekodehåndtering
include::{includedir}scm_content.adoc[]
* 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
== 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
++++
<div id="footer" class="footer">
<div style="display:table-row;">
<span class="element" style="width:150px;">
<a href="https://www.ntnu.no" target="_blank">
<img id="footer-logo" class="footer-logo"
src="images/template/logo_ntnu.png"
alt="ntnu logo" height="28"/>
</a>
</span>
<span class="element" style="width:300px;">| IT1901 - 2nd lecture </span>
<span class="element">| Source Code Management </span>
<span class="element">&nbsp;&nbsp;&nbsp;&nbsp;</span>
</div>
</div>
<div id="vertical-ntnu-name" class="vertical-ntnu-name">
<span class="helper"></span>
<img src="images/template/vertical-ntnu-name.png" alt="Norwegian University of Science and Technology" />
</div>
<script type="text/javascript">
window.addEventListener("load", function() {
revealDiv = document.querySelector("body div.reveal")
footer = document.getElementById("footer");
revealDiv.appendChild(footer);
titleSlideDiv = document.querySelector("div.slides section.title")
mainLogo = document.getElementById("main-logo");
titleSlideDiv.prepend(mainLogo);
vertName = document.getElementById("vertical-ntnu-name");
revealDiv.appendChild(vertName);
} );
</script>
++++
\ No newline at end of file
include::{includedir}footer.adoc[]
\ No newline at end of file
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