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.
This work is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License