Credit: Creative Commons

Cooperative Software Design

Andrew J. Ko

After teaching software engineering for many years, I've been frustrated by the lack of a simple, concise, and practical introduction to the human aspects of software engineering for students interested in becoming software engineers.

In response, I've distilled my lectures from the past decade into these brief writings. They don't represent everything we know about software engineering (in particular, I don't discuss the deep technical contributions from the field), but the chapters do synthesize the broad evidence we have about how teams have to work together to succeed.

I hope you enjoy! If you see something missing or wrong, please send me feedback.

Chapter 1. History of software engineering
Chapter 2. Software engineering organizations
Chapter 3. Communication
Chapter 4. Productivity
Chapter 5. Software quality
Chapter 6. Requirements engineering
Chapter 7. Architecture
Chapter 8. Functional specifications
Chapter 9. Process
Chapter 10. Comprehension
Chapter 11. Verification
Chapter 12. Monitoring
Chapter 13. Evolution
Chapter 14. Debugging
This material is based upon work supported by the National Science Foundation under Grant No. 0952733. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.