| |
| |
List of Figures | |
| |
| |
List of Tables | |
| |
| |
Preface | |
| |
| |
Acknowledgments | |
| |
| |
Authors | |
| |
| |
| |
Overview and Motivation | |
| |
| |
| |
Software | |
| |
| |
| |
Types of Software | |
| |
| |
| |
The Changing Landscape | |
| |
| |
| |
Who Are the Developers? | |
| |
| |
| |
Strategic Choices | |
| |
| |
| |
Free and Open Source Software (FOSS) | |
| |
| |
| |
Origins and Growth | |
| |
| |
| |
Licensing | |
| |
| |
| |
Worldwide Impact | |
| |
| |
| |
Humanitarian FOSS | |
| |
| |
| |
Two Case Studies | |
| |
| |
| |
RMH Homebase | |
| |
| |
| |
Sahana | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Working with a Project Team | |
| |
| |
| |
Key FOSS Activities | |
| |
| |
| |
Agile Development | |
| |
| |
| |
Using Patterns | |
| |
| |
| |
Reading and Writing Code | |
| |
| |
| |
Documentation | |
| |
| |
| |
On-Line Help | |
| |
| |
| |
Client-Oriented vs Community-Oriented Projects | |
| |
| |
| |
Project Evolution | |
| |
| |
| |
Similarities and Differences | |
| |
| |
| |
Working on a Client-Oriented Project | |
| |
| |
| |
Members, Roles, and Tasks | |
| |
| |
| |
Team Dynamics | |
| |
| |
| |
Scheduling, Milestones, and To-Do Lists | |
| |
| |
| |
Joining a Community-Oriented Project | |
| |
| |
| |
Project Selection | |
| |
| |
| |
First Contact with the Project | |
| |
| |
| |
Norms for Good Citizenship | |
| |
| |
| |
Becoming a User First | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Using Project Tools | |
| |
| |
| |
Collaboration Tools | |
| |
| |
| |
Asynchronous Communication | |
| |
| |
| |
Synchronous Communication | |
| |
| |
| |
Shared Documents | |
| |
| |
| |
Code Management Tools | |
| |
| |
| |
The IDE | |
| |
| |
| |
The Software Stack | |
| |
| |
| |
The Version Control System | |
| |
| |
| |
The Bug Tracker | |
| |
| |
| |
Run-Time System Constraints | |
| |
| |
| |
Performance | |
| |
| |
| |
Web Hosting | |
| |
| |
| |
Licensing | |
| |
| |
| |
Platform | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Software Architecture | |
| |
| |
| |
Architectural Patterns | |
| |
| |
| |
Layers, Cohesion, and Coupling | |
| |
| |
| |
Using Metrics to Evaluate Cohesion and Coupling | |
| |
| |
| |
Security | |
| |
| |
| |
Architectural Vulnerabilities | |
| |
| |
| |
User-Level Security | |
| |
| |
| |
Concurrency, Race Conditions, and Deadlocks | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Working with Code | |
| |
| |
| |
Bad Smells and Metrics | |
| |
| |
| |
Identifying Bad Smells | |
| |
| |
| |
Software Metrics | |
| |
| |
| |
Refactoring | |
| |
| |
| |
Example 1: Removing Useless Functions | |
| |
| |
| |
Example 2: Removing a Layering Violation | |
| |
| |
| |
Testing | |
| |
| |
| |
Unit Testing Tools | |
| |
| |
| |
Test Case Design | |
| |
| |
| |
A Strategy for Sequencing Unit Tests | |
| |
| |
| |
Debugging | |
| |
| |
| |
Tool Use vs Developer Skill | |
| |
| |
| |
Example 1: A User Interface Bug | |
| |
| |
| |
Example 2: A Multi-Level Bug | |
| |
| |
| |
Extending the Software for a New Project | |
| |
| |
| |
A New Use Case | |
| |
| |
| |
Impact on the Code Base | |
| |
| |
| |
Team Discussions | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Developing the Domain Classes | |
| |
| |
| |
Understanding the Current System | |
| |
| |
| |
Reading a Design Document | |
| |
| |
| |
Reading Code | |
| |
| |
| |
Examining the Domain Classes | |
| |
| |
| |
Adding New Features | |
| |
| |
| |
Top-Down Analysis/Bottom-Up Development | |
| |
| |
| |
Modifying the Domain Classes | |
| |
| |
| |
Documentation and Bulletproofing | |
| |
| |
| |
Class Design Principles and Practice | |
| |
| |
| |
Using What's Already There | |
| |
| |
| |
Adding a New Domain Class | |
| |
| |
| |
Managing the Ripple Effect | |
| |
| |
| |
Unit Testing the New Code | |
| |
| |
| |
Refactoring the New Code Base | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Developing the Database Modules | |
| |
| |
| |
Design Principles and Practice | |
| |
| |
| |
Database Creation | |
| |
| |
| |
Connecting the Program to the Database | |
| |
| |
| |
Tables | |
| |
| |
| |
Normalization and Keys | |
| |
| |
| |
Backup and Recovery | |
| |
| |
| |
Working with a Database | |
| |
| |
| |
Table Creation | |
| |
| |
| |
Table Searching | |
| |
| |
| |
Table Insertion, Deletion, and Updating | |
| |
| |
| |
Database Security and Integrity | |
| |
| |
| |
Database-Level Permissions | |
| |
| |
| |
User-Level Permissions | |
| |
| |
| |
Controlling Concurrency | |
| |
| |
| |
Adding New Software Features: Database Impact | |
| |
| |
| |
Items 1 and 9d: Volunteer Status and Application | |
| |
| |
| |
Item 3: Calendar View | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Developing the User Interface | |
| |
| |
| |
Design Principles and Practice | |
| |
| |
| |
The Model-View-Controller Pattern | |
| |
| |
| |
Sessions, Query Strings, and Global Variables | |
| |
| |
| |
Ensuring Security at the User Interface | |
| |
| |
| |
Working with Code | |
| |
| |
| |
Reading Deeply | |
| |
| |
| |
Debugging as a Community Activity | |
| |
| |
| |
Adding New Features: User Interface Impact | |
| |
| |
| |
Item 1: Volunteer Status | |
| |
| |
| |
Item 2: Make Active/Inactive | |
| |
| |
| |
Item 3: Calendar View | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
User Support | |
| |
| |
| |
Technical Writing | |
| |
| |
| |
Knowing Your Audience | |
| |
| |
| |
Principles of Good Writing | |
| |
| |
| |
Types of User Support | |
| |
| |
| |
On-Line Help | |
| |
| |
| |
Reference Manuals | |
| |
| |
| |
Open Discussion Forums | |
| |
| |
| |
User Training and Feedback | |
| |
| |
| |
Example: RMH Homebase On-Line Help | |
| |
| |
| |
Help and the Code Base | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Project Governance | |
| |
| |
| |
Origins and Evolution | |
| |
| |
| |
Starting a Client-Oriented Project | |
| |
| |
| |
Quality Assessment | |
| |
| |
| |
Evolving into a Democratic Meritocracy | |
| |
| |
| |
Incubation | |
| |
| |
| |
Organization | |
| |
| |
| |
Decision Making and Conflict Resolution | |
| |
| |
| |
Domain Constraints | |
| |
| |
| |
Releasing Code | |
| |
| |
| |
Licensing | |
| |
| |
| |
Finding a Project Host | |
| |
| |
| |
Release Strategies | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
New Project Conception | |
| |
| |
| |
Requirements Gathering | |
| |
| |
| |
Domain Analysis | |
| |
| |
| |
User Stories | |
| |
| |
| |
Use Cases | |
| |
| |
| |
Initial Design | |
| |
| |
| |
Domain Classes | |
| |
| |
| |
User Interface | |
| |
| |
| |
Performance and Platform | |
| |
| |
| |
System Architecture | |
| |
| |
| |
Design Alternatives | |
| |
| |
| |
Design Document | |
| |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
Appendices | |
| |
| |
| |
Details of the Case Study | |
| |
| |
| |
Requirements | |
| |
| |
| |
Domain Analysis | |
| |
| |
| |
Use Cases | |
| |
| |
| |
System Requirements | |
| |
| |
| |
Design | |
| |
| |
| |
Goals | |
| |
| |
| |
Software Architecture | |
| |
| |
| |
Domain Classes | |
| |
| |
| |
Database Design | |
| |
| |
| |
GUI Design | |
| |
| |
| |
Implementation Schedule | |
| |
| |
| |
User-System Interaction | |
| |
| |
| |
New Features for an Existing Code Base | |
| |
| |
| |
Starting with a Request from the Client | |
| |
| |
| |
Impact on the Design and the Code Base | |
| |
| |
| |
Defining a Project that Implements these Features | |
| |
| |
References | |
| |
| |
Index | |