Software Development

IT1901 Fall 2020 - 3rd Lecture

Overview

  • Administrative issues

  • About software development

  • Software development methods

  • Software quality.

  • Practices used in modern agile development

Administrative issues

Group registration form

  • About half of you filled in the form

  • deadline to fill in the form is Wednesday, August 26

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

About Software Development

What is Software Development

“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.”

What is Software Development (2)

“Software development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software.”

IBM Research

Engineering perspective

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)

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

SCRUM model

Activities

  • 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

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

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

Kildekodehåndtering

  • lagring av kode

  • sporing av endringer

  • versionering

  • distribusjon

git

git local remote repo

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

4 repo-"kopier"

  • 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)

4 repo-"kopier"

git repo copies

repo-kommandoer

git repo copies
git repo commands

Typisk sekvens

  • 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)

  • 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

git branching

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.

  • 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)

workflow

Oppgavesporing forts.

  • dialog/diskusjonstråd dokumenterer prosessen

    • designidéer, avgjørelser, avhengigheter, …​

    • knyttes til endringer (commits) gjennom oppgavenummer (#)

    • oppsummerer hva som ble gjort

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

  • 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)

Smidig løsning

  • 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

Norwegian University of Science and Technology