Collaborative Software Development
and what we can learn from F/OSS development
Martin Kropp
Instute for Mobile and Distributed Systems
Some term clarifications
☺
Show how F/OSS development is organized
Show how we can profit from F/OSSD CSD practices
Describe some ingredients needed for effective CSD
Agenda
About Me
CSD and GSD - What does that mean?
GSD - Why should we care?
F/OSSD – The mother of CSD
l
How does it work?
Ingredients for CSD
Communication, Process, Project Management, CI,
Summary
swisslog, Grindelwald, 28. Mai 2009
Who am I?
Agenda
About Me
CSD and GSD - What does that mean?
GSD - Why should we care?
F/OSSD – The mother of CSD
How does it work?
l
How does it work?
Ingredients for CSD
Communication, Process, Project Management, CI,
Summary
swisslog, Grindelwald, 28. Mai 2009
Collaborative Software Development
From Wikipedia, 26.05.2009:
The collaborative software development model is a style of
software development whose focus is on
public availability
and
communication
, usually via the Internet.
The software development model began widespread adoption
The software development model began widespread adoption
with the Linux kernel in 1991.
It is the
dominant model
used in development of
free software
.
It is very compatible with free software because free software
projects publish the source code of any published programs, so
they do not have the secrecy reason for hiding their
Global Software Development
“Software work undertaken at
geographically
separated
locations across national boundaries in
a
coordinated
fashion involving real time
(synchronous) and asynchronous
interaction
”
[Sundeep Sahay, University of Oslo]
swisslog, Grindelwald, 28. Mai 2009
Why should I do GSD?
To
Access to the world wide talent pool
Cost savings
Focus on where you get the best ROI
Market presence
End Users
Business Subject
Matter Experts
Technical
Budget Buyers
& Project Proxies
understanding local needs
being close to the customer
Mergers and acquisitions
Improved quality?
Follow-the-sun / -seasons development
gaining competitive advantage
Technical
Collaborators
Some reasons you might
not
want to do it
Strategic choices – timing, partners, …
how to maintain and gain competitive advantage?
Management / comms overhead – complexity
Cultural issues
Command chains in the org chart, attitude, individualism / collectivism, religions, politics,
…
…
Communication issues
time zones, distance, lack of informal communications, …
different backgrounds different “language”
information systems
Technical issues – does your software architecture support distributed development
model?
…
swisslog, Grindelwald, 28. Mai 2009
Institut für Mobile und Verteilte Systeme 9
Challenge Matrix
communication
temporal
geographical
sociocultural
distance
X
X
X
coordination
control
X
X
X
X
And how does this relate to CSD?
swisslog, Grindelwald, 28. Mai 2009
Institut für Mobile und Verteilte Systeme 11
Agenda
About Me
CSD and GSD - What does that mean?
GSD - Why should we care?
F/OSSD – The mother of CSD
How does it work?
l
How does it work?
Ingredients for CSD
Communication, Process, Project Management, CI,
F/OSSD - The Mother of CSD
Plublic availability
Communication
… and there is more!
… and there is more!
swisslog, Grindelwald, 28. Mai 2009
A Short History of F/OSSD
1984 – Richard Stallman founds the Free Software Foundation
(“FSF”) (www.fsf.org) in 1985 to develop “free” version of a UNIX
operating system
Promulgates GNU Public License (“GPL”)
1994 – Linux 1.0 is release under the GPL by Linus Torvalds
1994 – Linux 1.0 is release under the GPL by Linus Torvalds
1998 – Open Source Initiative (“OSI”) is founded
www.opensource.org
Coins term “Open Source”
Certifies and lists open source licenses that conform to the OSD
2003 – Linux OS/Apache Web Server are mainstream (27%
Open Source Software – A Success Story?
How many successful projects can you name?
How many OS projects do exist?
swisslog, Grindelwald, 28. Mai 2009
Open Source Software – A Success Story!
Collaborative Development
F/OSSD (and CSD) – How it works?
Requirements and design
Configuration management and work coordination
Maintenance and Evolution
Project management/career development
Project management/career development
Development Paradigm
swisslog, Grindelwald, 28. Mai 2009
F/OSSD – Requirements and Design
F/OSS Requirements/Designs
not explicit
not formal
F/OSS Requirements/Designs are embedded within “informalisms”
F/OSS Requirements/Design processes are different from their SE
F/OSS Requirements/Design processes are different from their SE
F/OSSD „informalisms“
Project digests
Project
repositories
Issue tracking
databases
Email lists
Software bug
reports
News postings
IM/Internet
Relay Chat
Discussion
forums
swisslog, Grindelwald, 28. Mai 2009
Institut für Mobile und Verteilte Systeme 19
reports
Relay Chat
forums
To-do lists
Scenarios of usage
How-to guides
FAQ’s and item
lists
Project Wikis
System
documentation
External
publications
Copyright
licenses
Architecture
diagrams
Plug-ins
Intra-app
scripting
Code from
other projects
Project Web
site
Multi-project
Web sites
Project source
code
etc.
Configuration Mgmt and Work Coordination
Use CM to coordinate and control who gets to update
what part of the system/online artifacts
Most F/OSSD projects use
version control systems
and
frequent releases (
daily releases
on active projects)
Apache: Single major release, with frequent “
patch
” releases
Maintenance and Evolution
Overall evolutionary dynamic of F/OSSD is reinvention
Reinvention enables continuous improvement
F/OSS evolve through minor mutations
Expressed, recombined, redistributed via incremental releases
F/OSS systems co-evolve with their development community
Success of one depends on the success of the other
swisslog, Grindelwald, 28. Mai 2009
Project Management and People
F/OSSD projects self-organize as a pyramid meritocracy via virtual project
management
Ad hoc alliances, free participation, work is not assigned,
Main motivation is learning and creation
Status by the practice of using
F/OSS developers want to have fun
learn about new stuff (tools, techniques, skills, etc.),
exercise their technical skill,
try out new kinds of systems to develop,
interconnect multiple F/OSSD projects (freedom of choice and expression)
exchange with others
F/OSSD Roles and Pyramid Meritocracy
Project Leader
swisslog, Grindelwald, 28. Mai 2009
Institut für Mobile und Verteilte Systeme 23
Passive users (99% in Apache)
Readers
Bug reporters
Bug fixers
Peripheral developers
Active developers
Core members (<15)
Project Leader
Characteristics Summary of F/OSSS and CSD
Extensive involvement of user/developer community
Forums, mails, issues trackings, wiki
The developers must be users
Bug finding and fixing is done by users -> low post-release defect density and
high productivity due to independence of tasks.
“early and often Releases”
Nightly builds
Very lightweight
Intensive use of „informalism“
High modularized software
Common Code ownership
Automation
F/OSSD – CSD vs. Closed Source CSD
Public availability
(May be) a roadmap
Feature requests
Users
Closed source
Tight schedule
Strong requirements
A client
Losely organized
Strict organization
swisslog, Grindelwald, 28. Mai 2009
Agenda
About Me
CSD and GSD - What does that mean?
GSD - Why should we care?
F/OSSD – The mother of CSD
How does it work?
l
How does it work?
Ingredients for CSD
Communication, Process, Project Management, CI,
Ingredients For Effective CSD
Good Communication
Strong Development Process
Good Project Management
Continuous Integration
In distributed
teams
Continuous Integration
swisslog, Grindelwald, 28. Mai 2009
Good Communication
Skype
IM
Wikis
Wikis
Web Plattform
Conference Calls
Video Conferencing
Direct Meeting
Exchange programs
Travelling
Strong Development Process
TDD
Code Reviews
Teams-of-Teams
Sprints
Sprints
Mentoring
Discipline
swisslog, Grindelwald, 28. Mai 2009
Project Management
Bug Tracking
Feature Planning
Release Planning
Version Management
Version Management
Cross Training
Continuous Integration
Continuous integration is the strategy of making sure that
changes to the project’s code base are built, tested and
reported on as soon as possible after they are introduced
CSD in practice
swisslog, Grindelwald, 28. Mai 2009
CI Prerequisites
Your code is maintained in a
central repository
You have
automated
the
complete
build of your system
You have included
regression tests
in the codebase as part of
the project.
you have included
automated reporting
about build success
you have included
automated reporting
about build success
you have a CI
infrastructure
with build server, test server,
Practices of Continuous Integration
Maintain a Single Source Repository.
Automate the Build
Make Your Build Self-Testing
Everyone Commits Every Day
Everyone Commits Every Day
Every Commit Should Build the Mainline on an Integration
Machine
Keep the Build Fast
Test in a Clone of the Production Environment
Make it Easy for Anyone to Get the Latest Executable
Everyone can see what's happening
Automate Deployment
From
http://martinfowler.com/articles/continuousIntegration.html
swisslog, Grindelwald, 28. Mai 2009
CI Infrastructure
vcs server
build server
Monitors projects/paths
in source repository
Development
Deployment Server
build report
Executes tasks on
schedule/event
Get local copies /
developers
-Get latest version
- Build
- Code Audit
-Unit Test
-Code Coverage
-Deploy
Build Script
CI Benefits
Finding Bugs is easier
Self-testing builds
Diff debugging
Less cumulative bugs
Reduced Risks
Reduced Risks
Easier predictions
Avoid blind spots in the project
Developers can concentrate on coding
Encourage more frequent deployment
swisslog, Grindelwald, 28. Mai 2009
Automate The Build
It‘s not just compiling …
The entire set of
ALL
steps needed to obtain the software
product
Use Tools like
When To Build
Every successful change causes a commit
Of course, after testing
Every commit triggers a build
Partial builds – any time
l
Full builds – nightly builds
swisslog, Grindelwald, 28. Mai 2009
Build Resources
Input
Anything that‘s needed for the product
Output
?
Anything that‘s needed for
Installation
Execution
Documentation
Self-Testing Builds
Automated tests
No manual execution
No clicks on dialog boxes
No config editing
Test on all levels
Unit test (use mocks for isolated tests) – Junit, easymock
Db test - dbTest
Integration test – Fit/Fitness, Selenium
Acceptance test – Fit/Fitnesse
GUI test – FEST
Web Test – WebTest
…
swisslog, Grindelwald, 28. Mai 2009
Build Tasks
Not just build and test code
Include auditing
Metrics
Code quality analysis
Code coverage
Test analysis
Statistics
Provide Feedback
Everybody sees what‘s going on
swisslog, Grindelwald, 28. Mai 2009
Summary
GSD is a must in any global acting company
It comes with a lot of challenges and issues …
distance,
culture, …
CSD provides some very helpful practices to address challenges
Common code owenship
Using „informalism“
Providing feedback
Establish automation
Resources
Books
Eric S. Raymond,
The Cathedral & the Bazaar
. O’Reilly, 2001
Musings on Linux and Open Source by an Accidental Revolutionary
James A. Highsmith III:
Adaptive Software Development: A Collaborative Approach to
Managing Complex Systems
- Dorset House Publishing Company, 1999.
Erran Carmel:
Global Software Teams: Collaborating Across Borders and Time Zones
.
Prentice Hall, 1998.
Dean Leffingwell:
Scaling Software Agility: Best Practices for Large Enterprises.
Addison-Wesley, 2003.
Edward Yourdon:
Competing in the Global Productivity Race
. Prentice Hall, 2004.
Dale Walter Karolak,
Global Software Development: Managing Virtual Teams and
Environments
. Wiley-IEEE Computer Society, 1998.
Raghvinder Sangwan, Matthew Bass, Neel Mullick, Daniel J. Paulish, Juergen Kazmeier,
Global Software Development Handbook
. AUERBACH, 2006.
swisslog, Grindelwald, 28. Mai 2009
Design and programming are human
activities; forget that and all is lost.
Bjarne Stroustrup, 1991
Thank you very much for your
attention!