Pair Programming - The University of North Carolina at Chapel Hill

advertisement
Pair Programming: Why Have
Two Do the Work of One
from
Laurie Williams
North Carolina State University
Pair Programming
Agenda

Research/Findings
 Colocated Pairs
 Distributed Pairs

Pair Interactions

Sample Pairings

Pair Rotation

Summary
Empirical Study for Validation
 Practice: Summer 1999
 20 Students (Sophomore/Junior)
 All worked collaboratively
 Generated more anecdotal/qualitative evidence
 Solo vs Pair: Fall 1999
 41 Students (Junior/Senior)
 28 Worked Collaboratively
 13 Worked Individually
 Software development process was controlled
 The only experimental variable: pair-programming
 Quantitative: Time, Quality, Enjoyment, Confidence
Post Development Test Cases Passed
100.0%
90.0%
80.0%
70.0%
60.0%
50.0%
40.0%
30.0%
20.0%
10.0%
0.0%
Individuals
Collaborators
Program 1
Program 2
Program 3
Program 4
Boxplot of Program Quality
Elapsed Time
120.0%
100.0%
80.0%
60.0%
40.0%
20.0%
0.0%
Program 1
Program 2
One Individual
One Collaborator
Program 3
Boxplot of Student Time
Collaboration by Phase
Collaborative
Individual
l
O
ve
ra
l
st
Te
le
Co
m
pi
w
Re
vi
e
e
Co
d
Re
vi
e
n
Co
de
w
n
De
si
g
De
si
g
Pl
an
ni
ng
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
ENJOY the w ork more because of Pair
Programming
100%
80%
60%
40%
20%
0%
PR OF
SU M 1
SU M 2
SU M 3
Agree
F A LL1
F A LL2
F A LL3
Disagree
More Confident in our Work When Pair Programming
100%
80%
60%
40%
20%
0%
PROF
SUM1
SUM2
SUM3
Agree
FALL1
Disagree
FALL2
FALL3
Distributed Pair Programming







Net Meeting
Yahoo Messenger
Graduate Object-Oriented class at NCSU
5-week project
132 students
34 distance students
Teams of 2-4 students
 Colocated non-pairs (9 groups)
 Colocated pairs (16 groups)
 Distance non-pairs (8 groups)
 Distance pairs (5 groups)
Productivity
Quality
Satisfaction with Working
Arrangement
Very
good
Good
Fair
Poor
Non-pair colocated
46%
40%
11%
3%
Pair colocated
62%
28%
10%
0%
Non-pair distributed
45%
37%
18%
0%
Pair distributed
83%
17%
0%
0%
Satisfaction with Communication
Very
good
Good
Fair
Poor
Non-pair colocated
57%
26%
11%
6%
Pair colocated
58%
28%
12%
2%
Non-pair distributed
41%
41%
14%
4%
Pair distributed
67%
33%
0%
0%
Research Findings to Date

Strong anecdotal evidence from industry
“We can produce near defect-free code in less than half the time.”

Empirical Study
– Pairs produced higher quality code
» 15% less defects (difference statistically significant)
– Pairs completed their tasks in about half the time
» 58% of elapsed time (difference not statistically significant)
– Most programmers reluctantly embark on pair programming
» Pairs enjoy their work more (92%)
» Pairs feel more confident in their work products (96%)
– Distributed pair programming is a viable alternative (worthy of
much more research)
How does this work?
 Pair-Pressure
 Keep each other on task and focused
 Don’t want to let partner down
 “Embarrassed” to not follow the prescribed process
 Parkinson’s Law “Work expands to fill all available time.”
 Pair-Negotiation
 Distributed Cognition: “Searching Through Larger Spaces of
Alternatives”
 Have shared goals and plans
 Bring different prior experiences to the task
 Different access to task relevant information
 Must negotiate a common shared of action
 Pair-Relaying
 Each, in turn, contributes to the best of their knowledge and ability
 Then, sit back and think while their partner fights on
How does this work (part two)?
 Pair-Reviews
 Continuous design and code reviews
 Ultimate in defect removal efficiency
 Removes programmers distaste for reviews
 80% of all (solo) programmers don’t do them regularly or at all
 Debug by Describing
 Tell it to the Furby
 Pair-Learning
 Continuous reviews  learn from partners techniques, knowledge of
language, domain, etc.
 “Between the two of us, we knew it or could figure it out”
 Apprenticeship
 Defect prevention always more efficient than defect removal
Vending Machine Program:
Responsibility Assignment
UI
Mary
Machine
Maintenance
Sue
Buy Drink
Joe
Data Structures
Charlie
Pair Rotation
UI
Buy Drink
Mary
Joe
Mach Maint.
Data Struct.
Sue
Charlie
Task
Owner
Partner
UI for ‘Buy Drink’
Mary
Joe
UI for ‘Add Inventory’
Mary
Sue
UI for ‘Add Recipe’
Mary
Sue
Input Coins/Return
Coins
Joe
Mary
Select Drink
Joe
Charlie
Ingredient Data
Structure
Charlie
Sue
Recipe Data Structure
Charlie
Sue
Add Ingredients
Sue
Charlie
Customer Analysis
Sue
Mary
Expected Benefits of PairProgramming
 Higher product quality
 Improved cycle time
 Increased programmer satisfaction
 Enhanced learning
 Pair rotation
 Ease staff training and transition
 Knowledge management/Reduced product risk
 Enhanced team building
