diff --git a/lectures/revealjs/03-dev-and-scm.adoc b/lectures/revealjs/03-dev-and-scm.adoc new file mode 100644 index 0000000000000000000000000000000000000000..ef3efc8c12ab25c82ae42342a0233cae3888935e --- /dev/null +++ b/lectures/revealjs/03-dev-and-scm.adoc @@ -0,0 +1,13 @@ += 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 diff --git a/lectures/revealjs/includes/dev_content.adoc b/lectures/revealjs/includes/dev_content.adoc new file mode 100644 index 0000000000000000000000000000000000000000..f8b26cb04077d91c8448b52df744670f8bca851a --- /dev/null +++ b/lectures/revealjs/includes/dev_content.adoc @@ -0,0 +1,264 @@ +: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 + + diff --git a/lectures/revealjs/includes/footer.adoc b/lectures/revealjs/includes/footer.adoc new file mode 100644 index 0000000000000000000000000000000000000000..c05c75808d59b6f14bd14579030881b8b16aeef4 --- /dev/null +++ b/lectures/revealjs/includes/footer.adoc @@ -0,0 +1,36 @@ +++++ + <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"> </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 diff --git a/lectures/revealjs/includes/header.adoc b/lectures/revealjs/includes/header.adoc new file mode 100644 index 0000000000000000000000000000000000000000..4115f09a1989a0c85e0a63d2edfdf7a293cfc106 --- /dev/null +++ b/lectures/revealjs/includes/header.adoc @@ -0,0 +1,3 @@ +++++ + <img id="main-logo" class="main-logo" src="images/template/main_logo_eng_no_text.png" width="300" alt="ntnu logo"/> +++++ diff --git a/lectures/revealjs/includes/scm_content.adoc b/lectures/revealjs/includes/scm_content.adoc new file mode 100644 index 0000000000000000000000000000000000000000..335ff84b2e45d03594f049855ce36d1af971cda1 --- /dev/null +++ b/lectures/revealjs/includes/scm_content.adoc @@ -0,0 +1,120 @@ +== 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 diff --git a/lectures/revealjs/scm.adoc b/lectures/revealjs/scm.adoc index 87ac7b7985247f43341a471e80221c47080a8af2..aedc8f3cc5594f5b37011bb9c51bf45d08cbf7d9 100644 --- a/lectures/revealjs/scm.adoc +++ b/lectures/revealjs/scm.adoc @@ -1,167 +1,10 @@ = 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"> </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