IT1901 Fall 2020 - 3rd Lecture
Administrative issues
About software development
Software development methods
Software quality.
Practices used in modern agile development
About half of you filled in the form
deadline to fill in the form is Wednesday, August 26
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
deadline August 27th
on BB post the link to the repo
the main deliverable is the repo itself
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
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
“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.”
“Software development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software.”
IBM Research
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)
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)
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
Maintenance - ensure that the software solution keeps working
The world and the context of any software solution is dynamic
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
Software quality is the degree to which a software solution meets the design requirements and the user needs and expectations.
Reliability
Efficiency
Security
Maintainability
adaptability,
portability and
transferability (from one development team to another).
Usability
Effectiveness
Efficiency
Satisfaction
source code management (SCM)
issue tracking
continuous integration (CI)
CVS (Concurrent Versioning System, released 1990)
SVN (Apache Subversion, released 2000)
Git (created by Linus Torvalds , released 2005)
Mercurial
lagring av kode
sporing av endringer
versionering
distribusjon
git
git
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
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
)
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
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
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 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…
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
dialog/diskusjonstråd dokumenterer prosessen
designidéer, avgjørelser, avhengigheter, …
knyttes til endringer (commits) gjennom oppgavenummer (#)
oppsummerer hva som ble gjort
Viktig for transparens!
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
Hvordan iterere raskt?
skrive korrekt kode raskt
være trygg på kvaliteten
levere ofte, for å få tilbakemelding fra brukere
Mange nivåer av testing
egen kode - enhetstesting
koden innen teamet - integrasjonstesting
hele systemet - systemtesting (og evt. deployment)