The Benefits
of Pair Programming
Robert Kessler
School of Computing
University of Utah
Special thanks to
Laurie Williams
North Carolina State
University
What Is Pair Programming?
"Pair programming is a simple, straightforward
concept. Two programmers work side-by-side at
one computer, continuously collaborating on the
same design, algorithm, code, and test. It allows
two people to produce a higher quality of code than
that produced by the summation of their solitary
efforts."
This Is Pair Programming
This is NOT Pair Programming
Pair Programming Has Been Around
For a LONG TIME!
1945
...
1953 …
1997
1998
1999
2000
2001
John von Neumann, recognized his own
inadequacies and continuously asked others to
review his work.
Fred Brooks and many others are pair
programming, though they don’t know there is a
name for it.
2002
Does Pair Programming Really
Work?
Empirical study by Laurie Williams at the
university of Utah
 Practice: Summer 1999

– 20 students (sophomore/junior)
» All worked collaboratively
– Generated more anecdotal/qualitative evidence

Solo vs. pair: Fall 1999
– 41 students (junior/senior)
» 28 worked collaboratively
» 13 worked individually
– Software development process was controlled
» The only experimental variable: pair-programming
– Quantitative: time, quality, enjoyment, confidence
Findings #1 - Quality
Post Development Test Cases Passed
100.0%
90.0%
80.0%
70.0%
60.0%
50.0%
40.0%
30.0%
20.0%
10.0%
0.0%
Individuals
Collaborators
Program 1
Program 2
Program 3
Program 4
Findings #2 - Time
Elapsed Time
120.0%
100.0%
80.0%
60.0%
40.0%
20.0%
0.0%
Program 1
Program 2
One Individual
One Collaborator
Program 3
Findings #3 and #4 – Enjoyment and
Confidence
Enjoy the Work More Because of Pair
Programming
100%
80%
60%
40%
20%
0%
PROF
SUM1
SUM2
SUM3
Agree
FALL1
FALL2
More Confident in our Work When PairProgramming
FALL3
Disagree
100%
80%
60%
40%
20%
0%
PROF
SUM1
SUM2
SUM3
Agree
FALL1
Disagree
FALL2
FALL3
How Does This Work?

Pair-Pressure
–
–
–
–

Keep each other on task and focused
Don’t want to let partner down
“Embarrassed” to not follow the prescribed process
Parkinson’s law “work expands to fill all available time.”
Pair-Think
– Distributed cognition: “searching through larger spaces of alternatives”
» Have shared goals and plans
» Bring different prior experiences to the task
» Different access to task relevant information
» Must negotiate a common shared of action

Pair-Relaying
– Each, in turn, contributes to the best of their knowledge and ability
– Then, sit back and think while their partner fights on
How Does This Work (Part Two)?

Pair-Reviews
– Continuous design and code reviews
– Ultimate in defect removal efficiency
– Removes programmers distaste for reviews
» 80% of all (solo) programmers don’t do them regularly or at all

Debug by describing
– Tell it to the Furby

Pair-Learning
– Continuous reviews  learn from partners techniques, knowledge of
language, domain, etc.
– “Between the two of us, we knew it or could figure it out”
– Apprenticeship
– Defect prevention always more efficient than defect removal
Research Findings to Date - 1

Strong anecdotal evidence from industry
– “We can produce near defect-free code in less than half the time.”

Empirical study
– Pairs produced higher quality code
» 15% less defects (difference statistically significant)
» Observed – pairs produced smaller (LOC) programs
– Pairs completed their tasks in about half the time
» 58% of elapsed time (difference NOT statistically significant)
– Most programmers reluctantly embark on pair programming
» Pairs enjoy their work more (92%)
» Pairs feel more confident in their work products (96%)
Research Findings - 2

Several educational studies underway
– University of California, Santa Cruz; North Carolina State
University
– What about pair learning?
» Anecdotal says that it works well
– What are the long-term issues?
» If you learn as a pair, can you work as a solo?

Distributed pair programming studies underway
– North Carolina State University; University of North CarolinaChapel Hill
– Early results: distributed pair programming is viable
– My experience:
» Need to meet and know your pair
» Need a good tool like VNC and telephone
» Video not important
Issues: Workplace Layout
Bad
Better
Best
Issues: Partner Picking Principles
Expert paired with an Expert
Expert paired with a Novice
Novices paired together
Professional Driver Problem
Culture
Issues: Pair Rotation

Ease staff training and transition

Knowledge management/Reduced product risk

Enhanced team building
Issues: Process

Used in eXtreme Programming

Used in the Collaborative Software Process

Pair programming can be added to any process
Expected Benefits of Pair
Programming

Higher product quality

Improved cycle time

Enhanced learning

Pair rotation
– Ease staff training and transition
– Knowledge management/reduced product risk
– Enhanced team building

Increased programmer satisfaction
More Information

Bob Kessler
801-581-4653
kessler@cs.utah.edu

Laurie Williams
919-513-4151
williams@csc.ncsu.edu

http://pairprogramming.com
http://collaboration.csc.ncsu.edu/laurie

Download