En studie om parprogrammering i praktiken - Lunds Tekniska ...
En studie om parprogrammering i praktiken - Lunds Tekniska ...
En studie om parprogrammering i praktiken - Lunds Tekniska ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>En</strong> <strong>studie</strong> <strong>om</strong> <strong>parprogrammering</strong> i <strong>praktiken</strong><br />
Mia Nyström<br />
Karin Wanhainen<br />
Johan Rix<br />
29 maj 2002<br />
Sammanfattning<br />
Parprogrammering är en av de mest <strong>om</strong>diskuterade grundstenarna i Extreme<br />
Programming (XP). All produktionskod skall skrivas i par och på detta sätt skall<br />
programkodens stabilitet och kvalitet öka.<br />
I kursen Inledande programvaruteknik på <strong>Lunds</strong> <strong>Tekniska</strong> Högskola (LTH) introducerades<br />
XP s<strong>om</strong> utvecklingsmetod för det obligatoriska projektet i andra årskursen.<br />
Kursen var teknologernas första kontakt med XP i <strong>praktiken</strong>. <strong>En</strong> kvantitativ<br />
<strong>studie</strong> bland teknologerna visade på problem och åsikter <strong>om</strong> <strong>parprogrammering</strong>.<br />
Studien gen<strong>om</strong>fördes med två enkätundersökningar, en före och en efter projektet.<br />
Denna artikel redogör för och jämför de resultat s<strong>om</strong> erhölls från enkätundersökningarna.<br />
Artikeln presenterar studenters åsikter <strong>om</strong> <strong>parprogrammering</strong> och ger<br />
en inblick i hur <strong>parprogrammering</strong> uppfattas av teknologer med två år kvar till civilingenjörsexamen.<br />
Resultaten har även sammanställts i form av riktlinjer för hur<br />
man bör agera s<strong>om</strong> coach vad gäller <strong>parprogrammering</strong>.<br />
1 Inledning<br />
1.1 Parprogrammering<br />
Parprogrammering är en av de mest <strong>om</strong>diskuterade grundstenarna i Extreme Programming.<br />
All produktionskod skall skrivas i par och på detta sätt skall stabiliteten och<br />
kvaliteten på koden öka. Det har visat sig att par är 40% mer effektiva än enskilda programmerare<br />
(Williams, Kessler, Cunningham, Jeffries, 2000) och att kod producerad<br />
av par innehöll ungefär 15 % färre fel än kod producerad av enskilda programmerare<br />
(Williams, 2000). Det finns många tänkbara anledningar till dessa förbättringar:<br />
Behovet av granskning av koden minskar vid <strong>parprogrammering</strong>, då detta är något<br />
s<strong>om</strong> sköts kontinuerligt under kodningen. S<strong>om</strong> en följd av den kontinuerliga<br />
kodgranskningen minskar även felfrekvensen i koden.<br />
Programmerarna uppskattar att samarbeta och tillsammans nå resultat.<br />
Möjligheterna att diskutera fram bra lösningar minskar risken att fastna i problemlösningen.<br />
Om ett utvecklingsteam byter par ofta, sprids k<strong>om</strong>petensen och kunskapen, inte<br />
bara rörande den aktuella koden utan även <strong>om</strong> allmänna programmeringsdetaljer,<br />
algoritmer och tekniker.<br />
1
1.2 Projektbeskrivning<br />
I kursen Inledande programvaruteknik på LTH introducerades XP s<strong>om</strong> utvecklingsmetod<br />
för det obligatoriska projektet. Kursen var teknologernas första kontakt med XP i<br />
<strong>praktiken</strong>. De flesta av kursdeltagarna hade vid kursens början inte någon erfarenhet<br />
av programmering i projekt med tyngre arbetsmetoder, men alla hade programmerat<br />
både enskilt och i par tidigare. När kursen Inledande programvaruteknik läses går studenterna<br />
minst fjärde terminen på LTH. De har då 5 terminer kvar innan de skall ut på<br />
arbetsmarknaden.<br />
Den praktiska delen av projektet gen<strong>om</strong>fördes under sex iterationer <strong>om</strong> åtta timmar<br />
vardera. Varje team bestod av 8-10 programmerare samt en eller två coacher. Många<br />
av medlemmarna i de olika teamen var inte bekanta med varandra vid projektets början<br />
och någon speciell gruppdynamik var inte utarbetad.<br />
Uppgiften för varje team var att implementera ett tidtagningssystem för olika typer<br />
av motorcykeltävlingar.<br />
2 Undersökningen<br />
Undersökningen utfördes gen<strong>om</strong> att studenterna fick svara på två enkäter, en innan projektets<br />
start och en efter avslutat projekt. Resultaten från enkäterna har sedan jämförts<br />
och sammanställts. 107 studenter har medverkat i <strong>studie</strong>n, varav 16 stycken är kvinnor.<br />
Tyvärr gör det låga antalet kvinnor att resultaten vid jämförelser mellan kvinnor och<br />
män inte alltid kan ses s<strong>om</strong> självklara fakta.<br />
2.1 <strong>En</strong>kät 1<br />
I Bilaga A presenteras den enkät s<strong>om</strong> delades ut under första iterationen. <strong>En</strong>käten delades<br />
ut till 107 studenter och besvarades av 102 studenter. Frågorna behandlar allmänna<br />
uppfattningar <strong>om</strong> egen k<strong>om</strong>petens, <strong>parprogrammering</strong> i allmänhet, egenskaper hos programmeringspartner<br />
samt hur <strong>parprogrammering</strong> bör gen<strong>om</strong>föras i <strong>praktiken</strong>.<br />
2.2 <strong>En</strong>kät 2<br />
I Bilaga B presenteras den enkät s<strong>om</strong> delades ut under sista iterationen. <strong>En</strong>käten delades<br />
ut till 107 studenter och besvarades av 97 studenter. Frågorna var utformade i<br />
likhet med den första enkäten för att intressanta jämförelser och eventuella förändringar<br />
skulle kunna noteras. Frågor <strong>om</strong> egenupplevd k<strong>om</strong>petens, eventuella k<strong>om</strong>petensförbättringar,<br />
egenskaper hos programmeringspartner samt teamets praktiska utförande av<br />
<strong>parprogrammering</strong> behandlades.<br />
2
3 Analys av resultat<br />
I nedanstående stycken jämförs och analyseras resultat från de två enkätundersökningarna.<br />
Vid analys av resultaten gick det att konstatera att inte alla frågor var tillräckligt<br />
gen<strong>om</strong>arbetade. Vissa frågor kunde visa på intressanta resultat, men <strong>om</strong> följdfrågor<br />
saknades var det ibland svårt att analysera varför resultaten såg ut på ett visst sätt.<br />
Frågor angående den egenupplevda k<strong>om</strong>petensen visade anmärkningsvärda resultat<br />
och tas kort upp i stycke 3.5.1 trots den vaga kopplingen till <strong>parprogrammering</strong>.<br />
3.1 Studenters inställning till <strong>parprogrammering</strong><br />
Det stora flertalet av studenterna var positiva eller mycket positiva till <strong>parprogrammering</strong><br />
både före och efter projektet, vilket kan ses i figuren nedan. S<strong>om</strong> kan ses i figur<br />
Figur 1: Studenternas inställning till <strong>parprogrammering</strong> innan och efter projektet.<br />
3.1 uppgav 73 % innan projektets start att de var positiva eller mycket positiva till <strong>parprogrammering</strong>.<br />
Siffran minskade något under projektets gång och motsvarande siffra<br />
efter slutfört projekt var 68 %, vilket dock fortfarande kan betraktas s<strong>om</strong> högt. Man kan<br />
se ur diagrammet att antalet mycket positiva har minskat samtidigt s<strong>om</strong> antalet negativa<br />
och mycket negativa har ökat. Antalet positiva har dock ökat men det leder ändå till att<br />
den sammanlagda attityden har sjunkit något.<br />
Att attityden har sjunkit, <strong>om</strong> än minimalt, kan förklaras av flera anledningar:<br />
Coachernas brist på rutin kan i några fall ha lett till en olycklig arbetsfördelning<br />
och uppdelning av programmeringspartners.<br />
I många fall fick programmerare sitta tillsammans och utföra uppgifter s<strong>om</strong> ansågs<br />
vara för enkla, vilket kan ha lett till en känsla av ineffektivitet. Programme-<br />
3
arna kan då ha bildat sig uppfattningen att det just i detta projekt var onödigt<br />
med <strong>parprogrammering</strong> och slöseri med resurser.<br />
Datorrummen s<strong>om</strong> användes var dimensionerade för att rymma endast halva antalet<br />
personer av de s<strong>om</strong> vistades där, vilket ledde både till dålig luft och obekväma<br />
arbetsställningar.<br />
Studenterna är vana att arbeta i par med sina k<strong>om</strong>pisar och var inte helt beredda<br />
på att parprogrammera med folk de inte kände eller passade ihop med.<br />
Siffrorna kanske hade blivit annorlunda <strong>om</strong> undersökningen gjorts ute i arbetslivet.<br />
I arbetslivet är <strong>parprogrammering</strong> inte ett lika vanligt arbetssätt s<strong>om</strong> under utbildningen<br />
och attityden till det, speciellt bland äldre programmerare, är troligtvis inte lika positiv<br />
s<strong>om</strong> på högskolan. Den initiala inställningen hade därför troligtvis varit lägre.<br />
<strong>En</strong> fråga i den andra enkäten behandlade frågeställningen <strong>om</strong> det fanns tillfällen<br />
under projektet då det hade varit bättre att programmera ensam. Det stora flertalet av<br />
gruppmedlemmarna tyckte att det fanns sådana tillfällen och att det främst skulle vara<br />
bättre att vara ensam vid mycket enkel programmering. Resultatet från den frågan<br />
stöder alltså teorin s<strong>om</strong> läggs fram i punkt 2 ovan och det skulle kunna vara en möjlig<br />
anledning till att attityden har sjunkit något.<br />
3.2 Praktiskt utförande av parbyten<br />
3.2.1 Vem ska välja partner?<br />
Studenterna fick svara på frågor <strong>om</strong> hur det praktiskt bör gå till med parbyten under<br />
iterationen och vad coachen bör ha för roll i det hela. Resultaten från frågan <strong>om</strong> vem<br />
s<strong>om</strong> bör välja programmeringspartner framgår av figur 2. Vid den första undersök-<br />
Figur 2: Vem s<strong>om</strong> bör välja programmeringspartner enligt studenterna.<br />
ningen tyckte 78% av studenterna att programmerarna själva ska bestämma med vem<br />
i gruppen man ska programmera. 20% tyckte att coachen skulle bestämma partner och<br />
4
esterande 2% tyckte att både programmerare och coach bör bestämma ihop. På samma<br />
fråga efter projektet svarade färre studenter, 66%, att programmerarna själva borde<br />
välja partner. Antalet s<strong>om</strong> tyckte att coachen skulle välja hade dock stigit till 24% och<br />
11% tyckte nu att båda skulle välja tillsammans.<br />
Resultaten skulle kunna förklaras med att studenterna föredrar den metod s<strong>om</strong> deras<br />
coach har tillämpat i deras egen grupp. Det visade sig nämligen att de flesta s<strong>om</strong><br />
svarade att coachen skulle bestämma partner k<strong>om</strong>mer från grupper där coachen i större<br />
utsträckning under projektet har styrt vilka programmerare s<strong>om</strong> ska programmera ihop.<br />
Det är i den här frågan även värt att notera att det i enkäterna ej förek<strong>om</strong> något<br />
alternativ båda utan att de enkäter där båda alternativen var ikryssade här har tolkats<br />
s<strong>om</strong> ett tredje alternativ. Hade det funnits ett alternativ båda är det möjligt att siffrorna<br />
hade sett annorlunda ut.<br />
3.2.2 Coachens roll<br />
<strong>En</strong> fråga i andra enkäten berörde hur studenterna tyckte att coachen skulle agera och<br />
vad han/hon skulle ha för roll vid parbyten. Frågan hade fem förskrivna alternativ:<br />
Han/Hon ska se till att det blir gjort.<br />
Han/Hon bör se till att de s<strong>om</strong> samarbetar bra får jobba tillsammans.<br />
Han/Hon bör se till att sprida och öka k<strong>om</strong>petensen i gruppen.<br />
Han/Hon bör se till att paren byts ifall ett par har kört fast.<br />
Han/Hon bör låta utvecklarna sköta det helt själva.<br />
Den stora majoriteten, 60% och 59% tyckte att coachens huvuduppgifter var att<br />
sprida och öka k<strong>om</strong>petensen i gruppen samt att se till att paren byts ifall ett par har kört<br />
fast. 44% tyckte även att det är coachens uppgift att se till att byten sker överhuvudtaget<br />
och 34% tyckte att coachen skulle para ihop de s<strong>om</strong> samarbetar bra tillsammans.<br />
Frågan gav även upphov till en del spontana k<strong>om</strong>mentarer. Någon tyckte exempelvis<br />
att coachen skulle placera folk på den story de passar bäst för.<br />
Resultaten från de båda frågeställningarna ovan visar att parbyten bör baseras på<br />
ett samspel mellan programmerare och coach. Coachen bör skaffa sig uppfattning <strong>om</strong><br />
hur de olika gruppmedlemmarna arbetar tillsammans och kan sedan med fördel föreslå<br />
vilka s<strong>om</strong> kan programmera ihop vid nästa byte. Coachen bör även ha koll på ungefär<br />
vilka delar av koden de olika programmerarna är insatta i så att någon s<strong>om</strong> är väl insatt<br />
i ett visst stycke kod kan arbeta tillsammans med någon s<strong>om</strong> ej är så väl insatt i just den<br />
delen av koden och på så sätt sprida kodkänned<strong>om</strong>en i gruppen. Det yttersta beslutet<br />
<strong>om</strong> vilka s<strong>om</strong> ska programmera ihop måste dock programmerarna själva ansvara för<br />
och coahens förslag ska hellre ses s<strong>om</strong> rek<strong>om</strong>mendationer för att på bästa sätt sprida<br />
k<strong>om</strong>petensen i gruppen.<br />
5
3.2.3 Hur ofta bör man byta partner?<br />
<strong>En</strong> fråga behandlade hur ofta man bör byta programmeringspartner för att få utvecklingsarbetet<br />
effektivt. <strong>En</strong> fråga <strong>om</strong> hur ofta grupperna faktiskt hade bytt partners ställdes<br />
också. Resultaten från de båda frågorna kan betraktas i figur 3 nedan. Vad s<strong>om</strong><br />
nedan refereras till s<strong>om</strong> en iteration <strong>om</strong>fattade i detta projektet 8 timmars arbete, och<br />
en uppgift s<strong>om</strong> refereras till s<strong>om</strong> en story kunde ta allt från en till åtta timmar. De flesta<br />
Figur 3: Hur ofta man bör byta programmeringspartner jämfört med hur ofta studenterna<br />
upplevde att de faktiskt bytte programmeringspartner<br />
av studenterna, 60%, upplevde att de i deras grupp hade bytt partner ungefär en gång<br />
per iteration. Några få, 10%, uppgav att de hade bytt partner efter varje story och 25%<br />
hade bytt mindre än en gång per iteration. De s<strong>om</strong> sa sig ha bytt partner efter varje<br />
story representerade främst två av de tolv grupperna, men någon enstaka ur de andra<br />
grupperna hade också angett det alternativet.<br />
Följdfrågan var sedan hur ofta studenterna tycker att man bör byta partner i ett<br />
projekt av liknande karaktär. Här visade resultaten att 27% hade velat byta partner<br />
efter varje story, 58% en gång per iteration och 8% mindre än en gång per iteration.<br />
Till frågan erhölls många spontana k<strong>om</strong>mentarer s<strong>om</strong> visade att det är viktigt att byta<br />
när det faller sig naturligt, tex när det är en naturlig paus under iterationen. Med tanke<br />
på att en story kan variera ganska kraftigt i tidslängd verkar det alltså s<strong>om</strong> att det inte<br />
riktigt är tiden s<strong>om</strong> bör avgöra när ett byte ska ske, utan snarare <strong>om</strong> det faller sig<br />
naturligt eller ej. Om man även tar hänsyn till att en story i detta projektet ofta inte tog<br />
längre tid än några få timmar kan resultaten även uppfattas s<strong>om</strong> att studenterna hade<br />
velat byta partners lite oftare än vad de faktiskt gjorde under projektet. De vill inte byta<br />
partner mitt i en uppgift, men heller inte för sällan.<br />
<strong>En</strong> intressant vidareutveckling av <strong>studie</strong>n hade varit att k<strong>om</strong>plettera med en ordenligt<br />
undersökning av coacherna och hur de har lett sina grupper. Många av de avvikande<br />
resultaten s<strong>om</strong> har framk<strong>om</strong>mit representerar en eller några speciella grupper av de tolv<br />
och det vore då intressant att ta reda på <strong>om</strong> coachen i detta fallet har agerat annorlunda<br />
i jämförelse med de andra coacherna.<br />
6
3.2.4 Hur många i en grupp bör man programmera med?<br />
Studenterna fick svara på frågan <strong>om</strong> hur många i en grupp <strong>om</strong> tio personer de tycker att<br />
man bör parprogrammera med. Resultaten kan beskådas i figur 4 nedan. Innan projektet<br />
Figur 4: Hur många i en grupp <strong>om</strong> tio personer man bör parprogrammera med.<br />
tyckte 52% att man ska programmera med de flesta i en sådan grupp. 27% tyckte alla<br />
och 19% tyckte bara några. Efter projektet tyckte 58% att man ska programmera med<br />
de flesta i gruppen och de s<strong>om</strong> tyckte att man skulle programmera med alla hade sjunkit<br />
lite i antal. Den minimala minskningen kan eventuellt förklaras med att vissa s<strong>om</strong> inte<br />
hade räknat med det har fått uppleva hur det är att programmera med någon de inte<br />
alls passar ihop med eller att det har förek<strong>om</strong>mit personer med samarbetssvårigheter i<br />
vissa grupper. Slutsatsen bör dock vara att man bör programmera med de allra flesta i<br />
en grupp <strong>om</strong> 10 personer, men inte nödvändigtvis alla <strong>om</strong> det finns personer i gruppen<br />
s<strong>om</strong> inte alls k<strong>om</strong>mer överens med varandra.<br />
3.3 Programmeringspartner<br />
Flera av frågorna i båda enkäterna behandlade hur olika personlighetsegenskaper rankades<br />
hos partnern. Det är här relativt självklara resultat s<strong>om</strong> presenteras, men det kan<br />
vara viktigt att få se vilka egenskaper man bör leta efter när man tillsätter personal till<br />
ett XP-projekt och vilka egenskaper s<strong>om</strong> antagligen uppfattas s<strong>om</strong> värst av gruppmedlemmarna.<br />
Studenterna fick först ranka de viktigaste egenskaperna hos den de parprogrammerar<br />
med på en skala mellan 0 och 3. Resultaten visas i figur 5 på nästa sida.<br />
De två absolut viktigaste egenskaperna visade sig vara att ha en partner s<strong>om</strong> är<br />
tillmötesgående och lyhörd. Intressant var att sex av de sju absolut högst rankade egenskaperna<br />
- de s<strong>om</strong> fick en sammanlagd poäng högre än 1.5 - var egenskaper s<strong>om</strong> endast<br />
rörde personligheten, s<strong>om</strong> social, utåtriktad, rolig, lyhörd och tillmötesgående. Huruvida<br />
man var en erfaren programmerare eller ej eller snabb på att editera och skriva kod<br />
visade sig ha mindre betydelse. Teknisk k<strong>om</strong>petens var den högst rankade k<strong>om</strong>petensegenskapen<br />
och den k<strong>om</strong> först på fjärde plats totalt. Resultatet visar alltså att k<strong>om</strong>petensen<br />
inte anses lika viktig s<strong>om</strong> personligheten hos den man parprogrammerar med.<br />
7
Figur 5: De viktigaste egenskaperna hos programmeringspartnern rangordnade på en<br />
skala mellan 0 och 3<br />
I arbetslivet kan det då vara viktigt att tänka på att personligheten hos medlemmarna<br />
i ett XP-projekt spelar lite större roll än i ett projekt där programmerarna sitter och<br />
utvecklar enskilt.<br />
I frågan <strong>om</strong> de värsta egenskaperna <strong>om</strong>bads studenterna nämna de fem egenskaper<br />
de tyckte sämst <strong>om</strong> hos den de parprogrammerar med. De egenskaper s<strong>om</strong> rankades<br />
s<strong>om</strong> de värsta visas i figur 6 nedan. Den negativa egenskap s<strong>om</strong> rankades s<strong>om</strong> värst<br />
var d<strong>om</strong>inans. Tätt därefter följde egenskaper s<strong>om</strong> dålig ambition, passivitet och ineffektivitet.<br />
Först på en femte plats k<strong>om</strong> den k<strong>om</strong>petensrelaterade egenskapen att vara en<br />
dålig programmerare.<br />
Figur 6: De fem värsta egenskaperna hos den man parprogrammerar med.<br />
8
Ur resultaten kan det alltså än en gång befästas att det är personligheten i större<br />
utsträckning än k<strong>om</strong>petensen s<strong>om</strong> spelar roll vid <strong>parprogrammering</strong>.<br />
<strong>En</strong> viktig skillnad noterades mellan de s<strong>om</strong> ansåg sig själva vara över medel och de<br />
s<strong>om</strong> ansåg sig själva vara under medel i jämförelse med övriga projektmedlemmar. De<br />
s<strong>om</strong> ansåg sig vara över medel programmeringsmässigt ansåg att tekniskt k<strong>om</strong>pentens<br />
och humor var de bästa egenskaperna. S<strong>om</strong> sämsta egenskaper rankades ineffektivitet,<br />
dålig programmerare, dålig personlig hygien samt låg ambition. De s<strong>om</strong> ansåg sig<br />
själva vara under medel programmeringsmässigt rankade däremot lyhördhet och hög<br />
ambition s<strong>om</strong> bästa egenskaper. Ineffektivitet och passivitet ansågs vara de värsta.<br />
3.3.1 Manligt och kvinnligt<br />
Det framgick flera skillnader mellan vad kvinnor och män tyckte var de värsta egenskaperna<br />
hos den de parprogrammerar med. Jämförelsen kan ses i figur 7 nedan.<br />
Figur 7: De värsta egenskaperna hos partnern enligt män respektive kvinnor.<br />
100% av kvinnorna jämfört med 50% av männen tyckte att d<strong>om</strong>inans var en av<br />
de värsta egenskaperna och 84% av kvinnorna jämfört med 48% av männen tyckte<br />
att passivitet var en. Männen däremot rankade ineffektivitet samt dålig programmerare<br />
s<strong>om</strong> de värsta egenskaperna, vilket för kvinnorna inte alls ligger lika högt rankat.<br />
Att d<strong>om</strong>inans fick så höga siffror hos kvinnorna skulle kunna visa på att männen<br />
<strong>om</strong>edvetet tar mer plats än kvinnorna och att kvinnorna därför känner sig överkörda.<br />
<strong>En</strong> spontan k<strong>om</strong>mentar från en kvinna på frågan <strong>om</strong> kön hos partnern spelar någon<br />
roll var: Det har viss betydelse för gruppkänslan, i alla fall för mig s<strong>om</strong> varit ensam<br />
tjej. Jag har haft lite prestationsångest faktiskt och blivit uppretad ett antal gånger på<br />
grund av alla Förstår du? från vissa personer, men självklart är inte alla så.<br />
9
3.4 Samarbetssvårigheter och konflikter<br />
Under den första iterationen trodde 24% av studenterna att de skulle få svårt att samarbeta<br />
med någon eller några i gruppen, men efter projektet uppgav endast 18% att<br />
de hade haft sådana svårigheter. På frågan <strong>om</strong> hur samarbetsproblemet hade löst sig<br />
uppgav hela 90% att problemet inte hade löst sig. Resultatet kan tolkas s<strong>om</strong> att det är<br />
personer s<strong>om</strong> har fått jobba ihop s<strong>om</strong> absolut inte passar ihop. Det kan också ha varit så<br />
att det är vissa personer s<strong>om</strong> har samarbetssvårigheter och där problemet då inte löser<br />
sig oberoende av förslag.<br />
Det k<strong>om</strong>mer alltid finnas personer s<strong>om</strong> är svåra att samarbeta med och i ett skolprojekt<br />
är det en nödvändighet att dessa människor ändå sitter med i projekten och deltar<br />
s<strong>om</strong> de andra. Det blir då coachens uppgift att se till att de s<strong>om</strong> inte alls kan samarbeta<br />
slipper parprogrammera med varandra. Istället bör coachen uppmärksamma vilka personer<br />
i gruppen s<strong>om</strong> bäst klarar av arbeta med den personen och låta dem arbeta ihop.<br />
Väldigt krystade k<strong>om</strong>binationer av människor bör i alla lägen undvikas då samarbetet<br />
i sådana fall säkerligen fungerar dåligt vilket kan få till följd att det produceras dålig<br />
kod.<br />
I ett projekt i arbetslivet borde problem av detta slaget inte uppk<strong>om</strong>ma speciellt ofta<br />
efters<strong>om</strong> företagen själva tillsätter sin personal.<br />
Studenterna fick en fråga <strong>om</strong> huruvida de hade råkat ut för konflikter med sin partner<br />
någon gång under projektet eller ej. 30% uppgav att de hade haft konflikter och i<br />
84% av fallen berodde konflikten på koden. I några enstaka fall hade konflikterna rört<br />
programmeringsordning, personlighet eller partnerns inställning till projektet. I något<br />
enstaka fall hade konflikten behövt lösas gen<strong>om</strong> partnerbyte, men de flesta konflikterna,<br />
70%, hade löst sig gen<strong>om</strong> att båda parter hade k<strong>om</strong>pr<strong>om</strong>issat. Under sådana <strong>om</strong>ständigheter<br />
kan konflikter ses s<strong>om</strong> något positivt efters<strong>om</strong> det vid k<strong>om</strong>pr<strong>om</strong>isser ofta k<strong>om</strong>mer<br />
fram den bästa av två eller flera lösningar. I fall där programmerarna själva inte klarar<br />
av att lösa konflikten kan coachen kanske hjälpa till gen<strong>om</strong> att ge sin syn på problemet<br />
och <strong>om</strong> möjligt introducera ytterligare ett lösningsförslag.<br />
3.5 Egenupplevd kunskap<br />
I båda enkäterna undersöktes studenternas uppfattning <strong>om</strong> den egna programmeringsk<strong>om</strong>petensen.<br />
Frågan är inte helt relevant för just <strong>parprogrammering</strong> men efters<strong>om</strong> den<br />
visar intressanta resultat tar vi upp det här ändå. Studenterna fick rangordna sina egna<br />
programmeringskunskaper i jämförelse med kurskamraternas på en skala med Under<br />
medel, Medel och Över medel. Innan projektet ansåg sig 9% vara Under medel, 70 %<br />
Medel och 21% Över medel. Efter projektet hade siffrorna ändrats marginellt och 6%<br />
ansåg sig vara Under medel, 76 % Medel och 17% Över medel.<br />
3.5.1 Manligt och kvinnligt<br />
Det visade sig dock ligga en stor skillnad i resultaten mellan män och kvinnor. Ingen<br />
av kvinnorna s<strong>om</strong> deltog i <strong>studie</strong>n ansåg sig vara Över medel varken innan eller efter<br />
projektet. Däremot ansåg sig hela 25% av kvinnorna ligga under medel innan projektets<br />
start. Motsvarande siffra för männen var 6%. För att verifiera resultaten gjordes en<br />
förfrågan till Per Holm på Institutionen för Datavetenskap <strong>om</strong> statistik för kvinnorna<br />
i andra årskursen. Det visade sig att ingen av tjejerna i årskursen låg under medel.<br />
Däremot låg flera av dem över medel och en kvinna hade gen<strong>om</strong>gående högsta betyg på<br />
alla kurser s<strong>om</strong> kan relateras till projektkursen, något s<strong>om</strong> ingen tidigare åstadk<strong>om</strong>mit.<br />
10
Efter projektet ändrade sig statistiken något och nu ansåg sig bara 8% av kvinnorna<br />
vara Under medel. För männen var siffran fortfarande 6%. Det var dock ingen kvinna<br />
s<strong>om</strong> uppgav sig ligga Över medel heller efter projektet jämfört med 20% av männen.<br />
De något nedslående resultaten kan enklast förklaras med att kvinnorna har en mer<br />
försiktig attityd och ett sämre självförtroende vad gäller programmering än vad killarna<br />
har. Kvinnorna torde därför ha svårare att hävda sig i en grupp med en majoritet av män<br />
och det är därför viktigt att coachen uppmärksammar alla i gruppen, även de killar s<strong>om</strong><br />
kan tänkas ha sämre självförtroende.<br />
3.6 Ergon<strong>om</strong>i och lokaler<br />
Efters<strong>om</strong> två programmerare sitter vid en och samma arbetsstation då de parprogrammerar<br />
blev studenterna tillfrågade <strong>om</strong> de upplevde att <strong>parprogrammering</strong> var jobbigare<br />
ur ergon<strong>om</strong>isk synvinkel än enskild programmering, dvs <strong>om</strong> de har upplevt mer nackstelhet,<br />
axelvärk etc. 33% av de tillfrågade svarade ja på frågan, vilket är en ganska hög<br />
siffra i ett så kort projekt. <strong>En</strong>dast sex iterationer <strong>om</strong> vardera åtta timmar har gen<strong>om</strong>förts.<br />
Att arbetsställningen är sämre vid <strong>parprogrammering</strong> är förståeligt då två människor<br />
samtidigt vill sitta så nära skärmen s<strong>om</strong> möjligt, men siffrorna torde också vara<br />
direkt beroende av de lokaler s<strong>om</strong> användes under just detta projektet. Ett stort antal<br />
programmerare satt i en datasal s<strong>om</strong> är avsedd för hälften av de människor s<strong>om</strong> vistades<br />
där.De ordentliga arbetsstolarna har inte räckt till och många har suttit på hårda,<br />
oinställbara stolar, vilket inte direkt främjar rygg och nacke.<br />
Lösningen i detta projektet skulle vara att ha färre studenter i datasalarna under<br />
iterationerna, men i allmänhet är det viktigt att se till så att alla programmerare har<br />
tillgång till bra stolar och att de s<strong>om</strong> parprogrammerar kontinuerligt byter driver, vilket<br />
varierar arbetsställningen mer. Det vore även klokt att lägga in korta bensträckare flera<br />
gånger under dagen.<br />
Ett annat problem s<strong>om</strong> framk<strong>om</strong> och s<strong>om</strong> direkt går att relatera till lokalerna under<br />
just detta projektet var den dåliga luftkonditioneringen. Studenterna upplevde den<br />
dåliga luften s<strong>om</strong> tröttande och varken ventilationssystemet eller vidöppna fönster var<br />
tillräckligt för det antalet människor s<strong>om</strong> befann sig i salen.<br />
3.7 Föredrar <strong>parprogrammering</strong><br />
Den slutgiltiga frågan var ifall projektmedlemmarna ansåg sig ha blivit bättre programmeringsmässigt<br />
under projektet och <strong>om</strong> de i så fall ansåg att det var <strong>parprogrammering</strong>ens<br />
förtjänst. Hela 62% tyckte att de hade blivit bättre och av dem tyckte hela 92% att<br />
det berodde på <strong>parprogrammering</strong>en.<br />
Innan projektet uppgav 10% av studenterna att de hellre hade använt enskild programmering<br />
i projektet. Efter projektet ställdes frågan <strong>om</strong> studenterna föredrar <strong>parprogrammering</strong><br />
framför enskild programmering i skolan eller på jobbet. 77% uppgav att<br />
de föredrar <strong>parprogrammering</strong> i skolan och 69% föredrog <strong>parprogrammering</strong> även i<br />
arbetslivet. Frågan <strong>om</strong> vad s<strong>om</strong> föredras i arbetslivet uppfattades dock av många s<strong>om</strong><br />
lite svår efters<strong>om</strong> inte alla varit ute i arbetslivet ännu. Resultaten visar dock att <strong>parprogrammering</strong><br />
borde vara mycket väl lämpat i utbildningssyfte då studenterna tvingas<br />
samarbeta, k<strong>om</strong>pr<strong>om</strong>issa och lösa konflikter.<br />
11
4 Råd och riktlinjer<br />
Resultaten av enkätundersökningarna har resulterat i nedanstående lista över de saker<br />
coach och projektledare bör tänka på vid <strong>parprogrammering</strong>.<br />
Att välja partner - Parbyten bör baseras på ett samspel mellan programmerare och<br />
coach. Coachen bör skaffa sig uppfattning <strong>om</strong> hur de olika gruppmedlemmarna<br />
arbetar tillsammans och kan sedan med fördel föreslå vilka s<strong>om</strong> kan programmera<br />
ihop vid nästa byte. Coachen bör kunna avgöra vilka stories s<strong>om</strong> lämpar sig<br />
för vilka programmerare och föreslå par därefter. Det yttersta beslutet <strong>om</strong> vilka<br />
s<strong>om</strong> ska programmera ihop måste dock programmerarna själva ansvara för och<br />
coahens förslag ska hellre ses s<strong>om</strong> rek<strong>om</strong>mendationer för att på bästa sätt sprida<br />
k<strong>om</strong>petensen i gruppen.<br />
Coachens roll vid parbyte - Coachens roll i projektet vad gäller parbyten bör vara<br />
att se till att k<strong>om</strong>petensen i gruppen sprids på bästa sätt och att de s<strong>om</strong> kör fast<br />
snabbt avhjälps gen<strong>om</strong> antingen parbyte eller <strong>om</strong> möjligt alternativa lösningsförslag<br />
från coachen eller andra gruppmedlemmar. Coachen bör även ha koll på<br />
ungefär vilka delar av koden de olika programmerarna är insatta i så att någon<br />
s<strong>om</strong> är väl insatt i ett stycke kod kan arbeta tillsammans med någon s<strong>om</strong> ej är så<br />
väl insatt i just den kodbiten och på så sätt sprida kodkunskapen i gruppen.<br />
Hur ofta man bör byta partner - Parbyte bör ske vid naturliga avbrott i utvecklingen,<br />
antingen vid pauser, då i alla fall en liten del av storyn har avslutats eller <strong>om</strong><br />
det är korta stories, då en ny story påbörjas. Mer än fyra timmar bör ett par inte<br />
programmera ihop vid projekt liknande det då <strong>studie</strong>n har utförts. I arbetslivet<br />
med längre iterationer kan man nog tänka sig en längre period mellan bytena då<br />
uppgifterna kan antas vara mer k<strong>om</strong>plicerade och tidskrävande än de uppgifter<br />
s<strong>om</strong> har behandlats i detta projekt och då det tar längre tid för programmerarna<br />
att sätta sig in i kod.<br />
Hur många man bör programmera med - I skolprojekt s<strong>om</strong> detta bör gruppmedlemmarna<br />
programmera med så många s<strong>om</strong> möjligt i gruppen. Om det finns<br />
personer s<strong>om</strong> inte fungerar bra ihop bör coachen se till att just de personerna<br />
inte behöver arbeta ihop, speciellt inte med mer k<strong>om</strong>plicerade uppgifter. Uppstår<br />
ändå konstlade par kan de kanske få enklare uppgifter att lösa för att inte riskera<br />
att det dåliga samarbetet går ut över koden i allt för stor utsträckning.<br />
Att tillsätta personal - Vid tillsättning av personal till ett projekt där <strong>parprogrammering</strong><br />
ska användas bör man tänka på att det är personlighet i större utsträckning<br />
än k<strong>om</strong>petens s<strong>om</strong> k<strong>om</strong>mer avgöra hur gruppen arbetar ihop. Självklart måste<br />
man även ta hänsyn till gruppmedlemmarnas k<strong>om</strong>petens för att få ett bra team<br />
och en bra produkt, men högsta k<strong>om</strong>petens bör inte vara högsta prioritet.<br />
Konflikter - Konflikter verkar ofta lösa sig gen<strong>om</strong> k<strong>om</strong>pr<strong>om</strong>isser mellan programmerarna,<br />
men <strong>om</strong> coachen upptäcker att en konflikt inte kan redas ut kan<br />
han/hon gå in s<strong>om</strong> tredje part och försöka hjälpa till att reda ut konflikten. Efters<strong>om</strong><br />
konflikterna oftast rör koden kan det vara bra med flera åsikter <strong>om</strong> hur<br />
problemet ska lösas och eventuellt kan det avhjälpa med ett möte in<strong>om</strong> gruppen<br />
för att få fram en bra lösning på problemet.<br />
12
Samarbetssvårigheter - Det k<strong>om</strong>mer alltid att finnas människor s<strong>om</strong> har svårt<br />
för att samarbeta och i ett skolprojekt s<strong>om</strong> detta är det nödvändigt att de personerna<br />
ändå tvingas samarbeta med andra efters<strong>om</strong> det är en nödvändighet inför<br />
arbetslivet. Coachen kan underlätta situationen gen<strong>om</strong> att styra så att den eller de<br />
personer s<strong>om</strong> går bäst ihop med personen i fråga oftare får programmera ihop.<br />
Manligt och kvinnligt - Efters<strong>om</strong> <strong>studie</strong>n visar att kvinnor i större utsträckning<br />
än män är osäkra på sina egna kunskaper är det viktigt att uppmärksamma dem<br />
på samma sätt s<strong>om</strong> de s<strong>om</strong> hävdar sig mest i gruppen. Förhoppningsvis jämnar<br />
siffrorna ut sig under de sista åren på högskolan, men det k<strong>om</strong>mer alltid finnas<br />
personer i gruppen med sämre självförtroende än andra och det är då viktigt att<br />
coachen försöker uppmärksamma alla olika individers åsikter och är lyhörd, även<br />
för de s<strong>om</strong> kan verka osäkra.<br />
Ergon<strong>om</strong>i - För att inte få ökade problem med rygg och nacke under <strong>parprogrammering</strong><br />
bör det finnas bra stolar att tillgå för alla programmerare i gruppen.<br />
Coachen kan även påminna paren <strong>om</strong> att byta driver då och då så att kroppsställningen<br />
ändras ofta, vilket annars lätt glöms bort.<br />
Lokaler - Efters<strong>om</strong> det vid <strong>parprogrammering</strong> ofta finns dubbelt så många personer<br />
s<strong>om</strong> det finns arbetsstationer och alltså långt fler personer än vad ytan är<br />
menad för, så är det viktigt att se till att det finns tillräckligt med utrymme för alla<br />
i gruppen och att luftventileringen räcker till. Ett tips är att låta alla programmerare<br />
ha varsin arbetsstation fastän kodningen endast sker vid en av dem. Därmed<br />
används lokalytan endast av så många personer s<strong>om</strong> den är anpassad för.<br />
5 Slutdiskussion<br />
Studenterna s<strong>om</strong> har deltagit i <strong>studie</strong>n har visat sig ha en mycket positiv inställning till<br />
parprogrammeing. Parprogrammering har bidragit till ökade programmeringskunskaper<br />
hos studenterna och kan anses vara en mycket bra metod i utbildningssyfte. Parprogrammering<br />
ger övning i samarbete och konfliktlösning och innebär en mer given<br />
delaktighet i utvecklingsarbetet för alla i gruppen.<br />
Det k<strong>om</strong>mer tyvärr alltid finnas människor s<strong>om</strong> är svårare än andra att samarbeta<br />
med, men i skolan är det nödvändigt även för dem att försöka vänja sig vid och lära<br />
sig att samarbeta, efters<strong>om</strong> det är en nödvändighet i arbetslivet. Förhoppningsvis kan<br />
<strong>parprogrammering</strong> ge personerna i fråga övning i samarbete, vilket de kanske annars<br />
helst väljer bort till förmån för enskild programmering.<br />
13
Referenser<br />
Laurie Williams, Robert R. Kessler, Ward Cunningham och Ron Jeffries. Strengthening<br />
the Case for Pair programming. IEEE Software, July/August 2000.<br />
Laurie Williams. The Costs and Benefits of Pair Programming. University of Utah<br />
C<strong>om</strong>puter Science, 2000.<br />
14