Skip to content
Snippets Groups Projects
02-software-development.adoc 13.40 KiB

Software Development

ntnu logo

IT1901 Fall 2019 - 2nd Lecture

Overview

  • Administrative issues

  • About software development

  • Software development methods

  • Software quality.

  • Practices used in modern agile development

Administrative issues

Feedback

Go to:
app.one2act.no
Session:
RIBOO

qr app one2act no

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

!

canvas

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

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)

Exercise

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?

Adapted from An introduction to software development (Open University)

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)

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.

Feedback

Go to:
app.one2act.no
Session:
RIBOO

qr app one2act no

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

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

  • 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

git local remote 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)

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

Exercise

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

Sekvens m/forgreining

  • 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

  • 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

    • …​

git repositories view

Eclipse-støtte forts.

  • Git Staging - statusoversikt

    • filer i arbeidsområdet som er endret

    • filene i indeksen

    • legge til (add) eller fjerne (remove) fra indeksen

git staging view

Endringsforespørsler

  • 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

  • (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.

  • 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

!

canvas
ntnu logo | IT1901 - 2nd lecture | Software Development     
Norwegian University of Science and Technology