Interaktiv programmiljö för kryptoanalys

Linköpings universitet | Institutionen för datavetenskap
Examensarbete på grundnivå, 15hp | Datavetenskap vid LiTH
2016-12-21 | LIU-IDA/LITH-EX-G--16/015--SE
Interaktiv programmiljö för
kryptoanalys
Interactive software for cryptanalysis
Fredrik Bergstrand, Kimberley French, Rebecka Geijer
Michaeli, Eric Henziger, Oscar Johansson, Robert Kumpulainen, Erik Rönmark, Kristoffer Tennivaara, Victor Tranell
Handledare: Adrian Sidenvall
Examinator: Kristian Sandahl
Linköpings universitet
SE–581 83 Linköping
013-28 10 00, www.liu.se
Upphovsrätt
Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare – under 25 år
från publiceringsdatum under förutsättning att inga extraordinära omständigheter uppstår.
Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner, skriva ut enstaka
kopior för enskilt bruk och att använda det oförändrat för ickekommersiell forskning och för
undervisning. Överföring av upphovsrätten vid en senare tidpunkt kan inte upphäva detta
tillstånd. All annan användning av dokumentet kräver upphovsmannens medgivande. För
att garantera äktheten, säkerheten och tillgängligheten finns lösningar av teknisk och administrativ art. Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i
den omfattning som god sed kräver vid användning av dokumentet på ovan beskrivna sätt
samt skydd mot att dokumentet ändras eller presenteras i sådan form eller i sådant sammanhang som är kränkande för upphovsmannenslitterära eller konstnärliga anseende eller
egenart. För ytterligare information om Linköping University Electronic Press se förlagets
hemsida http://www.ep.liu.se/.
Copyright
The publishers will keep this document online on the Internet – or its possible replacement
– for a period of 25 years starting from the date of publication barring exceptional circumstances. The online availability of the document implies permanent permission for anyone to
read, to download, or to print out single copies for his/hers own use and to use it unchanged
for non-commercial research and educational purpose. Subsequent transfers of copyright
cannot revoke this permission. All other uses of the document are conditional upon the consent of the copyright owner. The publisher has taken technical and administrative measures
to assure authenticity, security and accessibility. According to intellectual property law the
author has the right to be mentioned when his/her work is accessed as described above and
to be protected against infringement. For additional information about the Linköping University Electronic Press and its procedures for publication and for assurance of document
integrity, please refer to its www home page: http://www.ep.liu.se/.
c Fredrik Bergstrand, Kimberley French, Rebecka Geijer Michaeli, Eric Henziger, Oscar Jo
hansson, Robert Kumpulainen, Erik Rönmark, Kristoffer Tennivaara, Victor Tranell
Sammanfattning
Det är sedan länge känt, både bland företag och i den akademiska
världen, att det krävs strukturerade arbetsmetoder för att
lyckas med storskalig programvaruutveckling. Vilka metoder som
fungerar bäst är det svårt att göra ett generellt uttalande
om eftersom detta till stor del är situationsberoende. Det
existerar en ansenlig mängd metoder och processer som finns
beskrivna i detalj av deras förespråkare, men ingen metod fungerar
felfritt i alla situationer. I den här rapporten beskrivs de
metoder en projektgrupp tillämpade under ett kandidatarbete i
programvaruutveckling, och konsekvenserna dessa fick för den
slutgiltiga produkten.
Gruppen har kommit fram till att värde har skapats för kunden
genom att implementera kundens begärda system, en interaktiv
webbapplikation. Underhållbarhet har uppnåtts genom att följa en
kodstandard, tillämpa parprogrammering och kodgranskningar samt
publicera koden som öppen källkod. Att under möten diskutera
gruppmedlemmarnas välmående bidrog till bättre sammanhållning och
stämning och därmed ett bättre slutresultat. Många av gruppens
svårigheter hade lösts om gruppen haft ett dedikerat kontor.
Förhoppningen är att de erfarenheter och den kunskap som gruppen
tillgodogjort sig under projektet, och dokumenterat i den här
rapporten, ska komma till nytta för både projektmedlemmarna och
rapportens läsare.
ii
Tillkännagivanden
Tack till vår handledare Adrian Sidenvall och examinator Kristian
Sandahl för det stöd vi fått under projektets gång. Våra tankar
går till vår avlidne vän och kurskamrat Victor Karlsson Sehlin.
iii
Innehållsförteckning
Sammanfattning
ii
Tillkännagivanden
iii
I Gemensamma erfarenheter och diskussion
1
.
.
.
.
2
2
2
2
3
2
Bakgrund
2.1 Tidigare erfarenheter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Kursen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
3
Teori
3.1 Underhållbarhet . . . . . . .
3.2 Användbarhet . . . . . . . .
3.3 Mjukvara för enhetstestning
3.4 Webbutvecklingsverktyg . .
3.4.1 HTML . . . . . . . .
3.4.2 CSS . . . . . . . . . .
3.4.3 JavaScript . . . . . .
3.5 Scrum . . . . . . . . . . . . .
3.5.1 Sprint . . . . . . . . .
3.5.2 Roller inom Scrum .
3.6 SEMAT kernel . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
6
7
7
7
8
8
8
9
9
10
Metod
4.1 Förstudie . . . . . . . . . .
4.2 Projektorganisation . . . .
4.3 Arbetsmetod . . . . . . . .
4.3.1 Modifierad Scrum
4.3.2 Möten . . . . . . .
4.4 Gränssnittsdesign . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
12
13
14
4
Inledning
1.1 Motivering . .
1.2 Syfte . . . . .
1.3 Frågeställning
1.4 Avgränsningar
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
14
14
14
14
15
15
15
16
16
16
16
Resultat
5.1 Gränssnittsdesign . . . . . . . . . . . . . . . .
5.2 Systembeskrivning . . . . . . . . . . . . . . .
5.2.1 Dekrypteringverktygens uppbyggnad
5.2.2 Informationsflöde i systemet . . . . .
5.2.3 Vidareutveckling . . . . . . . . . . . .
5.3 Värde för kunden . . . . . . . . . . . . . . . .
5.4 Gemensamma erfarenheter . . . . . . . . . .
5.5 SEMAT kernel alphas . . . . . . . . . . . . . .
5.6 Översikt över individuella bidrag . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
19
19
20
21
21
21
21
Diskussion
6.1 Resultat . . . . . . . . . . . . . . . . .
6.1.1 Gränssnittsdesign . . . . . . .
6.1.2 Implementation . . . . . . . .
6.1.3 Värde för kunden . . . . . . .
6.1.4 Erfarenheter . . . . . . . . . .
6.1.5 SEMAT kernel alphas . . . .
6.2 Metod för insamling av erfarenheter
6.3 Arbetet i ett vidare sammanhang . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
24
24
25
25
27
27
28
28
.
.
.
.
29
29
29
30
30
4.5
4.6
4.7
5
6
7
4.4.1 Prototypning . . . . . . . . . . .
4.4.2 Användbarhetstester . . . . . . .
4.4.3 Omröstningar . . . . . . . . . . .
Implementation . . . . . . . . . . . . . .
4.5.1 Parprogrammering . . . . . . . .
4.5.2 Kodgranskning . . . . . . . . . .
4.5.3 Enhets- och integrationstestning
Versionshantering . . . . . . . . . . . . .
Utvärdering . . . . . . . . . . . . . . . .
4.7.1 Tidigare projekterfarenheter . . .
4.7.2 Iterationsutvärdering . . . . . . .
4.7.3 SEMAT kernel-genomgång . . .
Slutsatser
7.1 Gränssnittsdesign . .
7.2 Värde för kunden . .
7.3 Erfarenheter . . . . .
7.4 SEMAT kernel alphas
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II Individuella bidrag
A Fredrik Bergstrand: JavaScript-ramverks effekt på underhållbarhet
A.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Resursfördelning vid mjukvaruutveckling . . . . . . . .
A.3.2 Komplexitetsmått . . . . . . . . . . . . . . . . . . . . . . .
A.3.3 Complexity-report . . . . . . . . . . . . . . . . . . . . . .
A.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.1 Jämförelsekandidater . . . . . . . . . . . . . . . . . . . . .
32
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
33
33
33
34
34
34
34
34
34
A.4.2 Mätning
A.5 Resultat . . . . .
A.6 Diskussion . . .
A.6.1 Metod .
A.6.2 Felkällor
A.6.3 Resultat
A.7 Slutsatser . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
35
35
36
36
36
37
B Kimberley French: Värdet av en prototyp
B.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . .
B.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . .
B.1.2 Frågeställning . . . . . . . . . . . . . . . . .
B.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . .
B.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . .
B.3.1 Prototyper . . . . . . . . . . . . . . . . . . .
B.3.2 Designprocessen hos ett interaktivt system
B.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . .
B.4.1 Litteraturstudie . . . . . . . . . . . . . . . .
B.4.2 Undersökning . . . . . . . . . . . . . . . . .
B.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . .
B.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . .
B.6.1 Resultat . . . . . . . . . . . . . . . . . . . .
B.6.2 Metod . . . . . . . . . . . . . . . . . . . . .
B.6.3 Teori . . . . . . . . . . . . . . . . . . . . . .
B.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
38
38
38
39
39
39
40
40
40
40
42
42
43
43
43
C Rebecka Geijer Michaeli: Daily Scrum virtuellt via textbaserat verktyg
C.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.3.1 Daily Scrum . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.3.2 Direktkontakt från daily Scrum . . . . . . . . . . . . . . . . .
C.3.3 Virtuella möten . . . . . . . . . . . . . . . . . . . . . . . . . .
C.3.4 Media Richness Theory . . . . . . . . . . . . . . . . . . . . .
C.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.6.1 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.6.2 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.6.3 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
45
45
45
45
46
46
46
46
46
46
47
47
47
48
48
48
D Eric Henziger: En utvärdering av parprogrammering och kodgranskning
D.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.4.1 Analys av gransknings-commits . . . . . . . . . . . . . . . . . .
D.4.2 Enkätundersökning . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
49
49
49
50
50
50
51
D.5 Resultat . . . . . . . . . . . . . . . . . . .
D.5.1 Analys av gransknings-commits
D.5.2 Enkätundersökning . . . . . . .
D.6 Diskussion . . . . . . . . . . . . . . . . .
D.6.1 Resultat . . . . . . . . . . . . . .
D.6.2 Metod . . . . . . . . . . . . . . .
D.6.3 Arbetet i ett vidare sammanhang
D.7 Slutsatser . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
51
52
52
55
55
56
56
57
E Oscar Johansson: Enhetstestningens påverkan på programmeringsprocessen
E.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3.1 Enhetstestning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3.2 Testdriven utveckling . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4.1 Upplägg av datainsamling . . . . . . . . . . . . . . . . . . . . . . .
E.4.2 Uppgifterna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4.3 Enkät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4.4 Förhållningssätt till enhetstestning . . . . . . . . . . . . . . . . . . .
E.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
58
58
58
58
58
59
59
59
60
60
60
61
61
61
63
64
F Robert Kumpulainen: Effekten av en branching model i ett litet utvecklingsprojekt
F.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.3.1 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.3.2 Greningsmodeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.3.3 Distribuerade och centraliserade versionshanteringssystem . . . . . . .
F.3.4 Arbetsflöden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.4.1 Fallstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.4.2 Greningsmodellens framgång . . . . . . . . . . . . . . . . . . . . . . . . .
F.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.5.1 Fallstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.5.2 Greningsmodellens framgång . . . . . . . . . . . . . . . . . . . . . . . . .
F.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.6.1 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.6.2 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
65
65
65
65
66
66
66
67
67
67
67
67
68
68
68
69
69
69
70
G Erik Rönmark: Kvalitetssäkrande processer och produktkvalitet i ett litet utvecklingsprojekt
G.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.3 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
71
71
71
71
G.2 Bakgrund . . . . . . . . . . . . .
G.3 Teori . . . . . . . . . . . . . . .
G.3.1 Kodgranskning . . . . .
G.3.2 Rader kod som mätdata
G.4 Metod . . . . . . . . . . . . . . .
G.4.1 Kodgranskning . . . . .
G.4.2 Användartest . . . . . .
G.4.3 Utvärdering . . . . . . .
G.5 Resultat . . . . . . . . . . . . . .
G.5.1 Kodgranskning . . . . .
G.5.2 Användartest . . . . . .
G.5.3 Utvärderingar . . . . . .
G.6 Diskussion . . . . . . . . . . . .
G.7 Slutsatser . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
72
72
72
72
72
72
73
73
73
74
74
74
74
H Kristoffer Tennivaara: Metoder och processer för grafiska användargränssnitt
H.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.1.3 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.3.1 Användbarhet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.3.2 Designbeslut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.3.3 Metoder för att utvärdera ett användargränssnitt . . . . . . . . . .
H.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.4.1 Litteraturstudie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.4.2 Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.5.1 Användbarhet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.5.2 Designbeslut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.5.3 Metoder för att utvärdera ett användargränssnitt . . . . . . . . . .
H.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.6.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.6.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
76
76
76
76
76
77
77
77
78
78
78
79
79
79
79
80
80
80
80
81
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
82
82
82
82
82
82
83
83
83
84
84
84
84
85
86
86
I
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Victor Tranell: Kravhantering med Scrum
I.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . .
I.1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . .
I.1.2 Frågeställning . . . . . . . . . . . . . . . . . . . .
I.2 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . .
I.3 Teori . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I.3.1 Traditionell kravhantering . . . . . . . . . . . . .
I.3.2 Agil kravhantering . . . . . . . . . . . . . . . . .
I.3.3 Fördelar och nackdelar med agil kravhantering
I.4 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I.4.1 Litteraturstudie . . . . . . . . . . . . . . . . . . .
I.4.2 Projekt . . . . . . . . . . . . . . . . . . . . . . . .
I.5 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I.6 Diskussion . . . . . . . . . . . . . . . . . . . . . . . . . .
I.6.1 Litteratursammanställning . . . . . . . . . . . .
I.7 Slutsatser . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Litteratur
Bilaga 1
87
Sammanställning av tidigare erfarenheter
Bilaga 2 Sammanställning av iterationsutvärderingar
2.1 Förstudie . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Fullständig sammanställning . . . . . . .
2.1.2 Förbättringsförslag . . . . . . . . . . . . .
2.2 Iteration 1 . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Fullständig sammanställning . . . . . . .
2.2.2 Förbättringsförslag . . . . . . . . . . . . .
2.3 Iteration 2 . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Fullständig sammanställning . . . . . . .
2.3.2 Förbättringsförslag . . . . . . . . . . . . .
2.4 Iteration 3 . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Fullständig sammanfattning . . . . . . .
2.4.2 Sammanställning från diskussion . . . .
Bilaga 3
Complexity-report-sammanfattningar
91
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
94
94
94
99
100
100
109
110
110
114
115
115
122
123
Bilaga 4 Undersökning: Värdet av en prototyp
125
4.1 Enkät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
4.2 Sammanställning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Bilaga 5 Enkät: Utvärdering av parprogrammering och kodgranskning
130
5.1 Enkät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.2 Sammanställning av fritextfrågor . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Bilaga 6
Enhetstestning - Datainsamling
135
Bilaga 7
Resultat från enkät om daily Scrum
146
Del I
Gemensamma erfarenheter och diskussion
1
1
Inledning
Den här rapporten beskriver ett projektarbete i kursen TDDD96 Kandidatprojekt i programvaruutveckling vid Linköpings universitet. Arbetet utfördes under våren 2016 och
projektgruppen bestod av nio studenter som läser till civilingenjör inom datateknik eller
mjukvaruteknik.
Rapporten inleds med en beskrivning av projektet och vilka metoder som använts vid utveckling av systemet och utvärdering av arbetet. Sedan presenteras resultatet och en diskussion
förs kring frågeställningarna. Sista delen av rapporten består av individuella utredningar
som utförts enskilt av gruppmedlemmarna.
1.1
Motivering
Projektet gick ut på att utveckla ett mjukvarusystem åt gruppen för informationskodning
(ICG) på institutionen för systemteknik (ISY) vid Linköpings universitet. Systemet skulle
vara ett verktyg för studenter som läser kursen TSIT03 Kryptoteknik. Kursen innefattar en
laboration som tar upp tre krypteringsmetoder (substitution, transposition och Vigenère)
samt beskriver de verktyg som ska användas för att dekryptera respektive krypto. Systemet som utvecklades skulle ersätta det program som tidigare använts i laborationen och har
därmed funktionalitet för att hjälpa användaren att dekryptera meddelanden som krypterats
med ovanstående metoder.
1.2
Syfte
Syftet med rapporten är att beskriva hur gruppen gick tillväga i framtagandet av ett system
och hur ett system med utbildningssyfte kan göras användbart. I rapporten redovisas också
de erfarenheter och lärdomar gruppen fått under utvecklingen av detta system.
1.3
Frågeställning
Nedan följer de frågeställningar kring projektet som är till underlag för rapporten:
1. Vilka konsekvenser får gruppens beslut gällande utvecklingen av det grafiska gränssnittet med avseende på användbarhet?
2. Hur kan systemet implementeras så att det skapar värde för kunden?
2
1.4. Avgränsningar
3. Vilka erfarenheter kan dokumenteras från ett projekt i programvaruutveckling som kan
vara av intresse för framtida projekt?
4. Vilket stöd kan en projektgrupp få genom att använda och följa upp SEMAT kernel
alphas?
1.4
Avgränsningar
Programmet har utvecklats för skrivbordsmiljö och anpassades för webbläsaren Firefox version 38.6.0. Programmet behövde inte innehålla någon information om hur de olika krypteringsmetoderna används. Målgruppen för systemet var studenter som läser kursen TSIT03
vid Linköpings universitet. Målgruppen för denna rapport är studenter, handledare och
examinatorer i kursen TDDD96 Kandidatprojekt i programvaruutveckling vid Linköpings
universitet.
Rapporten utreder inte olika utvecklingsprocesser som kunde tillämpats och jämför dessa,
utan fokuserar på den tillämpade och undersöker hur den fungerat under projektets gång.
Eftersom kunden önskade en interaktiv webbapplikation är det inom detta område rapportens tyngdpunkt ligger gällande implementationen av systemet och dess konsekvenser.
3
2
Bakgrund
Gruppen för informationskodning vid ISY ger en kurs i kryptoteknik. I kursen får studenterna lära sig grunderna i kryptoanalys. Som ett moment i kursen har studenterna en
laboration där de får möjlighet att studera olika krypteringstekniker och dekryptera meddelanden som är krypterade med dessa tekniker. Till denna laboration behövs ett interaktivt
system som kan agera verktyg vid dekrypteringen av krypterade texter.
Tidigare har ett program kallat Enigma 1.2 använts. Det skrevs 1998, och källkoden har gått
förlorad sedan länge. Programmet innehöll buggar och gränssnittet var i behov av en uppdatering. Att åtgärda de buggar som fanns och uppdatera gränssnittet var ett komplicerat
uppdrag eftersom källkoden saknades. Gruppen för informationskodning vid ISY ville därför ha ett nytt system som mötte deras krav. De ville ha ett system publicerat med öppen
källkod som var lätt att underhålla och vidareutveckla. Systemet skulle också levereras med
god dokumentation.
Det gamla programmet behövde köras på ISY:s datorer vilket utgjorde ett onödigt hinder för
studenter som ville sitta med sin egen dator. För att underlätta tillgången till programmet
ville kunden att det nya programmet skulle vara en webbapplikation.
2.1
Tidigare erfarenheter
Projektgruppen bestod av nio medlemmar som alla läst minst fem terminer på civilingenjörsprogrammen inom datateknik eller mjukvaruteknik. Projektmedlemmarna diskuterade
under projektets inledning sina tidigare erfarenheter av projektarbete och vilka önskemål om
förbättringar som fanns.
Ett exempel på förbättringsförslag som togs upp var att lägga mer tid på utbildning innan
det riktiga utvecklingsarbetet påbörjades. En lösning föreslogs i form av utbildningstillfällen
vilka skulle hållas av olika projektmedlemmar med kompetens inom respektive område.
En annan erfarenhet gruppen hade var att kod som skrivits av enbart en person varit svår
att underhålla. Förslag på lösningar var parprogrammering samt att granskning av all kod
skulle utföras, där granskaren inte ursprungligen varit med och skrivit koden. På så sätt
skulle all kod ha lästs av minst tre personer.
4
2.2. Kursen
Projektmedlemmarna hade också flera bra tidigare erfarenheter, bland andra just att parprogrammering och utbildningstillfällen varit givande och underlättat kommunikationen i gruppen. En jämn spridning av arbetstiden under projektets gång lyftes också som positivt. En
sammanställning av alla de tidigare erfarenheterna gruppen tog upp återfinns i bilaga 1.
2.2
Kursen
Detta projekt utfördes som en del i kursen TDDD96 Kandidatprojekt i programvaruutveckling för studenter som studerar civilingenjör datateknik eller mjukvaruteknik vid Linköpings
universitet. Kursens omfattning var 15 hp där poängen fördelades som 14 hp projektarbete
och 1 hp opponering.
5
3
Teori
Detta kapitel innehåller teori som är relevant för att förstå innehållet i rapporten. Inledningsvis ges definitioner av underhållbarhet och användbarhet. Sedan tas enhetstestning och
webbutvecklingsverktyg upp. Avslutningsvis behandlas processrelaterad teori så som Scrum
[1] och SEMAT kernel alphas [2].
3.1
Underhållbarhet
Underhållbarhet definieras enligt ISO/IEC 25010:2011 [3] som hur effektivt en mjukvara kan
modifieras. En mjukvaras underhållbarhet kan också enligt [3] ytterligare kategoriseras i sju
underattribut:
• Modularitet (Modularity)
• Återanvändbarhet (Reusability)
• Analyserbarhet (Analyzability)
• Förmåga till förändring (Changeability)
• Stabilitet vid modifiering (Modification stability)
• Testbarhet (Testability)
• Överensstämmelse med standarder (Compliance)
Konkret innebär det att mjukvaran ska vara modulär i den bemärkelse att den ska bestå av
moduler med tydliga gränssnitt gentemot varandra. Modulerna bör också vara skrivna på
ett sådant sätt att duplicering av funktionalitet undviks. För att hålla en hög underhållbarhet
bör också koden vara skriven så att den lätt kan förstås av nya utvecklare. Koden ska också
skrivas så att det är enkelt att introducera förändringar i mjukvaran och kodbasen. Mjukvarans moduler ska ha så få beroenden av varandra som möjligt för att öka stabiliteten vid
förändring. Delas funktionalitet upp i självständiga delar ökar testbarheten. [4]
3.2
Användbarhet
ISO/IEC 25010:2011 [3] definierar också användbarhet som ett antal underattribut:
• Lämplighet (Appropriateness)
6
3.3. Mjukvara för enhetstestning
• Igenkännbarhet (Recognizability)
• Enkel användning (Ease of use)
• Lärbarhet (Learnability)
• Attraktivitet (Attractiveness)
• Teknisk tillgänglighet (Technical accessibility)
• Överensstämmelse med standarder (Compliance)
Ovanstående innebär för det första att mjukvaran ska vara lämplig sett till dess ändamål.
Idealt ska också användaren kunna känna igen koncept i mjukvaran och relatera dessa till
andra välkända koncept, gärna från andra områden skilda från mjukvaran. Detta nämns
även i Interaktionsdesign och UX av Arvola [5]. Mjukvaran ska också vara lätt att lära sig för
en användare med lämplig teknisk kunskap. Finns det standarder för specifika koncept som
tillämpas i mjukvaran skall dessa också följas. [3]
3.3
Mjukvara för enhetstestning
Karma är en programvara som används för att testa JavaScript-funktionalitet. När ett test ska
genomföras startas en webbserver av Karma. Testkoden skickas sedan till de webbläsare som
kopplar upp sig mot servern. Servern instruerar webbläsarna att köra testkoden och sedan
skicka tillbaka resultatdata till servern. Webbläsarna körs typiskt, men inte nödvändigtvis,
på samma fysiska maskin som testservern körs på. Karma tillåter automatisk testning vid
förändring, vilket innebär att skapade testfall automatiskt körs vid förändring av filerna som
innehåller de aktuella funktionerna. [6] [7]
QUnit är ett testramverk för enhetstestning av JavaScript-kod [8]. QUnit kan användas för att
skriva de testfall som sedan körs av Karma i webbläsaren. Detta sker med hjälp av Karmas
tillägg Karma-qunit [9].
3.4
Webbutvecklingsverktyg
När applikationer utvecklas för webben idag används en grunduppsättning av verktyg som
kommit att bli standard. Uppsättningen består av HTML, CSS samt JavaScript. De olika
verktygen ansvarar för innehåll, utseende respektive beteende hos en given sida eller applikation. [10]
En vy i en applikation består av en kombination av tre komponenter: en HTML-fil, en CSS-fil
och en JavaScript-fil. Nedan beskrivs de tre verktygen mer utförligt.
3.4.1
HTML
HTML står för HyperText Markup Language. HTML används för att bygga den logiska strukturen samt definiera innehållet hos en sida. Det sker genom att använda en uppsättning så
kallade HTML-taggar. Sidans struktur byggs upp genom att innehållet förses med taggar
som talar om hur innehållet ska vara strukturerat. Taggar kan till exempel användas för att
tala om vad som är rubriker, stycken eller tabeller. De används också för att definiera logiska
sektioner i innehållet. Innehåll med en tagg runt sig kallas ett element. [11]
7
3.5. Scrum
3.4.2
CSS
CSS står för Cascading Style Sheets. Det används för att bestämma utseende och visuell struktur för innehållet som finns definierat i HTML-filerna. En CSS-fil innehåller regler som i sin
tur består av utseende- och layoutparametrar. Reglerna kopplas till olika taggar, klasser eller
id:n i HTML-filerna. Klasser och id:n är attribut som används för att bestämma vilka element
i HTML-koden som ska lyda under de olika CSS-reglerna. Skillnaden mellan en klass och ett
id är att flera element kan ha samma klass, medan ett id ska vara unikt och endast associerat
med ett element. [11]
Typiska utseendeattribut som kan sättas på element i HTML med CSS är typsnitt, storlek,
inramning eller position.
3.4.3
JavaScript
Med HTML och CSS kan en sidas innehåll och utseende skapas, men för att användaren
ska kunna interagera med applikationen krävs även att dess beteende implementeras. Handlingar som utförs av användaren ska generera ett resultat av en beräkning eller förändra
applikationens tillstånd. Utseendet eller innehållet på sidan bör ändras för att ge användaren
respons på handlingen. Båda dessa uppgifter sköts av JavaScript. [10]
Typiskt kan användaren trycka på en knapp som definierats i HTML och fått sitt utseende
av CSS-regler. Knapptryckningen genererar ett event. En JavaScript-funktion har knutits till
eventet och körs. Funktionen kan sedan till exempel utföra en beräkning och uppdatera ett
element på sidan för att visa resultatet.
JavaScript-ramverk
Då det i dagens allt mer uppkopplade samhälle finns ett behov av att snabbt kunna utveckla
interaktiva webbapplikationer har flera ramverk som avser förenkla utvecklingen tagits fram.
Exempel på ramverk som finns tillgängliga är Angular [12] och Ember [13]. Ramverken är
oftast designade så att abstraktioner skapas runt vanlig funktionalitet, så som att knyta en
funktion till ett event, hämta innehåll asynkront från en webbserver eller skapa en koppling
mellan en datamodell och en grafisk vy.
3.5
Scrum
Scrum är en agil projektform utformad för mjukvaruprojekt. Fokus ligger på små, självorganiserande team som jobbar självständigt med en produkt. Inom Scrum sker allt jobb indelat
i sprintar. En sprint är en kortare tidsperiod som vanligtvis är mellan 1 och 5 veckor lång.
Målet med en sprint är att ha en körbar produkt i slutet av varje sprint. Produkten förbättras
och byggs ut med ny funktionalitet i varje sprint. Detta upplägg gör det lätt att avbryta
projekt utan att arbetade timmar går förlorade. [1]
I Scrum ligger fokus på att utveckla produkter, och liten vikt vid dokumentation. I den
klassiska vattenfallsmodellen börjar man med att skriva en kravspecifikation, därefter skrivs
en designspecifikation och när det är färdigt börjar man sedan utveckla. I Scrum däremot
hanteras inte krav på produkten via en kravspecifikation. En metod som kan användas är
användarberättelser [14]. En användarberättelse är en kort beskrivning av ett krav på systemet, ofta på följande form:
Som [aktör] vill jag [mål med systemet] för att [anledning].
8
3.5. Scrum
Användarberättelser används för att definiera programfunktioner, vilka sorteras efter prioritet i en product backlog (orderstock). Denna product backlog fungerar som en att göra-lista för
produkten som ska byggas, och är en av artefakterna inom Scrum. En annan artefakt är sprint
backlog, en mindre variant av product backlog som endast gäller under en specifik sprint. [15]
En viktig artefakt inom Scrum är Scrum board. Det är en tavla som används för att visualisera allt arbete och hur det ligger till. Tavlan delas in kolumner för de olika tillstånd som
aktiviteter kan befinna sig i. Ofta förekommande kolumner är “Todo”, “Doing”, och “Done”.
Alla aktiviteter representeras av lappar på tavlan, och flyttas runt mellan de olika kolumnerna beronde på vilket tillstånd de befinner sig i. [1]
3.5.1
Sprint
Varje sprint innehåller ett antal aktiviteter som utförs av projektgruppen [1], de listas nedan:
• Sprint planning – varje sprint inleds med att projektgruppen väljer vilka programfunktioner från projektets product backlog som ska utvecklas under sprinten. Valda
programfunktioner agerar sedan underlag till aktuell sprint backlog.
• Daily Scrum – varje dag inleds med ett kort (under 15 minuter) stående möte, där varje
projektmedlem i tur och ordning får svara på följande tre frågor:
1. Vad har du gjort sen sist?
2. Vad ska du göra härnäst?
3. Har du stött på några problem?
Detta för att alla i gruppen ska få en överblick över hur de andra ligger till.
• Sprint review – i slutet av varje sprint hålls en sammankomst där produkten visas upp
för kunden och övriga intresserade, som får chans att komma med feedback.
• Sprint retrospective – efter varje sprint hålls en utvärdering där projektgruppen går
igenom vad som fungerat bra respektive mindre bra under sprinten, med målet att det
ska fungera bättre i nästa sprint.
3.5.2
Roller inom Scrum
Teamen är små och flexibla, med gemensamt ansvar över allt och utan fixa roller. Men det
finns ändå några explicita roller [16], som beskrivs här:
• Teamet – en självorganiserad grupp om cirka 5-9 personer. Teamet ansvarar för att
utveckla produkten. I det ingår att ha den färdig version till slutet av varje sprint.
• Scrum master – fungerar som ordförande under daily scrum-möten, och har övergripande ansvar för att teamet har allt det behöver för att kunna jobba effektivt. Personen
sköter även kontakten med kunden och övriga utanför teamet.
• Product owner – ansvarar för produkten från kundens håll, framförallt genom att närvara vid alla sprint reviews, och genom att ha huvudansvar för projektets product backlog.
9
3.6. SEMAT kernel
3.6
SEMAT kernel
SEMAT kernel är en modell för att mäta framsteg inom mjukvaruutvecklingsprojekt. Den
bygger på idén att alla mjukvaruprojekt kretsar kring sju huvudområden, så kallade alphas,
och för varje huvudområde finns det ett antal faser som projekt passerar. Genom att behandla
alla huvudområden och diskutera vilken fas projektet ligger i går det att få en tydlig bild av
hur projektet går i stort och vad som ska arbetas på härnäst. [2]
Modellens sju huvudområden beskrivs nedan:
• Möjlighet – Behandlar identifiering av ett problem eller behov som kan lösas av systemet som byggs.
• Intressenter – Rör alla inblandade i projektet vilket innefattar kund, utvecklare, investerare och användare. Området behandlar hur involverade och investerade de är i
projektet och produkten.
• Krav – Handlar om kraven på produkten som ska byggas. I början av projektet behandlas hur väl alla inblandade parter är överens om kraven, och senare i projektet hur stor
del av dem som är uppfyllda.
• Mjukvarusystem – Rör själva systemet som byggs, från att dess arkitektur valts till att
det är i bruk hos slutanvändare.
• Projektgrupp – Följer gruppen som jobbar med produkten, från att den precis formats
till att den upplösts, genom olika stadier av effektivitet.
• Arbete – Hanterar allt arbete som görs inom projektet, från att det precis påbörjats till
att det inte längre finns något att göra och projektet är avslutat.
• Arbetsmetod – Behandlar projektgruppens arbetsmetodik, vilka verktyg och processer
som används, och hur väl de är integrerade i det dagliga arbetet.
10
4
Metod
Detta kapitel beskriver med vilka metoder projektarbetet genomfördes och bygger vidare på
den teori som togs upp i kapitel 3. Utvecklingen var uppdelad i tre perioder, kallade iterationer, som vardera bestod av tre till fyra veckors arbete samt en förstudie som ledde upp till
den första iterationen. Först presenteras de processer som tillämpades under förstudien och
vilka roller som tilldelades projektmedlemmarna. Sedan förklaras den arbetsmetodik gruppen använde sig av under iterationerna i ett antal avsnitt. Avsnitten behandlar arbetsmetod,
alltså gruppens modifierade variant av Scrum samt hur möten gick till, utformningen av slutproduktens gränssnittsdesign, hur kod implementerades, vilken form av versionshantering
som användes samt de utvärderingar som genomfördes under projektet.
4.1
Förstudie
De första fyra veckorna av projektet bestod av en förstudie, vilket var en mjukstart till projektet, då projektmedlemmarna lärde känna varandra och började hålla utbildningar inom
de områden där kompetens krävdes.
Förstudien ägnades framförallt åt följande större punkter:
• Rollfördelning (se 4.2 för rollerna) – första veckan tillsattes teamleader, och veckan
efter fördelades de övriga rollerna.
• Genomgång av SEMAT kernel alphas (se 3.6 för förklaring) – de sju huvudområdena
gicks igenom och en uppskattning gjordes gällande under vilka iterationer de olika
tillstånden skulle uppnås.
• Dokumentskrivande – i samråd med kunden skrevs en kravspecifikation för systemet.
En projektplan och en kvalitetsplan skrevs. En arkitektur- och testplan för systemet
påbörjades.
• Utbildningar – projektmedlemmarna höll workshops och utbildningar för varandra
där ämnen så som Scrum, Git, och webbprogrammering i WebStorm med HTML, CSS
och JavaScript behandlades.
11
4.2. Projektorganisation
4.2
Projektorganisation
Genom hela projektet har gruppmedlemmarna haft tydliga roller. För att se till att alla i
gruppen var överens om arbetet skrevs ett utförligt gruppkontrakt. Rollerna med tillhörande
ansvarsområde beskrivs nedan.
• Teamleader – har fungerat som ordförande för gruppen, både under och utanför möten.
Den har även stått för det mesta av gruppens kontakt med examinatorn och handledaren.
• Analysansvarig – har stått för kontakten med kunden, med stort fokus på att samla in
och sammanställa dennes krav på systemet. Ansvarsområdet innefattar även skrivandet av kravspecifikationen.
• Dokumentansvarig – har ansvarat för alla dokument som skrivits under projektet.
Bland annat har det ingått att formatera dem på ett enhetligt sätt. Dokumentansvarige
har även fungerat som ständig sekreterare under gruppmöten.
• Testledaren – har ansvarat för att testning sker, och att det sker på rätt sätt. Testledaren
ansvarade även för att utbilda resten av gruppen i testning och att skriva testplan och
testrapport.
• Utvecklingsledaren – har lett utvecklingsarbetet. Detta innefattar att informera övriga
gruppmedlemmar om hur kod skulle skrivas och dokumenteras. Dessutom innefattar
rollen även att komma med råd och förslag kring utvecklingsarbetet, gällande bland
annat kodgranskning.
• Arkitekten – har ansvarat för att designa systemets arkitektur, till stor del genom att
skriva ett arkitekturdokument.
• Konfigurationsansvarig – har ansvarat för att allt arbete versionshanteras under projektet. Detta har inneburit att välja vilka verktyg för versionshantering som skulle användas och att sätta upp riktlinjer och lära gruppen hur de används.
• Kvalitetssamordnaren – har ansvarat för att se till att hög kvalitet hålls på allt som
gruppen producerar, framförallt genom att skriva en kvalitetsplan.
• UX-specialisten – har lett arbetet med den grafiska utformningen av systemet, som
användaren kommer i kontakt med.
4.3
Arbetsmetod
Projektgruppen har valt att arbeta enligt särskilda metoder som anpassats efter gruppens
behov och kursens utformning. Detta avsnitt beskriver hur gruppen har arbetat med Scrum
samt hur möten har gått till. Mer information om metod kring mjukvaruutveckling finns i
avsnitt 4.5.
4.3.1
Modifierad Scrum
I denna projektgrupp har en modifierad variant av Scrum använts. Då kursen varit uppdelad
i iterationer har det varit naturligt att låta dessa motsvara sprintar i Scrum.
Inför varje ny iteration har en sprint planning genomförts. De funktioner som lades in i
projektets backlog formulerades utifrån kraven i kravspecifikationen. Vid behov lades även
extra aktiviteter till, framförallt gällande utformningen av det grafiska gränssnittet eftersom
dessa inte specificerades i kraven. Projekthanteringsverktyget Trello [17] användes som
12
4.3. Arbetsmetod
Scrum board där varje iteration hade en egen sprint backlog.
Istället för att hålla ett fysiskt möte för daily Scrum varje dag satte gruppen upp en kanal i
Slack [18] där varje gruppmedlem svarade på frågor varje måndag, onsdag och fredag förmiddag. Ett automatiserat meddelande skickades ut under dessa dagar med följande frågor:
1. Vad har du gjort sen sist?
2. Vad ska du göra härnäst?
3. Finns beroenden till andra som uppehåller ditt arbete?
4. Har du stött på några andra problem?
5. Övriga synpunkter och kommentarer?
Detta innebar att gruppmedlemmarna själva kunde bestämma när det passade att svara på
frågorna samt läsa igenom de andras svar. Det fungerade också som ett verktyg för att kolla
om det som var planerat faktiskt blev utfört. En studie kring denna anpassade form av daily
Scrum förs i individuell del C.
I slutet av varje iteration hölls en utvärdering där projektgruppen reflekterade över den
senaste iterationen. Hur utvärderingen gick till förklaras i avsnitt 4.7.
4.3.2
Möten
Minst en gång i veckan hölls möte med alla i projektgruppen. Oftast var även handledaren
med under dessa möten. De som inte kunde närvara fysiskt var med över Skype [19] i den
mån det var möjligt. Möten bokades generellt in med en veckas framförhållning där det
eftersträvades att alla projektmedlemmar skulle kunna närvara.
Inför varje möte fanns en dagordning på Google Drive [20]. I denna hade projektmedlemmarna möjlighet att själva fylla i om de hade något att ta upp för diskussion eller ett meddelande under mötet. Vissa punkter i dagordningen var stående punkter som alltid fanns med.
Dessa listas nedan tillsammans med en kort beskrivning.
• Måenderunda – mötet inleddes med att alla projektmedlemmar i turordning fick prata
öppet om hur de mådde, om de var stressade eller om de hade någon personlig händelse att dela med sig av.
• Dagordning – alla punkter i dagordningen lästes upp och projektmedlemmarna gavs
möjligheten att lägga till/omdistribuera punkter enligt önskemål. Om det var många
mötespunkter med risk att dra över på tiden sattes tidsbegränsningar för hur länge
varje punkt fick hålla på.
• Veckans rapporter och meddelanden – de som hade någon kort uppdatering eller något särskilt att belysa hade här möjlighet att framföra det.
• Handledaren på besök – om handledaren var med på mötet fanns här möjlighet för
honom att delge information eller ställa frågor till projektgruppen.
• Kommande möten – nästkommande möte bokades in. Första prioritering var här handledarmöten, men eventuella andra möten eller arbetsstugor kunde också komma att
bokas in under den här tiden.
• Övrigt – denna punkt användes för att diskutera eventuella frågor som kan ha dykt
upp under mötets gång eller kortare, mindre viktiga punkter som skulle tas upp i mån
av tid.
13
4.4. Gränssnittsdesign
Under mötena fördes mötesprotokoll i Google Drive. Eftersom protokollet skrevs löpande
i ett delat dokument under mötet kunde gruppmedlemmarna välja att följa med i anteckningarna om så önskades. Även de som var frånvarande hade möjlighet att läsa protokollet i
efterhand och ta del av det som tagits upp.
4.4
Gränssnittsdesign
Eftersom kunden uttryckt behov av en lättförståelig, användbar produkt beslutade projektgruppen att lägga stor vikt vid att ta fram ett lämpligt grafiskt användargränssnitt. Avsnitten
nedan beskriver de metoder som användes för att realisera detta.
4.4.1
Prototypning
För att forma produktens grafiska användargränssnitt skapades tidigt ett antal prototyper.
Till detta användes programmet Axure RP [21] som gör det möjligt för användaren att skapa
en interaktiv hemsida utan att skriva någon kod. Det som skulle bestämmas med hjälp av
prototyperna var positioneringen av menyn och verktygen. Prototyperna kunde även användas för att ge kunden en bättre bild av slutprodukten och möjlighet till återkoppling på
designen.
4.4.2
Användbarhetstester
Under iteration 2 och iteration 3 testades produkten, i dess dåvarande tillstånd, i ett antal användbarhetstester. Syftet var att testa produktens användbarhet och därmed de punkter som
nämns under kapitel 3.2. Testet gick ut på att användare tilldelades uppgifter att lösa under
vägledning. Användaren testade att använda de verktyg som utvecklats och under tiden antecknades hur de gick till väga. När testet var klart ställdes frågor till användaren angående
dennes upplevelse av programmet. Frågorna gällde hur användbara verktygen var, hur lätta
de var att lära sig, hur visuellt tilltalande de var samt övriga synpunkter, idéer och kommentarer. Resultaten från testen sammanställdes och eventuella åtgärder diskuterades under
ett senare möte med hela gruppen.
4.4.3
Omröstningar
Projektgruppen genomförde omröstningar inom gruppen med avseende på färgschema, logotyp, typsnitt, placering av olika element och andra utseendemässiga attribut. Olika förslag
presenterades och alla gruppmedlemmar fick möjlighet att uttrycka sin åsikt kring förslagen.
Ofta resulterade diskussionen i ett antal nya alternativ vilka också ingick i omröstningen.
Med hjälp av de kommentarer som inhämtades kunde gränssnittet bearbetas ytterligare och
utformas efter projektgruppens önskemål.
4.5
Implementation
Detta avsnitt beskriver vilka metoder som användes vid implementeringen av systemet under de olika projektfaserna.
4.5.1
Parprogrammering
Under iteration 1 och 2 skedde utvecklingen huvudsakligen genom en form av parprogrammering. Gruppmedlemmarna delades in i grupper om två och arbetade parvis med någon
funktion hämtad från iterationens backlog. Ofta skedde arbetet med hjälp av två bärbara datorer där själva skrivandet av kod skedde på den ena datorn medan den andra datorn användes för att göra sökningar i dokumentation och på internet. Parprogrammeringen användes
14
4.6. Versionshantering
för att underlätta kunskapsspridning, höja kvaliteten på koden och ge omedelbar granskning
av koden.
4.5.2
Kodgranskning
Då en funktion enligt ansvariga utvecklare var färdig och redo för integration gjordes en förfrågan om granskning. Förfrågan skedde via kommunikationsverktyget Slack [18] och en
frivillig gruppmedlem som inte arbetat med utvecklingen av funktionen åtog sig att granska
den skrivna koden. Det kontrollerades att koden följde den valda kodstandarden, att kommenteringen kunde förklara koden för en oinsatt utvecklare och mer generellt att koden höll
god struktur och läsbarhet. Feedback gavs från granskaren direkt i koden genom att i anslutning till den felaktiga koden skriva en kommentar enligt kodexempel 4.1. När granskningen
var utförd gick utvecklarna igenom koden igen och löste alla uppmärksammade fel. Denna
process upprepades tills granskaren inte längre hade något mer att anmärka på.
Kodexempel 4.1: Exempel på feedback efter granskning.
// FIXME: Variable names should be camelCased.
var crypto_graph_data = { name: ’’, data: [] };
4.5.3
Enhets- och integrationstestning
För kodens logiska funktioner eftersträvades att hålla hög testtäckning med hjälp av automatisk enhetstestning. Med automatisk avses i det här fallet att samtliga enhetstester kan
exekveras med ett knapptryck från utvecklaren. Enhetstesterna skrevs med hjälp av ramverket QUnit och körningen av testerna utfördes av testmotorn Karma. De utvecklare som skrev
en logisk funktion hade också ansvar för att se till att enhetstester skrevs för funktionen.
Enhetstesterna verifierade att funktionen givet ett visst indata returnerade förväntad utdata.
För mer avancerade funktioner i produkten utformades integrations- och funktionstester.
Dessa tester utformades av utvecklaren utifrån en testmall och i samråd med testledaren.
Testmallen hade i uppgift att lyfta fram gränsfall och acceptanskriterier för testet och tydliggöra för en testare hur testet skulle utföras.
4.6
Versionshantering
För att underlätta utvecklingsarbetet ansåg gruppen att en väl fungerande versionshantering krävdes. Gruppen valde därmed att använda Git [22], med en central repository för att
eliminera de problem som uppstår med brandväggar. Därtill utnyttjades en greningsmodell
(eng. branching model), baserad på Driessens [23], vars syfte var dels att bidra till att gruppens
medlemmar kunde arbeta oberoende av andra, samt minimera merarbetet med kodkonflikter som kan uppstå. Reglerna gällande utgrening för den tillämpade greningsmodellen sammanfattas av tabell 4.1. Effekten av denna beskrivs i individuell del F.
Tabell 4.1: Utgreningsregler.
Rules for different
branches
May branch off
Must merge back
May merge back
Naming convention
Feature branch
Release branch
Hotfix branch
develop
develop
Anything except
master,
develop,
release-* or hotfix-*
develop
develop & master
release-*
master
develop & master
release
hotfix-*
15
4.7. Utvärdering
4.7
Utvärdering
Utvärdering och erfarenhetsinsamling om projektarbetet utfördes regelbundet med gruppens medlemmar. I avsnitten nedan beskrivs hur gruppen gick tillväga för att dokumentera
de erfarenheter som fanns från tidigare projekt samt hur utvärderingarna för varje iteration
genomfördes.
4.7.1
Tidigare projekterfarenheter
Under projektets förstudie gjordes en insamling av projekterfarenheter från tidigare projekt.
Denna gjordes först informellt under ett möte där samtliga gruppmedlemmar fick yttra sina
spontana tankar. Därefter gjordes en insamling av erfarenheter där varje gruppmedlem skrev
ner positiva och negativa erfarenheter som skickades till gruppens teamleader. En sammanställning av erfarenheterna skickades vidare till kursens examinator som slutligen gav
feedback på erfarenheterna.
4.7.2
Iterationsutvärdering
Efter varje iteration gjordes en omfattande utvärdering. Utvärderingen innefattade granskning av de verktyg som använts, de processer som tillämpats under iterationen, samarbetet i
gruppen, och hur själva utvecklingsarbetet gått. En utvärdering gjordes även efter förstudien.
Alla utvärderingar genomfördes genom att minst två timmar schemalades till ett tillfälle då
hela gruppen kunde närvara. Utvärderingarna började informellt, i cirka 10 minuter pratade
gruppen bara om saker som var orelaterade till projektet för att alla skulle ha tid att slappna
av och göra sig bekväma. När utvärderingen började delades pappersformulär ut till alla
gruppmedlemmar. I formuläret fanns alla utvärderingspunkter och för varje punkt fanns det
två fält för fritext: vad som fungerat bra, och vad som behövde utvecklas till nästa iteration.
Formulären fylldes i, utan diskussion och utan tidspress. När alla kände att de var färdiga
gick gruppen igenom utvärderingspunkterna en efter en och lät alla gruppmedlemmar dela
med sig av vad de tyckt och tänkt. Diskussion uppmuntrades och förslag till förbättringar
skrevs ner för att kunna efterföljas. Allt producerat material sammanställdes och laddades
upp på gruppens gemensamma Google Drive.
Nedan listas de utvärderingar som genomfördes och deras innehåll:
• Förstudie – rollfördelningen, möten, de verktyg som använts (Trello, Google Drive)
samt gruppdynamiken.
• Iteration 1 – utvecklingsarbetet, utvecklingsmiljöer (WebStorm), versionshantering
(Git), projektstyrning, testning, parprogrammering samt gruppdynamiken.
• Iteration 2 – testning, projektstyrning, prioriteringar och gruppdynamiken.
• Iteration 3 (slutgiltig utvärdering) – slutprodukten, arbetet i helhet, hur gruppen
fungerat samt vilka lärdomar som erhållits att ha med sig till framtida projekt.
4.7.3
SEMAT kernel-genomgång
I samband med iterationsutvärderingar har en genomgång av SEMAT kernel alphas utförts
för att kontrollera gruppens status inom respektive alpha. Fokus har legat på vilka tillstånd
som har uppnåtts, och när nästa tillstånd bedöms vara uppnått.
16
5
Resultat
I detta avsnitt redovisas resultaten från projektets olika delar. Först behandlas hur produktens gränssnitt designats. Därefter ges en övergripande systembeskrivning. Resultaten från
gruppens användande av SEMAT kernel alphas presenteras och slutligen ges en överblick
över gruppmedlemmarnas individuella rapporter.
5.1
Gränssnittsdesign
Under iteration 1 skapades en grupp som ansvarade för produktens grafiska användargränssnitt och kom att kallas GUI-gruppen. Denna grupp ansvarade för att ta fram ett antal
prototyper enligt de önskemål som diskuterats med samtliga projektmedlemmar. Prototyperna testades sedan av kunden som godkände två av dem. En omröstning gjordes inom
projektgruppen för att välja vilken av de två godkända prototyperna som skulle användas
som mall för produkten.
Utifrån prototypen byggdes ett kodskelett för de element som skulle komma att finnas i det
grafiska gränssnittet. Även om dessa till en början var tomma, kunde den implementerade
funktionaliteten läggas in allt eftersom produkten utvecklades och det blev tydligt för de
som utvecklade var allting skulle placeras.
Kunden ville inte att programmet skulle hjälpa användaren utan att användaren skulle behöva tänka själv. Därmed har systemet implementerats så att all information inte är synlig
från början. Däremot är alla tillgängliga handlingar synliga hela tiden. Ett annat val gruppen
gjorde var att presentera mer information än vad som är nödvändigt för att lösa uppgiften.
Till exempel visas de exakta procenttalen för bokstavsfrekvensen i graferna.
För att minska inlärningskurvan har drag and drop implementerats i systemet. De element
som kan manipuleras med drag and drop har en skuggning bakom sig och klickbara element
ändrar färg när musen är ovanför dem. Detta är två exempel på de handlingsinviter som är
implementerade i systemet. De designval som gjorts är implementerade över hela systemet
för att alla verktyg ska vara enhetliga.
5.2
Systembeskrivning
Här följer en beskrivning av det resulterande systemet efter projektets avslut. Systemet fick
namnet Knekt. Beskrivningen inleds med en överblick över systemets användargränssnitt
17
5.2. Systembeskrivning
där den funktionalitet som finns tillgänglig översiktligt tas upp. Sedan behandlas olika
nyckelaspekter av systemets implementation. I figur 5.1 visas en skärmbild från systemets
användargränssnitt.
Figur 5.1: Skärmbild från systemets användargränssnitt.
Systemet tillhandahåller tre olika dekrypteringsverktyg där varje verktyg används för att
angripa en av de tre krypteringsmetoder som ingår i laborationen. Det aktiva verktyget väljs
via navigationspanelen till vänster, markerat 1 i figuren. I navigationspanelen återfinns också
val av den textfil systemet ska arbeta med samt val av det språk verktygen ska arbeta efter.
Tillgängliga språk är engelska och svenska.
Sektionen i mitten av gränsnittet, markerat 2 i figur 5.1, innehåller det valda dekrypteringsverktyget alternativt en hemskärm som visas då systemet startas. Hemskärmen finns
tillgänglig genom att klicka på logotypen i övre vänstra hörnet. Till höger i figuren finns
statistikpanelen markerad 3. I statistikpanelen finns ett antal diagram vilka ger användaren
information om den krypterade texten och statistik för det valda språket. Alla diagram
initieras dolda, men genom att klicka på deras flikar kan de visas eller döljas. Genom att dra
och släppa flikarna kan användaren ändra deras inbördes ordning.
När användaren öppnar ett diagram eller byter deras inbördes ordning associeras det nya
tillståndet endast med det aktiva dekrypteringsverktyget. Det innebär att vilka diagram som
är öppna eller stängda samt deras placering beror på vilket dekrypteringsverktyg som är
aktivt, och hur användaren tidigare förändrat statistikpanelen i detta. Effekten blir att användaren kan experimentera med flera verktyg utan att manuellt behöva öppna och stänga
relevanta diagram för de olika verktygen. Detta sköts automatiskt vid verktygsbyte eftersom systemet då återställer det senast använda tillståndet hos statistikpanelen i det nyligen
aktiverade verktyget.
18
5.2. Systembeskrivning
5.2.1
Dekrypteringverktygens uppbyggnad
Ett dekrypteringsverktyg byggs upp med hjälp av följande filer:
• index.html – verktygets logiska innehåll placeras här. Den här filen delas av alla verktyg.
• [tool-name].scss – verktygets utseende definieras i en .scss-fil specifik för det aktuella
verktyget.
• [tool-name]-manager.js – i manager-filen placeras eventhanterare specifika för verktyget.
Funktionalitet i den här filen tillåts modifiera samt extrahera data från systemets gränssnitt.
• [tool-name]-logic.js – verktygsspecifika beräkningsfunktioner definieras i verktygets
logic-fil. Funktioner i den här filen får inte ha någon kännedom om användargränssnittet utan utför rena beräkningar utan sidoeffekter.
• [tool-name]-interface.js – i de fall då ett verktyg kräver många olika typer av modifikationer av användargränssnittet flyttas den funktionaliteten från manager-filen till verktygets interface-fil.
Figur 5.2: Sekvensdiagram över typiska modulinteraktioner.
Ett exempel på en typisk kedja av modulinteraktioner visas i figur 5.2. Den inleds med att användaren utför en handling i användargränssnittet. Handlingen utlöser ett event som i sin tur
orsakar en körning av en eventhanterare i verktygets manager-modul. Manager-modulen behöver sedan resultatet av en beräkning som delegeras till verktygets logic-modul. Resultatet
av beräkningen returneras till manager-modulen, och ska därefter visas i användargränssnittet. För att utföra uppdateringen av gränssnittet anropar manager-modulen en funktion i
interface-modulen med beräkningsresultatet som argument. Funktionen i interface-modulen
uppdaterar användargränssnittet.
5.2.2
Informationsflöde i systemet
För att verktygen ska kunna anpassa sig till systemets tillstånd och förändringar i detta används en eventdriven modell. Exempel på tillståndsvariabler i systemet är det aktiva språket
19
5.2. Systembeskrivning
samt den valda filen. Den eventdrivna modellen har implementerats så att modulen som
ansvarar för att övervaka applikationens tillstånd triggar ett event av aktuell typ vid varje
förändring av tillståndet. Detta leder till att verktygen kan registrera eventhanterare för relevanta event men ignorera de andra. Effekten blir att modulen som hanterar tillståndet i
systemet inte behöver ha någon kännedom om vilka verktygsmoduler som existerar, utan
endast behöver se till att event triggas. Det skapar en lös koppling mellan verktyg och tillstånd, och leder till att nya verktyg enklare kan läggas till.
Figur 5.3: Sekvensdiagram över en tillståndsförändring i systemet.
I figur 5.3 visas ett sekvensdiagram över en tillståndsförändring, samt ett dekrypteringsverktygs respons på förändringen. Sekvensen inleds av att användaren i användargränssnittet
väljer en fil att arbeta med. Det genererar ett event som hanteras av modulen som övervakar
systemets tillstånd. Där hämtas sedan den valda filen från webbservern. Sedan genereras ett
nytt event av typ fileChange, vilket är det event som verktygen registrerat hanterare för.
Alla verktygs registrerade eventhanterare exekveras sedan, och verktygen kan anpassa sig
till det nya tillståndet.
5.2.3
Vidareutveckling
Systemet har implementerats så att det enkelt ska gå att lägga till ny statistikfunktionalitet
och nya dekrypteringsverktyg. Statistikfunktionaliteten har implementerats likt dekrypteringsverktygen, men eftersom statistikverktygen är mindre komplicerade än dekrypteringsverktygen behövs inte interface-filen. Statistikverktygens filer interagerar med varandra
på samma sätt som dekrypteringsverktygens respektive filer.
En typisk vidareutveckling av systemet kan exempelvis vara att lägga till ytterligare ett
diagram i statistikpanelen. Detta kan göras genom att skapa en manager-fil för det nya
diagrammet, samt eventuellt en logic-fil. I manager-filen bör relevanta eventhanterare registreras. Typiska event som ett diagram vill hantera är att användaren byter fil eller språk.
Diagrammet ska sedan ges en plats i statistikpanelen, vilket sker genom att lägga till dess
HTML-kod i index.html. Den diagramspecifika HTML-koden ska ha en wrapper runt sig av
samma typ som de redan existerande diagrammen och ska också följa samma namngivningskonventioner som dessa. På ett liknande sätt kan ett nytt dekrypteringsverktyg enkelt
20
5.3. Värde för kunden
implementeras.
Implementeras verktygen och alla diagram enligt de konventioner som beskrivits ovan så
fungerar all övrig funktionalitet, exempelvis drag and drop eller statistikpaneltillstånd, tillsammans med det nya verktyget utan att ytterligare förändringar behöver göras.
5.3
Värde för kunden
Systemets delar har implementerats med den struktur och de konventioner som också finns
beskrivna i avsnitt 5.2 vilket gör att det finns riktlinjer att följa vid eventuella tillägg. Nedan
beskrivs de beslut som tagits för att skapa värde för kunden.
• Öppen källkod – vid projektets avslut publicerades systemets källkod under MITlicensen, vilket är en tillåtande källkodslicens. Systemet använde ett mjukvarubibliotek
som inte har en öppen programvarulicens, men som tillåter bruk i icke-kommersiella
sammanhang.
• Dokumentation – en användarhandledning, en README-fil och koddokumentation i
form av JSDoc har skrivits. I användarhandledningen beskrivs hur systemet är tänkt att
användas av användaren. I README-filen beskrivs kodens struktur.
• Kodkvalitet – koden är skriven enligt Googles kodstandard för HTML [24], CSS [24]
och JavaScript [25]. Parprogrammering och kodgranskning har tillämpats.
5.4
Gemensamma erfarenheter
De erfarenheter projektmedlemmarna hade med sig från tidigare projekt återfinns i bilaga 1.
Sammanställningen presenterar de erfarenheter och lärdomar som dokumenterades under
förstudien. De är i största möjliga mån uppdelade efter olika områdesrubriker.
I bilaga 2 presenteras sammanställningar av de utvärderingar som utfördes efter respektive
iteration, inklusive förstudien. Resultaten är indelade efter de punkter som togs upp under
just den utvärderingen och varje punkt är i sin tur uppdelad i Bra och Kan bli bättre. För varje
utvärdering följer även en förteckning över de förbättringsförslag som gruppen kom fram
till.
5.5
SEMAT kernel alphas
I början av projektet utfördes en planering med hjälp av SEMAT kernel alphas. Efter varje
iteration gjordes en kontroll av hur gruppen låg till utifrån planeringen. Vid samtliga möten
framgick att gruppen låg minst lika bra till som planerat. SEMAT kernel alphas användes ej
aktivt under iterationerna, i den bemärkelse att de inte var integrerade i den utvecklingsprocess gruppen tillämpade. Det lades ingen tid under iterationerna på att utvärdera eller använda sig av dem.
5.6
Översikt över individuella bidrag
Nedan följer en kort sammanfattning av gruppmedlemmarnas individuella bidrag.
A
Fredrik Bergstrand: JavaScript-ramverks effekt på underhållbarhet
Rapporten behandlar hur användandet av ett JavaScript-ramverk påverkat systemets
underhållbarhet. Detta undersöks genom att med hjälp av komplexitetsmätningar jämföra systemet i den här rapporten med andra system vilka utvecklats med hjälp av ett
21
5.6. Översikt över individuella bidrag
ramverk. Undersökningen visar att användningen av ramverk bidrar till en mindre
komplex kodbas. Slutsatsen dras att detta kan ge en generellt bättre underhållbarhet
beroende på vilken typ av underhåll eller vidareutveckling av systemet som sker i
framtiden.
B
Kimberley French: Värdet av en prototyp
Denna del undersöker hur prototyper används i framtagingen av ett mjukvarusystem,
vilka för- och nackdelar som finns samt vilka processer som är lämpliga för att arbeta
fram en prototyp. Undersökningen är baserad på en enkät som besvarats av projektgrupper i kursen TDDD96 Kandidatprojekt i programvaruutveckling. Resultatet visar
på att gruppmedlemmarna tycker att den tid som lagts på prototypningsarbete är väl
investerad och att prototypen har underlättat för produktens utveckling.
C
Rebecka Geijer Michaeli: Daily Scrum virtuellt via textbaserat verktyg
Rapporten presenterar teori kring daily Scrum-möten, och möten som hålls virtuellt.
Teorin jämförs mot de virtuella, textbaserade daily Scrum-möten som detta projekt
tillämpat. Dessutom presenteras insamlade erfarenheter från gruppens medlemmar
om daily Scrum-mötena. Bland dessa framträder värdet i att anpassa frekvensen av
daily Scrum-möten efter hur mycket tid projektmedlemmarna lägger på projektet.
D
Eric Henziger: En utvärdering av parprogrammering och kodgranskning
Rapporten visar på positiva effekter från parprogrammering och kodgranskning med
avseende på både kodkvalitet och samarbetet inom gruppen. Även några negativa effekter framkom som bland annat berörde inflexibilitet hos parprogrammering och obehag med att ge kritik vid kodgranskning.
E
Oscar Johansson: Enhetstestningens påverkan på programmeringsprocessen
Rapporten utreder hur tidpunkt för skrivade av enhetstester påverkar programmeringsprocessen, med avseende på tidsåtgång, resultat och underlättande av lösning. För
att utreda detta anordnades en datainsamling där deltagare fick lösa uppgifter med
tre olika förhållningssätt till enhetstestning. Rapporten visar att olika förhållningssätt
påverkar programmeringsprocessen på många olika vis.
F
Robert Kumpulainen: Effekten av en branching model i ett litet utvecklingsprojekt
Rapporten analyserar huruvida valet av greningsmodell är associerat med en ökad
mängd felaktig kod. Undersökningen visade att ytterligare metoder krävs för att
hantera de datamängder som uppstår vid analys av ett mjukvaruprojekts utvecklingshistorik. Den av rapporten tillämpade datainsamlingsmetoden producerade inte data
från vilken konklusioner kunde dras.
G
Erik Rönmark: Kvalitetssäkrande processer och produktkvalitet i ett litet utvecklingsprojekt
Rapporten utreder hur projektgruppens sätt att göra utvärderingar, användartest och
kodgranskning påverkade produktkvaliteten. Denna undersökning genomförs genom
att gå igenom producerad dokumentation och söka igenom statistik från Git. Rapporten
visar att gruppens kvalitetsäkrande processer faktiskt påverkade produktkvaliteten
positivt.
H
Kristoffer Tennivaara: Metoder och processer för grafiska användargränssnitt
Rapporten utreder vad olika sätt att fatta designbeslut på har för effekt på användbarheten på produkten. Den undersöker också vilka processer och metoder som lämpar
sig bäst för att ta fram ett användargränssnitt med så hög användbarhet som möjligt i
ett småskaligt projekt.
22
5.6. Översikt över individuella bidrag
I
Victor Tranell: Kravhantering med Scrum
Rapporten utreder vilka effekter den agila utvecklingsmetodiken Scrum får på
kravhantering. En litteraturstudie samt en projektstudie visar att agil kravhantering
passar mycket bra för små projekt.
23
6
Diskussion
Här diskuteras olika delar av innehållet i rapporten. Inledningsvis behandlas de resultat som
erhållits ur slutprodukten och projektarbetet. Därefter tas den metod som använts för att
samla in erfarenheter upp, och till sist sätts arbetet in i ett vidare sammanhang.
6.1
Resultat
Här diskuteras de resultat som presenterats i avsnitt 5. Diskussionen inleds med att gränssnittsdesignen behandlas. Därefter berörs den valda implementationen. Sedan tas produktens
värde för kunden upp. Gruppens redovisade erfarenheter diskuteras och avslutningsvis behandlas SEMAT kernel alphas.
6.1.1
Gränssnittsdesign
Då handlingsinviter bidrar till att ge användaren information om vilka delar av systemet det
går att interagera med [5] går det att argumentera för att dessa gör systemet mer användbart. Enhetlig formgivning i systemets olika delar kan exempelvis bidra till att användaren
snabbare förstår hur ett nytt verktyg ska användas. Interaktionsmekanismer som drag and
drop har använts för att göra det lätt för användaren att lära sig använda systemet. Det är
inte säkert att drag and drop alltid är den effektivaste metoden för att interagera med ett
system. Däremot är metoden lätt att förstå och tillämpa jämfört med andra mekanismer,
såsom kommandorads-interface eller komplicerade kortkommandon. Beslutet att använda
dessa mekanismer baserades på att systemet inte är ett verktyg som studenterna ska kunna
bli experter inom eller med vars hjälp kunna lösa problemet så snabbt som möjligt. Det
ansågs viktigare att tillhandahålla ett system som det är lätt att påbörja arbetet i.
Ett antal av de beslut som togs angående gränssnittsdesignen kan anses ha försämrat produktens användbarhet, exempelvis att presentera mer information än vad som är nödvändigt
för att dekryptera en text. Systemet gör heller inte några ansträngningar för att tala om för
användaren vilka verktyg som fungerar bra att använda tillsammans. Detta är exempel på
beslut som kanske sett annorlunda ut om systemet inte tillkommit i utbildningssyfte. Tanken
var att studenterna själva skulle bli tvungna att tänka efter och förstå principerna för att
kunna utföra laborationen. Alla verktyg görs tillgängliga direkt, men inga tips ges gällande
vilka som är lämpliga att använda.
24
6.1. Resultat
6.1.2
Implementation
Det finns ett stort antal implementationer som kunde övervägts. I och med att systemet på
kundens önskemål skulle utvecklas som en webbapplikation minskade valfriheten något.
Det finns ett antal olika verktyg som generellt används för webbutveckling, där de vanligaste
är HTML, CSS och JavaScript. Det är möjligt att systemet sett radikalt annorlunda ut om
kravet på att systemet skulle vara en webbapplikation inte existerat. Dels för att det ger
tillgång till en annan uppsättning verktyg, men också för att projektmedlemmarna hade
begränsad erfarenhet av webbutveckling vid projektets start.
Betraktas olika implementationer ur ett webbutvecklingsperspektiv dyker frågan om
JavaScript-ramverk ganska snabbt upp. Valet att inte använda ett sådant vid utvecklingen av
systemet kan ifrågasättas. Hur detta påverkat systemet undersöks djupare i individuell del A.
JavaScript har också stöd för prototypbaserad objektorientering. Det hade varit möjligt
att implementera en mer objektorienterad lösning än den nuvarande. En sådan lösning
kunde lett till mer inkapslad funktionalitet, men kanske också mer arbete som eventuellt inte
bidragit till en förbättring av underhållbarheten eller minskad komplexitet hos mjukvaran.
Detta på grund av mjukvarans relativt begränsade omfattning.
Projektet följde ett antal konventioner som växte fram under projektets gång. Konventioner är dock inget som påtvingas av språket eller systemet i sig, vilket innebär att framtida
utvecklare bör vara insatta i dessa för att enkelt kunna vidareutveckla systemet. Hur lätt det
är att vidareutveckla systemet beror alltså till stor del på hur väl utvecklingskonventionerna
förmedlas vidare. Eftersom mjukvaran publicerats som ett projekt med öppen källkod finns
en risk att dessa konventioner förbises och med tiden dör ut. Detta då ett potentiellt stort
antal utvecklare kan bidra till projektet, och risken finns att nya utvecklares snabba lösningar
på problem inte alltid följer de etablerade konventionerna. När de lösningarna sedan orsakar
nya problem löses dessa på samma sätt, istället för att den egentliga orsaken till problemet
identifieras.
6.1.3
Värde för kunden
Här diskuteras systemets värde för kunden. Ett av de större målen med projektet var att
kunden skulle få en tillfredställande produkt framtagen. Kunden önskade ett system som
dels var mer lättanvänt än det tidigare, och som dessutom var underhållbart med möjlighet
till vidareutveckling i framtiden. Värdet av systemet beroende på hur det brukas av kunden
tas upp. Därefter behandlas de beslut som tagits för att skapa värde för kunden.
Värde beroende på användning
I avsnitt 5.3 beskrevs ett antal attribut hos systemet som är av värde för kunden, men för
att produkten ska uppnå sitt fulla värde återstår att systemet tas i aktivt bruk. Det krävs
exempelvis också att någon form av vidareutveckling eller underhåll av systemet sker för att
systemets underhållbarhet ska ha ett faktiskt värde för kunden.
Att systemet inte tagits i bruk än i skrivande stund innebär däremot inte att det helt saknar
värde ur kundens perspektiv. Även om systemet aldrig tas i bruk kan kunden ha kommit till
viktiga insikter gällande vad de vill ha ut av ett nytt system. Kunden har också erhållit en
ny referenspunkt, utöver det gamla systemet Enigma 1.2, som kan användas för att beskriva
eventuella önskemål med ett helt nytt system.
25
6.1. Resultat
Öppen källkod
När projektet avslutades publicerades projektet på GitHub under öppen källkod. Därmed
kan alla som hittar buggar fixa dem och sedan göra en merge request. Allt eftersom tiden går
kommer fler och fler buggfixar och refaktoreringar utföras. Kunden får därmed också fortsatt
granskning av systemets kodbas vilket förhoppningsvis bidrar till systemets livslängd. Det
är också den öppna källkoden som möjliggör framtida utveckling av kunden eller utvecklare
anlitade av kunden, i motsats till proprietär programvara.
Dokumentation
Fördelen med teknisk dokumentation är att flytande text och bilder gör sig bättre än kod för
att på ett snabbt sätt beskriva komplexa system på ett övergripande sätt.
Problemet med att ha teknisk dokumentation som förklarar vad koden gör är att dokumentationen ofta inte underhålls i samma takt som kodbasen utvecklas. Detta leder till
att dokumentationen hamnar efter och därmed kan informationen bli inaktuell. Inaktuell
teknisk dokumentation kan vara missvisande och bidra till mer förvirring än förklaring.
Syftet med att JSDoc används som dokumentation är att låta nya utvecklare sätta sig in i
systemet på ett effektivt sätt, och att underlätta vidareutveckling. Anledningen till att JSDoc
använts är att chansen är större att en utvecklare uppdaterar de kommentarer som ligger i koden i anknytning till funktionaliteten än att denne öppnar ett annat dokument och beskriver
förändringar där.
Kodkvalitet
I och med att parprogrammering och kodgranskning har använts kan man argumentera för
att kvaliteten på koden är hög. Som nämns i avsnitt 4.5.2 fokuserade dessa på att öka kodens
läsbarhet. Kodgranskning i samband med parprogrammering gjorde att minst tre personer
har läst och godkänt den kod som skrivits, vilket ökar chansen att koden är läsbar. Läsbar
kod medför att det blir lättare för nya utvecklare att förstå hur systemet fungerar.
Att kodbasen följer etablerade standarder bidrar till kvaliteten eftersom dessa standarder är
något många utvecklare känner till och har en vana att arbeta med. Det låter nya utvecklare
fokusera på innehållet och dess betydelse istället för att lägga tid på att bekanta sig med dess
utformning.
Webbapplikation
Då systemet utvecklats som en webbapplikation är det till stor del plattformsoberoende
vilket bidrar till en större frihet för studenterna som läser kursen. Det blir möjligt att enkelt
arbeta med laborationen både från en egen dator och ISY:s datorsystem. Arbete från andra
platser har tidigare förutsatt att studenten är bekväm med att använda en SSH-klient [26],
exempelvis OpenSSH [27], för att ansluta till ISY. Nu kan alla med webbläsarvana arbeta från
valfri plats.
Ytterligare en fördel med webbapplikationer är att systemet kan anpassas till andra hårdvaruplattformar än stationära och bärbara datorer. Det går att tänka sig att applikationen
anpassas till exempelvis surfplattor eller mobiltelefoner också. Detta är betydligt svårare
med en systemapplikation.
Laborationsassistenter behöver inte ge lika mycket teknisk hjälp som innan, utan kan
fokusera på laborationsinnehållet istället för miljön. Detta dels eftersom det inte var en helt
26
6.1. Resultat
enkel process att starta det gamla systemet, men också eftersom Knekt presenterar tillgänglig
funktionalitet på ett mer överskådligt sätt.
6.1.4
Erfarenheter
Problem som uppmärksammades under iterationsutvärderingarna diskuterades på plats och
man försökte att gemensamt hitta en lösning. Frågan skulle sedan komma att tas upp under
nästa utvärdering för att se om det skett en förbättring eller om ytterligare åtgärder krävdes.
Detta gjorde det enkelt att se om förbättringsförslagen fick önskad effekt. Nedan följer några
exempel:
• Ett område som tydligt går att följa i utvärderingarna är vilket system för tidrapporteringen som användes. Initialt användes Trello, där flera anmärkte i utvärderingen för
förstudien att det var krångligt att använda. I sammanställningen av förbättringsförslag
framgår att gruppen ämnade byta till kalkylark på Google Drive. I utvärderingen för iterationen efteråt går det att läsa från flera personer i gruppen att nya tidrapporteringen
fungerar väldigt bra.
• Måenderundorna är en punkt som omnämns ofta och med positiva ordalag i
utvärderingarna. Förutom en person som tycker de tar för mycket mötestid är alla
odelat positivt inställda till dem.
• I utvärderingen av iteration 1 önskades en andra kickoff. Det lades till under förbättringsförslag, genomfördes och prisades i nästa utvärdering.
Konsekvenserna av utvärderingarna kan tänkas vara många. Bland annat bidrog det till en
bättre sammanhållning bland projektmedlemmarna – när problem uppmärksammades och
hela gruppen involverades i att åtgärda dessa upplevdes det som att alla arbetade gemensamt. Många gånger hade medlemmarna liknande erfarenheter kring punkterna vilket kan
ha bidragit till en känsla av samhörighet till gruppen. Detta kan dock haft motsatt effekt
för de med en annan erfarenhet, om de upplever att “alla andra” haft andra tankar kring
en fråga. Det är då möjligt att den medlem som haft en avvikande åsikt känt sig isolerad
och kanske undvikit att ta upp sin syn på saken. Det kan också tänkas att en medlem känt
sig personligt ansvarig för en företeelse som de andra medlemmarna upplevt som negativt,
vilket ytterligare bidragit till en känsla av att vara utanför gemenskapen. Det har inte uppmärksammats något sådant fall, men det kan bero på de anledningar som tagits upp här.
I och med att projektgruppen redan under förstudien diskuterade de erfarenheter som kommit från tidigare projektarbeten kunde det tidigt fastställas vad som borde undvikas eller
vad som var önskvärt gällande arbetsmetod, gruppdynamik, verktyg, utveckling etc. Ett
område där det tydligt framgår att gruppen lyssnat på varandras åsikter är utveckling, där
alla önskemål uppfylldes och alla tidigare problem förhindrades.
6.1.5
SEMAT kernel alphas
I början lade gruppen lång tid på genomgångarna av alla SEMAT kernel alphas, med utförliga diskussioner kring varje tillstånd och huruvida det uppnåtts eller när under projektet
det skulle uppnås. Under de senare genomgångsmötena gick det klart fortare. Det kan
tänkas bero på att gruppmedlemmarna mot slutet hade betydligt bättre koll på projektet och
hur det låg till, och därför snabbare kunde avgöra vilka tillstånd som uppnåtts och vilka
som inte uppnåtts. Det kan också tolkas som att gruppmedlemmarna mot slutet kände
mindre behov av att utförligt prata igenom alla tillstånd, då de redan upplevde sig ha koll
på projektet.
27
6.2. Metod för insamling av erfarenheter
En annan intressant notering är att gruppen genom hela projektet legat i fas med den ursprungliga uppskattningen, eller före. Det kan tolkas som att gruppen genom att ha gjort
planeringen fick en tydlig bild av vad som skulle göras och när, och sedan följde den. Det
kan också tolkas som att projektgruppen var bra på att planera.
6.2
Metod för insamling av erfarenheter
Eftersom iterationsutvärderingarna fylldes i för hand under speciella utvärderingstillfällen
fanns en tidsbegränsning för hur lång tid det fick ta. Under de två avsatta timmarna hade
deltagarna oftast omkring 30 minuter på sig att fylla i formulären. Detta kan ha medfört att
alla tankar eller åsikter inte hann skrivas ned eller att enbart de “viktigaste” punkterna lyftes
fram. Det är också möjligt att alla medlemmar inte hann reflektera särskilt mycket kring
varje punkt innan de gick vidare med nästa del.
Efter att formulären fyllts i hölls en diskussion kring varje punkt. Först fick alla deltagare
uttrycka sina egna tankar och sedan diskuterades eventuella problem som uttryckts. En konsekvens av detta kan vara att vissa deltagare kanske var obekväma med att ta upp kritik inför
gruppen eller orolig för att någon skulle ta illa upp och därmed höll negativa upplevelser
för sig själv. Dessa har i sådant fall inte tagits upp för diskussion och har därmed heller inte
behandlats som ett förbättringsförslag till nästa iteration.
Utvärderingarna fylldes i med namn och var således inte anonyma. Även om deltagarna
valde att inte ta upp vissa punkter till diskussion inför hela gruppen skulle ändå gruppens
teamleader, samt i vissa fall någon mer gruppmedlem, läsa igenom och sammanställa alla
svar. Kanske skulle fler problemområden eller känsliga punkter ha kommit till ytan ifall
utvärderingarna lämnats in anonymt.
6.3
Arbetet i ett vidare sammanhang
Kryptoteknik är en grundläggande förutsättning för dagens informationssamhälle. Det
möjliggör för miljoner människor att utföra vardagliga uppgifter över internet, exempelvis bankärenden eller interaktion med olika myndigheter. Det gör det också möjligt
för demokratiförkämpar att kommunicera med likasinnade i länder med regimer som utövar
förtyck mot sina medborgare. Samtidigt är det också kryptoteknik som tillåter terrorister att
planera sina dåd och i vissa fall undgå upptäckt.
De kryptotekniker som lärs ut med hjälp av Knekt kan inte användas till något av det som
nämns ovan. Däremot kan det kanske vara dessa tekniker som framkallar ett intresse hos en
student som läser kursen. Det kan sedan leda till en framstående forskarkarriär för denne
med stora framsteg inom just kryptoteknik. Därmed kan Knekt indirekt vara med och
påverka det som beskrivits tidigare. Huruvida denna påverkan blir av positiv eller negativ
karaktär beror på personen samt typen av framsteg.
Med det sagt, för att underhålla den stora mängd system som idag använder sig av kryptoteknik krävs kompetent arbetskraft. Utbildningen av denna arbetskraft måste påbörjas på
något sätt, och där är Knekt ett alternativ.
Då Knekt ersätter ett befintligt system rakt av, och kommer användas på samma sätt och
i samma utsträckning som det tidigare systemet, leder arbetet inte till någon ytterligare
miljöpåverkan.
28
7
Slutsatser
Detta kapitel redogör för de slutsatser som erhållits ur resultatet som presenterades i avsnitt
5. Kapitlet ämnar besvara frågeställningen i avsnitt 1.3.
7.1
Gränssnittsdesign
För att underlätta för användbarheten har handlingsinviter implementerats. Detta för att
användaren ska förstå hur element kan manipuleras. Drag and drop är implementerat för
att användaren ska kunna använda programmet på ett intuitivt sätt. Systemet är enhetligt
vilket minskar tiden det tar för användaren att lära sig systemet. Detta är beslut som kan ha
positiva effekter på användbarheten.
Konsekvenserna av de beslut som tagits är att det system som utvecklats har fokus på att
förstagångsanvändare lätt ska komma igång, snarare än att vana användare ska vara effektiva. En effekt av det är att en van användare inte är mycket snabbare än en nybörjare.
En del av de beslut som tagits baserat på att systemet ska användas i utbildningssyfte har
försämrat användbarheten. Systemet kräver att användaren har en förståelse för ämnet och
tillvägagångssätten som kan användas för att dekryptera texter. Detta är önskvärt ur ett
pedagogiskt perspektiv, men ur ett användbarhetsperspektiv hade det varit önskvärt att ge
användaren mer hjälp.
7.2
Värde för kunden
Kunden ville ha en interaktiv webbapplikation med samma funktionalitet som det gamla
programmet. Programmet skulle vara lättanvänt, interaktivt och alla beräkningar skulle
göras på klientsidan. Det skulle levereras under öppen källkod samt ha god dokumentation
och abstraktion för att förenkla vidareutveckling och underhåll.
För att skapa värde för kunden har gruppen därför jobbat med just dessa områden. En
interaktiv webbapplikation har skapats där systemet har samma funktionalitet som det äldre
programmet. För att göra programmet mer lättanvänt har systemet fått en tydlig struktur
med ett navigationsfält, ett verktygsfält och en statistikpanel.
För att underlätta vidareutveckling och underhåll har systemet delats upp i moduler. Detta
avser förenkla för framtida implementationer av exempelvis nya dekrypteringsverktyg eller
29
7.3. Erfarenheter
statistikverktyg. Utöver det har en användarhandledning, en README-fil samt dokumentation i form av JSDoc skrivits.
Utöver dokumentation har även kodgranskning och parprogrammering använts för att öka
kodens läsbarhet. Lättläst kod förenklar underhåll av systemet.
För att ytterligare bidra till underhållbarheten har systemet publicerats på GitHub under
MIT-licens och finns alltså tillgängligt för allmänheten. Vem som helst med tillgång till
internet kan därmed vidareutveckla eller underhålla systemet.
Sammanfattningsvis har värde skapats för kunden genom att kundens begärda system har
skapats.
7.3
Erfarenheter
Följande erfarenheter har projektmedlemmarna identifierat som särskilt intressanta eller viktiga för framtida, liknande projekt:
• Måenderundor bidrar till personlighet och sammanhållning inom gruppen.
• Att jobba för god stämning i gruppen ger mycket goda förutsättningar för alla former
av arbete.
• Var öppna för att byta verktyg som inte fungerar bra (till exempel tidrapportering i
Trello).
• Dagordningar och mötesprotokoll med tydligt innehåll fungerar som stöd under möten
och gör det mindre jobbigt att vara frånvarande eller vara med på distans.
• Online-baserad lagring av alla dokument säkerställer att alla får tillgång till gemensamma filer. Versionshantera det som behövs (framförallt kod).
• Tydlig rollfördelning som definierar ansvarsområde underlättar framförallt i början.
Det bidrar till att minska risken för konflikter som beror på problem med arbets- och
ansvarsfördelning.
• Att låta en mindre grupp arbeta med det grafiska gränssnittet (GUI-gruppen) och ta
fram förslag som sedan hela gruppen fått besluta om har fungerat bra. GUI-gruppen
kan med fördel vara självbestämmande i sina beslut.
• Det är viktigt att ha en god och trygg stämning vid iterationsutvärderingar. För
att lyckas med detta behövs gott om tid för att undvika stress. Eventuellt kan
utvärderingarna fyllas i på dator eller i förväg för att snabba upp processen. Fika under
utvärderingen har positiva effekter. Möjlighet till anonymitet vid känsliga ämnen är
önskvärt.
• Att sitta tillsammans och arbeta i arbetsstugor har haft positiva effekter på både produktkvaliteten och samarbetet i gruppen. För att förstärka dessa effekter bör ett kontor
finnas till hands för att garantera att det alltid finns en plats för gemensamt arbete.
7.4
SEMAT kernel alphas
SEMAT kernel alphas användes i stort sett bara i planering och för att se hur gruppen
låg till i projektet. Det var alltså inte styrande på något sätt under själva utvecklingen.
Eftersom användandet av SEMAT kernel alphas enbart skedde i planeringsprocesser var
effekterna främst synliga just i själva planeringen av projektet. Planeringen i projektets
30
7.4. SEMAT kernel alphas
förstudie använde sig av SEMAT kernel alphas för att både visualisera vilka områden i
utvecklingsprocessen som skulle uppnås och när områdena skulle uppnås. Flera alpha states
var ej självklara när de skulle planeras in, detta ledde till diskussioner inom gruppen. Efter
diskussionerna fanns det inga uttalade oklarheter om vad som skulle uppnås, eller när det
skulle uppnås.
Alla gruppmedlemmar visste vad slutmålet var vilket medförde att även om inget aktivt användande av SEMAT kernel alphas skedde under iterationerna så påverkade det arbetet indirekt. Om gruppen hade legat bakom med något alpha state hade det uppmärksammats under
iterationsplaneringarna. Även om det inte hände i just detta projekt kan man argumentera för
att SEMAT kernel alphas faktiskt var ett stöd, eftersom det agerade förebyggande. Man kan
också dra slutsatsen att eftersom gruppen inte var helt enig i början med hur utvecklingsprocessen skulle gå till, bidrog SEMAT kernel alphas till samstämmighet inom gruppen. Under
mötena efter iterationerna kunde man även tydligt se framsteg som skett i utvecklingsprocessen vilket var motiverande. På de sätten fick alltså gruppen stöd av att använda och följa
upp SEMAT kernel alphas.
31
Del II
Individuella bidrag
32
A Fredrik Bergstrand:
JavaScript-ramverks effekt på
underhållbarhet
A.1
Inledning
Ett vanligt tillvägagångssätt när webbapplikationer utvecklas idag är att använda ett existerande JavaScript-ramverk. Den här individuella rapporten utgår från systemet beskrivet i
rapportens huvuddel, kallat Knekt. Systemet i fråga är uppbyggt utan hjälp av något ramverk.
Med hjälp av komplexitetsmått undersöks vilken effekt användandet av ett JavaScriptramverk hade haft på systemets underhållbarhet.
A.1.1
Syfte
Syftet med den här rapporten är att med hjälp av komplexitetsmått utreda hur användningen
av ett etablerat JavaScript-ramverk hade påverkat underhållbarheten hos systemet beskrivet
i rapportens huvuddel under avsnitt 5.2.
A.1.2
Frågeställning
Följande frågeställning ligger till grund för arbetet som beskrivs i rapporten:
1. Hur hade användningen av ett etablerat JavaScript-ramverk påverkat underhållbarheten hos systemet Knekt?
A.2
Bakgrund
Idag sköts fler och fler uppgifter på internet, och webbaserade tjänster ökar kraftigt. Ett
allt större antal enheter av olika slag kopplas upp till nätet där de presenterar någon form
av data och/eller kan styras. För att tillgodose det behov som finns av att snabbt utveckla
webbtjänster har ett antal ramverk för utveckling av applikationer vuxit fram. Särskilt så
kallade Single Page Applications (SPA) har ökat i popularitet. En SPA är en applikation som
körs i en webbläsare men som vid navigation i applikationen inte kräver någon omladdning
av sidan. Detta är möjligt antingen genom att allt innehåll hämtas vid den initiala sidhämtningen [28], eller genom att nytt innehåll hämtas asynkront vid användning av systemet.
Ramverkens syfte är bland annat att minska det arbete som krävs från idé till färdig tjänst,
samt tillhandahålla vanlig funktionalitet som behövs i majoriteten av alla applikationer. Ett
par av de vanligaste uppgifterna som förenklas är att hantera de asynkrona dataöverföringar
33
A.3. Teori
mellan klient och server som ofta krävs i en SPA, samt separera datamodell, vy och händelsehantering.
A.3
Teori
I teoridelen presenteras de mått som använts i undersökningen, samt annan relevant kunskap
som behövs för att tillgodogöra sig innehållet i rapporten.
A.3.1
Resursfördelning vid mjukvaruutveckling
En majoritet av de resurser som spenderas på ett mjukvarusystem går inte till den initiala
utvecklingen, utan till underhåll och reparation av systemet [29]. I extremfall uppnår andelen som går till underhåll 80 % av de totala kostnaderna för systemet [29]. För system
som ska vara i drift under längre tid är det också viktigt att det finns möjlighet att modifiera
systemet och anpassa det till förändringar i driftsmiljön [3]. Underhållbarhet är alltså en
viktig kvalitetsfaktor att ta hänsyn till vid utveckling av ett mjukvarusystem.
Det finns starka kopplingar mellan ett systems komplexitet och kostnaderna associerade med
underhåll av systemet [30]. Ett sätt att minska underhållskostnaderna för systemet är alltså
att sträva efter en kodbas som är så ickekomplex som möjligt. För att mäta komplexiteten hos
en kodbas finns det flera mått att tillgå.
A.3.2
Komplexitetsmått
Oman och Hagemeister introducerade 1991 ett mått på mjukvaras underhållbarhet kallat
Maintainability Index (MI) [31]. Måttet definieras som
MI = 171 ´ 3, 42 ln( aveE) ´ 0, 23 ln( aveV ( g1 )) ´ 16, 2 ln( aveLOC )
där E innebär Halsteadansträngning (Halstead effort), V ( g1 ) står för utökad cyklomatisk
komplexitet och LOC är antal rader kod. Prefixet ave innebär att det är det genomsnittliga
värdet över alla moduler i kodbasen som används. Ett högre värde innebär bättre underhållbarhet. MI-uttrycket har sedan det först introducerades modifierats och utökats på ett antal
sätt. En av dessa variationer återfinns exempelvis i “Metrics for assessing a software system’s
maintainability” av Oman och Hagemeister [32].
A.3.3
Complexity-report
Complexity-report är ett verktyg som utför automatiserad komplexitetsanalys av JavaScriptkodbaser med hjälp av det tidigare introducerade måttet Maintainability Index. Verktyget
är egentligen ett gränssnitt mot mjukvaran Escomplex som utför den faktiska analysen [33].
Escomplex utför analyser på abstrakta syntaxträd som genereras av verktyget Esprima [33]
[34].
A.4
Metod
Här beskrivs metoden som följts för att erhålla de resultat som presenteras i rapporten.
A.4.1
Jämförelsekandidater
För att det skulle vara möjligt att utföra en jämförelse av systemet beskrivet i rapportens huvuddel med andra system byggda med ramverk behövde ett antal sådana system identifieras.
Valet föll på ett antal mindre projekt tänkta som exempelprojekt för respektive ramverk, där
dessa projekt demonstrerar olika egenskaper hos ramverken i fråga. De ramverk som valdes
34
A.5. Resultat
ut för jämförelse var AngularJS [12] och EmberJS [13]. Följande lista med projekt användes
slutligen i jämförelsen:
1. CustomerManagerStandard [AngularJS] - en exempelapplikation för hantering av kunder [35].
2. FoodMe [AngularJS] - en applikation för hantering av beställningar på restauranger
[36].
3. Ember.js Dashboard [EmberJS] - en applikation som samlar information och nyheter
om EmberJS från ett antal olika källor [37].
4. Knekt - en applikation som används vid en laboration i kryptoanalys för att dekryptera
meddelanden krypterade med en av tre olika tekniker.
I vissa projekt som initialt skulle ingått i studien användes JavaScript-funktionalitet som
inte fanns standardiserad. Complexity-report kunde inte hantera den funktionaliteten vilket
ledde till att projekten fick uteslutas från studien.
A.4.2
Mätning
För att utföra underhållbarhetsmätningarna användes verktyget Complexity-report [33]. En
mätning utfördes på varje projekts respektive kodbas, inklusive Knekts. För att ge ett rättvist
resultat vid mätningarna var det viktigt att försäkra sig om att Complexity-report endast
analyserade projektspecifik kod, och inte exempelvis källkoden till bibliotek eller ramverk
som använts i projekten. Complexity-report är ett kommandoradsverktyg, och följande kommando användes för att utföra mätningarna:
Kodexempel A.1: Invokering av Complexity-report.
cr -o <projektnamn>-report.txt <kataloger med projektspecifik kod>
Complexity-report sparade då resultatet av analysen i den specificerade utdatafilen. Utdatafilen inleddes med en sammanställning av mätningarna, där bland annat det resulterande MI-värdet kunde utläsas.
A.5
Resultat
I tabell A.1 presenteras de respektive projektens MI-värden.
Tabell A.1: MI-värden för de undersökta projekten.
Projekt
Ember.js Dashboard
FoodMe
CustomerManagerStandard
Knekt
MI-värde
139,7
135,0
129,2
115,1
De resultat som presenteras i tabell A.1 är det genomsnittliga MI-värdet över alla moduler
i respektive projekt. MI-värdet har avrundats till fyra värdesiffror. Sammanfattningen från
Complexity-reports rapportfil för de olika projekten återfinns i bilaga 3.
A.6
Diskussion
Här diskuteras tillvägagångssätt som använts och resultat som erhållits under studien.
Eventuella felkällor behandlas också. Värt att notera är att resonemang som förs här bör appliceras med försiktighet på andra projekt där omfattningen skiljer sig mycket jämfört med
35
A.6. Diskussion
projekten i den här studien. Det kan tänkas att den infrastruktur ramverken tillhandahåller
gör ett litet projekt mycket mer komplext är nödvändigt. På samma sätt kan tillvägagångssättet utan ramverk bli ohållbart i ett större projekt där tydlig struktur och fasta konventioner
krävs.
A.6.1
Metod
Något som bör klargöras när mätningar av den typ som beskrivs i rapporten utförs är att
måtten som erhålls inte är absoluta mått på underhållbarhet. Det finns flera andra faktorer
som inte tas i beaktande med metoden och måtten som använts i studien, exempelvis kodkommentarer.
Data som fås genom underhållbarhetsmätningar används kanske lämpligast genom att studera om det finns oregelbundna tendenser i denna. Finns moduler som kraftigt avviker till
det sämre i mätningarna kan det vara en anledning att manuellt granska modulerna i fråga
och undersöka orsaken till de dåliga värdena.
Den data som använts i studien har också hämtats från ett litet antal projekt. Ett större antal
hade gett ett resultat som varit statistiskt säkrare, men hade tagit längre tid.
Det går också att ställa sig frågan vad som är mest fördelaktigt av att antingen behöva lära sig
ett ramverk för att förstå en ny kodbas, eller enbart sätta sig in i kodbasen givet att utvecklaren i fråga redan är förtrogen med det använda språket. Det kan tänkas att utvecklaren
lätt kan sätta sig in i koden när denne väl lärt sig ramverket och dess principer. Det kan å
andra sidan också vara lättare för utvecklaren att enbart sätta sig in i en kodbas utan ramverk
beroende på ramverkets inlärningskurva. Detta är situationsberoende, och i det hänseendet
ger inte MI-måttet någon information. Handlar det om ett åtagande att underhålla kodbasen
under en längre tid kan det vara fördelaktigt att först utbilda sig i ramverket, och sedan i
gengäld ha en mer trivial kodbas att arbeta med. Handlar underhållsarbetet däremot om mindre sporadiska åtgärder kan utbildningen bli ett orimligt stort moment relativt åtgärderna.
A.6.2
Felkällor
De externa projekt som mätningarna utfördes på är skrivna av erfarna webbutvecklare, och
medlemmarna i det här projektet hade inledningsvis en mycket begränsad erfarenhet av
webbutveckling. Det är möjligt att resultatet sett annorlunda ut om medlemmarna hade haft
en annan bakgrund.
Projekten har också en relativt begränsad omfattning, det är möjligt att skillnaderna i resultatet varit tydligare i större projekt, där den struktur och de mekanismer ramverken
tillhandahåller visar sin fulla potential.
I och med att ett antal projekt fick uteslutas då Complexity-report inte kunde hantera den
utökade JavaScript-funktionaliteten som använts i dessa projekt blev dataunderlaget mindre
än planerat. Resultatet kunde sett annorlunda ut om dessa projekt tagits med. Studien
behandlar följaktligen inte heller effekten av funktionaliteten som inte kunde hanteras.
A.6.3
Resultat
I det erhållna resultatet syns att Knekts MI-värde ligger lägre än de andra projekten. Det
kan finnas flera orsaker till detta. Exempelvis analyserades enbart projektspecifik kod i
de tre externa projekten, vilket innebär att grundläggande funktionalitet som abstraheras
36
A.7. Slutsatser
bort av ramverken inte tas med i analysen. I analysen av Knekt behandlas sådan kod som
projektspecifik vilket kan bidra till det erhållna resultatet.
Det nämndes tidigare under diskussionen om felkällor att projektmedlemmarna hade väldigt
begränsad erfarenhet av webbutveckling innan det här projektet. Det kan också vara en
bidragande faktor.
För att sammanfatta resultatet så erhöll Knekt komplexitetsmässigt en sämre underhållbarhet
än motsvarande externa projekt där ett ramverk använts. Att detta leder till sämre underhållbarhet är inte helt säkert. Vad resultatet däremot berättar är att system som utvecklas ovanpå
ett ramverk får en kodbas som är mindre komplex då ramverken i sig exkluderas. Den kod
utvecklare som underhåller systemet behöver bekanta sig med blir mer trivial, förutsatt att
utvecklarna känner till ramverket.
Något som dock ska tas i beaktande om ett ramverk väljs på grund av en önskan om långsiktigt underhåll och vidareutveckling är att ramverk kan sluta underhållas av de utvecklare
som står bakom ramverken. Det är en risk som får bedömas utifrån vilket ramverk som väljs,
vilken organisation som underhåller det och hur modernt ramverket är.
A.7
Slutsatser
Slutsatserna som kan dras från studien blir att system som utvecklas med hjälp av ett ramverk
får en projektspecifik kodbas som blir mindre komplex än kodbasen hos ett motsvarande
projekt utvecklat utan ramverk. Det bidrar till kod som har en högre underhållbarhet.
Huruvida den totala underhållbarheten påverkas positivt eller negativt är det svårt att göra
ett generellt uttalande om. Det beror på hur enkelt en utvecklare som inte är bekant med det
använda ramverket kan tillgodogöra sig tillräcklig kunskap för att kunna utföra underhåll
på ett tillfredsställande sätt. Om det endast är mindre korrigeringar som ska utföras kan
ansträngningen som krävs för att lära sig ett ramverk bli oproportionerligt stor relativt förändringarna som ska utföras. Handlar det däremot om långsiktigt underhåll och eventuell
vidareutveckling lönar det sig att använda ett ramverk då det i det långa loppet är till fördel
för framtida utvecklare. Detta eftersom ramverken ger en komplexitetsmässigt enklare kodbas att arbeta med, och tiden det tar att lära sig ramverket blir liten i förhållande till den tid
som spenderas på utveckling.
Gällande Knekt dras slutsatsen att ett ramverks påverkan på dess underhållbarhet till sist
beror på vilken typ av vidareutveckling som utförs av kunden i framtiden. Handlar det om
mindre underhållsarbete för att hålla systemet i funktionellt skick är valet att inte använda ett
ramverk fördelaktigt. Om däremot omfattande funktionalitet läggs till kan det vara så att ett
ramverk hade förenklat det framtida arbetet, dock med en existerande risk att det ramverk
som valts idag inte underhålls längre fram i tiden då dessa omfattande tillägg blir aktuella.
37
B Kimberley French: Värdet av en
prototyp
B.1
Inledning
Hur går man tillväga vid utformningen av ett nytt grafiskt användargränssnitt? På vilket
sätt underlättar en prototyp för utvecklingsarbetet och är det värt den tidsinvestering som
krävs? Denna rapport utforskar vilken betydelse prototypning har i framtagandet av ett
mjukvarusystem.
B.1.1
Syfte
Syftet med arbetet är att undersöka vilka för- och nackdelar det finns med att göra en prototyp i samband med utvecklingen av ett mjukvarusystem. Rapporten behandlar de faktorer
som har framträtt för denna projektgrupp och andra projektgrupper i kursen TDDD96 Kandidatprojekt i programvaruutveckling. Även de processer som kan användas för att arbeta
fram en prototyp presenteras i korthet.
B.1.2
Frågeställning
Rapporten behandlar frågeställningarna nedan.
1. Vad finns det för värde i att ta fram en prototyp?
2. Vilka nackdelar finns det med att arbeta med prototyper?
3. Vilka processer är lämpliga att använda i framtagandet av en prototyp för mjukvarusystem?
B.2
Bakgrund
I och med utvecklingen av ett nytt webbaserat system måste ett grafiskt gränssnitt utformas. Gränssnittet är systemets interagerbara representation som används för att kunna ta
del av dess funktionalitet. Därför är det viktigt att systemet är användbart för sin målgrupp
och simpelt att lära sig. Till hjälp i beslutstagandet görs ibland prototyper, detta för att utforska olika alternativ och få en bild av vad slutresultatet kan bli. Prototyper används ofta
till användartester och för tidiga demonstrationer för kund. De underlättar även vid utvecklingen av systemet. Det finns dock en risk att prototyputvecklingen kräver mycket tid och
att kostnaden för den färdiga prototypen är högre än nyttan den bidrar med [38]. Rapporten
38
B.3. Teori
undersöker om så har varit fallet för projektgrupper i kursen TDDD96 Kandidatprojekt i programvaruutveckling.
B.3
Teori
Detta kapitel beskriver vad en prototyp är och benämner några olika klasser av prototyper.
Processen för hur ett interaktivt system kan arbetas fram behandlas också, där olika faser
beskriver arbetet från idé till färdig produkt.
B.3.1
Prototyper
En prototyp är ett till synes fungerande system eller delsystem där endast ett begränsat antal
funktioner är implementerade. Prototypen används för att testa de designbeslut som tagits
vilket i sin tur avgör ifall vissa delar bör omarbetas innan implementering av systemet sker.
Eftersom prototypen inte är tänkt att vara ett färdigt, fungerande system kan man simulera
de delar som inte kan eller behöver byggas i detta skede – så länge systemet upplevs vara
färdigt på ytan kan variabler och sökresultat vara hårdkodade. [5]
Beroende på vad syftet med prototypen är kan den utformas på olika sätt. Nedan följer en
kort beskrivning av olika klasser av prototyper enligt Floyd [38]:
• Utforskande prototypning används för att förtydliga systemkraven och diskutera alternativa lösningar.
• Experimentell prototypning presenterar en lösning på ett känt problem och används
för att testa funktionaliteten av denna lösning.
• Evolutionär prototypning innebär att utforma prototypen i flera steg där varje version
anpassas efter de krav som uppstår allt eftersom utvecklingen sker.
Till skillnad från den evolutionära typen, kastar man ofta bort utforskande och experimentella prototyper efter att de byggts och testats. Denna typ av prototyper brukar refereras till som temporära. Tanken bakom en temporär prototyp är att de skall göras billiga och
utan större ansträngning så att de idéer som testas är enkla att kassera om det skulle visa sig
att de inte var bra. Evolutionära prototyper används ofta i projekt med agila arbetsmetoder,
exempelvis Scrum [1], där varje version utvecklas under de så kallade sprintarna. [5]
B.3.2
Designprocessen hos ett interaktivt system
Enligt Arvola [5] består designarbetet av en produkt från idé till färdigt system av tre faser.
Dessa faser är konceptfasen, bearbetningsfasen och detaljeringsfasen. De processer som sker
i varje fas beskrivs nedan.
Konceptfasen innefattar identifiering av systemets tänkta användning och generering av
koncept. Genom att identifiera hur produkten eller tjänsten är tänkt att användas – i vilket
sammanhang, av vem, varför den behövs – kan man sätta upp mål och krav för produkten
och projektet. När de övergripande avsikterna har fått klarhet kan olika koncept börja arbetas
fram. För att konkretisera sina idéer finns ett antal frågor man bör ställa sig: vad konceptet är
för något, varför användaren vill ha och använda det och hur det ska vara.
Bearbetningsfasen utformar gränssnittet och alternativa lösningar på problem tas fram
och värderas. Från det koncept som valts struktureras de funktioner upp som produkten eller tjänsten ska ha samtidigt som frågan hur interaktion med användaren ska gå till
39
B.4. Metod
besvaras. Gränssnittsskisser ritas upp som innehåller information om funktioner samt systemets innehåll och struktur. När gränssnittsskissningen är klar blir nästa steg att göra en
interaktiv prototyp. Prototypen är det verktyg med vilket systemets användbarhet kan testas
mot tänkta användare. Utifrån de brister och styrkor prototypen har kan sedan omstruktureringar och förbättringar göras innan man går vidare till den tredje fasen i designarbetet.
Detaljeringsfasen fokuserar på att förfina det tidigare arbetet och gränssnittet bestäms nu
på detaljnivå. Det blir viktigt att tänka på vilken grafisk profil systemet är tänkt att ha, det
vill säga vilken känsla som ska förmedlas och de associationer användaren ska få av systemet.
När alla designbeslut är klara är det dags att lämna över sitt arbete för implementering, där
det oftast bara uppstår mindre ändringar av den grafiska designen innan den blir en färdig
produkt.
B.4
Metod
Kapitlet beskriver de metoder med vilka författaren har gått till väga för att besvara frågeställningarna i avsnitt B.1.2.
B.4.1
Litteraturstudie
Under första läsperioden av vårterminen 2016 samlästes denna projektkurs med en kurs
inom interaktiva system. Innehållet i den senare kursen har bidragit till mycket av kunskapen i detta arbete. Kurslitteraturen skrevs av examinatorn, Mattias Arvola, vilken
användes flitigt i arbetet med denna rapport.
Utöver detta gjordes Google-sökningar på “Prototype” och “Prototyping”. Sökprocessen
ledde till en artikel skriven av C. Floyd vilken definierar uttryck och processer som förekommer i prototyputveckling och hur de är tänkta att användas.
B.4.2
Undersökning
För att kunna besvara frågan om hur värdefull en prototyp är för utvecklingen av mjukvara
utfördes en undersökning med medlemmarna i denna projektgrupp samt andra projektgrupper som också använt sig av prototyper i sitt kandidatarbete. Undersökningen gick ut på att
svara på ett antal frågor kring hur prototypen använts, dels av varje enskild gruppmedlem
och dels av gruppen som helhet. Syftet med undersökningen var att avgöra huruvida prototyputvecklingen för de olika projektgrupperna underlättade för den fortsatta utvecklingen
samt om gruppmedlemmarna ansåg att den tid som investerats i prototyputvecklingen varit
lönsam för projektet som helhet.
Frågorna skickades ut i form av en online-enkät till de olika projektgrupperna. De frågor som
ställdes presenteras i bilaga 4.
B.5
Resultat
Enkäten skickades ut via mail till alla projektgruppers teamleader, som sedan vidarebefordrade denna till sina projektmedlemmar i de fall en prototyp hade använts. Totalt svarade
24 personer från 5 olika grupper. I bilaga 4 presenteras en sammanställning av svaren
från de tre grupper som hade flest deltagare i undersökningen. Figur B.1 visar fördelningen över det antal timmar respektive grupp uppskattat att de investerat i prototyputveckling.
40
B.5. Resultat
(a) Tidsåtgång grupp A
(b) Tidsåtgång grupp B
(c) Tidsåtgång grupp C
Figur B.1: Deltagarnas uppskattning över den totala mängd tid, i timmar, som lagts ner på prototypningsarbete
inom tillhörande projektgrupp.
Nedan presenteras några av de erfarenheter dessa grupper haft med respektive prototyp.
Fler erfarenheter återfinns i bilaga 4.
Fördelar med prototypen
• Kunde blicka tillbaka på vid implementering.
• Prototypen fungerade som guide för resterande i gruppen.
• Kunnat visa kund och få feedback, vilket gör att utvecklingsarbetet känns mer legitimt
och kundförankrat.
• Hela gruppen fick en tydlig bild och mål – blir lättare att arbeta.
• Tid slösades inte på onödig funktionalitet.
• Snabbt och enkelt att ändra efter kundens behag och resultaten från användartester.
• Uppmuntrade till utveckling.
• Kunde återanvända idéer därifrån.
Nackdelar med prototypen
• Prototypens funktionalitet var inte så bra.
• Handlingsinviter behandlades inte i prototyperna.
• Prototyparbetet kan ha försenat upprättandet av ett kodskelett.
• Mycket av designen bestämdes utifrån vad som ansågs möjligt att koda.
• Tvister i implementation och utformning.
• Tar mycket tid att göra en separat prototyp, särskilt i ett tidsbegränsat projekt.
• Ogenomtänkt struktur.
Grupperna gjorde sin prototyp på dator där grupp B och C arbetat med evolutionär prototypning. Grupp A var något oense där 25 % ansåg att prototypen var av evolutionär typ och
75 % istället tyckte att den var temporär. Genom att titta på de avsikter som dessa grupper
haft med prototypen kan kopplingar göras till de klasser som nämns i stycke B.3.1. Både
utforskande och experiementell prototypning har använts efter gruppernas behov. Nedan
presenteras några avsikter från sammanställningen.
41
B.6. Diskussion
Avsikt med prototypen
• Skapa en gemensam bild av produkten och ge gruppen ett mål.
• Utforska flera alternativ.
• Ta reda på hur/vilka funktioner som skulle med.
• Ta fram ett tilltalande GUI.
• Samla kunskap.
• Lära sig verktygen.
• Ta reda på vad kunden vill ha och få snabb feedback.
Samtliga projektgrupper hade tillsatt en mindre grupp att ansvara för prototyputvecklingen.
Inom de tre projektgrupper som ingick i sammanställningen tyckte minst 50 % från varje
grupp att prototypen underlättade tillräckligt för att vara värt den tidsinvestering prototyparbetet innebar. Endast 12,5 % från en av grupperna ansåg att arbetet inte direkt har varit
lönsamt. Fördelningen hos de olika grupperna presenteras i figur B.2.
Figur B.2: Projektgruppernas inställning till den tid som investerats i prototyputvecklingen.
B.6
Diskussion
Detta kapitel för en diskussion kring resultatet av undersökningen, eventuella brister hos den
enkät som låg till grund samt den teori som presenterats i rapporten.
B.6.1
Resultat
För att få en representativ bild av olika gruppers erfarenhet av att arbeta med prototyper
krävdes deltagande från flera personer inom samma projektgrupp. Detta för att få klarhet
i vad för prototyp som gjorts, hur den har använts och på vilket sätt den påverkat olika
projektmedlemmar. Alla projektgrupper bestod av 8–10 medlemmar totalt men deltagandet
var ofta mindre än hälften. Därför togs beslutet att endast de tre projektgrupper som haft
flest deltagare skulle inkluderas i resultatet och sammanställningen.
Ur svaren på enkäten framgår att projektgrupperna tillsatte en mindre grupp som ansvariga
för prototyputvecklingen. De projektmedlemmar som inte själva ingick i denna grupp hade
troligtvis en annan uppfattning, i jämförelse med de som varit involverade, om vad arbetet
42
B.7. Slutsatser
innebar och hur lång tid det tog. Vid en blick på fråga 2: Hur många timmar har lagts ner på
prototypningsarbete? har svaren inom samtliga grupper varit väldigt spridda (se figur B.1).
Grupp A var jämnt fördelade i intervallet 10–150 timmar. Inom grupp B verkar hälften av
deltagarna vara överens om att tidsåtgången var 200 timmar, medan andra hälften trodde
5–10 timmar. Spridningen inom grupp C var dock mindre och de uppskattade 20–60 timmar.
Som framgår av figur B.2 ansåg en överväldigande majoritet av gruppmedlemmarna att
tidsinvesteringen varit givande för utvecklingen. Eftersom deltagarantalet från vissa av
grupperna var lågt kan man även fundera över hur de som inte deltagit i undersökning hade
svarat. Det som enligt figuren ser väldigt positivt ut kan snabbt få ett mer negativt utslag
med endast ett par deltagare extra. Med hänsyn till det resultat som presenterats kan dock
slutsatsen dras att prototypens fördelar vägde upp för de nackdelar som uppmärksammats.
B.6.2
Metod
Frågorna i enkäten skrevs med en temporär prototyp i åtanke, eftersom det var den sorts
prototyp som användes i detta projekt. Det har medfört att vissa frågor inte direkt är applicerbara för de grupper som arbetat med evolutionära prototyper. En stor del av de svar
som samlats in är från grupper som arbetat med just evolutionär utveckling, där alltså “prototypen” de evaluerat i själva verket var en tidig version av slutprodukten. Detta innebär att
vissa av svaren inte kan ses som representativa då de beror på deltagarens egen tolkning av
frågan.
B.6.3
Teori
Mycket av den kunskap som hämtats in kommer från samma källa. Det gör att teorin lätt kan
bli ensidig och vinklad efter källförfattarens egna rekommendationer. Den artikel som också
användes i rapporten är från 1984 och därför bör det ifrågasättas hur mycket av innehållet
som gäller än idag. Man kan tänka sig att mycket har hänt inom prototypning i och med den
tekniska utveckling som skett sedan 1980-talet och framtagandet av nya hjälpverktyg inom
prototyputveckling.
Den process för framtagningen av gränssnittsdesign som presenteras i avsnitt B.3.2 är främst
anpassad efter temporära prototyper. Det är alltså inte säkert att denna metod lämpar sig
särskilt bra för projekt som arbetar med evolutionär utveckling.
B.7
Slutsatser
Från denna studie kan ett antal slutsatser dras gällande prototyputveckling inom projektgrupper i kursen TDDD96 Kandidatprojekt i programvaruutveckling. Detta avsnitt har för
avsikt att i korthet besvara den frågeställning som presenterades i rapportens inledning.
Fördelarna med att ta fram en prototyp kan tänkas vara många. Från undersökningen syns
tydligt att prototyper har använts för att undersöka olika alternativ och ge projektgruppen ett
gemensamt mål att arbeta mot. De har dessutom varit till hjälp med att konkretisera kundens
önskemål och tidigt kunna få återkoppling på de förslag som tagits fram. En överväldigande
majoritet av deltagarna ansåg att den tid som investerades i prototyputvecklingen var givande för utvecklingen av projektet.
De nackdelar som kommit fram i och med undersökningen har främst varit relaterade till
den tidsinvestering som en bra prototyp ofta kräver. Deltagarna nämnde bristande funktionalitet, dåligt skriven kod och att det tar mycket tid att göra en separat prototyp. Utöver detta
påpekade en grupp att de alternativ som utforskades var ganska snarlika och att nya idéer
43
B.7. Slutsatser
kan ha gått förlorade eftersom alla inte var inblandade i prototyputvecklingen. Ytterligare
upplevde man att gränssnittsdesignen begränsades utifrån det som ansågs vara möjligt att
implementera.
Utifrån enkätsvaren framgår att samtliga projektgrupper tillsatte en mindre grupp som
ansvariga för prototyputvecklingen. I två av tre fall har en prototyp av evolutionär typ
använts, där alltså produkten har utformats i flera steg och “prototypen” som utvärderats
avser en tidig version av slutprodukten. Vidare var avsikten att utforska flera alternativ och
förtyliga kundens önskemål vilket pekar på utforskande prototypning. Den process som kan
användas i utformningen av ett användargränssnitt tas upp i avsnitt B.3.2. Av de tre faser
som där nämns – konceptfas, bearbetningsfas och detaljeringsfas – är det de två första som
innefattar prototyputveckling. Det är värt att nämna att det inte framgår från undersökningen vilka steg i processen som faktiskt har genomförts hos de projektgrupper som deltog. De
olika stegen och faserna kan således anpassas efter gruppens behov.
44
C Rebecka Geijer Michaeli: Daily
Scrum virtuellt via textbaserat
verktyg
C.1
Inledning
Under projektet har gruppen tillämpat en modifierad variant av arbetsmetoden Scrum [1]. En
modifikation som gjorts är sättet på vilket daily Scrum-mötena har gått till, se 4.3.1. Denna
undersökning handlar om dessa daily Scrum-möten, hur de har gått till och vilka erfarenheter
som kan tas med till framtida projekt. Undersökningen behandlar även vad det finns för
litteratur att ta del av om virtuella, textbaserade daily Scrum-möten.
C.1.1
Syfte
Syftet med den här undersökningen är att sammanställa teori som finns att hitta om virtuella,
textbaserade daily Scrum-möten, samt sammanställa erfarenheter från en projektgrupp som
tillämpat Scrum med virtuella, textbaserade daily Scrum-möten.
C.1.2
Frågeställning
Följande frågeställningar har legat till grund för denna undersökning:
1. Vad finns det för teori att inhämta som kan vara till hjälp vid utvärderandet av daily
Scrum-möten genomförda virtuellt via ett textbaserat verktyg?
2. Vilka erfarenheter kan inhämtas från ett projekt om nio personer som tillämpat Scrum
där daily Scrum-möten hållits virtuellt tre gånger i veckan via ett textbaserat verktyg?
C.2
Bakgrund
Som det beskrivs i 4.3.1 har gruppen haft daily Scrum-möten tre gånger i veckan istället för
varje dag. Trots det kommer mötena refereras till som daily Scrum-möten genomgående i
undersökningen. Dessa möten har hållits via kommunikationsverktyget Slack [18], de var
alltså virtuella. Slack ger ingen möjlighet till video- eller telefonkonferenser, utan är helt
textbaserat. Detta har lett till att gruppens daily Scrum-möten skett helt textbaserat.
För att få en enhetlig form på gruppmedlemmarnas daily Scrum-svar har Slack-tillägget geekbot [39] använts. Varje mötesdag skickade geekbot de olika daily Scrum-frågorna till var och
en av gruppmedlemmarna via privatchatt. Gruppmedlemmarna fick sedan svara till geekbot, och avslutningsvis postade geekbot en sammanställning per gruppmedlem i en specifik
Slack-kanal som var dedikerad för ändamålet.
45
C.3. Teori
C.3
Teori
I det här stycket presenteras först teori om daily Scrum-möten i två stycken, följt av ett stycke
om möten som hålls vitruellt, och till sist ett stycke om Media Richness Theory.
C.3.1
Daily Scrum
I 3.5.1 beskrivs hur daily Scrum-möten går till. Tanken med att teammedlemmarna står upp
under mötet är att förhindra att de drar ut på tiden, då det för de flesta är obekvämt att stå upp
längre stunder. En effekt av utformningen av daily Scrum-frågorna, där teammedlemmarna
i början av varje dag får berätta för sina kollegor vad de kommer jobba med under dagen, är
att det ger en ansvarskänsla inför resten av teamet att göra framsteg på det man sagt att man
ska jobba med [40].
C.3.2
Direktkontakt från daily Scrum
En stor del i Scrum är den direkta kontakten mellan teammedlemmar. Direkt kommunikation
tros bidra till effektivitet och samarbete i team [41]. Ett forum för sådan direkt kommunikation är daily Scrum-möten, där gruppmedlemmar får en uppfattning om varandras problem
och direkt kan diskutera lösningar och liknande problem som uppstått.
C.3.3
Virtuella möten
Att delta virtuellt i ett möte ger inte samma känsla av deltagande som att närvara fysiskt. Mer
direktkontakt ger mer direktkommunikation mellan teammedlemmar [42], [43]. Virtuella
möten är praktiskt för de som av olika anledningar inte kan närvara fysiskt.
C.3.4
Media Richness Theory
Media Richness Theory lades fram 1986 av Richard L. Daft och Robert H. Lengel. Den
beskriver hur rikhet kan användas för att jämföra olika kommunikationsmedier. Rikhet
avser här ett värde på ett kommunikationsmedies förmåga att förmedla information. I
information som skickas över ett medie innefattas även implicit kommunikation såsom
kroppsspråk och tonfall. Till exempel videochatt har högre rikhet än e-mail. [44]
Till ärenden som kräver hög social närvaro, till exempel känsliga ämnen såsom avskedanden
och konfliktmedling, behövs ett rikt medie.
För ärenden som inte kräver någon social närvaro, till exempel att bekräfta en bokning, behövs inte ett rikt medie utan e-mail räcker gott.
C.4
Metod
Teori har insamlats genom att läsa artiklar och annan litteratur. För att hitta sagda artiklar
har sökningar gjorts på orden “daily scrum”, “distributed”, “virtual” och “meeting” i olika
konstellationer.
För att samla ihop erfarenheter har en enkät skickats ut till samtliga gruppmedlemmar.
Enkäten innehöll följande fritextfrågor:
• Vad tycker du om att vi har haft daily Scrum-möten varannan dag istället för varje dag?
• Vad tycker du om att vi hållit daily Scrum-mötena virtuellt?
• Hur tycker du Slack och geekbot har fungerat för att sköta daily Scrum-mötena?
46
C.5. Resultat
• Finns det något i vår variant av daily Scrum som du tror hade fungerat bättre på något
annat sätt? Om ja, hur då?
Ingen av frågorna var obligatorisk att svara på.
C.5
Resultat
Enkäten besvarades av sex gruppmedlemmar. En fullständig sammanställning av svaren
finns i bilaga 7. Här följer kortare sammanfattningar av de svar som kom in, indelat efter
enkätens fyra frågor.
Vad tycker du om att vi har haft daily Scrum-möten varannan dag istället för varje dag?
Alla de som svarade är överens om att daily Scrum-möten varannan dag har varit lagom,
med flera kommentarer om att möten varje dag hade varit för ofta.
Vad tycker du om att vi hållit daily Scrum-mötena virtuellt?
Av de som svarat anser alla att det varit praktiskt att daily Scrum-mötena hållits virtuellt,
istället för att behöva få ihop ett kort möte med hela gruppen tre gånger i veckan. Hälften
av de svarande tar upp det negativa i att inte träffa övriga gruppmedlemmar ansikte mot
ansikte, och att de saknat de diskussioner som ofta uppstår i samband med möten.
Hur tycker du Slack och geekbot har fungerat för att sköta daily Scrum-mötena?
Alla som svarat anser att Slack och geekbot har fungerat bra för att hantera daily Scrummötena.
Finns det något i vår variant av daily Scrum som du tror hade fungerat bättre på något
annat sätt? Om ja, hur då?
Tre förslag på möjliga förbättringar kom in från de som svarade på rapporten. Ett var att det
borde gå att se vilka som ännu inte besvarat sin daily Scrum, ett annat att det vore praktiskt
att kunna se en sammanställning av alla sina svar, och det tredje en önskan om att alla till
varje daily Scrum skickat en selfie ihop med sina svar.
C.6
Diskussion
Här diskuteras de virtuella, textbaserade daily Scrum-möten som tillämpats utifrån teorin
som inhämtats. Efter det följer diskussion kring resultaten som kommit från enkäten, och
slutligen ett kort stycke diskussion kring metoden som tillämpats i undersökningen.
C.6.1
Teori
I teorin framgår att flera av fördelarna med daily Scrum-möten går förlorade om inte
teammedlemmarna träffas fysiskt för sina möten. De spontana diskussionerna uteblir, likaså
möjligheten att snabbt ta upp mindre frågor. Att ersätta daily Scrum-möten med videokonferenser ger inte samma effekt, då det är just närheten och möjligheten till oplanerade samtal
som är nyckeln.
Det medie som använts för daily Scrum är lågt i rikhet, vilket har lett till att en del former av
kommunikation inte har gått att förmedla. En annan fördel med face-to-face-möten som går
förlorad är relationsbyggande mellan gruppmedlemmarna.
47
C.7. Slutsatser
C.6.2
Resultat
Här diskuteras de svar som kommit in, indelade efter de fyra frågor som ställdes i enkäten.
Vad tycker du om att vi har haft daily Scrum-möten varannan dag istället för varje dag?
Det är väldigt tydligt att alla som besvarade enkäten är eniga om att daily Scrum varannan
dag istället för varje dag har varit alldeles lagom. Varje dag hade varit för ofta då ingen
jobbade heltid med projektet, och därmed inte säkert jobbat med det varje dag. Det stämmer
bra överens med motiveringen bakom att bara ha daily Scrum varannan dag, vilken var att
projektet gick på halvtid.
Vad tycker du om att vi hållit daily Scrum-mötena virtuellt?
Både nackdelar och fördelar träder fram. Flera svaranden nämner det smidiga i att inte behöva tid och plats för alla att samlas. Det är också flera som pekar på det tråkiga i att inte ses,
och att de har saknat de fria diskussioner som ofta uppstår i samband med möten.
Hur tycker du Slack och geekbot har fungerat för att sköta daily Scrum-mötena?
Här är de svarande enkom positiva. Slack ihop med geekbot har fungerat utmärkt för att
organisera virtuella textbaserade daily Scrum-möten.
Finns det något i vår variant av daily Scrum som du tror hade fungerat bättre på något
annat sätt? Om ja, hur då?
En svarande påpekar att det inte tydligt framgår vilka som inte svarat. Där har virtuella
textbaserade daily Scrum-möten en klar nackdel gentemot den klassiska varianten. En annan
svarande saknar selfies, vilket kan tolkas som en önskan att få träffa de andra i gruppen. Det
framgår även att ett par av de svarande nog föredrar den klassika formen av daily Scrum.
C.6.3
Metod
Alla i gruppen hade inte svarat vid sammanställningen, vilket sannolikt beror på att enkäten
skickades ut för sent.
C.7
Slutsatser
Utifrån resultatet och teorin kan vissa slutsatser dras.
Utifrån den teori som sammanställts kan slutsatsen dras att virtuella, textbaserade daily
Scrum-möten saknar vissa av de positiva effekter som kommer av den klassiska formen
på daily Scrum-möten, framförallt direktkontakten mellan teammedlemmar. Vidare kan
sägas att daily Scrum-möten gör sig bäst i sin ursprungliga form, och att det ska till starka
incitament för att övergå till en virtuell variant.
Följande erfarenheter kan vara av intresse för framtida projekt:
• Även då strukturen kring virtuella textbaserade daily Scrum-möten är felfri, föredrar
flera att ha dem på klassiska viset ändå.
• Anpassa frekvensen på daily Scrum-möten efter hur mycket tid de inblandade lägger
på projektet.
48
D Eric Henziger: En utvärdering av
parprogrammering och
kodgranskning
D.1
Inledning
Under utvecklingen av systemet användes både parprogrammering och kodgranskning.
Metoderna hade för syfte att höja kvaliteten på produkten genom att upptäcka och åtgärda
buggar och andra felaktigheter i koden tidigt från det att koden skrivits. En ytterligare konsekvens är att metoderna kräver interaktion mellan utvecklarna vilket påverkar samarbetet i
gruppen.
D.1.1
Syfte
Syftet med den här rapporten är att lyfta fram för- och nackdelar med parprogrammering och
kodgranskning. Tidigare jämförelsestudier mellan parprogrammering och kodgranskning
har gjorts av Müller [45] där två grupper fick utföra samma uppgift och där den ena gruppen
bestod av programmerande par och den andra gruppen bestod av en självständig programmerare vars kod granskades för att sedan korrigeras. Min rapport undersöker effekterna
av att använda parprogrammering under utvecklingen av ett mjukvaruprojekt för att sedan
även låta koden genomgå en granskningsprocess. Dessutom läggs fokus på hur metoderna
påverkar samarbetet i en nyskapad projektgrupp utan tidigare erfarenhet av webbutveckling.
D.1.2
Frågeställning
Jag ämnar besvara följande frågeställningar:
1. Finns det ett värde i att granska parprogrammerad kod?
2. Vilka styrkor och svagheter finns med respektive metod?
3. Vilken påverkan har metoderna för samarbetet inom projektgruppen?
D.2
Bakgrund
Vår projektgrupp bestod av nio civilingenjörsstudenter inom antingen datateknik eller
mjukvaruteknik. Samtliga hade god allmän programmeringsvana men ingen hade någon
tidigare nämnvärd erfarenhet av webbutveckling. Under projektets förstudie beslutades att
utvecklingen skulle om möjligt ske genom parprogrammering. Gruppmedlemmarna hade
erfarenhet av parprogrammering från tidigare kurser på universitetet och någon formell
49
D.3. Teori
introduktion till hur metoden skulle appliceras krävdes inte.
Vidare beslutades att all skriven kod skulle genomgå granskning och godkännas innan den
kunde integreras med slutprodukten. De flesta i gruppen saknade tidigare erfarenhet av kodgranskning och ett flertal diskussioner krävdes för att nå konsensus i hur granskningsprocessen skulle se ut.
D.3
Teori
I en studie av Cockburn och Williams [46] diskuteras kostnaden av parprogrammering,
vilken enligt kritikerna fördubblas då den kräver två programmerare för att utföra en
ensam programmerares arbete. Studien visade dock att parprogrammering har många positiva effekter på utvecklingsprocessen samtidigt som kostnaden är förhållandevis låg. Den
marginella ökningen av utvecklingskostnaden på 15 % vid parprogrammering kompenserades av att buggar upptäcktes tidigt i utvecklingsfasen, att färre rader kod skrevs för att
utföra samma uppgift och att majoriteten av utvecklarna kände större uppskattning för sitt
arbete vid parprogrammering jämfört med soloprogrammering.
I Müllers [45] jämförelsestudie framgick att parprogrammering inte gav kod av högre kvalitet
jämfört med soloprogrammerad kod som genomgått granskning. Samtidigt var den ökade
kostnaden hos parprogrammering inte av signifikant storlek.
D.4
Metod
Hur gruppen tillämpat parprogrammering och kodgranskning beskrivs i avsnitt 4.5.1 respektive 4.5.2. Undersökningen bestod av två delar, en analys av projektets gransknings-commits
och en enkät om parprogrammering och kodgranskning.
D.4.1
Analys av gransknings-commits
För utvärderingen av kodgranskningen har en undersökning av projektets granskningscommits gjorts. Antalet “FIXME”-kommentarer har beräknats per feature och kategoriserats
för att belysa vilken typ av fel som fångats med kodgranskning. De sju kategorierna som
användes exemplifieras i kodexempel D.1 till D.7.
Kodexempel D.1: Exempel på feedback gällande kommentering.
* An object where the keys are the letters that we wish to count.
* The value will be set to the frequency of the letter.
* FIXME: Rephrase to ’The value _of the key_ will be set to the _count_ of
* the letter.’
*/
Feedback gällande kommentarer gavs då kommenteringen var otydlig eller otillräcklig.
Granskaren verifierade att kommentarerna överensstämde med koden, att kodens syfte gick
att förstå utifrån kommentering och att den följde formatet för JSDoc.
Kodexempel D.2: Exempel på ett refaktoreringsförslag.
document.body.addEventListener(’fileChange’, function(e) {
/* FIXME: This function is similar to plotGraphs()
* perhaps functionality can be extracted into a common function?
*/
50
D.5. Resultat
Feedback om refaktorering var ofta just förslag som gavs för att sprida och väcka tankar om
hur koden kunde förbättras.
Kodexempel D.3: Exempel på ett JavaScript-relaterat fel.
// FIXME: Don’t use ’’ around object keys.
var fileChangeEvent = new CustomEvent(’fileChange’, {’detail’: data});
Kategorin JavaScript fångade upp fel relaterade till stil och syntax för JavaScript men som
var så pass generella att de inte föll inom kategorierna kodstandard eller arkitektur.
Kodexempel D.4: Exempel på feedback gällande kodstandard.
//FIXME: Use camelCase for function names.
function expand_collapse_graph(graph)
Feedback inom kategoring kodstandard gavs vid brott mot de kodstandarder som användes
i projektet. Vilka dessa var redovisas i 5.3.
Kodexempel D.5: Exempel på ett arkitekturellt fel.
<body>
<!--FIXME: Put all style settings in CSS files. -->
<div id="crypto-graph-container" style="width:800px; height:400px;"></div>
Feedback om arkitekturella fel påvisades då koden stred mot den arkitekturplan som framtagits för projektet.
Kodexempel D.6: Exempel på ett presentationsfel.
{
trigramText: "TER", frequency: 0.70 //FIXME: displays as "0.7" in the table
}
Till kategorin presentationsfel hörde kod som inte hade något fel i sig självt, men som ledde
till fel i presentationen av slutprodukten under användning.
Kodexempel D.7: Exempel på ett semantiskt fel.
else if (language === "en") {
plotLanguageGraph(english_stats, english_graph_data);
if (typeof crypto_text != "undefined") {
/* FIXME: Wrong language, use getText[...]Eng() */
crypto_stats = getTextLetterFrequencySwe(crypto_text);
Kategorin semantiska fel rörde kod som var syntaktiskt korrekt enligt alla regler men som
gav fel beteende i produkten.
D.4.2
Enkätundersökning
För att samla in gruppmedlemmarnas åsikter och tankar om parprogrammering och kodgranskning utfördes en anonym enkätundersökning där varje gruppmedlem, mig exkluderad, fick besvara ett antal frågor. Enkäten redovisas i bilagedel 5.1.
D.5
Resultat
Detta avsnitt redovisar resultatet av de undersökningar som presenterades i metoddelen.
51
D.5. Resultat
Semantiska fel
5
Presentationsfel
5
Arkitekturella fel
6
JavaScript
9
Kommentering
19
Kodstandard
20
Refaktoreringsförslag
42
0
10
20
30
40
Antal förekomster
Figur D.1: Sammanställning av feedback från projektets samtliga granskningar.
D.5.1
Analys av gransknings-commits
I figur D.1 visas en sammanställning över antalet förekomster av de olika kategorierna på
feedback som gavs under projektet.
I figur D.2 visas antalet kommentarer per review. En trendlinje är dragen för att ge en
uppfattning av hur utvecklingen har skett över tiden.
I figur D.3 visas hur feedback givits per commit under projektet. Varje commit är presenterad
med git commit id och datum. Medianvärdet för antalet “FIXME”-kommentarer per granskning var 5 med ett genomsnittsvärde på 4,6. Kategorierna Presentationsfel, Arkitekturella fel och
Semantiska fel har slagits samman till kategorin Övrigt.
D.5.2
Enkätundersökning
Åtta personer deltog i undersökningen. I bilagedel 5.2 redovisas svaren från enkätens
fritextfrågor. Parprogrammering hade enligt enkätresultatet många positiva effekter på
samarbetet, bland annat bidrog det till öppenhet i gruppen och att gruppmedlemmarna
lärde känna varandra bättre. De negativa effekterna var färre, men den vanligaste åsikten
var att det var problematiskt att hitta gemensamma tider då båda parter kunde arbeta. De
positiva effekterna av samarbetet från kodgranskningen var spridda men fyra svar angränsar
till ökad interaktion mellan berörda parter, bland annat att kodgranskning har lett till fler
diskussioner och bättre kommunikation.
Parprogrammering och kodgranskning anses av fyra respektive sex av de svarande ge bättre
kod. Den vanligaste nackdelen för båda metoderna var att de var tidskrävande.
52
D.5. Resultat
Antal kommentarer
●
10
●
●
●
●
●
●
5
●
●
●
●
●
●
●
●
●
●
●
●
mar 01
mar 15
●
●
apr 01
Datum
apr 15
●
maj 01
Figur D.2: Antal granskningskommentarer över tiden.
Typer av feedback
Kodstandard
Kommentering
Refaktorering
JavaScript
Övrigt
8
6
4
2
0
c9c04be
2016−02−24
879a8bc
2016−02−26
205dc6f
2016−03−03
b536a4a
2016−03−08
99bb620
2016−03−10
098e15a
2016−03−10
fa3ccee
2016−03−19
9723627
2016−03−28
67b7686
2016−04−04
e0ef284
2016−04−13
5a98aef
2016−04−13
92cbfac
2016−04−13
65f98c3
2016−04−14
37ba671
2016−04−14
8309869
2016−04−14
26a5d2b
2016−04−15
a53a437
2016−04−18
5c794a7
2016−04−22
60fd341
2016−04−22
403ddf1
2016−04−28
0ee2943
2016−05−01
df9be39
2016−05−02
7421356
2016−05−02
8
6
Antal förekomster
4
2
0
8
6
4
2
0
8
6
4
2
0
Git commit
Figur D.3: Detaljbeskrivning av feedback per commit från projektets granskningar.
53
D.5. Resultat
Metod
Parprogrammering
Kodgranskning
Antal
6
4
2
0
Mycket
negativ
Negativ
Neutral
Positiv
Mycket
positiv
Figur D.4: Gruppmedlemmarnas inställning till parprogrammering och kodgranskning.
I figur D.4 visas en fördelning över gruppmedlemmarnas inställning till parprogrammering
och kodgranskning.
I tabell D.1 visas hur stor del av gruppmedlemmarnas utvecklingstid som har ägnats åt
parprogrammering. Tabell D.2 visar hur många kodgranskningar varje gruppmedlem utfört
under projektet.
Tabell D.1: Andel utvecklingstid ägnad åt parprogrammering.
Parprogrammerad utvecklingstid (%)
0-20 %
21-40 %
41-60 %
61-80 %
81-100 %
Antal
2
2
2
1
1
Tabell D.2: Antal kodgranskningar utförda.
Antal kodgranskningar
0
1
2
3
4
5
10+
Antal
1
0
2
1
2
1
1
Figur D.5 visar vilken av metoderna parprogrammering och kodgranskning som
gruppmedlemmarna skulle välja till ett kommande projekt.
54
D.6. Diskussion
25.0%
37.5%
Metod
Parprogrammering
Kodgranskning
Vet ej/Kan inte välja
37.5%
Figur D.5: Gruppmedlemmarnas föredragna metod till ett framtida projekt.
D.6
Diskussion
Detta avsnitt diskuterar särskilt intressanta iakttagelser från resultatet och lyfter fram nackdelar med den valda metoden. Slutligen förs ett resonemang kring det här projektets metoder
för parprogrammering och kodgranskning och hur dessa skiljer sig från mer väletablerade
metoder inom mjukvaruindustrin.
D.6.1
Resultat
Analys av gransknings-commits
I sammanställningen i figur D.1 kan man se att refaktoreringsförslag är den överlägset
mest populära kategorin av feedback, mer än dubbelt så vanligt som de näst mest populära kategorierna kodstandard och kommentering. Arkitekturella fel har varit sällsynta
och gruppmedlemmarna verkar ha haft bättre koll på arkitekturen än kodstandarden. Få
semantiska fel och presentationsfel har uppmärksammats i granskningsstadiet. Detta kan
bero på att utvecklaren själv har testat koden och beteendet av produkten innan granskning
eller att granskaren haft mest fokus på själva koden och inte produkten.
I figur D.2 kan man se en antydan till en nedåtgående trend. Efter att en utvecklare har
arbetat med ett och samma projekt under en längre tid borde rutiner för kodstandard och
kommentering bli en naturlig del i arbetet. Det är dock oklart om någon sådan trend kan
ses i figur D.3. En annan förklaring till en minskning i antalet granskningskommentarer över
tiden är att de features som utvecklades blev mindre omfattande under projektets gång.
Enkätundersökning
Figur D.4 visar att majoriteten av gruppmedlemmarna är positiva till både parprogrammering och kodgranskning. Kodgranskning är marginellt mer polariserande. I resultatet
över vilken metod som är föredragen, figur D.5, är det så gott som jämnt fördelat mellan
svarsalternativen.
I bilagedel 5.2 kan flera trender ses. Generellt kan sägas att för parprogrammering fanns fler
positiva effekter och fördelar listade jämfört med negativa effekter och nackdelar. För kodgranskning var det en jämnare fördelningen mellan positiva effekter/fördelar och negativa
55
D.6. Diskussion
effekter/nackdelar.
En fördel med parprogrammering som endast nämnts av en svarande är “Bättre liv”. Även
om det är sällsynt får parprogrammering ändå ses som en metod som kan ge positiva effekter
av hög magnitud.
D.6.2
Metod
Analysen av granskningskommentarer har varit fullständigt beroende av att dessa har
dokumenterats som “FIXME”-kommentarer via Git. Denna metod fångar inte upp de fall
där feedback har skett via andra kommunikationskanaler (Slack, muntligt etc.) eller där
granskaren inte lyckats hitta några felaktigheter i koden. Den tar heller inte hänsyn till olika
granskares egenskaper, till exempel att vissa granskare tenderar att ge fler refaktoreringsförslag medan andra är mer engagerade i kommentering.
Metoden särskiljer inte granskningar som gjorts på parprogrammerad kod från granskningar
som gjorts på kod utvecklad av en ensam utvecklare.
Trots att utvecklingen i projektet skulle om möjligt ske genom parprogrammering har en stor
del av utvecklingen skett genom soloprogrammering. Om parprogrammering hade varit
ett hårt krav hade förmodligen också resultaten från enkäten förändrats. Valfriheten kan ha
gjort att gruppmedlemmarna har valt att använda parprogrammering när det passat dem
och därmed fått en mer positiv upplevelse utifrån det. Kodgranskning å andra sidan var i
princip ett krav för att en utvecklare skulle få integrera sin kod till projektets kodbas. Om
båda metoderna hade varit påtvingade hade en mer rättvis jämförelse kunnat göras.
Storleken på projektet och antalet deltagare i undersökningen hade med fördel kunnat vara
större. Med en grupp på åtta personer har enskilda individer fått en stor inverkan på upplevelsen av de två metoderna. Hade projektet pågått under en längre tid hade förmodligen
processerna förfinats och förbättrats för en mer positiv upplevlse.
D.6.3
Arbetet i ett vidare sammanhang
Parprogrammering är en metod som etablerades under början av 2000-talet och som har
dokumenterats flitigt. I McConnell [47] listas olika faktorer för att lyckas med parprogrammering. Bland annat nämns “Make sure both partners can see the monitor” vilket kan
ses som en trivial självklarhet. Denna punkt har dock relevans då parprogrammeringen
under projektet i huvudsak skedde på bärbara datorer. Dessa har generella egenskaper
som liten skärmstorlek, låg skärmupplösning och låg ljusstyrka jämfört med en separat bildskärm. Detta kan ha lett till ett mindre aktivt deltagande hos den observerande parten i paret.
Hade parprogrammeringen skett under bättre ergonomiska förhållanden hade förmodligen
också upplevelsen blivit mer behaglig.
Kodgranskning är ett utbrett koncept inom mjukvaruindustrin och används i flera större
projekt och företag. För att göra granskningsprocessen praktiskt genomförbar i stor skala har
specifika granskningsverktyg utvecklats, till exempel använder Android-projektet verktyget
Gerrit [48] och Opera Software använder verktyget Critic [49].
I det här projektet har en enkel granskningsprocess med hjälp av tillgänglig funktionalitet
i Slack, Git och WebStorm använts vilket haft fördelen av att ha en låg inlärningströskel
men där nackdelen varit brist på skalbarhet som lett till strul under granskningsprocessen. I
56
D.7. Slutsatser
enkätresultaten i bilagedel 5.2 och även i bilaga 2 kan man läsa om problem med svårigheter
att få någon att granska ens kod och om oordning i kommunikationskanalen #reviewrequest.
Att använda ett dedikerat verktyg för kodgranskning hade eventuellt gett en mer strukturerad och välorganiserad granskningsprocess och dessutom gett bättre förberedelse för hur
kodgranskning utförs i industrin.
D.7
Slutsatser
Under projektets livslängd har kodgranskning fångat upp misstag i koden och lyft fram
refaktoreringsförslag. Enkätundersökningen har inte visat att kodgranskningen setts som
ett onödigt moment efter att kod har parprogrammerats. De positiva effekterna har dels
berört kodkvalitet men också kommunikation och stämning inom gruppen. Därmed kan
man dra slutsatsen att det finns ett värde i att granska parprogrammerad kod inte enbart ur
ett kodkvalitativt perspektiv utan även för förbättringar av psykosociala förhållanden.
För en nystartad projektgrupp har parprogrammering hjälpt gruppmedlemmarna att lära
känna varandra och skapat ett öppnare och bekvämare klimat i gruppen.
Kodgranskning har triggat diskussioner och samtal vilket förbättrat kommunikationen inom
gruppen. Samtidigt upplever flera det som negativt att behöva lyfta fram kritik.
Kunskapsspridningen har underlättats av både parprogrammering och kodgranskning.
Båda metoderna har bidragit till bättre inlärning och kompetensutveckling vilket får ses som
extra positivt i ett projekt där gruppmedlemmarna saknade erfarenhet inom webbutveckling.
Den största nackdelen med parprogrammering i det här projektet har varit svårigheten i att
hitta gemensamma tider för arbetet. Kodgranskning har uppfattats som en tidskrävande
process och besvärlig då kritik kan ge obehagskänslor.
Båda metoderna har haft en positiv effekt på kodkvaliteten och har lett till högre kompetens
inom gruppen. Särskilt parprogrammering har förbättrat samarbetet och sammanhållningen
bland gruppmedlemmarna.
57
E Oscar Johansson:
Enhetstestningens påverkan på
programmeringsprocessen
E.1
Inledning
Enhetstestning används utbrett i de flesta typer av mjukvaruprojekt. I dessa projekt är det
vanligt att olika typer av testmetoder diskuteras och används. En av dessa metoder är testdriven utveckling, vilken har fått starkt fäste bland de agila utvecklingsmetoderna. Den testdrivna utvecklingens grundpelare är att testfallen för funktionalitet ska skrivas innan funktionaliteten implementeras. Denna rapport behandlar enhetstestning i ett agilt, småskaligt
projekt, och undersöker hur det påverkar beroende på när i programmeringsprocessen som
testfall skrivs.
E.1.1
Syfte
Syftet med rapporten är att undersöka hur tidpunkt för skrivande av enhetstester påverkar
programmeringsprocessen, med avseende på tidsåtgång, resultat och underlättande av lösning.
E.1.2
Frågeställning
Följande frågeställningar ska utredas i denna rapport.
1. Hur påverkas tidsåtgången för programmeringsprocessen beroende på när i processen
enhetstesterna skrivs?
2. Hur påverkas kodstrukturen beroende på när i programmeringsprocessen enhetstesterna skrivs?
3. På vilket sätt bidrar enhetstestningen till att underlätta vid problemlösning? Bidrar
olika förhållningssätt olika mycket?
E.2
Bakgrund
I kursen TDDD96 Kandidatprojekt i programvaruutveckling, på Linköpings universitet, utfördes under vårterminen 2016 ett kandidatarbete i programvaruutveckling. Projektgruppen
valde att använda sig av enhetstestning, där utvecklaren bar ansvaret att utföra testerna på
sin egen kod. Standarden för enhetstestningen beskrevs i en testplan. En av de stora utmaningarna var att utforma denna standard så att testerna var
58
E.3. Teori
• snabba på att ge feedback
• lätta att utföra samt dokumentera
• ett hjälpmedel snarare än ett tidskrävande moment.
Trots att det diskuterades när i programmeringsprocessen enhetstesterna skulle skrivas fastställdes ingen standard för detta.
E.3
Teori
Här presenteras den teoretiska bakgrund som behövs för att förstå innehållet i rapporten.
E.3.1
Enhetstestning
Enhetstestning syftar till att testa den lägsta nivån av funktionalitet. Den används som ett
verktyg i de flesta programvaruutvecklingsprojekt. Enhetstestning definieras som ett kodstycke, ofta en funktion, vilken anropar den funktion som ska testas och sedan kontrollerar
om den fungerar som den ska utifrån uppställda kriterier [50].
I kodexempel E.1 visas ett exempel på en funktion, skriven i JavaScript, som tar in två tal och
returnerar det största.
Kodexempel E.1: Exempel på en funktion som tar in två tal som parametrar och returnerar det största.
function max(x,y){
if (x > y){
return x;
} else {
return y;
}
}
I kodexempel E.2 visas ett enhetstest, skrivet med ramverket QUnit 3.3, som testar två olika
anrop till funktionen max i kodexempel E.1. Det första anropet kontrollerar om 3 returneras när parametrarna 3 och 2 används. Det andra anropet kontrollerar om 5 returneras när
parametrarna 5 och -3 används.
Kodexempel E.2: Exempel på enhetstester i testramverket QUnit som testar funktionen max.
QUnit.test("Test Cases for max()", function(){
equal(max(3,2), 3, "3 should be larger than 2");
equal(max(5,-3), 5, "5 should be larger than -3");
});
E.3.2
Testdriven utveckling
Testdriven utveckling kan definieras som en metod eller ett förhållningssätt som framför allt
förknippas med agila utvecklingsmetoder [51]. Använder man sig av testdriven utveckling
ska man endast skriva kod i syfte att få testfall godkända. Detta innebär att testfallen för
en funktionalitet måste skrivas innan en utvecklare får börja programmera [52]. Testfallen
hämtas oftast från kravspecifikationen och ska bidra till att rätt funktionalitet implementeras,
utifrån intressenternas värderingar.
Testdriven utveckling tvingar utvecklaren att förstå och konkretisera uppgifter innan denne
börjar implementera. En viktig regel är: om man inte vet hur man ska skriva tester för sin
kod, bör man inte ens fundera på att börja skriva kod [53]. Detta ska underlätta när en
utvecklare tar sig an större problem eller uppgifter.
59
E.4. Metod
Om det finns testfall för funktionalitet i en mjukvara kan detta skapa en säkerhet för en
utvecklare som ska modifiera befintlig, eller implementera ny, funktionalitet. Genom att
ständigt kontrollera att testfallen godkänns är utvecklaren säker på att dennes ändringar
eller tillägg inte förstört någon annan funktionalitet. Testfallen agerar då som ett skydd eller
en säkerhet för utvecklaren. [54]
Att skriva tester före funktionalitet har visat sig kunna minska produktiviteten hos utvecklare
som inte är vana att arbeta efter den metoden [53]. Att arbeta effektivt med metoden tar tid,
och det kan vara svårt att lära sig [54].
E.4
Metod
För att undersöka hur enhetstestning påverkar tidsåtgång, kodutformande och hjälp vid
problemlösning, beroende på vilken tidpunkt i programmeringsprocessen de skrivs, anornades en datainsamling. I datainsamlingen fick deltagarna lösa uppgifter utifrån tre olika
förhållningssätt till enhetstestning. Varje förhållningssätt motsvarar en tidpunkt i programmeringsprocessen (före, under och efter kodandet). I datainsamlingen ingick tre uppgifter,
tre förhållningssätt till enhetstestning samt en enkät med frågor gällande enhetstestning.
Datainsamlingen började med att alla deltagare tilldelades ett häfte innehållande information, uppgifter och enkät. Häftet i sin helhet redovisas i bilaga 6.
Datainsamlingen strävade efter att i största möjliga mån efterlikna problemen, utvecklingsmiljön och testramverken som användes i projektet.
E.4.1
Upplägg av datainsamling
Varje deltagare fick ett häfte innehållande information, uppgifter samt enkät. Insamlingen
började med att deltagarna fick läsa första sidan av häftet, vilken bestod av en introduktion
som gav en överblick över hur datainsamlingen skulle gå till. Sedan fick deltagarna utföra
varsin uppvärmningsuppgift. Syftet med denna uppgift var att kontrollera att testramverk
samt utvecklingsmiljö var korrekt konfigurerade.
Sedan påbörjades lösandet av uppgifterna. Till varje uppgift fanns ett förhållningssätt till
testning som deltagaren behövde använda sig av. Vilket förhållningssätt som hörde till vilken
uppgift blandades så att alla uppgifter löstes med alla olika. Det innebär att alla deltagare
löste samma tre uppgifter men med olika förhållningssätt. Efter att deltagaren var klar med
uppgifterna avslutades insamlingen med ifyllandet av en enkät.
Data som samlades in inkluderade:
• Tidsåtgång för lösandet av varje uppgift.
• Svar som deltagaren kom fram till för varje uppgift.
• Antal funktioner som deltagaren skrev till varje uppgift.
• Svaren deltagaren fyllde i enkäten.
E.4.2
Uppgifterna
Till datainsamlingen fanns tre olika uppgifter, inspirerade av olika programmeringstävlingsuppgifter. De översattes till svenska och modifierades sedan för att anpassas till storleken
och syftet med datainsamlingen.
60
E.5. Resultat
Uppgifterna som valdes krävde någon form av uträkning, där svaret var ett tal. Denna typ
av uppgift valdes eftersom de förenklar utförande av enhetstestning. Storleken på talen och
svaren valdes så att deltagaren inte behövde bekymra sig om prestanda, samtidigt som de var
tillräckligt stora för att man inte med enkelhet skulle kunna uppskatta rimligheten i svaret.
Detta valdes eftersom deltagaren då behövde använda sig av testfallen för att försäkra sig om
dennes program och svar var korrekt.
E.4.3
Enkät
Enkäten bestod av två delar, med sammanlagt åtta frågor. Den första delen behandlade enhetstestning under projektets gång och bestod av fyra frågor. Den andra delen behandlade
datainsamlingen och bestod av lika många frågor.
E.4.4
Förhållningssätt till enhetstestning
Under datainsamlingen fick deltagarna använda sig av tre olika förhållningssätt: testdriven
utveckling, testfall kontinuerligt under kodandet samt testfall efter kodandet. I praktiken
innebar detta att deltagaren skrev testfallen före, under och efter implementation. För en
djupare beskrivning av hur deltagarna skulle använda sig av förhållningssätten se bilaga 6.
E.5
Resultat
I det här kapitlet presenteras de resultat som samlades in under datainsamlingen. Datainsamlingen förklaras ingående under avsnitt E.4 och instruktionerna som deltagarna tillgodosågs
finns i sin helhet att läsa i bilaga 6.
Tabell E.1: Översikt över hur många procent av svaren som var korrekta respektive felaktiga.
Svar
Korrekt
Felaktigt
Procent
96
4
Under datainsamlingen fick varje deltagare lösa 3 olika uppgifter. Datainsamlingen hade
totalt 8 deltagare. Således insamlades 24 olika svar på uppgifter. Av dessa 24 svar var 96 %
korrekta och 4 % felaktiga, vilket presenteras i tabell E.1. I antal innebar detta 23 korrekta
svar och 1 felaktigt.
Tabell E.2: Resultat avseende tidsåtgång och
antal funktioner för de olika uppgifterna.
Tabell E.3: Resultat avseende tidsåtgång och
antal funktioner för de olika förhållningssätten.
Uppgift
Uppgift 1
Uppgift 2
Uppgift 3
Förhållningssätt
Testfall före
Testfall under
Testfall efter
Tid [min]
17
9
23
Funktioner
3
2,4
2,1
Tid [min]
15
20
12
Funktioner
3,3
2,4
1,9
I tabell E.2 presenteras den genomsnittliga tiden samt det genomsnittliga antalet funktioner
för varje uppgift. I tabellen visas att den tredje uppgiften tog längst tid, medan den andra uppgiften tog kortast tid. Gällande funktioner skrevs flest funktioner till den första
uppgiften, och minst antal funktioner till den tredje uppgiften.
Den genomsnittliga tidsåtgången samt det genomsnittliga antalet funktioner för de olika
förhållningssätten kan ses i tabell E.3. I tabellen visas att skrivande av testfall kontinuerligt
61
E.5. Resultat
under programmeringsprocessen tar längre tid än de andra förhållningssätten. Dock svarar
majoriteten av deltagarna att just detta förhållningssätt är det som har hjälpt till mest under
lösandet av uppgifterna, se tabell E.8. Att skriva testfall först i programmeringsprocessen
resulterade i flest funktioner. Att skriva testfall efter kodandet resulterade i minst antal
funktioner.
Tabell E.4: Har du använt dig av enhetstestning
under projektet?
Svarsalternativ
Ja
Nej
Antal
6
2
Procent
75
25
Tabell E.6: Vilket av de tre förhållningssätt som
använts under denna datainsamling representerar
bäst hur du har använt dig av enhetstestning
under projektet?
Svarsalternativ
Testfall före
Testfall under
Testfall efter
Antal
0
1
5
Procent
0
17
83
Tabell E.8: Uppfattade du att något
förhållningssätt till enhetstestning underlättade
vid lösning av någon uppgift? (Du kan välja flera
alternativ)
Svarsalternativ
Nej
Ja, testfall före
Ja, testfall under
Ja, testfall efter
Ja, alla förhållningsätt
Antal
0
4
7
1
0
Procent
0
33
58
8
0
Tabell E.5: Tycker du att den här datainsamlingen
är representativ för att motsvara enhetstestandet
under projektet?
Svarsalternativ
Ja
Nej
Antal
4
2
Procent
67
33
Tabell E.7: Uppskatta svårighetsgraden av
uppgifterna på en skala 1-5, där 1 är väldigt enkel
och 5 är väldigt svår.
Uppgift
Uppvärmning
Uppgift 1
Uppgift 2
Uppgift 3
Uppskattad svårighetsgrad
1
1,17
1,4
2
Tabell E.9: Uppfattade du att något
förhållningssätt till enhetstestning försvårade vid
lösning av någon uppgift? (Du kan välja flera
alternativ)
Svarsalternativ
Nej
Ja, testfall före
Ja, testfall under
Ja, testfall efter
Ja, alla förhållningsätt
Antal
5
2
0
1
0
Procent
63
25
0
12
0
Under projektet har 75 % av gruppmedlemmarna använt sig av enhetstestning, se tabell E.4.
De två medlemmar som inte har använt sig av det uppger i enkäten att detta beror på att de
endast har arbetat med sådant som inte var lämpat för enhetstestning. Av de deltagare som
hade använt sig av enhetstestning under projektet tyckte 67 % att uppgifterna från datainsamlingen var representativa, se tabell E.5. De deltagare som inte ansåg att uppgifterna var
representativa tyckte att uppgifterna var för annorlunda eller för små jämfört med problemen
i projektet, vilket framkom i enkäten.
I tabell E.6 kan man se att majoriteten av deltagarna har skrivit testfallen sist i programmeringsprocessen, alltså efter kodandet.
I enkäten fick varje deltagare uppskatta svårighetsgraden på varje uppgift, inklusive uppvärmningsuppgiften. Svårighetsgraden uppskattades till ett tal på en skala 1-5, där 1 var
väldigt enkel och 5 var väldigt svår. Den genomsnittliga uppskattade svårighetsgraden presenteras i tabell E.7. Där framkommer att den genomsnittliga uppskattningen av svårighetsgrad låg mellan 1 och 2 för samtliga uppgifter.
62
E.6. Diskussion
I tabell E.9 presenteras vilka förhållningssätt, om något, som har försvårat vid lösandet av
uppgifterna under datainsamlingen. 63 % tycker inte att något förhållningssätt har varit
försvårande. 25 % tycker att skriva testfallen först varit försvårande, och 12 % menar att
skriva testfall efter kodandet var försvårande.
E.6
Diskussion
I det här kapitlet diskuteras metod, resultat och felkällor. Samtliga diskuteras med stöd från
teorin.
Testning, framförallt testdriven utveckling, används till stor del för att försäkra utvecklaren
om att allting fungerar som det ska. Detta innebär både att koden exekverar utan buggar
samt att rätt sak har implementerats. Testfallen blir då en försäkran för utvecklare. Andra
saker som en utvecklare kan förlita sig på är rimlighet i svaren och övertygelse från koden.
Med rimlighet i svaren menas att utvecklare kan kolla på resultatet av sin funktionalitet för
att uppskatta om det känns rimligt. Med övertygelse från koden menas att koden är så pass
överskådlig, kort och simpel att utvecklaren kan, genom att läsa sin egen kod, övertyga sig
om att allting känns rätt. Som nämnt tidigare framställdes uppgifterna till datainsamlingen
så att deltagarna inte skulle kunna uppskatta rimligheten i svaren, detta för att de skulle
behöva använda sig av testfallen som försäkran. Men som kan ses i tabell E.1 var nästan alla
svar korrekta. Med hänsyn till detta och deltagarnas uppskattning av svårighetsgrad, som
kan ses i tabell E.7, var uppgifterna enkla att utföra. Av de två deltagarna som inte tycke
att datainsamlingen var representativ för projektets enhetstestning uppgav en att det beror
på att datainsamlingens uppgifter var för små. Tittar man på det genomsnittliga antalet
funktioner låg det mellan 1,9 och 3,3, något som också pekar mot ett väldigt litet program.
Deltagarna kanske kunde genom den korta och simpla koden övertyga sig om att sitt program var korrekt, och därmed eliminera behovet av testfall.
Det är inte bara uppgifternas storlek som påverkar resultaten. Det beror även på vilka deltagare man utför insamlingen på. Den utfördes på endast åtta personer och med en sådan liten
testgrupp kan individens personliga erfarenheter och kunskaper ha för stor påverkan.
Det första förhållningssättet döptes till Testdriven utveckling i instruktionerna för datainsamlingen. Med det krävdes att alla enhetstester skulle skrivas innan någon kod kunde skrivas.
Alltså att man behövde planera hela sitt program och all dess funktionalitet innan man
fick börja koda. I testdriven utveckling faller även att skriva testfall kontinuerligt under
kodandet in, vilket var datainsamlingens andra förhållningssätt. Detta innebär att testdriven
utveckling egentligen är en kombination av de första två förhållningssätten beskrivna i
datainsamlingen. Att kalla det första förhållningssättet Testdriven Utveckling kan således ha
varit en felanvändning av begrepp som kan ha skapat förvirring.
Att skriva testfall kontinuerligt under kodandet tar längst tid. Då behöver deltagaren integrera testskrivande med programmeringen. Detta var något bara en person var van med
från projektet. Detta förhållningssätt liknar till stor del testdriven utveckling och det är, som
nämnt innan, något som tar lång tid att komma in i och har visat sig minska produktiviteten
för nya utvecklare.
Att skriva testfall före kodandet tar näst längst tid. Detta var ingen deltagare van med från
projektet. Det här är till väldigt stor del testdriven utveckling med det undantaget att i
datainsamlingen behövde deltagaren planera hela sitt program och all dess funktionalitet
innan denne fick börja implementera. Man kan tänka sig att detta förhållningssätt borde ha
tagit längre tid, men kanske berodde det på att uppgifterna var för lätta och för små för att
63
E.7. Slutsatser
det skulle vara svårt att planera allt innan.
Att skriva testfall efter kodandet tar kortast tid. Detta förhållningssätt var majoriteten av
deltagare vana med från projektet. Vanan i kombination med att uppgifterna var lätta och
behovet av testfall var tveksamt bidrog antagligen till att detta tog kortast tid.
I resultaten kunde man se att skriva testfall före kodandet och att skriva testfall under
kodandet resulterar i fler funktioner än om man skriver testfallen efter kodandet. Så om
man använder något av de två förhållningssätten som påminner om testdriven utveckling,
där testfall utformar koden, resulterar detta i fler funktioner. Kanske kan det bero på att
utvecklaren måste planera och tänka efter innan denne sätter igång med utvecklandet. Men
att skriva testfall först kanske leder till att onödiga eller överflödiga funktioner skrivs. Det
kan vara svårt att planera hela sin kod innan man börjat utveckla, och utvecklaren kommer
kanske efter hand på bättre lösningar som kräver mindre kod. Det kan vara så att det är
därför som deltagarna uppger att skriva testfall under kodandet hjälpte dem mest.
Enligt deltagarna själva har förhållningsättet där utvecklaren skriver testfall kontinuerligt
under kodandet hjälpt mest under lösningen till uppgifterna. Dock så finns det inget annat resultat som varken säger för eller emot det. Detta på grund av att nästan alla svar var
korrekta.
E.7
Slutsatser
Den här delen behandlar frågeställningarna som presenterades i kapitel E.1.2.
Hur påverkas tidsåtgången för programmeringsprocessen beroende på när i processen enhetstesterna skrivs?
Att skriva testfallen efter kodandet, sist i programmeringsprocessen, tar kortast tid. Näst
kortast tid tar det att skriva testfallen före kodandet. Längst tar det att skriva testfallen
kontinuerligt under programmeringsprocessen.
Hur påverkas kodstrukturen beroende på när i programmeringsprocessen enhetstesterna
skrivs?
Att planera och skriva testfallen innan funktionalitet har visat sig i den här datainsamligen
att bidra till att fler funktioner skrivs. Att skriva testfallen sist bidrar till att färre antal funktioner skrivs.
Hur bidrar enhetstestningen till att underlätta vid problemlösning? Bidrar olika förhållningssätt till enhetstestning på olika vis?
Deltagarna tycker själva att skriva testfall kontinuerligt under kodandet har hjälpt mest.
Något annat resultat kan varken förneka eller styrka detta.
Rapporten fyllde sitt syfte i den bemärkelse att den undersökte hur tidpunkt för skrivande
av enhetstestning påverkar programmeringsprocessen, med avseende på tidsåtgång, resultat
och underlättande av lösning. Dock var omfattningen av datainsamlingen begränsad och det
fanns ett flertal felkällor som lyftes fram i diskussionen, vilket skulle kunna göra resultaten
och slutsatserna missvisande.
64
F Robert Kumpulainen: Effekten av
en branching model i ett litet
utvecklingsprojekt
F.1
Inledning
I alla mjukvaruprojekt med flera personer krävs möjlighet att sprida kod mellan olika personer. Ett exempel är vid utvecklingen av Linuxkärnan, där kod delas genom att skicka
patches på en e-postlista [55]. De centralt distribuerade modellerna är populära, till exempel
på GitHub [56], där arbetsflödet liknar de flöden som fås med centrala versionshanteringssystem som Subversion (SVN) [57]. Projekten kan internt använda greningsmodeller (eng.
branching models), som beskriver hur och när utvecklarnas ändringar integreras med andra
delar av projektets kodbas. I denna del utreds organiserandet av versionshantering i ett
småskaligt utvecklingsprojekt.
Läsaren antas ha läst kapitel 4.6.
F.1.1
Syfte
Denna del avser beskriva hur principer inom konfigurationshantering kan tillämpas för ett
mindre utvecklingsprojekt.
F.1.2
Frågeställning
1. Hur kan man organisera versionshantering i ett mindre utvecklingsprojekt?
2. Påverkar valet av greningsmodell kodkvaliteten?
3. Är antalet commit-meddelanden innehållande nyckelord som bug och error ett lämpligt
mått för behandling av fråga 2?
F.2
Bakgrund
Gruppens medlemmar hade varierande erfarenheter kring versionshantering.
En
gruppmedlem hade versionshanterat patches med hjälp av SVN för att arbeta på experimentella lösningsidéer. Den patch-baserade SVN-metoden är ett steg upp från att datumdatera en kodbas med hjälp av en manuell kopiering, men orsakar onödigt arbete vid integrering. Baserat på dessa erfarenheter föreslogs en distribuerad greningsmodell för detta
projekt, se kapitel 4.6.
65
F.3. Teori
F.3
Teori
Lämpliga verktyg för arbetet ökar produktiviteten. Nedan beskrivs några verktyg samt arbetsflöden där dessa verktyg är lämpliga att användas.
F.3.1
Git
Git kan beskrivas som en länkad lista där varje element kallas för en commit (pl. commits).
Varje commit innehåller, bland annat:
• information om det sparade innehållet
• pekare till sina föräldrar
• information om auktorn
• ett commit-meddelande.
Denna information hämtas lämpligen via kommandot git-log. Ett kraftfullt kommando för
att konstruera nya commits som bevarar delar av ovanstående metadata är git-rebase; typiskt
bevaras allt utom eventuella föräldrapekare.
En commit med flera föräldrar kallas för en merge commit.
En gren i Git är en namngiven och flyttbar pekare till den commit som Git anser är grenens
senaste. [58, kapitel 3]
F.3.2
Greningsmodeller
En gren (eng. branch) är en virtuell arbetsmiljö där en utvecklare kan göra ändringar isolerat
från andra utvecklare [59].
En greningsmodell är ett regelverk kring hur utvecklare hanterar kod mellan olika grenar,
och avser enligt Walrad och Strom i [60] underlätta
• för andra att göra ändringar utan att det påverkar dina ändringar
• för dig att spara och dela egna galna experiment oberoende av mindre galna ändringar
• hämtning av andras ändringar utan att förlora dina egna ändringar
• integrering av egna ändringar med andras ändringar.
Att utvecklingen sker i isolerade grenar medför merarbete vid integration, vilket också kan
medföra fel på grund av kodkonflikter eller oförutsedda kodberoenden [59].
Den enklaste formen av en greningsmodell är där enbart en gren används för all utveckling.
Denna greningsmodell erbjuder ingen isolation för utvecklare, vilket medför konflikter om
flera utvecklare arbetar med samma del av kodbasen.
66
F.4. Metod
F.3.3
Distribuerade och centraliserade versionshanteringssystem
Centraliserade versionshanteringssystem tillåter utvecklare att hämta ändringar från, och
skicka ändringar till en central punkt eller nod. Ett exempel på ett sådant versionshanteringssystem är SVN [58].
Distribuerade versionshanteringssystem möjliggör för utvecklare att direkt hämta ändringar från andra utvecklare, utan att först synkronisera med en central nod. Ett exempel
på ett sådant är Git [58].
F.3.4
Arbetsflöden
Hur ett utvecklingsteam delar och integrerar kod med varandra påverkas av vilken typ
av versionshanteringssystem som används. Några vanliga typer av arbetsflöden beskrivs
nedan.
Med det centraliserade arbetsflödet integrerar utvecklare egen kod med en delad central nod. Detta flöde utesluter inte användandet av en integrationsledare eller löjtnantdiktatorflödet med hjälp av grenar, men för väldigt stora projekt skulle det leda till väldigt
många grenar [58].
Med integrationsledarflödet hämtar någon in kod från andra utvecklare och integrerar med
projektets kodbas. På GitHub tillämpas detta arbetsflöde med pull requests [56] [58].
Löjtnant-diktatorflödet används exempelvis vid utvecklingen av Linuxkärnan och utgörs av
en hierarki av integrationsledare, med en diktator i toppen som integrerar löjtnanternas integrationer. Utvecklare hämtar därefter diktatorns version av kodbasen för fortsatt utveckling.
[55] [58].
F.4
Metod
För att utforska organiserandet av versionshantering utfördes en fallstudie i formen av ett
projekt, vilken även var inkluderad i undersökningen gällande greningsmodellers påverkan
på kodkvalitet. För att öka urvalet av projekt för behandling av den senare frågan användes
en blandning av publika samt privata källor.
F.4.1
Fallstudie
Ett projekt med 10 gruppmedlemmar utfördes, där den greningsmodell som finns beskriven
i kapitel 4.6 användes vid utvecklandet av ett kryptoanalyssystem, se kapitel 2. Gruppens medlemmar fick en grundläggande utbildning (i form av en arbetsstuga) av Git, samt
grundläggande utbildning om konfigurationshantering via gruppens kvalitetsplan. En
handbok som beskrev sekvenser av Git-kommandon för att utföra vanligt förekommande
sysslor upprättades och uppdaterades under projektets gång och fanns tillgänglig för gruppens medlemmar. Projektgruppens medlemmar intervjuades nära projektets slut gällande
deras versionshanteringserfarenheter. De fall där projektgruppens konfigurationsansvarige
fick ingripa gällande gruppens användande av versionshantering noterades.
F.4.2
Greningsmodellens framgång
Som mått på en greningsmodells framgång användes mängden av commits vars meddelandefält matchade det reguljära uttrycket fix|bug|defect|patch|error|wrong|issue|change.
67
F.5. Resultat
Detta reguljära uttryck applicerades mot utvecklingshistoriken hos sju projekt. Se kodexempel F.1 för invokation. Projekten hämtades i del från fallstudiens projektmedlemmar samt
från den offentliga källan GitHub. För att utröna hur det undersökta projektet hanterat
utgreningar analyserades meddelandefältet hos commits med flera föräldrar.
Kodexempel F.1: Applicera det reguljära uttrycket mot utvecklingshistoriken
git log -E -i --grep="fix|bug|defect|patch|error|wrong|issue|change"
F.5
F.5.1
Resultat
Fallstudie
Tidigt i projektet var kunskapen om Git väldigt spridd. Git-handboken fick blandat kritik i
form av exempelvis "orsakar mer förvirring än nytta" och "den är jättebra, använder den hela
tiden".
Under utvecklingsarbetets första vecka inträffade en felaktig rebase vilket resulterade i att
samma innehåll existerade på två grenar. Detta ansågs inte vara ett kritiskt fel och läts vara
kvar i utvecklingshistoriken.
Behovet att från feature-branches få tillgång till nyligen utvecklad funktionalitet (som fanns
på develop) visade sig under projektets tredje vecka. Detta löstes, i enlighet med greningsmodellen, genom att (efter kontroll med grenens intressenter) flytta gällande featurebranch till sökt funktionalitet från develop med en rebase, eller likvärdigt genom att skapa
en ny gren och därefter göra en rebase.
Vid mitten av projekttiden blev två feature-branches färdiga samtidigt, och slogs ihop med
develop under loppet av några minuter. Detta resulterade i nya kodkonflikter för den senare
grenen, med en "felaktig" merge som följd, vilket ledde till att merge-arbetet gjordes om.
Intervju
En majoritet av gruppens medlemmar upplevde versionshanteringen under projektets tid
som någonting positivt. De gillade Git samt den greningsmodell som använts.
Vissa medlemmar skulle föreslå denna greningsmodell för framtida projekt av liknande
storlek men skulle inte använda den för mindre eller egna projekt.
Vissa av gruppens medlemmar kunde inte Git sedan tidigare och uppskattade möjligheten
att lära sig Git "på riktigt" och rapporterade att de vid projektets slut skapade frekventa
commits innehållande små förändringar.
Frekvensen för problem liknande "koden funkade igår men nu är det trasigt" har varit lägre
jämfört med tidigare erfarenheter enligt vissa gruppmedlemmar, medan andra rapporterar
att de inte stött på sådana problem tidigare. De senare rapporterar också god versionshanteringsvana.
F.5.2
Greningsmodellens framgång
Data ses i tabell F.1.
Försök till att analysera förändringsinnehållet hos flaggade commits resulterade i mycket
stora datamängder vars analys hade tagit för lång tid för att utföras i detta arbete.
68
F.6. Diskussion
Tabell F.1: Analyserade projekt. # commits är antalet commits i det analyserade projektet. # flaggade är antalet
commits som matchade det reguljära uttrycket.
ID
A
B
C
D
E
F
G
F.6
F.6.1
Greningsmodell
enkel
enkel
distribuerad
distribuerad
enkel
enkel
enkel
# commits
92
197
434
494
103
555
182
varav flaggade
16.3%
23.9%
6.9%
21.9%
4.9%
7.0%
4.4%
Diskussion
Metod
Fallstudie
Flera fallstudier ger inte nödvändigtvis samma resultat, även om förutsättningarna verkar
vara liknande. Med andra ord går det presenterade resultatet inte nödvändigtvis att generalisera. Fallstudier lämpar sig för utforska koncept vilket kan utgöra grund för vidare studier.
Greningsmodellens framgång
Som argumenteras av Bird et al. i [61] går det inte alltid att avgöra ursprungsgren för en
commit. Detta kan medföra problem eftersom en mängd commits kan se ut att ha utvecklats
med en linjär historik, trots att de utvecklats på en parallell gren. För projekt hämtade från
GitHub kan detta medföra ett stort problem på grund av pull requests, som har utvecklats
på en parallell gren.
Därtill finns möjlighet att utvecklare inte publicerar sin ursprungliga utvecklingshistorik,
utan döljer sina misstag, och därigenom påverka historiken till att inte ha separata commits
för buggfixar. Detta förhindrar jämförelser av projekt med varierande konventioner gällande
manipulering av utvecklingshistoriken.
F.6.2
Resultat
Fallstudie
Behovet att från en feature-branch få tillgång till nyutvecklad kod på develop illustrerar en
svaghet hos greningsmodeller: kod utvecklas med beroenden till annan kod. Den tidigare
presenterade åtgärden kan ses onödig: varför tvinga rebase när man kan tillåta en merge
från develop till en feature-branch? I de fall där en ihopslagning av grenarna innebär konflikter kan en merge-konflikt vara lättare att korrigera än de av rebase. Då slutresultatet för
grenen är densamma är det lämpligt att använda en merge istället för rebase för att justera
en feature-branch.
Utbildning är en möjlig åtgärd för att förhindra greningsmisstag. Att utbilda om, och se
till att samtliga förstår, hur handboken skall användas kan bidra till minskad felfrekvens.
Att diskutera scenarion under exempelvis arbetsstugor kan vara ett lämpligt sätt att sprida
kännedom om problem som uppståt kring versionshantering. Att utbildningen hölls tidigt
under projektets gång, innan medlemmarna fått bekanta sig med versionshanteringsreglerna,
kan ha bidragit till misstag. En möjlig åtgärd till detta kan vara att ha en nybörjarkurs samt
kontinuerlig utbildning under projektets gång, förslagsvis via arbetsstugor.
69
F.7. Slutsatser
Greningsmodellens framgång
Det är möjligt att eventuella effekter beror på nyttjandet av processer som kodgranskning
innan kodintegration, och inte på grund av greningsstrategi.
Huruvida de undersökta projekten har manipulerat utvecklingshistoriken kontrollerades
inte för vid datainsamlingen. Det är möjligt att måttet fungerar för att jämföra projekt med
liknande policy gällande manipulering av utvecklingshistoriken, vilket kan vara ett ämne
för vidare efterforskning.
Det föreslagna måttet har inte jämförts med andra metriker för kodkvalitet som rader kod
och cyklomatisk komplexitet. Det vore möjligt att tillämpa tidigare kända metoder för analys
av kodkvalitet via analys av git-historikens förändringsinnehåll, men någon sådan analys
utfördes inte. Detta tillintetgör slutsatsförmågan gällande kodkvalitet från insamlad data.
F.7
Slutsatser
Olika projekt har olika konventioner angående integriteten hos utvecklingshistoriken. Det
föreslagna måttet på kodkvalitet, att räkna förekomsten av nyckelord, tar inte hänsyn till
detta faktum.
Då insamlad data gällande greningsmodellens framgång inte kontrollerade för tidigarenämnda konventioner saknas slutsatsförmåga i frågan om kodkvalitet.
Påverkar valet av greningsmodell kodkvaliteten? Ingen slutsats kan dras.
Hur kan man organisera versionshantering i ett mindre utvecklingsprojekt?
• Ha kontinuerlig utbildning, gärna med nybörjarkurs.
• Använd en greningsmodell.
70
G Erik Rönmark: Kvalitetssäkrande
processer och produktkvalitet i
ett litet utvecklingsprojekt
G.1
Inledning
Inom ramen för Software Quality Assurance finns flera kvalitetssäkrande processer som går
att integrera i utvecklingsprocessen, däribland kodgranskning. I mindre utvecklingsprojekt
finns vanligtvis inte personer dedikerade till att bara arbeta med kvalitetssäkring. På grund
av detta kan man inte alltid tillämpa metoder som fungerar i storskalig mjukvaruutveckling.
Därför applicerades en egen utarbetad kvalitetssäkrande process anpassad till vårt utvecklingsprojekt. Denna rapport undersöker hur de kvalitetssäkrande processer som tillämpades
i detta mindre utvecklingsprojekt påverkade kvaliteten hos slutprodukten.
G.1.1
Syfte
Syftet med rapporten är att ta reda på hur de kvalitetssäkrande processer vi tillämpade
påverkade den slutgiltiga produktkvaliteten.
G.1.2
Frågeställning
1. Hur påverkade kodgranskning den slutgiltiga produktkvaliteten?
2. Hur påverkade de användartest vi gjort den slutgiltiga produktkvaliteten?
3. Hur påverkade de utvärderingar vi gjort den slutgiltiga produktkvaliteten?
G.1.3
Avgränsningar
Rapporten besvarar inte huruvida kodgranskning generellt bidrar till produktkvalitet. Rapporten besvarar heller ej hur utvärderingar och användartest påverkar produktkvalitet
generellt. Ingen jämförelse görs heller med liknande projekt.
G.2
Bakgrund
Från början av projektet stod det klart att det här var en grupp med mycket blandade
erfarenheter av grupparbeten. Därför var projektgruppen väldigt genomgående när den
tidigt diskuterade samarbete i gruppen samt skrev gruppkontrakt. För att gruppen under projektets gång skulle kunna identifiera och åtgärda sådant som riskerar att försämra
projektet bestämdes att omfattande utvärderingar skulle utföras efter varje projektfas. Hur
utvärderingarna gick till förklaras i avsnitt 4.7 i den gemensamma delen.
71
G.3. Teori
Författaren av denna rapport blev tilldelad rollen som kvalitetssamordnare och hade därmed
ansvar över projektets kvalitetsplan. I kvalitetsplanen specificerades att det under projektiteration 2 och 3 skulle utföras användartester. Det är till stor del de användartesten samt
feedback från kunden som utgör den bas för att mäta produktkvaliteten som använts. I
kvalitetsplanen specificerades även hur gruppens process för kodgranskning skulle se ut.
G.3
Teori
Detta kapitel berör teorin bakom kodgranskning och användning av rader kod som mätdata.
G.3.1
Kodgranskning
Målet med granskningar är att upptäcka designmässiga brister, hitta avvikelser från standarder och konventioner, samt identifiera framtida risker [62]. Kodgranskning tenderar att
öka kvaliteten hos mjukvara [63].
G.3.2
Rader kod som mätdata
Skrivna rader kod i ett program som mätdata kan användas för att mäta storleken på ett program och hur mycket resurser som krävst för att skriva programmet[62]. Det kan även användas för att försöka förutsäga kvaliteten men är inte speciellt effektivt för detta ändamål[64].
G.4
Metod
För att undersöka kodgranskning samlades data in från Git, för att undersöka användartester
och utvärderingar granskades de dokument som producerats i samband med dem. Metoden
för hur själva kodgranskningen och utvärderingarna gick till återfinnes i avsnitt 4.5.2 respektive avsnitt 4.7.
G.4.1
Kodgranskning
Alla projektets feature branches gicks igenom. Antalet rader kod som accepterats och blivit
inflyttade till develop skrevs ner. Antalet rader kod som lagts till och tagits bort mellan
den första kodgranskningen och att branchen var klar skrevs även det ner. Bara feature
branches räknades, ingen kod som vi inte skrivit själva är alltså med i resultatet. Rader kod
som tillkommit på grund av namnbyte av en fil räknades inte heller. Bara HTML-, CSS- och
JavaScript-filer räknades.
G.4.2
Användartest
Anteckningarna från användartesten gicks igenom och synpunkter från användarna sammanställdes till en lista. De saker i listan som implementerats i slutprodukten kryssades
av. Synpunkterna klassificerades i kategorierna buggar, funktionella synpunkter och designmässiga synpunkter utifrån vilken sorts synpunkt det var. Buggar inkluderade rena fel som
hittats under testet, funktionella synpunkter var idéer som avändarna fick om hur programmet skulle kunna fungera och designmässiga synpunkter var sådant som rörde programmets
grafiska utformning och utseende. Andelen åtgärdade synpunkter inom varje kategori räknades ut.
72
G.5. Resultat
G.4.3
Utvärdering
Resultatet av utvärderingarna i 2 gicks igenom. Från materialet sammanställdes siffrorna
för antalet förbättringspunkter och för antalet åtgärder som planerades på det efterföljande
mötet. Detta gjordes för alla tre utvärderingarna.
G.5
Resultat
Följande del behandlar
utvärderingarna.
G.5.1
resultatet
från
kodgranskningen,
användartesten
och
Kodgranskning
Nedanstående tabell visar storlek på varje feature samt antalet ändringar som gjorts på varje
feature efter kodgranskning.
Tabell G.1: Ändringar per feature efter kodgranskning.
Featurenummer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Totalt
Tillagda rader
kod per feature
188
63
625
150
140
15
30
9
223
254
257
59
352
44
72
254
167
208
27
8
66
153
377
545
60
4350
Borttagna rader
kod per feature
6
363
4
10
1
12
26
4
9
86
84
39
15
77
20
80
42
44
14
18
38
1
109
33
9
1144
Tillagda rader kod
efter kodgranskning
6
77
7
16
3
4
0
0
0
16
38
97
206
10
0
4
0
0
25
0
0
0
13
36
0
617
Borttagna rader kod
efter kodgranskning
5
83
11
19
3
23
0
0
0
10
70
116
220
10
0
10
0
0
72
0
0
0
15
17
0
677
Tabellen visar att flera av kodgranskningarna ledde till förändringar i koden. Förändringarna
bestod av både tillägg av nya rader kod, samt av borttagning av rader kod.
73
G.6. Diskussion
G.5.2
Användartest
Nedanstående tabell visar hur mycket av användarnas feedback och ideer som samlades in
och implementerades.
Tabell G.2: Resultatet av användartest.
Funna
buggar
1
Åtgärdade
buggar
1
Funktionsförslag
5
Implementerade
funktionsförslag
1
Designförslag
11
Implementerade
designförslag
8
Tabellen visar att flera av användarnas ideér blev implementerade, bara ett funktionsförslag
blev implementerat. Under användertestet hittades även en bugg som åtgärdades.
G.5.3
Utvärderingar
Nedanstående tabell visar antalet punkter som kunde förbättrats som togs upp under varje
utvärdering. Tabellen visar också antalet konkreta förslag som kom upp i samband med
diskussionen.
Tabell G.3: Resultatet av utvärderingarna.
Utvärderingsnummer
1
2
3
Förbättringspunkter
48
76
38
Förbättringsförslag
16
10
14
Ur tabellen ser man att många av de förbättringspunkter som togs upp under
utvärderingarna faktiskt behandlades med konkreta förbättringsförslag.
G.6
Diskussion
Analys av kodgranskning använde sig av antalet tillagda och borttagna rader kod som mätdata, det säger ingenting om kvaliteten på koden som ändrats. Här har antagandet gjorts
att de punkter som tagits upp efter en granskning har varit negativa för kvaliteten och att
den nya koden har bidragit till högre kvalitet. Detta antagande är dock rimligt, eftersom
de punkter som tas upp efter kodgranskning är potentiella brister, fel och avvikelser mot
stilguiden. Att kodgranskningen resulterade i så pass mycket förändringar var inte heller
särskilt märkvärdigt då gruppen ej bestod av erfarna webbutvecklare. Dock gör även erfarna
webbutvecklare fel ibland.
Resultaten av användartesten och utvärderingarna är ej viktade. De säger inget om hur
stor påverkan ett förslag eller en förbättringspunkt hade. Många av förbättringspunkterna
från utvärderingarna löste sig själva eller utan något möte. Gällande användartesten så
fanns det redan planer att testa några av användarnas förslag. Användartesterna utfördes
dessutom på redan granskad och enhetstestad kod, vilket kan förklara varför bara en bugg
hittades.
G.7
Slutsatser
Från resultatet av kodgranskningen kan man se att det förekom en hel del ändringar som
kanske inte hade gjorts utan kodgranskningen. Ungefär 26 % av antalet ändrade rader kod
74
G.7. Slutsatser
som accepterats till developbranchen tillkom efter kodgranskning. Eftersom projektgruppens kodgranskning i första hand sökte efter designmässiga brister samt avvikelser från
standarder och konventioner är det rimligt att dra slutsatsen att kodgranskning ökade den
slutgiltiga produktkvaliteten.
Från resultaten av användartesten kan man se att förslag från användarna faktiskt implementerades. I testen hittades dessutom en ren bugg som kunde åtgärdas. Användarna var
typiska för de som ska använda slutprodukten och flera förslag från dem implementerades.
Utifrån detta är det rimligt att dra slutsatsen att användartesten påverkade den slutgiltiga
produktkvaliteten positivt.
Utvärderingarna uppdagade flera förbättringspunkter. Dessa protokollfördes och följdes
upp, under utvärderingsmötet gavs dessutom konkreta förbättringsförslag för att åtgärda
dessa punkter. Utvärderingarna bidrog därför till kvaliteten hos utvecklingsprocessen.
Mer effektiva möten, administration och utveckling gav mer timmar åt produktkvalitet
och kvalitetssäkrande processer. Utifrån detta dras slutsatsen att även utvärderingarna
påverkade den slutgiltiga produktkvaliteten positivt.
75
H Kristoffer Tennivaara: Metoder
och processer för grafiska
användargränssnitt
H.1
Inledning
Ett grafiskt användargränssnitt kan beskrivas som en länk mellan användaren och den programvara som användaren arbetar med. Gränssnittet tillåter användaren att mata in information vilket ger användaren möjligheten att påverka systemet. Systemet i sin tur bearbetar
den inmatade informationen och presenterar resultat i form av utdata till användaren. Målet
med ett grafiskt gränssnitt är att öka effektiviteten och förenkla användningen av programmet. Hur bra gränssnittet gör detta beskriver måttet användbarhet. Denna rapport utforskar
metoder och processer för framtagning och utvärdering av grafiska användargränssnitt i ett
småskaligt utvecklingsprojekt.
H.1.1
Syfte
Syftet med rapporten är att jämföra och ta reda på vilka processer och metoder som lämpar
sig bäst för att ta fram ett användargränssnitt i ett småskaligt projekt.
H.1.2
Frågeställning
Följande frågor ligger till grund för rapporten:
1. Vilka aspekter i kvalitetsmåttet användbarhet är viktigast för ett utbildningsverktyg?
2. Vad har olika sätt att fatta designbeslut på för effekt på användargränssnittet?
3. Vilken metod lämpar sig bäst för att utvärdera ett användargränssnitt i ett småskaligt
projekt?
H.1.3
Avgränsningar
Fokus ligger enbart på webbaserade applikationer då utvecklingsarbetet endast skett för just
en sådan.
H.2
Bakgrund
Idag implementerar de flesta program ett grafiskt användargränssnitt. En stor del av resurserna för att utveckla ett program eller tjänst går till att designa ett bra gränssnitt. [65] Om till
exempel en hemsida har ett dåligt designat användargränssnitt finns risken att användaren
lämnar sidan för att hitta en sida som har en bättre design.
76
H.3. Teori
H.3
Teori
I teoridelen presenteras de teorier som använts och motiveringar om varför.
H.3.1
Användbarhet
Användbarheten hos ett system är ett kvalitetsmått och ISO 9241-11 definierar användbarhet
som:
“Den grad i vilken specifika användare kan använda en produkt för att uppnå ett specifikt
mål på ett ändamålsenligt, effektivt och för användaren tillfredsställande sätt i ett givet
sammanhang.” [66]
Detta ger kvaliteterna ändamålsenlighet, effektivitet och personlig tillfredsställelse. Utöver
dessa har Nielsen [67] velat väga in tre andra kvaliteter i begreppet:
• Learnability: Hur lätt det är att lära sig använda programmet för en nybörjare.
• Memorability: Hur lätt det är att minnas hur man gjorde om man gör ett uppehåll och
därefter börjar använda produkten igen.
• Errors: Hur många eller få fel som användarna gör.
H.3.2
Designbeslut
Enligt Jared M. Spool [68] finns det fem vanliga sätt att ta designbeslut på. De är baserade på
hur mycket forskning som utförs innan besluten tas. I vissa projekt finns det inte tillräckliga
skäl för att använda den tid och resurser det skulle kräva för att kunna göra omfattande användarundersökningar. Samtidigt skulle andra projekt misslyckas om de inte utförde dessa.
De olika beslutstyperna nedan återspeglar i stigande ordning, den mängd forskning som utförs innan ett beslut tas.
1. Unintended design är det som sker när man utvecklar en produkt utan att ta hänsyn
till designen.
2. Self design är designresultatet som blir när projektmedlemmarna designar åt sig
själva. Projektmedlemmarna ser då inte bortom sina egna erfarenheter när de fattar
designbeslut.
3. Genius design är baserat på tidigare individuella erfarenheter hos projektmedlemmarna. Precis som i self design använder man sig bara av sina egna erfarenheter för
att ta designbeslut. Detta fungerar bra för erfarna utvecklare som har utvecklat produkter inom samma område tidigare.
4. Activity-focused design går ut på att planera och studera användarnas aktiviteter när
de använder produkten. Man använder sig av denna design när projektmedlemmarna
inte har någon tidigare erfarenhet av aktiviteterna i fråga. I forskningen använder man
sig av aktivitetsbaserade tekniker som till exempel uppgiftsbaserade användartester.
Dessa tester utförs genom att testanvändare får uppgifter som de ska lösa med hjälp av
produkten. Denna teknik gör att man får kvalitativa insikter i vad som orsakar problem
för användarna, vilket resulterar i att man kan förbättra designen därefter.[69]
5. User-focused design är den stil där man utför flest användarundersökningar. Man
går ner på djupet och försöker se bortom aktiviteterna. Man tittar på mål, behov och
sammanhang hos användarna. Den här stilen är nödvändig om projektgruppen är ute
efter att skapa en så bra användarupplevelse som möjligt. För att göra detta använder
man sig av användarcentrerade tekniker som till exempel en robust persona. Detta för
att gruppen ska få en kontextuell förståelse av användarnas upplevelse.
77
H.4. Metod
Spool har undersökt de olika stilarna och kommit fram till att den mest effektiva projektgruppen hade erfarenhet i alla fem stilarna. De valde den stilen som bäst passade behoven och
målen baserat på det projekt de arbetade på. Han kom också fram till att valet av designstil har en faktisk effekt på designen. De grupper som producerade de bästa upplevelserna
kände till alla designstilar och kunde snabbt växla mellan dem. De visste när det var dags
att gå ner på djupet med användarcentrerad design i ett projekt. Samtidigt visste de också
när det var viktigt att få ihop en snabb design, i vetskapen om att det skulle bli en oavsiktlig
design.[68]
H.3.3
Metoder för att utvärdera ett användargränssnitt
Det finns olika sätt att utvärdera ett gränssnitt på. Enligt Jakob Nielsen [70] finns det 7 olika
sätt:
• Heuristic evaluation: Den mest informella metoden där användbarhetsspecialister
bedömer om elementen följer de etablerade användbarhetsprinciperna. Denna metod
kan integreras in i den iterativa designprocessen, och kan utföras av projektmedlemmarna istället för specialister. Det går till så att medlemmarna inspekterar gränssnittet
var för sig. Först efter att alla utvärderingar utförts får man kommunicera med varandra för att summera iakttagelserna. [71]
• Cognitive walkthroughs: En mer detaljerad procedur för att simulera en användares
problemlösning steg för steg, för att undersöka om den simulerade användarens mål
kan antas leda till nästa rätta åtgärd.
• Formal usability inspections: En 6-stegs procedur med strikt definierade roller för att
kombinera Heuristic evaluation och en förenklad form av Cognitive walkthroughs.
• Pluralistic walkthroughs: Är möten där användare, utvecklare och specialister på den
mänskliga faktorn går igenom ett scenario och diskuterar alla interaktiva komponenter.
• Feature inspection: Visar en sekvens av funktioner som används för att utföra vanliga
uppgifter. Man kontrollerar långa sekvenser och besvärliga steg som inte skulle vara
naturliga för användare att prova.
• Consistency inspection: Designers som arbetar med flera andra projekt inspekterar
gränssnittet för att se om det gör saker på samma sätt som designmönstren i deras
andra projekt.
• Standards inspection: En expert på gränssnittsstandarder inspekterar gränssnittet för
att se om det följer industristandarden. Till exempel bör mjukvara avsedd för Windowsmiljö ha samma gemensamma element, såsom samma funktioner på Arkiv-menyn och
Hjälp-menyn. [72]
H.4
Metod
Denna del beskriver metoder som följts för att erhålla resultat till frågeställningen.
H.4.1
Litteraturstudie
För att hitta avhandlingar inom det relevanta området har Google-sökningar på "Design Decision Styles", "ISO Usability Standards" samt "Usability Inspection Methods" gjorts. Resultatet
av det var intressanta artiklar och forskning som skrivits av kända personer inom respektive
område. Jakob Nielsen som uppfunnit ett antal metoder inom användbarhet, samt Jared M.
Spool och hans arbete inom användargränssnitt har bidragit till mycket av kunskapen i detta
arbetet.
78
H.5. Resultat
H.4.2
Projekt
För att kunna jämföra teorin och forskningen med ett konkret exempel, har ett småskaligt
projekt utförts i samband med kursen TDDD96 Kandidatprojekt i programvaruutveckling.
En iterativ utvecklingsprocess har använts där designbeslut, användartester och utvärdering
av användargränssnittet skett löpande i varje iteration.
För att få verklighetstrogna resultat från användartester letades tre personer upp som
stämde överens med programmets målgrupp. Varje användartest utfördes sedan under
en 30-minuters period där användarna fick uppgifter att lösa med hjälp av programmet.
Uppgifterna bestod av krypterade texter som skulle dekrypteras, vilket motsvarade realistiska användarscenarion. Under testerna iakttogs deras aktiviteter av två gruppmedlemmar
och eventuella brister i designen noterades. Efter testerna fick användarna också möjlighet
att komma med egna förbättringsförslag. All insamlad data från testerna diskuterades sedan
inom gruppen för att komma fram till eventuella designändringar.
H.5
Resultat
Denna del redovisar resultatet av de undersökningar som specificerats i metoddelen.
H.5.1
Användbarhet
Projektet gick ut på att skapa ett utbildningsverktyg, och projektmedlemmarna hade sedan
tidigare erfarenhet av att använda sig av utbildningsverktyg. Det kunde därför redan i början
av projektet specificeras vad som var viktigt för att det skulle bli en så användbar produkt
som möjligt.
Av de sex användbarhetskvaliteterna som presenteras i teorin H.3.1 kom projektgruppen
fram till att det var viktigast att verktyget:
1. Är lätt att lära sig använda.
2. Är effektivt, med avseende på hur snabbt användare kan utföra uppgifter.
3. Minskar antalet fel som användarna kan tänkas göra.
H.5.2
Designbeslut
Användargränssnittet på produkten låg inte i fokus i början av iteration 1, utan själva funktionaliteten för produkten implementerades först. Det skapades ett provisoriskt kodskelett
för att testa all funktionalitet, men inget utöver det. Således utvecklades produkten under
den perioden med unintended design samt self design. Effekten av denna kombination av
designstilar var, i detta fallet som väntat, ett användargränssnitt utan hög användbarhet.
För att höja användbarheten byggdes kodskelettet om med hjälp av en prototyp där användaraktiviteterna låg i fokus. Det skulle kunna jämföras med activity-focused design, med
skillnaden att forskningen bestod utav kundens samt projektmedlemmarnas testanvändning
av produkten. Effekten av den designstilen var ett användargränssnitt med ett högre användbarhetsmått än tidigare.
Under iteration 2 och 3 undersöktes det närmare hur användargränssnittet skulle se ut och
fungera. Användartester utfördes och både kommentarer och förslag från testanvändarna
analyserades för att få insikt i vilka förbättringsförslag som kunde höja användbarheten på
produkten. Designbesluten som gjordes efter testerna höjde sedan användbarheten ytterligare.
79
H.6. Diskussion
H.5.3
Metoder för att utvärdera ett användargränssnitt
Då det inte funnits någon budget för att hyra in specialister i detta projekt, har alla utvärderingsmetoder uteslutits förutom heuristic evaluation, som har använts löpande under projektets
gång. Projektmedlemmarna inspekterade gränssnittet löpande under utvecklingsperioden,
hittades problem eller eventuella förbättringar av produkten diskuterades vilka åtgärder som
skulle vidtas.
H.6
Diskussion
Här diskuteras tillvägagångssätt och resultat som erhållits under studien.
H.6.1
Resultat
Resultatet av vilka aspekter i kvalitetsmåttet användbarhet som är viktigast för ett utbildningsverktyg är troligtvis inte representativt för utbildningsverktyg i allmänhet. Detta
eftersom verktyget som utvecklats endast är tänkt att användas under en 4-timmars period,
för att sedan aldrig användas igen av samma användare. Detta medför att vissa aspekter i
kvalitetsmåttet användbarhet faller bort direkt, såsom memorability.
Designbesluten som tagits under detta projekt har varit väl genomtänkta och activity-focused
design har fungerat bra. Hade bara unintended design i kombination med self design använts skulle inte det resulterande användargränssnittet haft lika hög användbarhet som
det har idag. Spool’s [68] undersökning argumenterar för att man ska välja designstil efter
de projektspecifika behov som finns. Begränsningen av resurser i form av tid till projektet har dock medfört att user-focused design ej har varit möjligt att utföra. Genius design
har heller inte varit möjlig, då projektmedlemmarna i början av projektet inte hade så stor
erfarenhet utav webbutveckling. Skulle tidsbudgeten tillåtit utförandet av alla användarundersökningar som behövts göras för att använda sig av user-focused design, är det troligt
att produkten skulle fått en högre användbarhet. Detta eftersom att man införskaffar sig en
bättre förståelse av användarnas upplevelse.
De flesta metoder som finns för att utvärdera ett användargränssnitt går ut på att hyra in
specialister som utvärderar användargränssnittet. Detta medförde att Heuristic evaluation
användes eftersom det kunde implementeras i den iterativa designprocessen. Eftersom den
metoden kan utföras av projektmedlemmarna själva, spar det pengar, men tid går förlorad
istället. Hade utvärderingen utförts av specialister istället, skulle det sparat värdefull tid
för projektmedlemmarna som sedan kunde använts för att skapa ytterligare funktionalitet.
En utvärdering av specialister skulle också kunna tänkas bli mer objektiv, vilket är väldigt
viktigt.
H.6.2
Metod
Projektet hade inte någon monetär budget, utan endast en budget i tid. Man var tvungen
att beräkna hur mycket tid det skulle gå åt för att kunna utföra vissa moment, och därför
slopades också alternativ som ej skulle kunnat klämmas in under den tid som fanns tillgänglig. För att få mer representativa resultat utav studien hade projektets budget med fördel
kunnat vara större. Hade frågorna ställts under ett projekt där omfattningen skilt sig mycket
från detta projekt kan det tänkas att man skulle kunna få helt andra resultat.
Datainsamlingen från användartesterna som gjorts kan ses som bristfällig eftersom användarna själva inte skrev ner någonting, utan endast observerades under testerna. En inbyggd funktionalitet i systemet som kunde logga användarens aktiviteter som till exempel
80
H.7. Slutsatser
hur många gånger specifika knappar använts under ett test skulle också kunnat ge en klarare
bild av hur gränssnittet användes.
H.7
Slutsatser
Utifrån resultat och teori från studien kan vissa slutsater dras.
För ett generellt utvecklingsverktyg är alla aspekter mer eller mindre viktiga för att få en så
hög användbarhet som möjligt. Det går vanligtvis inte att hoppa över någon aspekt utan
att det drar ner användbarheten. Projektet i fråga hade dock särskilda omständigheter som
gjorde att det kunde fokuseras mer på vissa aspekter än andra. Den mest betydande av dessa
var att varje användare av produkten endast skulle använda produkten en enda gång.
Designbesluten och det sätt man väljer att fatta dem på har en faktisk effekt på användargränssnittet. Det gäller att välja den stil som bäst passar behoven och målen för det projekt
man arbetar på, eftersom effekten kan vara både bra och dålig. Grundtanken är att fler och
djupare undersökningar innan man fattar designbeslut resulterar i bättre förståelse för vilka
behov som finns, och därmed kan man fatta beslut som ger ett bättre användargränssnitt.
Använder man sig av en iterativ utvecklingsprocess samt har en liten eller ingen budget alls
är Heuristic evaluation den metod som lämpar sig bäst för att utvärdera ett användargränssnitt. Den går att implementera i utvecklingsprocessen, man slipper då det dröjsmålet som
sker om specialister ska anlitas samt att utvecklingen kan fortskrida under tiden.
81
I
I.1
Victor Tranell: Kravhantering
med Scrum
Inledning
En central del i ett projekt är att ha en bra kravspecifikation. Utan en bra kravspecifikation
finns det ingen nedskriven överenskommelse mellan kund och projektgrupp. Samtidigt är
diskussionen med kunden om kravspecifikationen minst lika viktig för utvecklingsgruppen.
Detta gör att man hela tiden vet att man jobbar på något som ger värde till kunden. Denna
rapport kommer handla om hur krav hanteras tillsammans med en agil utvecklingsmetodik.
I.1.1
Syfte
Syftet med studien är att analysera hur kravinsamling fungerar tillsammans med agil mjukvaruutveckling.
I.1.2
Frågeställning
1. Vilka fördelar och nackdelar finns med agil kravhantering?
2. Vilken utvecklingsmetod lämpar sig bäst för ett liknande projekt i framtiden sett till
kravhantering?
I.2
Bakgrund
I kursen TDDD96 Kandidatprojekt i mjukvaruutveckling utfördes ett projekt åt gruppen för
informationskodning vid ISY. Projektet gick ut på att ersätta ett äldre program som användes
i utbildningssyfte. Gruppen beslutade att använda den agila utvecklingsmetodiken Scrum i
detta projekt.
Kunden hade hårda krav på att det nya programmet skulle vara lätt att vidareutveckla samt
att det skulle vara en webbapplikation. Resterande utformning av programmet var kunden
inte lika säker på utan ville ta ställning till förslag från projektgruppens sida. Därmed krävdes
ett flertal iterationer av kravspecifikationen innan konsensus nåddes.
I.3
Teori
Nedan beskrivs hur agil kravhantering samt traditionell kravhantering typiskt går till. Exempel på en agil utvecklingsmetod är Scrum som beskrivs i avsnitt 3.5 i rapporten.
82
I.3. Teori
I.3.1
Traditionell kravhantering
Den traditionella metoden är en linjär process där man i början av varje projekt har en planeringsfas. Planeringsfasen resulterar i en kravspecifikation med välspecificerade krav. Kraven
ska vara noggrant specificerade så att de är mätbara och inte kan misstolkas på något sätt. Anledningen till detta är att dokumentet även används som kontrakt mellan kund och utvecklare. Därefter implementeras systemet som specificeras av kravspecifikationen. Slutligen
valideras det implementerade systemet mot kravspecifikationen tillsammans med kunden.
[15]
I.3.2
Agil kravhantering
I början av ett agilt projekt behöver man ta reda på vad man ska göra. En lång lista av funktioner och krav fås efter intervjuer med olika intressenter. Därefter behöver listan prioriteras
och de högst prioriterade kraven behöver detaljeras. För att göra detta genomförs ytterligare
intervjuer och diskussioner med intressenter. Därefter bestämmer utvecklarna hur många
av de högst prioriterade kraven de kommer hinna med under nästkommande iteration. Om
frågor kring krav uppstår under iterationen diskuteras dessa med kunden direkt. När iterationen tagit slut visas produkten upp för kunden som direkt kan framföra sina åsikter.
Tillsammans med kunden prioriteras listan med krav och funktioner om och eventuella nya
krav placeras i listan och en ny iteration påbörjas. Detta fortgår tills kunden vid demonstrationen tycker att produkten är klar. [15]
I.3.3
Fördelar och nackdelar med agil kravhantering
I en studie från Elsevier [73] sammanställdes en stor mängd artiklar inom ämnet agil
kravhantering. Sammanställningen visar att agil kravhantering främst löser följande fem
problem:
• Kommunikationsgap
• För bred specificering
• Validering av krav
• Föråldrad dokumentation
• Frånvarande kund
I [73] från Elsevier visas att de största problemen med agil kravhantering är följande fem:
• Avsaknad av dokumentation
• Frånvarande kund
• Kostnadsuppskattning
• Fel arkitekturval
• Velande kund
I den traditionella kravhanteringen måste utvecklarna specificera krav på ett system innan de
har satt sig in i det. Kunden kan därför ha en bild av systemet och utvecklarna en helt annan.
Den agila lösningen på detta är att kunden får en demonstration av produkten efter varje
iteration och eftersom en iteration är kort så kan kunden tidigt upptäcka om utvecklarna har
en annan bild av systemet än de själva har. [73]
83
I.4. Metod
Demonstration av produkten gör även att problemet med att validera krav löses. Kunden
bestämmer om produkten är godkänd eller om det behövs fler iterationer. Att ha regelbundna demonstrationer gör att kunden måste vara tillgänglig och involverad. Samtidigt
är detta en av de största svårigheterna med agil kravhantering eftersom det förutsätter att
kunden vet hur de vill ha produkten och kan svara på utvecklarnas frågor. [73]
När utvecklarna som följer den traditionella metoden specificerar sina krav tenderar de att
specificera mer än vad som behövs. Exempelvis kan man ha specificerat ett krav som aldrig
kommer implementeras. Enligt den agila metoden har man då lagt onödig tid på något som
inte ger värde för kunden. Å andra sidan är detta en av svårigheterna med agil kravhantering
eftersom utvecklingsgruppen inte tänker igenom hur arkitekturen ska se ut som om de hade
haft en lång planeringsfas. Detta gör att man kan behöva byta arkitektur mitt i projektet
vilket kan vara kostsamt. [73]
Ytterligare en skillnad mellan agil och traditionell utveckling är att man inom den agila
sfären endast skapar den mängd dokumentation som behövs. Man minimerar på så vis tiden
man behöver lägga på dokumentation för att den inte ska bli inaktuell och rent missvisande.
Å andra sidan gör dokumentation att nya projektmedlemmar har det lättare att sätta sig in i
projektet. [73]
I agila projekt är det svårt att på förhand säga hur mycket ett projekt kommer att kosta eftersom man inte har en stor planeringsfas. Dessutom kan kunden under projektets gång ändra
kraven vilket inte är något man kan planera för. Därför låter man ofta kunden betala för varje
iteration istället för en klumpsumma för hela projektet. Även den traditionella metoden som
har haft en stor planeringsfas har detta problem eftersom det kan bli förändringar av krav
eller moment som tar längre tid än planerat. [73]
I.4
Metod
Nedan beskrivs metoden som utförts för att besvara frågeställningen i avsnitt I.1.2.
I.4.1
Litteraturstudie
För att få perspektiv på studien har ett flertal vetenskapliga artiklar och böcker inom området Requirements engineering studerats och bidragit till kunskap inom området. Dessa erhölls genom sökningar på “agile requirements” samt biblioteket vid Linköpings universitet.
I.4.2
Projekt
För att svara på hur en agil utvecklingsmetodik påverkar kravhanteringen har ett projekt utförts i samband med kursen TDDD96 Kandidatprojekt i mjukvaruutveckling. I projektet användes den agila utvecklingsmetodiken Scrum där författaren i egenskap av analysansvarig
ansvarade för kravhanteringen och kundkontakten.
I agil anda har kravspecifikationen itererats fram mellan kund och projektgrupp. Sedan har
kravinsamlingsprocessen utvärderats och resultatet diskuterats för att sedan dra paralleller
till artiklar och böcker inom ämnet.
I.5
Resultat
Nedan beskrivs några nyckelpunkter för hur kravhanteringen gick till i projektet.
84
I.6. Diskussion
I och med att uppgiften var att ersätta ett äldre program var kravinsamlingen väldigt smidig.
All funktionalitet som fanns i det gamla programmet skulle finnas med i det nya. Därmed
blev alla funktionella krav fastställda tidigt.
Kundens kontor fanns på universitetet och kunden var därmed för det mesta anträffbar där
eller via mail för eventuella frågor. Då kunden i början av projektet inte var säker på hur
systemet skulle se ut fick projektgruppen komma med förslag till vilka kunden kunde ta
ställning. Gruppen använde sig av prototyper och en kravspecifikation för att presentera
förslagen. Därmed träffades representanter från gruppen och kunden ofta i början av projektet. Detta för att så snabbt som möjligt få en tydlig bild av vad kunden ville ha och för att se
till att det inte arbetades med något i onödan.
Efter varje iteration hölls en demonstration av produkten för kunden. Under demonstrationen fick kunden se vad som hade gjorts under föregående iteration och fick själv en
uppfattning om hur mycket arbete som var kvar. I samband med demonstrationen uttryckte
kunden vilka funktioner som saknades och vad som skulle prioriteras under nästkommande
iteration. Dessa möten var en stor källa till de aktiviteter som arbetades på under resten av
projektet. Efter varje möte med kunden sammanställde gruppen ett mötesprotokoll med vad
som hade bestämts under mötet. Detta protokoll skickades till kunden för att kontrollera att
inget hade missats eller missförståtts.
Efter den andra iterationen var kunden nöjd med produktens funktionalitet. Designen tyckte
kunden var övergripande bra men behövde finputsas. Projektgruppen fick därmed fria händer att jobba med vad de själva tyckte skulle förbättras under den tredje och sista iterationen.
Som avslut på projektet hölls ett systemtest för att validera att produkten blev som det var
tänkt. Testet gjordes genom att kravspecifikationen öppnades och produkten startades. Ett
krav i taget gicks kravspecifikationen igenom och verifierades i programmet. I och med att
kunden har medverkat i demonstrationerna under projektets gång hade kunden redan sett
den funktionalitet som skulle verifieras vilket gjorde att mötet gick fort.
I.6
Diskussion
Kunden var i detta fall laborationsassistent i den laboration där detta verktyg ska användas.
Därmed hade kunden full auktoritet att säga vad som skulle vara med eller inte i det nya
programmet. I och med att vår kund hade makt att ta beslut på rak arm utan att behöva
konsultera andra intressenter fungerade agil kravhantering bra.
Eftersom kunden hela tiden var delaktig i projektet hade kravspecifikationen endast två
syften. Dels var den något att diskutera kring på mötena och dels kunde den användas i
slutet för valideringen. Vid valideringen var dock kunden väl medveten om vilken funktionalitet som var implementerad vilket gjorde att valideringen kändes överflödig. Dessutom
användes mötesprotokoll för att dokumentera kundens nya efterfrågningar istället för att
kravsätta dem och uppdatera kravspecifikationen.
I och med att kunden själv inte var säker på hur systemet skulle se ut eller fungera så var en
agil metod väldigt bra. Projektgruppen kunde, ur sin synvinkel, ge kunden ett förslag på ett
system och sedan få feedback på produkten tre gånger innan inlämningen.
I mindre projekt där arkitekturen lätt kan ändras och fokuset ligger på att skapa nya funktioner snarare än att lösa komplicerade problem kan agil utveckling vara att föredra. Däremot om projektet man ska utföra har en kund som har en tydlig bild av vad som ska
85
I.7. Slutsatser
implementeras och inga krav kommer ändras kan den traditionella metoden passa bättre.
Eftersom det, i detta projekt, fanns ett tidigare system som skulle ersättas kunde alla funktionella krav specificeras i förväg och planeras in i en fullständig aktivitetslista. Därmed
hade en vattenfallsmetod kunnat användas. Den agila metoden utnyttjades dock genom att
design och funktionalitet kunde bestämmas allt eftersom produkten blev klar. Dessutom
utnyttjades demonstrationerna till att prioritera vad som skulle arbetas med under nästkommande iteration.
I.6.1
Litteratursammanställning
I och med att agila metoder endast följer riktlinjer och värderingar istället för regler är det
svårt att definiera vad som är agilt eller inte. Den litteratur som hittades var en litteratursammanställning av en stor mängd artiklar. De fördelar och nackdelar som presenterades
i artikeln blir därmed mer trovärdiga. Man kan argumentera för att problemen med agila
metoder beror på att projektgruppen använder metoden fel snarare än att metoden i sig är
felaktig.
I.7
Slutsatser
Den största fördelen med agil kravhantering som kunde märkas i projektet var kunddemonstrationer efter varje iteration. Under dessa möten framkom väldigt mycket ny information
som gruppen annars inte skulle fått reda på.
Ytterligare en fördel med agil kravhantering är att man inte lägger så stor vikt vid att dokumentera kraven. Detta gör att man får mer tid över att lägga på något som är av värde för
kunden. Genom att lägga mindre tid på att specificera krav får man färre krav vilket är lättare
att underhålla och därmed minskar risken att kraven blir föråldrade. Utöver det minskas
risken att specificera något som ändå inte kommer vara med i slutprodukten.
Samtidigt som det är en stor fördel så kan det även vara en nackdel. Avsaknaden av fullständig dokumentation kan göra det svårt att underhålla systemet och det kan även vara
svårt för nya projektmedlemmar att sätta sig in i projektet.
En annan nackdel är att man på grund av ett kortare planeringsarbete kan göra felaktiga
arkitekturbeslut. Att åtgärda ett felaktigt arkitekturval kan vara väldigt tidskrävande och är
något man helst undviker.
Båda dessa nackdelar är mest påtagliga vid större projekt och kan vara rent försumbara för
mindre projekt. I och med att detta projekt var litet, hade en fast utvecklingsgrupp och hade
krav som ändrades lämpar sig en agil kravhantering bäst för ett liknande framtida projekt.
86
Litteratur
[1]
H. Kniberg, Scrum and XP from the Trenches, 1. utg. Lulu, 2007.
[2]
I. Jacobson, P.-W. Ng, P. E. McMahon, I. Spence och S. Lidman, The Essence of Software
Engineering: Applying the SEMAT Kernel, 1. utg. Addison-Wesley Professional, 2013.
[3]
Systems and software engineering — systems and software quality requirements and evaluation
(square) — system and software quality models, ISO/IEC 25010:2011, 2011.
[4]
M. Takada. (9 maj 2016). Single page apps in depth, URL: http : / /
singlepageappbook.com/index.html.
[5]
M. Arvola, Interaktionsdesign och UX: Om att skapa en god användarupplevelse. Studentlitteratur AB, 2014.
[6]
V. Jína, “Javascript test runner,” examensarb., Czech Technical University in Prague,
2013.
[7]
Karma. (19 april 2016). How it works, URL: https://karma-runner.github.io/
0.13/intro/how-it-works.html.
[8]
The jQuery Foundation. (10 maj 2016). Qunit, URL: http://qunitjs.com/.
[9]
V. Jína, M. DuVall, F. Ziegelmayer, S. Yalkabov och N. Cox. (10 maj 2016). Karma-qunit
readme, URL: https://github.com/karma-runner/karma-qunit.
[10]
W3C. (19 april 2016). The web standards model - html css and javascript, URL: https:
/ / www . w3 . org / community / webed / wiki / The _ web _ standards _ model_ _HTML_CSS_and_JavaScript.
[11]
——, (19 april 2016). Html and css, URL: https : / / www . w3 . org / standards /
webdesign/htmlcss.
[12]
AngularJS. (14 april 2016). What is angular? URL: https://docs.angularjs.org/
guide/introduction.
[13]
EmberJS. (14 april 2016). Ember.js - a framework for creating ambitious web applications, URL: http://emberjs.com/.
[14]
Mountain Goat Software. (13 juni 2016). User stories, URL: https : / / www .
mountaingoatsoftware.com/agile/user-stories.
[15]
I. Sommerville, Software engineering, 9. utg. Pearson, 2011.
[16]
International Scrum Institute. (13 juni 2016). Scrum roles - the scrum team, URL: http:
//www.scrum-institute.org/Scrum_Roles_The_Scrum_Team.php.
[17]
Trello Inc. (11 maj 2016). Trello, URL: https://trello.com/.
[18]
Slack. (21 april 2016). Slack: be less busy, URL: https://slack.com/.
87
Litteratur
[19]
Skype and/or Microsoft. (11 maj 2016). Skype | Free calls to friends and family, URL:
https://www.skype.com.
[20]
Google Inc. (11 maj 2016). Google Drive - molnlagring och säkerhetskopiering av foton,
dokument och mer, URL: https://www.google.se/drive/.
[21]
Axure. (21 april 2016). Prototypes, specifications and diagrams in one tool | axure software, URL: http://www.axure.com/.
[22]
Git project. (11 mars 2016). Git, URL: https://git-scm.com/.
[23]
V. Driessen. (11 maj 2016). A successful git branching model, URL: http://nvie.
com/posts/a-successful-git-branching-model/.
[24]
Google. (11 maj 2016). Google html/css style guide, URL: https : / / google .
github.io/styleguide/htmlcssguide.xml.
[25]
A. Whyte, B. Jervis, D. Pupius, E. Arvidsson, F. Schneider och R. Walker. (11 maj 2016).
Google javascript style guide, URL: https://google.github.io/styleguide/
javascriptguide.xml.
[26]
T. Ylonen och C. Lonvick, “The secure shell (ssh) protocol architecture,” RFC 4251, 2006.
URL: https://tools.ietf.org/html/rfc4251.
[27]
OpenBSD. (20 maj 2015). Openssh, URL: http://www.openssh.com/.
[28]
D. Flanagan, JavaScript - The Definitive Guide. O’Reilly, 2006.
[29]
R. L. Glass, Facts and Fallacies of Software Engineering. Addison-Wesley Professional,
2002.
[30]
R. D. Banker, S. M. Datar, C. F. Kemerer och D. Zweig, “Software complexity and maintenance costs,” Communications of the ACM 36.11, 1993.
[31]
P. Oman, J. Hagemeister och D. Ash, “A definition and taxonomy for software maintainability,” Software Engineering Test Laboratory, University of Idaho, Technical Report, 1991.
[32]
P. Oman och J. Hagemeister, “Metrics for assessing a software system’s maintainability,” i Software Maintenance, 1992. Proceerdings., Conference on, IEEE, 1992, s. 337–344.
[33]
J. Stilwell. (12 april 2016). Complexity-report readme, URL: https://github.com/
jared-stilwell/complexity-report.
[34]
——, (12 april 2016). Escomplex readme, URL: https : / / github . com / jared stilwell/escomplex.
[35]
D. Wahlin. (14 april 2016). Customermanagerstandard readme, URL: https : / /
github.com/DanWahlin/CustomerManagerStandard.
[36]
I. Minar. (14 april 2016). Foodme readme, URL: https://github.com/IgorMinar/
foodme.
[37]
C. Müller. (14 april 2016). Ember.js dashboard readme, URL: https://github.com/
pangratz/ember.js-dashboard.
[38]
C. Floyd, “A systematic look at prototyping,” i Approaches to Prototyping, R. Budde, K.
Kuhlenkamp, L. Mathiassen och H. Züllighoven, utg., 1984.
[39]
VentureGeeks. (25 maj 2016). Geekbot, URL: https://geekbot.io/.
[40]
M. Cohn. (11 maj 2016). Daily scrum meeting, URL: http : / / www .
mountaingoatsoftware.com/agile/scrum/daily-scrum.
[41]
T. Niinimaki, “Face-to-face, email and instant messaging in distributed agile software
development project,” IEEE, 2011.
[42]
M. Bless, Agile Processes in Software Engineering and Extreme Programming. Springer
Berlin Heidelberg, 2010, kap. Distributed Meetings in Distributed Teams, s. 251–260.
88
Litteratur
[43]
M. Luz, D. Gazineu och M. Teófilo, “Challenges on adopting scrum for distributed
teams in home office environments,” International Journal of Social, Behavioral, Educational, Economic, Business and Industrial Engineering Vol:3, No:11, 2009.
[44]
R. L. Daft och R. H. Lengel, “Organizational information requirement media richness
and structural design,” Managament Science Vol:32 No:5, 1986.
[45]
M. M. Müller, “Are reviews an alternative to pair programming?” Empirical Software
Engineering, vol. 9, nr 4, s. 335–351, 2004.
[46]
A. Cockburn och L. Williams, “The costs and benefits of pair programming,” Extreme
programming examined, s. 223–247, 2000.
[47]
S. McConnell, Code Complete, Second Edition. Microsoft Press, 2004, kap. 21.2 Pair Programming, s. 483–484.
[48]
Android Community. (8 maj 2016). Life of a patch | android open source project, URL:
https://source.android.com/source/life-of-a-patch.html.
[49]
J. Lindström. (8 maj 2016). Critic code review system, URL: https://www.openhub.
net/p/jensl-critic.
[50]
H. Saleh, JavaScript Unit Testing, 1. utg. Packt Publishing Ltd, 2013.
[51]
D. S. Janzen, “Software architecture improvement through test-driven development,”
2006.
[52]
K. Beck, Test-Driven Development By Example, 1. utg. Addison-Wesley Professional, 2002.
[53]
L. W. Boby George, “An initial investigation of test driven developent in industry,”
2003.
[54]
L. Crispin, “Driving software quality: how test-driven development impacts software
quality,” 2006.
[55]
Linux kernel project. (7 maj 2016). Submitting patches, URL: https://www.kernel.
org/doc/Documentation/SubmittingPatches.
[56]
GitHub. (11 maj 2016), URL: http://www.github.com.
[57]
The Apache Software Foundation. (21 maj 2016). Subversion, URL: https : / /
subversion.apache.org/.
[58]
S. Chacon och B. Straub, Pro Git, 2. utg. Apress, 2014.
[59]
E. Shihab, C. Bird och T. Zimmermann, “The effect of branching strategies on software
quality,” i Proceedings of the ACM-IEEE International Symposium on Empirical Software
Engineering and Measurement, 2012, s. 301–310. DOI: 10 . 1145 / 2372251 . 2372305.
URL: http://doi.acm.org/10.1145/2372251.2372305.
[60]
C. Walrad och D. Strom, “The importance of branching models in scm,” Computer, vol.
35, nr 9, s. 31–38, sept. 2002, ISSN: 0018-9162. DOI: 10.1109/MC.2002.1033025. URL:
http://dx.doi.org/10.1109/MC.2002.1033025.
[61]
C. Bird, P. C. Rigby, E. T. Barr, D. J. Hamilton, D. M. German, P. Devanbu, A. E. Housman och A. S. Lad, The promises and perils of mining git, 2010.
[62]
D. Galin, Software Quality Assurance from theory to implementation, 1. utg. Pearson, 2004.
[63]
S. McIntosh, Y. Kamei, B. Adams och A. E. Hassan, “The impact of code review coverage and code review participation on software quality: a case study of the qt, vtk, and
itk projects,” ICSE, 2014.
[64]
J. Rosenberg, “Some misconceptions about lines of code,” IEEE, 1997.
[65]
B. A. Myers och M. B. Rosson. (27 maj 2016). Survey on user interface programming,
URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.
18.7394&rep=rep1&type=pdf.
89
Litteratur
[66]
usabilitypartners. (18 maj 2016). Iso-standarder, URL: http : / / www .
usabilitypartners.se/om-anvandbarhet/iso-standarder.
[67]
J. Nielsen. (24 maj 2016). Usability 101: introduction to usability, URL: https://www.
nngroup.com/articles/usability-101-introduction-to-usability/.
[68]
J. M. Spool. (17 maj 2016). 5 design decision styles. what’s yours? URL: https : / /
articles.uie.com/five_design_decision_styles/.
[69]
N. N. Group. (26 maj 2016). Turn user goals into task scenarios for usability testing,
URL: https://www.nngroup.com/articles/task-scenarios-usabilitytesting/.
[70]
J. Nielsen. (11 maj 2016). Usability inspection methods, URL: http://www.sigchi.
org/chi95/proceedings/tutors/jn_bdy.htm.
[71]
——, (13 maj 2016). How to conduct a heuristic evaluation, URL: https : / / www .
nngroup.com/articles/how-to-conduct-a-heuristic-evaluation/.
[72]
——, (27 maj 2016). Standards inspections, URL: http://usability.jameshom.
com/stdinsp.htm.
[73]
I. Inayat, S. S. Salim, S. Marczak, M. Daneva och S. Shamshirband, “A systematic literature review on agile requirements engineering practices and challenges,” 2014.
90
Bilaga 1 Sammanställning av tidigare
erfarenheter
Arbetsuppgifter & planering
• Om alla uppgifter som planerats in under en period färdigställs tidigare än planerat,
fortsätt med nästa uppgift. Vänta inte på att nästa arbetsperiod ska börja.
• Ha en jämn arbetsbelastning.
• Avlasta “experterna” – ge enkla uppgifter till lägre presterande personer.
• Tidplanering är viktigt, likaså prioritetsordning av uppgifter.
• Projektplanen var väldigt svår att uppskatta men det var förväntat. Viktigt att hela
tiden ha ”nästa” steg klart för sig.
Arbetsmetod
• Scrum/Kanban board där man kan se status på tasks vill jag gärna göra igen.
• Ta initiativ till att ta lediga tasks om man har tid över.
• Parprogrammering gillar jag.
• I förra projektet var vi fyra stycken som delade upp oss två och två. Det gick väldigt
bra, men man hade väldigt dålig koll på vad det andra paret höll på med. Om man
kanske kan göra code review på varandras kod eller nåt sånt så man blir lite mer insatt,
för vi hade behövt lite kodgranskning tror jag.
Utbildning
• Lägg mer tid på utbildning, det vill säga läs på mer innan design och kodning görs.
• Bli bättre på att läsa igenom datablad och inte vara rädd att tidrapportera denna typ av
utbildning.
• Kodstugor/workshops gör småfrågor lättare.
91
Gruppdynamik
• Ha inte hemliga kommunikationsvägar (har orsakat att en medlem känt sig utstängd
då hen inte fått info om event).
• När problem uppstår, hantera detta innan det blir konflikt.
• Fira framgångar! Bli inte tyst när allt går bra.
• Kommunikation är viktigt, däri ingår att man ska kunna ta bra och dålig kritik från en
gruppmedlem.
• Kommunikationen har varit bra, mycket tack vare att vi kände varandra bra sedan tidigare.
• I och med att vi är en slumpad grupp tror jag att vi har en bredare kompetens än en
självvald grupp.
• Det är svårt att vara projektledare över sina vänner men samtidigt kan det nog bli fler
konflikter i en grupp där man är mer olika.
Projektorganisation
• Ge inte områdesansvariga för mycket makt över sitt område.
• Skriv gruppkontrakt!
• Gruppkontraktet borde innehålla hur information om möten och liknande kommuniceras inom gruppen.
• Kom överens om konsekvenser om en person kommer sent till ett avtalat möte, alternativt inte dyker upp alls.
• En bra överenskommelse inom gruppen om enklare frågor som förseningar och arbetstid visade sig vara mycket givande, så länge alla är överens.
• Mer formalitet önskas, vi känner inte varandra lika bra nu och är i en större grupp än
tidigare.
Tidfördelning
• Alla ska kunna redogöra för det antal timmar de har arbetat (när och vad och inte bara
totala antalet timmar). Helst att gruppen går igenom varje vecka vad varje enskild
person har gjort, så att alla har en övergripande idé om hur långt man faktiskt har
kommit i arbetet.
• Vi var dåliga på att jobba på i början när vi hade tid, så det blev många helger och nätter
på slutet.
• Vi jobbade mycket men på dagtid, vilket fungerade bra.
• Vi lade ungefär lika mycket tid på projektet varje vecka vilket gjorde att det inte kändes
så tungt.
• Jobba mycket även tidigt i projektet.
• Alla gruppmedlemmar la ner lika mycket tid men vissa bidrog med betydligt mycket
mer än andra. Detta blir förhoppningsvis bättre med ett bredare projekt.
• Lägg tid på dokumentation under projektets gång. På så vis slipper man hetsa ihop
något i slutet.
92
Utveckling
• Kom överens om att all kod som skrivs ska finnas tillgänglig för de andra.
• Det ska helst inte finnas kod som bara en person har skrivit och som endast hen förstår,
de andra ska inte vara låsta bara för att en person inte har dykt upp...
• Vi hade ingen versionshantering av koden utan den låg lite utspridd på ett par personers privata konton, vilket inte fungerade så bra.
• De olika delarna testades inte tillräckligt mycket innan man ansåg att man var klar med
dem. Detta ledde till att när det uppstod fel kunde man aldrig isolera felet eftersom
man inte var helt säker på att något fungerade som de skulle.
• Prototypning är bra.
• Experimentera med features och sätt att jobba för att kunna uppleva för-/nackdelar.
• Använd en gemensam branching workflow (e.g git).
• Genomför code reviews (i någon mån).
• Git var bra men commit-meddelandena blir lätt väldigt dåliga utan regler för det.
• Jag ser gärna att vi inte krånglar till lösningar och vågar bryta mot projektplanen ifall
det finns bättre alternativ vi inte tänkt på.
Övrigt
• En sak som funkade väldigt dåligt var att vi inte direkt såg till att alla hade koll på
hårdvaran och hur man jobbar med den. Det gjorde att vi vara beroende av att vissa
specifika personer var närvarande för att vi skulle kunna jobba framåt.
• Tänk med sunt förnuft.
• Man kanske behöver ha lite tid för retrospection också så man kan ta upp vad som
fungerar dåligt. Det verkar vara ovanligt bland studenter men ganska vanligt hos företagen.
93
Bilaga 2 Sammanställning av
iterationsutvärderingar
2.1
Förstudie
2.1.1
Fullständig sammanställning
Rollfördelning, hur känner du inför din roll och de andras roller?
Bra
• Alla verkar trivas i sina roller. (2 st.)
• Rollfördelningen gick väldigt smidigt. (2 st.)
• Alla sköter sina rollspecifika uppgifter. (5 st.)
• Väldigt bekväm (3 st.)
• Alla har olika arbetsbelastning i början men det är ju bara naturligt.
• Jag har inte så mycket kunskap inom just programmering och upplägget som krävs så
det känns bra att inte behöva ha ansvar över något sådant.
• Hjälper till så fort fråga uppstår! (hjälpt mig sätta upp Git t ex)
• Är mycket nöjd med rollerna. Det känns bra.
• Bra! Min roll tycker jag passar, kunde säkert tagit någon annan men jag tyckte om
alternativen likvärdigt.
• Mycket nöjd med min roll, jag trivs som ledare.
Kan bli bättre
• Vice-roller
• Jag vill ha mer av en ledarroll.
• Det känns lite som att testplanen och kvalitetsplanen mer är till för en inlämning än för
oss själva att använda.
• Utbildningar kunde varit mer strukturerade och genomtänkta, tidsbegränsade. Men i
allmänhet mycket uppskattade! (gäller främst Git).
94
2.1. Förstudie
• Mer samarbete mellan vissa roller.
• Jag är fortfarande lite för snurrig för att kunna hålla alla trådar ordentligt.
Möten, hur har de fungerat och har du kunnat vara med så mycket som du velat?
Bra
• Måenderundor <3 (4 st.) – bidrar till personlighet och sammanhållning inom gruppen.
• Bra med ett protokoll. (2 st.)
• Bra närvaro.
• Trevligt, dagordning -> ej spårar off topic.
• Har varit för det mesta väldigt effektiva och TL är bra på att flika in när vi börjar bli off
topic eller hoppar mellan mötespunkter.
• Bra att ha ett protokoll upplagt för möten som kommer, så att man vet vad man ska
förvänta sig.
• Vi har högt till tak. (2 st.)
• Roliga utsvävningar.
• Inte många förseningar.
• Tycker det flyter på bra.
• Alla får chans att prata, alla vågar säga vad de tycker, tror ingen känner sig överkörd.
• Bra mängd möten.
• Bra med pauser.
• Bra och naturlig schemaläggning.
• Vi är effektiva som tusan.
Kan bli bättre
• Vi har många möten så vi hinner inte med så mycket annat.
• Ha distansarbete.
• Många sena ankomster. (2 st.)
• Det har varit lite mycket off-topic nu.
• Mötena drar ofta över på tiden så det vore bra med ett tydligare avslut.
• Har inte varit med så mycket som jag har velat eftersom jag har haft problem med bilen.
• Det känns ibland en aning ineffektivt då vi pratar om samma ämne under en, enligt
mig, lite för lång stund.
• Måenderundorna känns lite onödiga.
• Har hänt några gånger att jag inte kunnat närvara vilket förstås är tråkigt. Har dock
inte upplevt att detta varit ett problem för min del, men kräver ibland lite extra tid av
någon annan för att ge mig en recap.
95
2.1. Förstudie
• Ibland hamnar vi lite väl off topic, men det verkar som det blir bättre. Varierar lite från
gång till gång också.
• Lite mer koll på tiden, sätta streck i debatten, kanske planera hur lång tid mötespunkter
ska ta för att hinna med allt. (2 st.)
• Bli bättre på att boka lokaler i tid, och sätta upp dagordningen i förväg (funkade bättre
i början för min del).
• Blir ofta tidspressat.
• Missade kodstuga igår, vilket var synd.
Verktyg (Trello, Drive, Git, Slack)
Bra
• Slack är bra. (4 st.)
• Fungerar överlag bra. Skönt att ha olika verktyg till olika saker.
• Drive fungerar bra. (4 st.)
• Slack är en lifesaver med notiser.
• Trello är OK. (2 st.)
• Git är kul.
• Skönt med postspecifika mappen på driven.
• Älskar slack och slackbots.
• Bra att lära sig git på riktigt.
• Översikten på Trello är nice. Svårt att hantera större aktiviteter.
• Drive är ett enkelt sätt att se vad andra gjort och dela med sig av filer. Nice att flera kan
arbeta i ett dokument samtidigt!
• Slack är nice för att man kan ha många kanaler, och även chatta individuellt. (2 st.)
• Git har fungerat övervägande bra. Trello återstår att se.
• Bra med drive och att vi har så mycket material där.
• Git är bäst, roligt med vår planerade branching-strategi.
• Slack är otroligt bra med schemaläggning av möten.
Kan bli bättre
• Ordningen på drive. (2 st.)
• Har inte testat Git än, borde göra det.
• Det är lite svårt att hitta i docs ibland.
• Trello.
• Tidskrävande att fylla i tidrapporteringen i Trello. Kan givetvis underlättas om jag ser
till att fylla i direkt istället för allt i slutet av veckan. . .
96
2.1. Förstudie
• Drygt att snygga till dokumenten hämtade från Drive, blir nog enklare när LaTex börjar
användas?
• Ibland lite rörigt för att det är så många kanaler i slack. . .
• Slacks pushnotifikationer är lite instabila, det är dock inget vi kan göra något åt.
• Tycker formatet för tidrapportering är liiite bökigt, men man kommer nog in i det.
• Jag, personligen, borde ge trello lite mer chans.
• Upprensning i Drive behövs, där börjar bli kaos.
• Trello är inte fullt i bruk än, git har jag inte börjat med.
Samarbetet i gruppen
Bra
• Vi har inte missat någon deadline.
• Får bra respons om man ber om hjälp.
• Har funkat jättebra med de jag kört 1 on 1 med.
• Jag tycker att det har fungerat bra. (3 st.)
• Alla hjälper till.
• Tycker vi varit bra på att fördela ansvar bland gruppmedlemmar.
• Skönt att folk vågar säga vad de tycker. Alla gör sitt jobb, känner att man kan samarbeta
med alla och att det inte är någon barriär att fråga om hjälp.
Kan bli bättre
• Återstår att se när vi börjar parprogrammera.
• Vi sitter ofta en och en.
• När utbildningar ska hållas av två olika personer inom en utsatt klump tid kanske de
borde pratat ihop sig om hur länge respektive del skulle ta. (Dumt att missa Fredriks
grejer, hade behövts!)
Stämning i gruppen
Bra
• Mycket bra stämning. Alla är trevliga och tillmötesgående.
• Bra! Gör att det går off topic ibland, vilket är nice.
• Vi har högt till tak.
• Skön och avslappnad stämning.
• Känns bra att vi kan prata med varandra om hur vi mår och vara öppna och ärliga.
• Bra stämning, inget att klaga på!
• Trevlig, prestigelös, öppen, inkluderande.
• Väldigt fin. Ingen bitterhet vad jag känner av. Inga onödiga kommentarer.
97
2.1. Förstudie
Kan bli bättre
• Vi/jag behöver prata mer.
• Tänk på språket och vad man skämtar om, jag tycker att även om vi känner varandra
och så bör man undvika det människor kan ta illa upp, även utanför gruppen.
Kommunikation mellan gruppmedlemmar
Bra
• Vi är öppna. Ser inget som hindrar god kommunikation just nu.
• Alla svarar snabbt på slack och det känns som att alla säger vad de tycker.
• Bra, mycket tack vare slack. (2 st.)
• Verkar ha fungerat bra än så länge. . .
• Supersmidigt med mötesprotokollen, plus för välskrivna sådana. Har haft väldigt lätt
att skaffa mig en överblick över vad som gjort den veckan jag varit borta nu.
• Bra att folk skriver om de är sena, var de sitter och arbetar. Bra att man kan fråga utan
att känna sig dum. Bra att teamleader och andra säger till när det blir för off topic.
• Sker fint och trevligt, mycket reaktande i slack!
• Slack fungerar hur bra som helst, möten också.
Kan bli bättre
• Jag har inte snackat så mycket med någon ännu så det återstår att se.
• Vi kan behöva en kanal för att bara skriva av oss.
• Lite dumt att TL missade att vidarebefordra mail om seminariet, men lätt hänt!
• Off topic-grejer. Ta ej upp sånt som inte rör en stor del av de på mötena, ha mindre
möten i så fall (mer som tips).
• Fortfarande ovan att chatta med folk -> svårt att läsa humör i meddelanden pga skillnad
i smiley-användande.
Tidrapportering
Bra
• Smidigt att rapportera i trello. (2 st.)
• I största allmänhet så är det bra att den skickas in på måndagar. Rebecka är också bra
på att varna inför deadline.
• Relativt enkelt.
• Skönt att ha allt på samma ställe i Trello. (2 st.)
• Bra att alla rapporterar vad de gör så man får insyn.
• Nice att jag fick öva på Python genom att skriva parsern.
Kan bli bättre
• Kategorikorten är onödiga.
98
2.1. Förstudie
• Skulle vara bra att se hur många timmar man har arbetat under veckan. (3 st.)
• Måste rapportera precis när man har gjort nåt, jag glömmer ofta.
• Behövs ett sätt att kunna se en summering för veckan. Nu är det svårt att se om man
har missat något. (2 st.)
• Funderar om varje aktivitet ska få ett aktivitetsnummer för att underlätta rapporteringen?
• Min egen tidrapportering, borde göra mer kontinuerligt, inte i sista stund.
• Känns som att vi lika gärna kan göra det i excel.
Handledningsmöten
Bra
• Lunchmöteprincip är bra.
• Handledaren är engagerad och svarar på många frågor.
• Väldigt bra i början när vi inte visste så mycket.
• Nöjd med handledaren. (3 st.)
• Bra att handledaren sitter med under våra vanliga möten och blir som en del av gruppen. Flikar in med info/kommentarer när det behövs.
• Tar upp relevanta frågor etc.
• Går hyfsat smidigt att boka in. Adrian är punktlig och trevlig, och svarar otroligt snabbt
(på mail).
Kan bli bättre
• Lite onödiga.
• Vill helst att de inte ska ligga på lunchen.
• Får inte jättemycket information av handledaren. Kanske eftersom han inte fått info av
examinatorn?
• Fortfarande inte helt klart om jag eller handledaren leder mötena, lätt för mig att gå in
i maktkamp.
2.1.2
Förbättringsförslag
Rollfördelning
• Vice-roller.
• Planera workshops/utbildningar bättre så de håller tiden.
• Utvecklingsledaren (Eric H) ska ta mer plats som ledare för utvecklingsarbetet.
• Eventuell workshop/genomgång om hans vision för systemet.
99
2.2. Iteration 1
Möten
• Lite väl mycket off topic-prat då vi blivit så bekväma med varandra.
• Drar ofta över tiden, ha tydligare avslut.
• Helst inte ha handledarmöten under luncher.
• Fylla i mötesprotokoll i förväg med dagordningspunkter.
• Boka salar i tid (Rebecka).
• Avsätta tid per mötespunkt.
• Mötena kommer oftast igång sent.
Verktyg (Trello, Drive, git, Slack)
• Trello funkar inte bra för tidrapportering, vi byter till spreadsheet i Drive från vecka 8.
• Det är kaos i Drive och svårt att hitta. Kim (dokument) och Robert (konfiguration)
städar upp.
• Oklart när man ska flytta tasks mellan listor i Trello.
Gruppen
• Jargongen under mötena har gått lite väl långt. Vi ska försöka hålla en något mer professionell nivå.
• Mer one-on-one tid mellan gruppmedlemmar önskas, löses av parprogrammerandet.
2.2
Iteration 1
2.2.1
Fullständig sammanställning
Utvecklingsarbetet, hur har det gått att kicka igång?
Bra
• Mycket har blivit kodat.
• Tycker det funkat bra med reviewsystemet vi använder nu. (2 st.)
• När man väl började gick det väldigt lätt.
• Äntligen få börja koda.
• Går snabbt att göra saker.
• Har lärt mig mycket. (3 st.)
• Har gått automatiskt! Har någon haft tid har de tagit uppgifter självmant och
självgående! *en tumme upp*
• Vi har vetat vad vi inte vet och kunnat fixa/lära sig.
• Backloggen är tom!
• Mycket bra med utbildningarna plus tips och idéer på IDEer.
• Alla har jobbat på och plöjt igenom det som fanns i backlogen.
100
2.2. Iteration 1
• Kul med nytt språk.
• Att vi har delat upp allting i aktiviteter känns det lätt att komma igång med en uppgift.
Det finns alltid någonting att göra.
Kan bli bättre
• Jag känner att jag ligger efter stort i allt vad gäller koden och kodande.
• Arbetet var lite spretigt i början, men det rättades till efter lite kommunikation och
skapandet av en gemensam grund att stå på.
• Namngivning.
• Det har gått lite trögt pga mycket overhead i kursen såsom seminarier och dylikt.
• Skulle vilja göra mer utvecklingsarbete.
• Borde gjort GUI-skelett tidigare.
• Hade lite överlapp.
• Glöm inte att stå upp! Tänk på hållningen.
• Det är lite spretigt och går lite långsamt.
• Har haft dependencies på andra delar (t ex GUI-framework) som låg olöst ett tag, att
kommunicera dessa dependecies vore nice.
• Lite svårt att veta hur vi skulle börja. GUI-gruppen verkar ha haft lite missförstånd då
huvudgränssnittet inte påbörjades förrän sent.
• Känns som att man inte riktigt har kommit igång än. . .
• I början var GUI-delen väldigt oklar. Vi hade inget gemensamt framework och allt var
lite kaos. Det var oklart vem som hade ansvar för vad. Under iteration 2 får vi inte låta
sådana viktiga och centrala saker bara ligga i luften.
Parprogrammering/ensamt arbetande/arbete i grupp
Bra
• Stort fan av parprogrammering, utifrån det lilla jag gjort.
• Det går mycket snabbare när man är två.
• Väldigt lärorikt.
• Ha koll på mycket features som finns så man kan googla bra.
• Tillgängligt.
• Roligt att parporgrammera, bra för teambildingen.
• Har gått bra :)
• Feedback är nice
• Grupp är nice
• Gick hyfsat bra, svårare när man har funderingar och sitter ensam i övrigt tycker jag att
arbetet har flutit på bra.
101
2.2. Iteration 1
• Det verkar ha flutit på bra hos folk, bra med två hjärnor :)
• Fungerar jättebra med kodstugor, hade gärna fått vara oftare.
• Tycker att det är bra att man är ganska fri i hur man vill arbeta.
Kan bli bättre
• Jag har inte parprogrammerat så mycket, eftersom jag gjort mycket med Kristoffer.
• Svårt att hitta tider då båda kan.
• Mer kodstugor.
• Mer flexibla par?
• Ibland blir man lite låst när jag känner för att jobba men inte vill träffa folk ;)
• Vi har haft personer inblandade i 3-4 olika saker samtidigt som parjobbat med personerna med bara 1 uppgift, men ska jobba lika många timmar. Det funkar ej =) ena
personen jobbar ensam (så: par efter mängd “fria timmar” eller minska antalet “olika
jobb” vi har inom gruppen)
• Lite jobbigt med parprogrammering ibland. Har hänt att den ena jobbar hemifrån ändå
bara för att testa runt lite, som den andra sen måste sätta sig in i.
• Har gått väldigt långsamt då man enbart kört på en dator - är kanske bättre med varsin.
• Jag upplever inte att jag tillfört särskilt mycket.
• Jag måste bli bättre på att arbeta med andra och programmera med andra. Jag har
en tendens att sätta mig själv med musik och arbeta själv istället för att skriva i slackkanalen.
Utvecklingsmiljöer (WebStorm)
Bra
• Helt okej.
• Nöjd med WebStorm, smidigt att använda. (2 st.)
• Fräscht
• Bra filhantering
• Inga bråk med projektfiler.
• Todo/Fixme
• Karma (2 st.)
• Den gör jobbet!
• Inspections
• Egen webbserver
• WebStorm fungerar ganska bra, brackets är helt åt skogen dock.
• Lätt att använda. Skönt att det fungerar så bra med Git.
• Riktigt bra! Tar lite tid att komma igång med allt men nu är det super!
102
2.2. Iteration 1
Kan bli bättre
• Mycket jag inte känner till som skulle kunna underlätta arbetet, förmodligen
• Inspections (finns bugs (t ex unresolved var))
• Koda WebStorm bättre
Versionhantering
Bra
• Nice att äntligen få använda det så jag lär mig.
• Det fungerar:)
• Robert är bra på att svara.
• Lite rädd att göra saker.
• Guiden som finns.
• Branching strategi (3 st.)
• Alla frågor och funderingar jag haft har klarats ut, Robert har koll.
• Skönt med rapporten i git. Latex <3
• Ja! Inga major mishaps =D
• Smidigt att kunna gå tillbaka, annars inget.
• Börjar få grepp om Git nu & känner mig mer självsäker.
• Git är ju rätt svårt men jag tycker att vi har en riktigt bra struktur.
Kan bli bättre
• Lite rädd att göra saker
• Mer strikta regler?
• Local branching (men det behövs inte, det är en personal workflow-grej), testa gärna
mer!
• Har någon läst git-primern?
• Kristoffers git-problem (men det har löst sig nu)
• Kom till mig direkt! Don’t worry
• Fortfarande lite bökigt ibland. Då är det tur att vi har Robert =)
• Jag kan bli bättre på Git, har gjort fel och slitit mitt hår flera gånger nu :)
103
2.2. Iteration 1
Verktyg (Trello, nya tidrapporteringen)
Bra
• Smidigt att se projektets status i Trello.
• Gillar nya tidrapporteringen. (8 st.)
• Nya tidrapporteringen är smidig. (2 st.)
• Trello nice för sprintplan.
• Trello har fungerat relativt bra.
• Tidrapporterar nu i Drive - bättre översikt & snabbare!
• Med nya tidrapporteringen slipper använda något annat verktyg vid sidan av (som till
exempel toggl).
Kan bli bättre
• Att uppdatera Trello då man utfört arbete.
• Fortfarande lite oklart när man ska flytta kort.
• Känns inte som man tittar på trello jättemycket. (2 st.)
• Lätt att glömma bort Trello, inte helt integrerat i utvecklingsprocessen.
• Issue tracking (används knappt?) samt “prioritetsröstning” på issues.
• Reviewern flyttar kortet
• Jag borde fylla i tidigare än söndag kväll.
• Använder alla Trello? Känns som att man är lite rädd för att kryssa i checklistorna &
flytta runt korten.
• Jag känner mig lite osäker i trello. Till exempel nu började jag med “Putsa till GUI”kortet, men gör ju bara små uppgifter. Vet inte om jag ska flytta kortet och sätta det på
mig. Eller om jag borde gör nya underkort/listor och sen berätta vad jag tar. Just det
kortet känns för stort.
Testning, hur har det fungerat?
Bra
• Jag ska kalla till möte.
• Smidigt med QUnit/Karma. Känner sig säkrare när man gör förändringar.
• Karma verkar vara bra men har inte använt det så mycket än.
• Smidigt med karma.
• Lätt installation (även för windows).
• Folk verkar ha lyckats göra en hel del enhetstester utan särskilt mycket utbildning.
• Integrations var nice!
• Både och, WebStorm->view in firefox uppdaterar ej om man har en annan sida öppen
redan.
104
2.2. Iteration 1
• Erics video om att komma igång var toppen!
• Enhetstestningen i WebStorm tycker jag fungerar riktigt bra, skönt att det körs automatiskt.
Kan bli bättre
• Kanske börja dela upp testfallen i fler filer.
• Hade en bugg där karma körde gamla test när jag klickade på run, var tvungen att
stänga fönstret den öppnar.
• Nästa iteration bör alla vara med och integratiostesta. Nu blev det väldigt hafsigt.
• Tycker nivån på unit-testar på är lite off, testerna i sig är bra, men tror att vi borde testa
på en högre nivå (t ex med manuellt skapta html-sidor).
• Har inte hunnit testa. (2 st.)
• Fortfarande osäker på hur testningar faktiskt går till. (2 st.)
Kommunikation mellan gruppmedlemmar
Bra
• Funkar fortfarande bra.
• Tycker det fungerar bra i slack. (4 st.)
• Vi har högt i tak.
• Öppet! Ärligt! Härligt!
• Verkar fungera bra, iaf från mitt perspektiv.
• Bra med Daily Scrums eftersom man då får en inblick i vad alla gör!
• Alla är fortfarande aktiva och hjälpsamma, väldigt bra!
• Tillgänglighet.
Kan bli bättre
• Märks i slack att det är tenta-p nu, inte så responsivt.
• Ev. koordinering av feature-utveckling.
• Mer kodstugor.
• Tror det finns mer frågor att diskutera än vad som hinns med på AFK-mötena, men iofs
är det nog bra att det är lite begränsat.
• Kommunicera “prioriteter” och dependencies (mer utveckling).
• Statusrapporter.
• Slack skickar ej notiser ibland. (2 st.)
• Ibland känns det som om vi borde ha fler kanaler på slack. Typ en “Code_help” som
man kan posta lite kod man tycker är knepig och behöver hjälp med eller nått sånt. En
“Kandidatrapport” där man kan skriva om nått är oklart i rapporten eller LaTeX. “Git”
för frågor om git.
• Jag drar mig lite från att skriva i “General” för då känns det som om jag tvingar alla att
läsa.
105
2.2. Iteration 1
Stämning i gruppen
Bra
• Toppenbra.
• Mycket trevligt (2 st.)
• Vi har lämnat smekmånaden och börjat på riktigt, vilket är bra!
• Bra, mycket bra grupp att jobba i! :)
• Fortfarande smekmånad! Alla verkar glada och trevliga mot varandra & om varandras
arbete.
• Riktigt härlig och bra stämning!
• Vi bryr oss :)
Kan bli bättre
• Mer kodstugor.
• Göra något kul igen?
• Skulle vara kul med kick-off 2. (2 st.)
Följer vi projektplanen?
Bra
• Så vitt jag vet. (2 st.)
• Jag tror den speglar verkligheten rätt bra.
• När vi kollade senast så har vi gjort vissa saker snabbare än tänkt, men i det stora hela
så följer vi planen.
• Än så länge följs den, med undantag från några datum för dokumentation (framflyttade
inom grupp/fått OK av handledare).
• Ja det tycker jag att vi gör! (2 st.)
Kan bli bättre
• Jag har ingen koll på projektplanen just nu.
• Experimentera mera? :P
• Kanske tåls att läsas igenom i början av varje iteration för att kolla att vi inte
avviker/uppdaterar vid behov.
• Jag har väldigt dålig koll på vad som står i projektplanen. Borde uppdatera mig på
dokumenten vi gjorde under förstudien. Detta kanske är någon individuellt dock.
106
2.2. Iteration 1
Följer vi kravspecifikationen?
Bra
• Ingen aning faktiskt.
• Några krav har vi allt bockat av. 50 % kvar dock.
• Tasks i Trello är kopplade till kravspecen. (2 st.)
• Sprint planning “löser” detta till stor del
• Ja, kravspecen har vi följt hittills, det gäller bara att få med alla punkter tillslut.
• Vad jag vet följer vi den!
• Ja det tycker jag att vi gör!
Kan bli bättre
• Personligen har jag inte gått igenom några krav och verifierat att vi faktiskt uppfyller
dem, det borde jag göra.
• Utseendet är ju bara i något första utkast-stadie men färgerna stämmer inte överens
med att inte försvåra för färgblinda.
• Råkade göra ett krav 2?
• Kanske blir svårare när vi börjar arbeta med mindre viktiga krav.
• Jag själv har inte läst kravspec. när jag ställde frågan “behövs denna feature”, det borde
jag gjort, alt. fråga gruppen/Victor.
• Jag har väldigt dålig koll på vad som står i kravspecifikationen. Borde uppdatera mig
på dokumenten vi gjorde under förstudien. Detta kanske är någon individuellt dock.
Uppdatering av relevanta dokument
Bra
• Har fungerat bra. (2 st.)
• Bra med reviews.
• Nu skulle ju alla dokument in i halvtid så därför är de uppdaterade.
• Bra, Driven är smidig, hade inte valt annat verktyg för det.
• Har varit svårt att hitta ibland, men det är rensat nu (Y)
• Projektplan & kravspec har uppdaterats några gånger.
• Tror att de dokument som behövts uppdateras har blivit det. (2 st.)
Kan bli bättre
• Ligger gamla riktlinjer och dräller i Drive, mitt fel :(
• Vi ska nog inte lägga för mycket tid på det dock.
• Kommer inte på att göra det direkt, känns lite jobbigt att göra.
• Har ingen koll på dokumenten :)
• Vet alla om de ändringar som gjorts? (Blir så himla mycket läsande, tråkigt. . . )
107
2.2. Iteration 1
Utbildning WebStorm/webbutveckling
Bra
• Den privata genomgång jag fick med Fredrik var väldigt givande.
• Man kan ju alltid titta på koden som finns alternativt lära sig på egen hand.
• Fredriks utbildning var bra. (3 st.)
• Fick en överblick över vad som skulle göras. (2 st.)
• Fick överblick av vad som WebStorm har att erbjuda.
• Learning by doing!
• Visade kod!
• Diskussion om arkitektur och utvecklingsideologiska ting.
• Bra, det hjälpte mycket i början med ett exempel att kolla på.
• Bra att vi diskuterat kodstandard.
Kan bli bättre
• Kunde hållts tidigare.
Utbildning Git
Bra
• Nöjd med utbildningen.
• Den vi hade var lite lång men samtidigt bra.
• Bra att man alltid kan be Robert om hjälp. (2 st.)
• Väldigt grundlig, mycket bra information. (3 st.)
• Fint visualiserad med branches/tid.
• Gick igenom kommandon.
• Gick igenom mycket så man vet vad som man inte kan.
• Känner att jag kan git tillräckligt bra för att lösa de flesta problemen.
• Bra att se hur det fungerar med olika branches & vad som händer vid ex. merge/rebase
etc.
• Vi har satt upp en bra struktur.
Kan bli bättre
• Bra, lite väl mycket utsvävningar ibland.
• Drog ut lite på tiden. (3 st.)
• Visa kommandon (dvs t ex med projektor?).
• En fil med kommandon + info, en wiki för oss helt enkelt. Vore nice.
• Inte särskilt nybörjarvänligt. Dokumentet med vanliga kommandon förvirrar nästan
mer än den hjälper. . .
• Det var lite krångligt att gå igenom kommandon på tavlan. I Git kan man ju göra
samma sak på flera sätt och vi satte ingen riktig standard. Nu brukar jag bara googla
saker och ta det som kommer upp. Kanske inte spelar någon större roll.
108
2.2. Iteration 1
Utbildning Scrum
Bra
• Kort och koncis. (2 st.)
• Alla vet väl redan vad scrum är.
• Bra tempo, gick igenom relevanta fakta. (2 st.)
• Utbildningen var bra, vår Scrum-metodik känns rätt så förnuftig och lätt att tillämpa.
(2 st.)
• Bra, scrum har vi läst om i teorin så alla kunde väl det mesta om det redan innan.
Men en uppfräschare är ej fel, plus att vår egen modifikation av scrum blev defininerat
ordentligt var bra.
• Det var en riktigt bra genomgång. Tycker att jag fick allt på det klara.
Kan bli bättre
• Rummet var så litet (ADA) att det blev jobbigt varmt och svettigt.
• Hade kanske varit intressant med lite mer ingående utbildning. Dock inte nödvändigt
för vårt arbete =)
2.2.2
Förbättringsförslag
Utvecklingsarbetet, hur har det gått att kicka igång?
• Vi ska prata mer med varandra när vi utvecklar features som är lika varandra, för att
undvika dubbelarbete och se till att alla delar fungerar ihop.
• Saker och beslut som rör hela gruppen ska kommuniceras ut till hela gruppen.
• Olika dependencies mellan tasks ska kommuniceras bättre så inte arbetet fastnar i olika
flaskhalsar.
• Överlag mer kommunikation! Till exempel mötespunkten “Rapporter och meddelanden” ska användas bättre.
• Vi ska bli bättre på att tillsätta kommittéer som kan utreda frågor och ta beslut, i de fall
inte hela gruppen behöver vara inblandad, men det inte är lämpligt att någon gör det
själv.
Verktyg (Trello, nya tidrapporteringen)
• Den som gör reviewen flyttar kortet i Trello-listorna.
Testning, hur har det fungerat?
• Nästa iteration ska hela gruppen vara med och utföra integrationstestning (i början av
sista veckan).
Stämning i gruppen
• Vi ska ha en till kick-off nu när vi känner varandra bättre!
Följer vi kravspecifikationen?
• Victor (analysansvarig) ser till att systemet följer kravspecifikationen.
109
2.3. Iteration 2
Uppdatering av relevanta dokument
• Drive ska rensas på gamla utdaterade riktlinjer (Rebecka fixar).
2.3
Iteration 2
2.3.1
Fullständig sammanställning
Testning, hur har det fungerat?
Bra
• Integrationstestmötet var kul. (5 st.)
• Integrationstestmötet bra sätt att samla issues. (4 st.)
• Bra att alla gjorde rapporten tillsammans på plats.
• Enhetstest: smidigt.
• Alla har varit med och deltagit. (2 st.)
Kan bli bättre
• Svårt att testa funktionalitet på ett systematiskt sätt annat än logic.js
• Har inte testat något annat, vilket är tråkigt.
• Man kan inte enhetsesta all kod, borde vara tydliga vad man ska testa och inte testa.
• Enhetstest: skriver lite för att man måste.
• Det är tidskrävande att enhetstesta.
• Testa i Southfork!!!
• Det var läskigt att göra så för första gången.
Prioriterar vi rätt saker att implementera?
Bra
• Bra att vi avstämt med kravspecen, känns som att vi gör det.
• Känns som att vi har kommit framåt fort och betat av backlogen.
• Jag har inte haft några beroenden som behövts väntas på.
• Det grafiska ges tid att vänjas in i.
• Alla krav 1 är uppfyllda och kunden nöjd. (2 st.)
• Vi har inga konstiga features som t ex snurrande turingmaskiner.
• Jag tror det.
• Ja det tycker jag, allt hinns ju med utan problem.
• Ja det skulle jag vilja påstå. Vi följer kravspecen, och vi implementerade funktionaliteten först, och sedan det grafiska, vilket är logiskt.
Kan bli bättre
• Fundera över prio mellan refaktorering och kand.rapport senare.
• Har börjat implementera annat än som finns i kravspec - problem?
• Borde ha bättre koll på kravspec när man letar uppgifter.
110
2.3. Iteration 2
Kommunikation mellan gruppmedlemmar
Bra
• Tycker slack och de möten vi har funkar bra. (2 st.)
• Öppen & ärlig. Snabb återkoppling över slack. Ofta bra diskussion under kodstugor &
möten.
• Slack blir bara bättre och bättre!
• Som tidigare utvärderingar så funkar allt bra.
• Slack & högt till tak!
• Glatt och trevligt. (2 st.)
Kan bli bättre
• #reviewrequest2016 #RIP
• Deadlines för återkoppling på slack?
• Stökigt i reviewrequest.
• Slack fungerar sådär ibland, notiser kommer lite när slack känner för det.
Stämning i gruppen
Bra
• Allt.
• Lärt känna varandra bättre & alla är engagerade & intresserade av varandras arbete.
• Härlig stämning. (2 st)
• Riktigt roligt med kickoff V2. (4 st.)
• Bara bra =) trots att vi närmar oss slutet.
• Alla tiders! :)
Kan bli bättre
• Viktigt att alla vågar säga vad de tycker vid beslutsdiskussioner.
Följer vi projektplanen?
Bra
• Känns som att vi tillämpar den beskrivna processen ganska bra. (3 st.)
• Möten hålls varje vecka och vi håller det som lovats i planen (vad jag vet).
• Vi har inte gjort några större ändringar i vår arbetsmetodik. Det känns som projektplanen håller ännu.
• Det tror jag. (3 st.)
• Har inte så bra koll på den. (2 st.)
Kan bli bättre
111
2.3. Iteration 2
• Jag kan bli bättre på att parprogrammera.
• Uppdatera projektplanen kanske? Även om det känns lite “onödigt” såhär på slutet.
• Kan ha bättre koll på projektplanen.
• Skriver in hur vi jobbar med grafiska saker (så man kommer ihåg hur vi gjorde saker).
• Mycket dokumentation för att säga att vi är agila.
• Jag skulle behöva ha bättre koll på scrumboarden.
Följer vi kravspecifikationen?
Bra
• Kraven har avstämts, vi följer specen.
• I och med integrationstest kollades kraven igen & även under sprint planning.
• Ja, det finns några krav 2 (spara till fil t ex) som vi inte har tittat på.
• Krav 1 avklarade. (2 st.)
• Nivå två är långt ifrån lika vettiga som design.
• Jajamen, Victor verkar ha koll.
• Antar det, kunden var ju nöjd.
• Har inte 100% koll på det, men under iteration 1 gjorde vi det, och jag skulle ändå säga
JA :)
Kan bli bättre
• Borde plocka ut kraven vi har kvar och läsa upp dem på sprint planning!
• Det grafiska arbetet är svårt att koppla till kravspecen.
• Kommer in en del okravade arbetspunkter. (2 st.)
Följer vi arkitekturdokumentet?
Bra
• Följer till stor del just nu.
• Utifrån det jag såg senast i dokumentet verkar det som att det följs!
• Kan lita på att Fredrik säger ifrån annars.
• Tror vi gör det fortfarande. (3 st.)
• Vi följer den generella strukturen till punkt och pricka. (2 st.)
Kan bli bättre
• Vissa påtänkta refaktoreringar eventuellt introducerar lite nya, ej beskrivna “mekanismer”.
• Har dålig koll på arkitekturdokumentet...
112
2.3. Iteration 2
• Jag tyckte det var lite oklart exakt vilka funktioner som ska vara i bridge.js och vilka
som ska vara i logic.js. Råkade lägga några funktioner fel, kanske är andra som har
gjort samma sak?
• Kanske sker utvecklingen till viss del utanför ramarna av arkitekturdokumentet.
• Hur gick det med kommitéen?
Följer vi kvalitetsplanen?
Bra
• Tror vi i stort sett gör det.
• Verkar ha fungerat bra!
• Tror vi följer kodgranskning, användbarhetstesterna, parprogrammering och git som vi
skrev där. (3 st.)
• Jag skulle tro det.
• Ingen aning. (2 st.)
• Parprogrammering + review höjer kvalitén.
Kan bli bättre
• Använder vi JS/HTML/CSS-valideringsverktygen vi nämnde i början?
• Jag har lite dålig koll på dokumentet.
• Mer parprogrammering och hårdare granskningar!
Uppdatering av relevanta dokument
Bra
• Inte så mycket förändring av dokumenten just nu.
• Alla verkar ha kommit igång med kandidatrapport.
• Tror alla dokument rättas efter kommentarer och opponering. (2 st.)
• Vi lägger inte för mycket tid på det.
• Tidrapporten är relevant och uppdateras väl.
• Testrapporten utvecklades fint mellan iteration 1 och 2.
• Tror det? Mest rapporten just nu av förklarliga skäl.
• Ja när det behövs uppdaterar ansvarig för det specifika dokumentet, det dokumentet
som behöver uppdateras :p
Kan bli bättre
• Trello - flytta kort och lägg till aktuella personer.
• Alla verkar inte så hemma i LaTeX. Måste vara jobbigt att vara osäker på syntaxen och
slösa tid på det när man bara vill få dit sin text.
• Kan behöva gå igenom äldre dokument igen? Någon mer inlämning av dessa?
113
2.3. Iteration 2
• Jag har rättat testplanen efter kommentarerna, kom dock på igår att det står där i att vi
har en utbildning under iteration 1. Jag måste sätta mig och läsa vad som faktiskt står
och inte bara kolla på kommentarer.
• Kom ihåg användarmanual till sprint planning.
• Vi kanske borde diskutera kommentarerna från oppositionen: gemensamt språk (nej),
gemensam framsida, osv. . .
• Övriga dokument har jag dålig koll på.
2.3.2
Förbättringsförslag
Testning, hur har det fungerat?
• Vi bör testa mer i den faktiska labbsalen (Southfork) där labbarna kommer hållas. Oscar
driver.
Prioriterar vi rätt saker att implementera?
• Vågar vi lägga timmar på en stor refaktorering, eller bör alla läggas på rapporten? Svar:
kör på det som ni vill göra! Så länge allt blir klart kan överflödiga timmar läggas på vad
man vill.
• Under nästa sprint planning ska vi gå igenom alla krav i kravspecen och plocka ut de
som ännu inte är uppfyllda för åtgärdande.
Kommunikation mellan gruppmedlemmar
• Det har blivit lite stökigt i #reviewrequest på sistone, med några lösa trådar. Åtgärd:
posta om de requests som inte blivit plockade av någon!
• Det är viktigt att alla vågar säga vad de tycker vid beslutspunkter. Ibland går det lite
för fort att ta beslut, vi borde sakta ner så alla hinner bilda sig en uppfattning.
• Designbeslut tas på afk-möten, med itererande i slack inför. Deadlines på reactande så
man inte behöver hetsa fram en åsikt, men samtidigt kommer åsikter in i vettig tid.
Följer vi projektplanen?
• Eventuellt beskriva hur vi jobbat med framtagning av det grafiska i systemet? [side
note: det ska tas upp i nästa utvärdering]. Åtgärd: Vi skriver om det i slutrapporten
såklart!
• Sammanställning av vad som händer nu de sista veckorna (deadlines och sånt) vore
nice - Kim fixar!
• Behöver vi uppdatera några av de dokumenten? Åtgärd: Rebecka kollar med Kristian.
Följer vi arkitekturdokumentet?
• Vi ska göra ett valideringstest för HTML/CSS/JavaScript.
114
2.4. Iteration 3
Uppdatering av relevanta dokument
• Vid uppdatering av dokument efter feedback - fixa inte bara de specifika kommentarerna, se över helheten också!
• Fredrik fixar så radbrytningarna blir rätt i rapporten. (Problem då vissa editar i specifika LaTex-editors och andra i emacs.)
• Egenordnad föreläsningsserie för kompetensutveckling och timmar.
• Rollspel inför slutredovisning? Och uttagning inför slutredovisningen.
2.4
Iteration 3
2.4.1
Fullständig sammanfattning
Jobbet med att ta fram det grafiska
• Känns som att det blivit överfullt i #design ibland. Jag hade varit okej med att bara få
ett par förslag istället för typ 10.
• Synd att det dröjde innan skelettet kom upp, men vi löste det bra sen.
• Jag tycker det gått bra. En funderingar jag har är om inte GUI-gruppen skulle ha
tillåtits vara lite mer autonoma i beslitsfattande gällande designval. Tror inte alla dessa
formella omröstningar vi haft egentligen behövts. Det har fungerat eftersom vi ändå är
en relativt liten grupp. Men i större projekt kan inte alla ha ansvar/bestämma över allt.
• Fungerat jättebra med GUI-gruppen, enklare att diskutera alternativ med 3 pers än 9.
Alla i GUI-gruppen fick göra en prototyp som visades för kund. Misskommunikation
medförde dock att kodskelett inte sattes upp förrän någon utomstående tog tag i det
själv, villket var synd.
• Borde lagt mer tid på att prototypa utseendet av de olika verktygen, de ser ganska olika
ut nu.
• Gick bra att köra whiteboard i början men det var kanske inte helt demokratiskt.
• Bra att låta GUI-gruppen ta fram förslag.
• Omröstningar har varit bra, men ibland hade valdeltagandet behövt vara bättre.
• Det har varit väldigt svårt att jobba med det grafiska. Mycket eftersom det inte har
funnits tydliga riktlinjer för vad vi ska jobba emot.
• Prototypandet har jag inte varit så inblandad i men det har varit bra att ha något att
visa kunden.
• Prototypningen var väldigt nyttig. Att ta fram en “fysisk” prototyp som alla kunde
testa öppnade upp för många bra diskussioner.
• Det var också betryggande att man visste att kunden ville samma sak som oss.
• Att ta fram de grafiska har varit superkul! Det är ju dock ett känsligt ämne, eftersom
det mesta är subjektivt. Men med våra omröstningar och möten tror jag att allas åsikter
lyfts fram. Jag tycker att det har fungerat bra!
• Hade gärna lagt mer vikt på att testa och utveckla handlingsinviter med användbarhetstesterna.
• Gillar hur slack använts för det visuella med massor av alternativ.
115
2.4. Iteration 3
Formatet på utvärderingarna
• Har alltid blivit ont om tid på slutet så vi stressat igenom diskussioner.
• Vi har haft väldigt fin och konstruktiv stämning på alla utvärderingar.
• Känns som att alla varit fokuserade på att förbättra framtida arbete, inte gnällande och
anklagande.
• Jag gillar att vi skriver på fysiska papper, det ger en lugn och fin och fokuserad stund
under mötet när alla fyller i. Dock lite jobbigt att transkribera allt sen.
• Trevligt med fika också.
• Tycker om formatet på utvärderingarna. Tror diskussionerna som uppkommit när vi
gått runt i gruppen och behandlat en viss punkt varit mycket givande. Många problem
som har uppkommit har fått ett naturligt forum för diskussion.
• Hade varit fördelaktigt om dessa utvärderingar kunde fyllts i via dator, då vissa handstilar är under all kritik, tydligen :(
• Fika är gott också!
• Hade föredragit anonyma utvärderingar.
• Har fungerat bra att punkterna delades upp i Bra/Kan förbättras.
• Tycker om upplägget med att diskutera punkterna i gruppen efter man fått tid för egen
reflektion.
• Fylla i utvärderingen på dator istället hade varit bra, slippa massa papper och slippa
läsa+skriva in på datorn senare för sammanställning. Finns såklart fördelar med att
fylla i för hand också.
• Bra att vi har diskuterat allas åsikter efteråt.
• Lite jobbigt att skriva för hand :)
• De har skett lagom ofta.
• I och med att vi har högt till tak fungerar det med icke-anonyma utvärderingar.
• Jag upplever att vi fått ut ganska mycket av utvärderingarna. Dock så har de inte alltid
känts så effektiva. Vi hade kunnat låta bli att skriva mer enskilt och bara ha diskussion
men då hade vi inte kunnat ha med det i rapporten på samma sätt.
• Tycker att våra utvärderingar har varit väldigt givande.
• Jag känner mig alltid oförberedd innan, men upplägget att man först får sitta och tänka
och sedan diskutera gör att man får fram väldigt mycket.
• Diskussionerna har varit guld värda med det här formatet
• Eftersom man inte vill ta upp känsliga ämnen till diskussion men ändå vill att de ska
adresseras. . . vet inte riktigt hur man ska göra där
• Gillar att vi skriver på papper på plats
116
2.4. Iteration 3
Slutprodukten, är vi nöjda?
• Jag tycker den blev himla snygg, ser verkligen ut som ett “riktigt” system.
• Jag är nöjd med att jag kan peka på en del (Vigenere front end i mitt fall) och säga “kolla,
det där jag jag gjort!”
• Jag är nöjd, speciellt med tanke på den begränsade erfarenhet vi hade av webbutveckling inledningsvis. Det är klart vi hade kunnat prestera en bättre produkt med mer
erfarenhet, men givet förutsättningarna är jag nöjd.
• Kunden verkar ju vara nöjd också, så det gör att det känns bra.
• Känns inte som att vi är riktigt klara ännu, all funktionalitet finns där men framförallt
utseendemässigt finns det en del kvar att förbättra.
• I stort är jag nöjd och stolt över produkten! Den är väldigt annorlunda mot Enigma 2.0
och jag anser den vara en klar förbättring.
• Slutprodukten är något jag kommer känna stolthet över att få visa för vänner och familj.
• Det finns mer att jobba på men utifrån den tid vi har haft och förbättringarna jämfört
med den tidigare produkten (Enigma?) så är jag väldigt nöjd.
• Produkten måste publiceras!
• Ja!
• Med tanke på vad som hänt tycker jag att vi gjort ett utmärkt jobb. Det finns dock vissa
saker jag vill att vi ska finslipa.
• Vi hade kanske hunnit med mer om vi lagt mindre tid på möten och utvärderingar.
• Ja, det är jag =D
• (Kommer dock alltid att svida lite att jag inte hann klart med allt och att jag inte satt så
mycket i SouthFork.)
• Nöjd!
• Vi var inte webbutvecklare när vi börjarde så, det känns inte riktigt som en hemsida,
systemet ser lite klumpigt ut på vissa ställen, men vi är inte grafiska designers och har
inte heller någon formell sådan.
Arbetandet i helhet
• Asså vi är så himla grymma!
• Upphör aldrig att förvånas över hur himla bra vi är och hur bra allt har gått.
• Tycker den process vi följt varit bra. Hade önskat mer arbete på samma fysiska plats
tillsammans, gärna också i samma lokal över tid för att mer få känslan av att gå till ett
jobb.
• Upplever att de flesta av oss också lyckats dela upp sin tid så att arbetsbördan varit
ganska jämn under projektets gång.
• Vi komplementerar varandra väldigt bra i gruppen, vilket har varit en stor fördel i
arbetet!
• Alla har ansvar för sina roller och man har aldrig behövt fastna länge i ett problem
innan man fått hjälp.
117
2.4. Iteration 3
• Vi har alla varit intresserade av varandras arbete .
• Vi har tursamt nog haft en grupp där alla är ambitiösa och drar sitt strå till stacken.
Det har varit roligt att arbeta så mycket tillsammans, mycket tack vare arbetsstugor och
Slack.
• Alla verktyg (Drive, WebStorm, Latex, git, Megaspreadsheet) har till slut fungerat så
bra så att vi kan arbeta effektivt och tillsammans lösa de problem som uppstår.
• Det känns som att alla har bidragit till slutprodukten och tagit sitt ansvar.
• Det här arbetet har känts väldigt proffsigt och på riktigt. Jag föreställer mig (och hoppas) att arbetslivet kommer vara ungefär så här.
• Tycker vi undvikit (nästan??) alla tidigare negativa erfarenheter?
Hur har vi fungerat som grupp?
• Bästa gruppen =) går mest omkring och pöser av stolthet. Vi har brytt oss om varandra
och sett till att hålla ihop gruppen.
• Bra. Vi har lyckats fördela arbete bra, och har kompetens inom olika områden som
kompletterar varandra.
• Tycker kommunikationen varit bra inom gruppen (igen, Slack<3).
• Det som kanske varit lite mindre bra är punktligheten till möten och liknande, det tycker jag är lite respektlöst mot de andra gruppmedlemmarna. Detta har dock inte varit
ett utbrett problem.
• Vi har eventuellt varit lite dåliga på att uppmärksamma framgång.
• Helt klart bästa projektgruppen jag varit delaktig i.
• Gruppmedlemmarna tar arbetet seriöst och alla har jobbat på redan från början.
• Även fast vi inte känner varandra särskilt väl på ett personligt plan, har vi varit öppna
och ärliga mor varandra.
• Väldigt harmoniskt.
• Mycket bättre än vad jag hört om andra grupper :)
• Jag har känt mig trygg i de andras sällskap, vågat visa vem jag är.
• Något för mycket förseningar och frånvaro från möten.
• Kanon! Vi har högt till tak och roligt tillsammans.
• Väldigt proffsigt och strukturera
• Kommer vara ett föredöme för mina projekt framöver
• Bästa gruppen ever
118
2.4. Iteration 3
Lärdomar
• Personligen har jag lärt mig mycket om ledarskap, jag har fått möjlighet att öva, och
reflektera kring hur jag är som ledare.
• En insikt om ledarskap är hur tydligt mitt humör och stämning påverkar stämningen
under mötena. Är jag trött och seg blir mötet trött och segt.
• En stor insikt är vilket otroligt värde det har att ha bra stämning i gruppen. Alla problem och hinder känns hanterbara, och det blir roligt att gå till jobbet. Plus att vi presterar
jävligt bra.
• Använd versionshantering, och lär alla i gruppen att använda det bra.
• Känner mig personligen mer hemma i webbvärlden än innan.
• Uppmärksamma framgång.
• Underskatta inte vad socialt umgänge/fika/icke projektrelaterade aktiviteter gör för
gruppsammanhållningen.
• Lägg upp en bra grund för att sedan bygga vidare på denna när utvecklingsarbetet
börjar. Infrastruktur är viktigt.
• Var öppna med personliga problem från början, det underlättar i längden.
• Måenderundor <3 - gruppen lär känna varandra och det känns mer accepterat att man
kan ha en dålig dag. Jag upplever att det öppnar upp för mer personlighet och att folk
blir mer än bara resurser i arbetet.
• Utbildningar inom gruppen - istället för att alla ska läsa på om något på egen hand,
tillsätt en ansvarig att hålla en workshop/genomgång. Det blir trevligare, folk kan
ställa frågor och diskutera och den ansvarige för öva presentationsteknik. Detta har
fungerat jättebra hos oss.
• Kickoff, Halvtidsmys och Avslutning har varit bra sätt att komma bort från att endast
associera varandra till projektet. Både planeringen inför och genomförandet av dessa
träffar har varit riktigt kul! (Avslutningen har dock inte varit men har svårt att tro att
det skulle vara annat).
• Utvärdera ofta så att det finns möjlighet att förbättra och utveckla gruppens arbete under projektets gång. Var inte rädd för att säga ifrån om något inte fungerar bra.
• Det är viktigt att ha roligt. Kick-off och dylikt har varit mycket givande.
• Vi har fått arbeta med det vi tycker är intressant, men också provat på många nya saker.
• Parprogrammera mera!
• Kodgranskning fungerar bra.
• Båda dessa arbetssätt gör att man kan lära av de bästa i gruppen. Istället för att avundas
dem.
• Någon hade behövt ta ansvar för designarbetet och styra det mer diktatoriskt.
• En bra branching model och en kompetent gitmaster behövs verkligen om man ska
jobba effektivt på olika features samtidigt.
• Det gäller även strukturen på koden.
119
2.4. Iteration 3
• Daily scrum är superbra för att få en överblick av vad alla gör och för att motivera folk
till att prestera något.
• Hur viktigt engagemang, struktur och planering är. Nästintill ingenting, under hela
projektets gång, han känts “kaosigt” eller hopplöst. Ibland känner jag nästan att vi
slapp undan för lätt.
• Platt rollstruktur i all sin ära. Men det är väldigt bra med tydliga roller och ansvarsområden. Vi har jobbat väldigt mycket med våra roller och vi har krävt att man gör sin
rollspecifika uppgift, och samtliga medlemmar har bara gjort det utan strul.
• Ha en öppenhet i gruppen, Använd verktyg (Git, drive, trello, slack) och kräv att alla
jobbar “genomskinligt”. För gruppen och projektets bästa så ska man inte dölja sitt
arbete, även om det är skit.
• Eftersom vi mått bra har vi fått en bra produkt! Fokuset låg på att vi skulle må bra!
• Inte döljt arbete
• Första om webb, i like
• Mer fira framgång
• Måenderundor+++
• Utbildningar++
• Code reviews++
• (Bra) format och frekvens på utvärderingar+
• Arbetsstugor++
Arbetsmetod (Scrum, parprogrammering, arbetsstugor)
• Arbetsstugor är det bästa ever, så himla trevligt och givande.
• Parprogrammering är ett jättebra sätt att lära sig, om man sitter ihop med någon som
kan mer än en själv.
• Scrum har funkat bra, vi har ju inte följt det jättenitiskt.
• De jobbstugor vi haft har varit superbra. Det leder till ett så mycket större informationsutbyte än att arbeta själv hemma. Nöjd också med Scrum, tror dock vi tjänat på att
ha våran Scrum Board (Trello) mer integrerad i utvecklingen. Detta hade kanske varit
lättare om vi haft en fysisk sådan (se kommentar om samma fysiska arbetsplats över
tid).
• Har inte parprogrammerat så mycket under projektet, men vet att det är bra. Återigen,
en gemensam arbetsplats hade underlättat.
• Hade kanske varit smidigare i längden att använda ett dedikerat verktyg för kodgranskning också.
• Jobbstugor har fungerat jättebra och motiverat till att sitta och arbeta. Jag har föredragit
att arbeta självständigt hellre än att parprogrammera, men jobbar jämsides någon som
sitter med en liknande uppgift, så att man kan diskutera alternativ och be varandra om
hjälp.
120
2.4. Iteration 3
• Scrum har fungerat jättebra för utvecklingen. Jag har tidigare endast jobbat enligt vattenfallsmodellen tidigare så är mycket positivt överraskad. Jag upplever att Scrum
medfört att gruppen arbetade hårt redan från start eftersom vi ville hinna tömma sprint
backlogen för varje iteration.
• Scrum - Enkel att applicera, kommer in som en naturlig del i planering och informationsspridning.
• Parprogrammering - Extra bra för att lära känna varandra. Tur att det var valfritt, lite
oflexibelt.
• Jobbstugor - Trevligt, har inte blivit stökigt utan vi har hållit oss till effektivt arbete. Bra
att ha oavsett om man är 2 eller 9 personer.
• Scrum har fungerat smidigt. Dock så har vi gjort väldigt mycket mer dokumentation
än vad agil utveckling förespråkar.
• Parprogrammering är kanon för att lära sig och bli en bättre utvecklare. Dock så är det
svårt att hitta tider (gäller främst VT1).
• Jobbstugor var bra när man skulle utveckla men kunde vara distraherande när man
ville skriva dokument. Detta berodde dock på vem man satt med.
• Kodgranskning har varit bra för att lära sig. Dessutom har det bidragit till att koden
känns bättre, vilket är viktigt när den ska publiceras.
• Scrum har fungerat kanon. Tror att det var utbildningen som möjliggjorde att det skulle
fungera. Vi har ju ständigt anpassat Scrum efter våra behov. Då har det fungerat mer
som ett verktyg än ett krävande moment.
• Parprogrammering verkar bra. Har inte använt det så mycket.
• Jobbstugorna har varit trevliga.
Övrigt
• Rollfördelningen har varit guld värd, den gjorde det väldigt tydligt i början vem som
hade ansvar för vad, och bidrog till att ordna så alla hade saker att jobba med.
• Jag har lärt mig väldigt mycket av utvecklingen och gruppmedlemmarna i detta projekt.
• Jag hade gärna arbetat längre med projektet, det har varit väldigt kul!
• Jag har ännu inte gjort någon projektrealterad enhetstestning och inte heller någon review av någon annans kod. Detta är väldigt synd men helt och hållet mitt egna fel. Om
vi i början av projektet hade gått igenom några sådana tillsammans hade jag nog varit
mer benägen att ta åt mig fler reviews när tillfälle getts.
• Projektet har levt sitt liv i en egen liten bubbla. Det har varit fantastiskt, men det ska bli
skönt att avsluta och gå vidare.
• Jag tycker att måenderundorna var bra i början för att lära känna varandra men har
sedan dess blivit ett nödvändigt ont som kostat ganska mycket tid från mötena. Dessa
diskussioner kan tas under raster.
• Vi hade behövt vara hårdare på mötesregler. Det var ofta möten började minst fem min
efter utsatt tid.
• Tråkigt att projektet måste ta slut nu.
• Code review i grupp?
121
2.4. Iteration 3
2.4.2
Sammanställning från diskussion
Jobbet med at ta fram det grafiska
• Mer autonom GUI-grupp.
• Smidigt med prototyp i början, och i relation till kunden.
• Kunde prototypat verktygen i början, nu ser de väldigt olika ut.
• Lite styrda av CSS i designarbetet.
Formatet på utvärderingarna
• Eventuellt fylla i på dator istället.
• (Litet) eventuellt fylla i i förväg.
• Möjlighet att skicka känsliga punkter anonymt
• Helt anonyma utvärderingar?
Slutprodukten, är vi nöjda?
• Ja!
• Finns mer att göra.
Arbetandet i helhet
• Eget kontor hade varit givande.
• Undvikit det negativa från tidigare erfarenheter.
• Fungerat.
Hur har vi fungerat som grupp?
• Mer uppmärksammande av det som gått bra.
• Vad grymma vi är.
• Bli hårdare på att börja möten på utsatt tid.
Arbetsmetod (Scrum, parprogrammering, arbetsstugor)
• Scrum boarden har inte varit så integrerad i arbetsmetoden.
• Vi har anpassat Scrum efter oss, istället för tvärtom.
• Kontor hade hjälpt mycket.
Övrigt
• Det har varit en bubbla.
• Utbildning i code review och enhetstestning vore bra.
122
Bilaga 3 Complexity-reportsammanfattningar
Sammanfattning från mätning på CustomerManagerStandard.
Mean per-function logical LOC: 3.751946606149028
Mean per-function parameter count: 0.9351797746177035
Mean per-function cyclomatic complexity: 1.4586836202825904
Mean per-function Halstead effort: 667.9685212052052
Mean per-module maintainability index: 129.21554203129884
First-order density: 0%
Change cost: 4.166666666666666%
Core size: 0%
Sammanfattning från mätning på FoodMe.
Mean per-function logical LOC: 3.764285714285715
Mean per-function parameter count: 1.2784313725490197
Mean per-function cyclomatic complexity: 1.2683473389355742
Mean per-function Halstead effort: 422.78367039791067
Mean per-module maintainability index: 134.9797991841414
First-order density: 0%
Change cost: 5.88235294117647%
Core size: 0%
Sammanfattning från mätning på Ember.js Dashboard.
Mean per-function logical LOC: 3.365432098765432
Mean per-function parameter count: 0.5583333333333333
Mean per-function cyclomatic complexity: 1.3138888888888889
Mean per-function Halstead effort: 430.90967990255655
Mean per-module maintainability index: 139.67517804960195
First-order density: 0%
Change cost: 8.333333333333332%
Core size: 0%
Sammanfattning från mätning på Knekt.
Mean per-function logical LOC: 8.790385855728855
Mean per-function parameter count: 1.0571479017616219
Mean per-function cyclomatic complexity: 2.4074217055786056
123
Mean per-function Halstead effort: 2799.0255918963885
Mean per-module maintainability index: 115.11291969945968
First-order density: 0%
Change cost: 4.3478260869565215%
Core size: 0%
124
Bilaga 4 Undersökning: Värdet av en
prototyp
4.1
Enkät
Denna del presenterar de frågor som ställdes i en online-enkät för att undersöka de olika
projektgruppernas erfarenhet av att jobba med prototyper.
Introduktion
I samband med kursen TDDD96 Kandidatprojekt i Mjukvaruutveckling skrivs en individuell
rapport. Denna rapport kommer att behandla de för- och nackdelar som finns med att ta
fram en prototyp för ett mjukvarusystem samt vilka processer som genomförs i utvecklingen
av en prototyp. Som underlag kommer sammanställningen av denna undersökning att
användas.
Undersökningen riktar sig till studenter som ingår i en projektgrupp i denna kurs. För att
kunna ta del av undersökningen skall projektgruppen ha använt sig av prototyper i någon
form. Undersökningen utförs av Kimberley French (kimfr230@student.liu.se), dokumentansvarig i grupp 10.
Alla svar är helt anonyma.
Frågor
1. Vilken projektgrupp tillhör du?
2. Hur många timmar har lagts ner på prototypningsarbete?
Antal timmar totalt, för hela gruppen. Om du inte vet kan du gissa på vad du tror är rimligt.
3. Vilken sorts prototyp har använts för ert projekt?
Med avseende på material.
˝ Pappersprototyp
˝ Datorprototyp
˝ Övrigt:
4. Vilken sorts prototyp har använts för ert projekt?
Med avseende på livslängd.
125
4.1. Enkät
˝ Temporär (“throw away”) prototyp
˝ Evolutionär prototyp (tidig version av slutprodukten)
˝ Övrigt:
5. Varför valdes just denna sorts prototyp?
6. Vad hade er projektgrupp för avsikt med att arbeta fram en prototyp?
7. Anser du att prototypen har uppfyllt sitt syfte med avsikten i åtanke?
˝ Ja, till stor del
˝ Till viss del
˝ Inte alls
8. Beskriv, i korthet, hur ni gick tillväga i framtagandet av er prototyp.
Gjordes en eller flera prototyper? Hur många gruppmedlemmar var involverade i prototyputvecklingen?
9. Har du använt eller tittat tillbaka på prototypen sedan den blev färdigställd?
˝ Ja, flera gånger
˝ Ja, någon enstaka gång
˝ Nej
10. Skulle du påstå att du haft användning av prototypen i ditt arbete med projektet?
˝ Absolut, den har varit till stor hjälp i mitt arbete
˝ Ja, den har fungerat som stöd i mitt arbete
˝ Inte direkt, jag har fått en bättre bild av slutprodukten men den har inte nämnvärt
påverkat mitt arbete
˝ Nej, jag har inte haft någon användning för den i mitt arbete
11. Om ja, på vilket sätt?
12. Har du någonsin upplevt prototypen som begränsande eller hämmande av nya idéer?
˝ Ja, flera gånger
˝ Ja, någon enstaka gång
˝ Nej
13. Om ja, på vilket sätt?
14. Anser du att tiden ni investerat i prototypningsarbetet har varit givande för utvecklingen av ert projekt?
˝ Absolut, vinsten av prototypningsarbetet överskred kostnadenrna markant
˝ Ja, det har underlättat gruppens arbete utan att kräva alltför mycket tid
˝ Inte direkt, tiden det tog att göra prototypen har inte lönat sig för resten av projektarbetet
˝ Nej, det var helt bortslösad tid som hade kunnat läggas på annat
15. Ytterligare kommentarer om varför/varför inte.
Anser du att tiden ni investerat i prototypningsarbetet har varit givande för utvecklingen av ert projekt?
16. Övriga fördelar
På vilket sätt underlättade prototypen för er utveckling? Vad var det som gjorde er prototyp bra?
17. Övriga nackdelar
Vilka problem fanns kring prototypningsarbetet eller med prototypen i sig? Saknades något i er prototyp?
126
4.2. Sammanställning
4.2
Sammanställning
Nedan visas en sammanställning av svaren från de tre grupper som hade flest deltagare i
undersökningen. Svaren har sorterats efter projektgrupp och flervalsalternativ har angivits
som en procent av antalet deltagare från varje grupp. För att anonymisera svaren har gruppnummer ersatts av bokstäver.
Grupp A (8 personer):
1. Projektgrupp: A
2. Tidsåtgång: 10 - 150 timmar. Se figur B.1a.
3. Sorts prototyp (material): 87.5% Dator. 12.5% Whiteboard.
4. Sorts prototyp (livslängd): 75% Temporär. 25% Evolutionär.
5. Varför detta prototypval: Ville ha många alternativa designer, snabbt sätt att visa olika exempel på utseende. Var tänkt att vara evolutionär men kodbasen gick inte att använda.
6. Avsikt med prototypen: Skapa en gemensam bild av produkten och ge gruppen ett mål. Visa
kund ett antal alternativ. Utforska flera alternativ. Ta reda på hur/vilka funktioner som skulle
med. Ta fram ett tilltalande GUI.
7. Har uppfyllt sitt syfte: 87.5% Ja, till stor del. 12.5% Till viss del.
8. Tillvägagångssätt: Mindre grupp (3 pers) tog fram några alternativ som visades för kund. Input och omröstning med övriga projektmedlemmar. Gruppen diskuterade vad som skulle finnas
med och hur alternativen kunde skilja sig.
9. Har använt/tittat på färdig prototyp: 62.5% Ja, någon enstaka gång. 37.5% Nej.
10. Haft användning utav den: 58% Inte direkt. 28% Ja, fungerat som stöd. 14% Nej, ingen
användning.
11. Hur använt: Gav en bild av slutresultat men inte hur det var tekniskt genomförbart. Har
fungerat som mall. Kan blicka tillbaka på vid implementering. En övergripande plan i början.
12. Prototypen varit begränsande: 75% Nej. 25% Ja, någon enstaka gång.
13. Hur begränsande: Alternativen konvergerade väldigt tidigt, borde haft fler idéer som inte var
så lika.
14. Givande investering av tid: 75% Ja, har underlättat. 12.5% Absolut, vinsten överskred kostnaderna markant. 12.5% Inte direkt lönsamt.
15. Kommentarer på tidsinvestering: Kunnat visa kund och få feedback, vilket gör att utvecklingsarbetet känns mer legitimt och kundförankrat. Hela gruppen fick en tydlig bild och mål –
blir lättare att arbeta. Visste vad vi skulle göra, inte slösa tid på onödig funktionalitet. Gruppen
var överens redan från början, hade gått utan prototyp.
16. Övriga fördelar: Kunde visa kund tidigt var vi tänkte. Ett mål att arbeta mot. Utan en prototyp
hade det saknats en grund att utgå ifrån, speciellt i en så stor grupp.
17. Övriga nackdelar: Alla var inte med i prototyputvecklingen, kanske gick någon bra idé förlorad? Prototypens funktionalitet var inte så bra, men hade varit bortkastad tid att göra mer.
Handlingsinviter behandlades inte i prototyperna. Prototyparbetet kan ha försenat upprättandet
av ett kodskelett. Mycket av designen bestämdes utifrån vad som ansågs möjligt att koda.
127
4.2. Sammanställning
Grupp B (6 personer):
1. Projektgrupp: B
2. Tidsåtgång: 50% 5-10 timmar. 50% 200 timmar. Se figur B.1b.
3. Sorts prototyp (material): 100% Dator.
4. Sorts prototyp (livslängd): 100% Evolutionär.
5. Varför detta prototypval: Krävdes lite planering. Hade inget behov av att göra en isolerad
prototyp. Prototypen är på många sätt produkten.
6. Avsikt med prototypen: Samla kunskap. Visa något för kunden. Lära sig verktygen.
7. Har uppfyllt sitt syfte: 100% Ja.
8. Tillvägagångssätt: En person började med en första prototyp. Mindre grupp testar sig fram.
Sedan nästan alla med menyskal som vidareutvecklades.
9. Har använt/tittat på färdig prototyp: 83% Nej. 17% Ja, flera gånger.
10. Haft användning utav den: 50% Ja, fungerat som stöd. 33% Inte direkt. 17% Stor hjälp.
11. Hur använt: Grunden i projektet (eftersom evolutionär).
12. Prototypen varit begränsande: 67% Nej. 33% Ja, någon enstaka gång.
13. Hur begränsande: Tvister i implementation och utformning. Inte tid att realisera fler prototyper.
14. Givande investering av tid: 67% Ja, har underlättat. 33% Absolut, vinsten överskred kostnaderna markant.
15. Kommentarer på tidsinvestering: Experimenterade med verktyget. Prototyp fungerade som
guide till resterande i gruppen. Är grunden till slutprodukten.
16. Övriga fördelar: Snabb och enkel att ändra efter kundens behag och resultat av användartestning. Uppmuntrade till utveckling.
17. Övriga nackdelar: Tar mycket tid att göra en separat prototyp, särskilt i ett tidsbegränsat
projekt.
Grupp C (4 personer):
1. Projektgrupp: C
2. Tidsåtgång: 20 - 60 timmar. Se figur B.1c.
3. Sorts prototyp (material): 100% Dator.
4. Sorts prototyp (livslängd): 100% Evolutionär.
5. Varför detta prototypval: Snabbt kunna visa för kunden. Testa erhållet script.
6. Avsikt med prototypen: Ta reda på vad kunden vill ha och få snabb feedback. Se till att det
erhållna scriptet fungerar.
7. Har uppfyllt sitt syfte: 50% Ja. 50% Till viss del.
8. Tillvägagångssätt: En person gjorde ritningar. Mindre grupp ansvarade för utvecklandet.
128
4.2. Sammanställning
9. Har använt/tittat på färdig prototyp: 50% Ja, någon enstaka gång. 25% Ja, flera gånger.
25% Nej.
10. Haft användning utav den: 50% Ja, fungerat som stöd. 25% Inte direkt. 25% Stor hjälp.
11. Hur använt: Kod att utgå från. Implementation av GUI. Testa funktionalitet.
12. Prototypen varit begränsande: 75% Nej. 25% Ja, någon enstaka gång.
13. Hur begränsande: Dålig kod som skrivits.
14. Givande investering av tid: 50% Ja, har underlättat. 50% Absolut, vinsten överskred kostnaderna markant.
15. Kommentarer på tidsinvestering: Borde lagt mer fokus på use cases. Tog lite tid och kunde
återanvända idéer därifrån.
16. Övriga fördelar:
17. Övriga nackdelar: Ogenomtänkt struktur.
129
Bilaga 5 Enkät: Utvärdering av
parprogrammering och
kodgranskning
5.1
Enkät
Nedan följer den enkät om parprogrammering och kodgranskning som utfördes med grupp
10 under kandidatprojektet i kursen TDDD96.
Parprogrammering
1. Hur är din inställning till parprogrammering sett utifrån dina erfarenheter under projektets gång?
˝ Mycket negativ
˝ Negativ
˝ Neutral
˝ Positiv
˝ Mycket positiv
2. Hur stor del av din programmering under projektet har skett genom parprogrammering?
˝ 0-20 %
˝ 21-40 %
˝ 41-60 %
˝ 61-80 %
˝ 81-100 %
3. Vilka positiva effekter har parprogrammering haft på samarbetet i gruppen?
4. Vilka negativa effekter har parprogrammering haft på samarbetet i gruppen?
5. Vilka fördelar har du sett med parprogrammering i det här projektet?
6. Vilka nackdelar har du sett med parprogrammering i det här projektet?
Kodgranskning
1. Hur är din inställning till kodgranskning sett utifrån dina erfarenheter under projektets
gång?
130
5.2. Sammanställning av fritextfrågor
˝ Mycket negativ
˝ Negativ
˝ Neutral
˝ Positiv
˝ Mycket positiv
2. Hur många granskningar har du utfört under projektet?
˝ 0
˝ 1
˝ 2
˝ ...
˝ 10+
3. Vilka positiva effekter har kodgranskning haft på samarbetet i gruppen?
4. Vilka negativa effekter har kodgranskning haft på samarbetet i gruppen?
5. Vilka fördelar har du sett med kodgranskning i det här projektet?
6. Vilka nackdelar har du sett med kodgranskning i det här projektet?
Avslutande frågor
1. Vilken av metoderna parprogrammering och kodgranskning skulle du välja att använda till ett framtida projekt om du bara kunde välja en av dem?
˝ Parprogrammering
˝ Kodgranskning
˝ Vet ej/Kan inte välja
2. Har du några övriga kommentarer kring parprogrammering eller kodgranskning som
du vill lyfta fram?
5.2
Sammanställning av fritextfrågor
Här redovisas svaren från enkätens fritextfrågor. Vid tillfällen då flera personer har givit
samma eller snarlika svar redovisas dessa svar som ett svar med suffixet “(X st.)” där X
anger antalet personer.
Parprogrammering
1. Vilka positiva effekter har parprogrammering haft på samarbetet i gruppen?
• Man lär känna varandra bättre. (3 st.)
• Man tvingas umgås med varandra. (2 st.)
• Det skapar en öppenhet i gruppen. (2 st.)
• Koden blir aldrig personlig eftersom två personer skapat den. (2 st.)
• Jag tror att det har bidragit till kompetensspridning. (2 st.)
• Gruppen får en mer enhetlig bild av projektet.
• Jag tror att om ett par sitter och diskuterar lösningsgångar, problem och idéer så
känns det naturligare att blanda in flera personer i diskussionen än om en person
satt själv och aldrig hade diskuterat sin kod.
131
5.2. Sammanställning av fritextfrågor
• Givande diskussioner kring problem samt informationsspridning inom gruppen.
• Det blir lättare att samarbeta ju mer man parprogrammerat.
• Det känns som att vi är ett team.
• Parprogrammering hjälper till med kommunikation, sådan man kanske inte haft
annars.
• Parprogrammeringen har också gjort att det funnits minst 2 personer som kan säga
“dra in och jobba?” som kan ge positiva känslor i fall man inte känner sig så sugen
på att göra något alls.
2. Vilka negativa effekter har parprogrammering haft på samarbetet i gruppen?
• Det är svårt att hitta tider där båda kan jobba. (4 st.)
• Inga (3 st.)
• Om man är en av de som har svårt att jobba under kontorstid kan man ha känt sig
utanför.
• Ibland förstår man inte riktigt varandra och blir då nästan låst på grund av det.
• Ibland har det känts tråkigt, till exempel när enhetstest som varit självklara behövt
skrivas (med copy paste), har stundvis känts som man inte är till hjälp.
3. Vilka fördelar har du sett med parprogrammering i det här projektet?
• Bättre kod. (4 st.)
• Mer genomtänkta och generella lösningar. (4 st.)
• Kunskapsspridningen ökas vilket förhindrar att en person blir kritisk för projektet.
(2 st.)
• Lärorikt. (2 st.)
• När man kört fast tar man sig snabbare ur det.
• Bra då många var osäkra på HTML/JavaScript.
• Personer som inte känt sig så säkra programmeringsmässigt har ändå fått vara
med i utvecklingsarbetet samt kanske också fått större självförtroende gällande
utvecklingsarbetet.
• Bättre liv.
4. Vilka nackdelar har du sett med parprogrammering i det här projektet?
• Tidskrävande. (2 st.)
• Inga.
• Om den ena är lite nere kan den göra att även den andra blir lite nere.
• Små saker kan förstoras till större problem i onödan.
• Vissa uppgifter har varit förhållandevis triviala och har kanske bäst lämpat sig att
utföras av en utvecklare lite snabbt, men eftersom vi inte påtvingat parprogrammering så har detta inte varit ett praktiskt problem egentligen.
• Bestämma plats. Två personer måste kunna deltaga samtidigt, kan vara krabbigt
att hitta tid som passar för båda två.
• Förmodligen mer åtgångna timmar då mycket av kodandet kostat dubbla timmar.
Kodgranskning
1. Vilka positiva effekter har kodgranskning haft på samarbetet i gruppen?
132
5.2. Sammanställning av fritextfrågor
• Det gör att det är naturligt att andra sätter sig in och kommenterar din kod. Det
blir inget påhopp och det känns inte konstigt om någon kommer med kritik eller
synpunkter.
• Fler har tittat på koden.
• Granskaren lär sig mer om och av de som skrivit koden och vice versa.
• Det leder till diskussion mellan gruppmedlemmar samt spridning av kompetens.
• Det har känts att den som granskar försöker hjälpa en
• Bättre kommunikation mellan berörda parter.
• Snacket efter granskningen har gjort att man lärt känna varandra genom att höra
varandras synpunkter på t.ex. en viss lösning vilket ökar tilliten vilket är en grundsten för samarbete!
• Mer pratande mellan gruppmedlemmar -> bekvämare stämning.
2. Vilka negativa effekter har kodgranskning haft på samarbetet i gruppen?
• Inga (2 st.)
• Ibland kan det kännas som om kodgranskarens ord är lag trots att det handlar om
smak och eget tycke i vissa frågor.
• Det ökar mängden kritik inom gruppen.
• De som har lite egen “stil” i sitt kodskrivande kan lätt bli överkörda då vi vill att
kodstilen ska vara enhetlig.
• Ibland svårt att få personer till att reviewa sitt arbete.
• Kan kännas lite jobbigt om det är mycket negativt att ta upp.
• Personer är olika i hur man vill ha feedback, en risk vid kodgranskning är att man
uttrycker sig slarvigt vilket gör att review:n får en negativ klang.
3. Vilka fördelar har du sett med kodgranskning i det här projektet?
• Bättre kod. (6 st.)
• Det blir naturligt att dela med sig och visa sin kod.
• Man lär sig mycket både av att granska och bli granskad.
• Om granskaren förstår utan att ha varit involverad i lösningen borde den vara
tillräckligt välkommenterad och i och med det ökar även underhållbarheten.
• Det gör så att fler projektmedlemmar är bekanta med en större del av kodbasen.
• Mycket fel i stil har eliminerats innan den kommit upp på dev, hjälpt att undvika
parallellt arbete på develop.
• Lärdomar, olika sätt att lösa ett och samma problem på. Tips och idéer flyger runt
efter en granskning.
• Det har gett intressanta diskussioner om tekniska lösningar.
• Vi har undvikit olämpliga kodkommentarer och onödiga småfel.
4. Vilka nackdelar har du sett med kodgranskning i det här projektet?
• Tidskrävande. (4 st.)
• Funktionalitet som hade varit praktisk att snabbt mergea in i develop får ligga och
vänta på grund av att granskningen dröjer.
133
5.2. Sammanställning av fritextfrågor
• Ibland sker kodgranskningen formellt (med request - review push -merge) trots
att det kanske handlar om någon eller en rad kod som blivit skriven. Det kan då
ta onödigt lång tid för vissa saker att komma in på develop. Det blir i vissa fall en
onödigt flaskhals.
• Det är inte speciellt roligt.
• Inga.
• Ibland har det blockat en från att merga in till dev, vilket resulterat i fler mergekonflikter
• Kan ta tid att gå vidare (få någon att granska), men har vi haft dependencies så har
det gått fort.
• Review tas negativt av vissa.
• Dröjt innan saker kommit in på develop.
Övrigt
1. Har du några övriga kommentarer kring parprogrammering eller kodgranskning som
du vill lyfta fram?
• Parprogrammering fungerar bäst för att komma igång med en uppgift eller när
man känner sig osäker på hur ett problem kan lösas. Allra bäst tycker jag det
fungerar om man sitter tillsammans men arbetar enskilt, så att man lätt kan ta
hjälp av varandra så fort man kör fast, men det blir mer produktivt än att två
personer sitter vid samma dator och kodar.
• Alla klarar inte alltid att samarbeta, vissa gillar bäst att koda själv. Kombinationen
parprogrammering och kodgranskning lämpar sig i alla fall för projekt i mindre
skala, om kodgranskningsprocessen inte är så extensiv.
• Kodgranskning är guld värt, både att få veta bättre sätt att lösa något på, men
samtidigt kunna få feedback på saker man löst på ett bra sätt.
• Jag vill använda båda metoderna i ett framtida projekt.
134
Bilaga 6 Enhetstestning - Datainsamling
Datainsamling
Introduktion
Välkommen till den här datainsamlingen. Idag ska vi undersöka om och hur enhetstestning
kan påverka programmeringsprocessen och tidsåtgången. Det du ska göra är att lösa några
programmeringsuppgifter med olika förhållningssätt till enhetstestning.
Uppgifterna, utvecklingsmiljön och enhetstesterna ska efterlikna det riktiga projektet i
största möjliga mån.
Miljö
Allting kommer ske i samma utvecklingsmiljö, testramverk och programmeringsspråk som
det du är van vid från projektarbetet, nämligen:
• Utvecklingsmiljö:WebStorm
• Testkörare: Karma
• Testramverk: QUnit
• Programmeringsspråk: JavaScript
Upplägg
Uppvärmning
Datainsamlingen börjar med att du utför uppvärmningsuppgiften. Under den här uppgiften
får du skriva enhetstester precis hur och när du vill, det viktiga är att några godtyckliga
enhetstester faktiskt skrivs. Tanken med den här uppgiften är dels att värma upp dig som
deltagare men även för att se att miljön, språket och testerna fungerar som tänkt, så att detta
inte tar tid eller saboterar annan data under de andra uppgifterna.
Uppgifterna
Du kommer utföra 3 olika uppgifter. Idén till uppgifterna kommer från diverse tävlingsprogrammeringsuppgifter. Dessa uppgifter framställdes eftersom de går fort att lösa och i nån
135
mån representerar problem du stött på under projektet.
I den här datainsamlingen ska du genom dina testfall försäkra dig om att din kod fungerar
som du tänkt. Därför ska du inte lägga tid på att analysera om ditt slutgiltiga svar är rimligt.
Om dina testfall går igenom anger du svaret du har fått och går vidare.
Skulle något vara otydligt så är det bara att fråga.
136
Testdriven utveckling
Tanken bakom testdriven utveckling är att testerna ska utforma koden. Du kan tänka på det
som att “tänka först, programmera sen”.
För att lösa den givna uppgiften med testdriven design ska du börja med att skriva enhetstester. Då är det bra att tänka igenom vilka funktioner din kod behöver. För att göra
testvänlig kod är det klokt att bryta upp din kod i många, mindre funktioner. Sträva emot att
en funktion endast ska utföra en enda uppgift.
När du har bestämt vilka funktioner du behöver skriva och har skrivit testfall för dessa
har du nästan ett komplett kodskelett. Nu gäller det bara att börja skriva den faktiska koden.
När alla testfall godkännes så ska din kod vara färdig och fungerande.
Lycka till!
137
Skriva testfall under programmeringen
Nu ska du testa på hur det är att skriva testfall omlott med kodskrivandet. Ett sätt att göra
detta kan vara att skriva testfall efter du har kodat en ny funktionalitet. Till exempel om ditt
program kommer bestå av tre funktioner kan du skriva testfall för varje funktion precis efter
du har skrivit klart den.
Försök integrera testskrivandet i kodskrivandet i största möjliga mån.
Det viktigaste är att du inte skriver alla testfall före eller efter kodandet.
Lycka till!
138
Skriva testfall efter kodandet
Nu ska du prova att skriva alla testfall efter du har skrivit klart programmet. Du kan tänka
på det som “gör först, tänk sen”.
Koda tills du känner dig klar, programmet borde fungera. Skriv sedan testfall som du
känner är lämpliga. Kontrollera att alla testfall körs och blir godkända.
Lycka till!
139
Uppvärmning
17 är större än 4. Likaså är 3 större än 2.
Skriv en funktion som tar in två tal och returnerar det talet som är störst.
Skriv några lämpliga testfall och se att allting fungerar som det är tänkt innan du tar
dig an de riktiga uppgifterna.
140
Uppgift 1
Förhållningssätt du ska använda dig av:
Kvadraten av summan av de första tio naturliga talen är:
(1 + 2 + ... + 10)2 = 552 = 3025
Summan av kvadraten av de första tio naturliga talen är:
12 + 22 + ... + 102 = 385
Skillanden mellan summan av kvadraten och kvadraten av summan för de tio första naturliga
talen är:
3025 ´ 385 = 2640
Vad är skillanden mellan summan av kvadraten och kvadraten av summan för de första
100 naturliga talen?
Tips: x n kan skrivas som Math.pow(x, n) i JavaScript.
Svar:
Tidsåtgång för att koda och testa:
Antal funktioner:
141
Uppgift 2
Förhållningssätt du ska använda dig av:
Kent har köpt en pizza.
Kent älskar ost. Kent tycker att hans pizza har för lite ost. Kent blir förargad.
Kents pizza är rund och har en radie på 10 cm. Den yttre kanten av deg är 2 cm och
har ingen ost på sig. Hur många procent av Kents pizza har ost på sig?
Tips 1: Arean för en cirkel: A = Radien ˚ Radien ˚ π
Tips 2: π kan i denna uppgift betraktas som 3.14
Svar:
Tidsåtgång för att koda och testa:
Antal funktioner:
142
Uppgift 3
Förhållningssätt du ska använda dig av:
2520 är det minsta talet som är jämnt delbart med alla tal från 1 till 10.
Hitta det minsta talet som är jämnt delbart med alla tal från 1 till 20.
Tips: Kom ihåg att man kan använda modulo (%) för beräkna restprodukten av en division.
Svar:
Tidsåtgång för att koda och testa:
Antal funktioner:
143
Enkät
Enhetstestning under projektet
1. Har du använt dig av enhetstestning under projektets gång? Om du svarar "Nej": gå
vidare till nästa kapitel som behandlar datainsamlingen.
˝ Ja
˝ Nej, varför?
2. Tycker du att den här datainsamlingen är representativ för motsvara att enhetstestandet
under projektet?
˝ Ja
˝ Nej, varför?
3. Vilken av de tre förhållningssättet som använts under denna datainsamling representerar bäst hur du har använt dig av enhetstestning under projektetsgång?
˝ Testdriven design, det vill säga testfall före kodande
˝ Testfall kontinerligt under kodandet
˝ Testfall först efter att koden var färdigskriven
4. Vilket av följande påståenden skulle du säga passar bäst in på dig i ditt arbete med
enhetstestning?
˝ Jag tycker att enhetstestningen har varit till stor hjälp för att lösa problem under
projektets gång.
˝ Jag tycker att enhetstestningen har varit till någon hjälp för att lösa problem under
projektets gång.
˝ Jag tycker att enhetstestningen varken har varit till nytta eller något hinder när jag
löste uppgifterna under projektets gång.
˝ Jag tycker att enhetstestning har varit ett jobbigt moment som bara måste göras
˝ Jag tycker att enhetstestning har varit ett hinder under projektets gång
Om datainsamlingen
5. Om du skulle uppskatta svårighetsgraden av uppgifterna på en skala 1-5, där 1 är
väldigt enkel och 5 är väldigt svår:
˝ Uppvärmningsuppgift:
˝ Uppgift 1:
˝ Uppgift 2:
˝ Uppgift 3:
144
6. Uppfattade du att något förhållningssätt till enhetstestning underlättade vid lösning av
någon uppgift? I så fall vilket förhållningssätt (Du kan välja flera förhållningssätt):
˝ Nej.
˝ Ja, skriva testfallen först.
˝ Ja, skriva testfallen kontinuerligt under kodandets gång.
˝ Ja, skriva testfallen efter kodandet.
˝ Ja, alla förhållningsätt bidrog.
7. Uppfattade du att något förhållningssätt till enhetstestning försvårade lösningen av någon uppgift? I så fall vilket förhållningssätt? (Du kan välja flera alternativ):
˝ Nej.
˝ Ja, skriva testfallen först.
˝ Ja, skriva testfallen kontinuerligt under kodandets gång.
˝ Ja, skriva testfallen efter kodandet.
˝ Ja, alla förhållningssätt bidrog.
8. Övriga kommentarer:
145
Bilaga 7 Resultat från enkät om daily
Scrum
Vad tycker du om att vi har haft daily Scrum-möten varannan dag istället för varje dag?
• Tycker det passar bra eftersom vi inte jobbar heltid med projektet och man då ibland
har vissa dagar då man inte gör nånting.
• Bra! I och med att det inte hinner hända så mycket på två dagar så räcker det.
• Jag tycker det varit rimligt i förhållande till den mängd arbete vi lagt ner i projektet,
åtminstone tidigare. Det är möjligt att det varit bättre att ha alla dagar nu på slutet när
det arbetas intensivt.
• bra sett till hur ofta det finns något att uppdatera. känns som om varannan dag har
gjort att det inte riktigt känns integrerat
• Tillräckligt med varannan dag, blir lite tjatigt annars och händer inte så mycket mellan
varje gång
• Bra! Varannan dag borde man ha saker att skriva. Efter varje dag skulle det bara bli
massa upprepningar.
Vad tycker du om att vi hållit daily Scrum-mötena virtuellt?
• Enkelt och smidigt. Skönt att inte behöva vänta på folk för att kunna rapportera.
• Bra. Det hade varit väldigt jobbigt att hitta en tid då alla hade kunnat vara med.
• Det har fungerat bra. Saknar dock diskussion bland medlemmar som kan uppstå efter
avslutat möte, känns som att en del information går förlorad eftersom kommunikationen sker i textform och inte face-to-face.
• praktiskt. men kommer förespråka face-to-face eller skype för framtida projekt
• Har fungerat jättebra, skönt att själv kunna bestämma när man ska skriva/läsa. Skulle
ha känts onödigt att samla alla för 15min varje dag när läsa går lika bra, även om man
kanske missar lite det trevliga med att träffas ansikte mot ansikte.
• Mycket bra! Jag tycker om när man gör saker så enkla som möjligt. Skulle vara jobbigt
att behöva ta sig till skolan om man egentligen vill sitta hemma.
146
Hur tycker du Slack och geekbot har fungerat för att sköta daily Scrum-mötena?
• Hur bra som helst!
• Fantastiskt.
• Tycker att det har fungerat bra, känner inte till någon lösning jag tror skulle fungerat
bättre när vi valt att ha virtuella möten.
• geekbot och slack har fungerat väldigt bra! slackbot kritik: borde kunna fråga om hjälp
under en pågående report
• Geekbot har fungerat bra, skönt att få en påminnelse automatiskt. Han ställer alltid rätt
frågor!
• Exemplariskt!
Finns det något i vår variant av daily Scrum som du tror hade fungerat bättre på något
annat sätt? Om ja, hur då?
• Om det hade varit tydligare vilka som inte gjort scrum, som det är nu kan folk glömmas
bort.
• Nej.
• Jag tror vi hade fått ut mer av mötena om vi haft fysiska sådana, men samtidigt så hade
det blivit svårt i praktiken. Så mitt svar blir nej.
• ställer mig tveksam till att hålla dem virtuellt
• Om alla hade postat en selfie tillsammans med sin uppdatering!
• Det hade varit spännande att på ett enkelt sätt få ut en sammanfattningen över sina
egna daily scrum under en lång period. Detta för att leta efter mönster i sitt arbete.
147