Many claims are made about how certain tools, technologies, and practices improve software development. But which claims are verifiable, and which are merely wishful thinking? In this book, leading thinkers such as Steve McConnell, Barry Boehm, and Barbara Kitchenham offer essays that uncover the truth and unmask myths commonly held among the software development community. Their insights may surprise you.
- Are some programmers really ten times more productive than others?
- Does writing tests first help you develop better code faster?
- Can code metrics predict the number of bugs in a piece of software?
- Do design patterns actually make better software?
- What effect does personality have on pair programming?
- What matters more: how far apart people are geographically, or how far apart they are in the org chart?
Victor R. Basili
Jo E. Hannay
Ahmed E. Hassan
Kim Sebastian Herzig
Thomas J. Ostrand
Elaine J. Weyuker
Michele A. Whitecraft
Wendy M. Williams
Table of Contents
- Making Software
I. General Principles of Searching For and Using Evidence
- 1. The Quest for Convincing Evidence
2. Credibility, or Why Should I Insist on Being Convinced?
- How Evidence Turns Up in Software Engineering
- Credibility and Relevance
- Aggregating Evidence
Types of Evidence and Their Strengths and Weaknesses
- Controlled Experiments and Quasi-Experiments
- Experience Reports and Case Studies
- Other Methods
- Indications of Credibility (or Lack Thereof) in Reporting
- Society, Culture, Software Engineering, and You
3. What We Can Learn from Systematic Reviews
- An Overview of Systematic Reviews
- The Strengths and Weaknesses of Systematic Reviews
- Systematic Reviews in Software Engineering
- 4. Understanding Software Engineering Through Qualitative Methods
5. Learning Through Application: The Maturing of the QIP in the SEL
- What Makes Software Engineering Uniquely Hard to Research
- A Realistic Approach to Empirical Research
- The NASA Software Engineering Laboratory: A Vibrant Testbed for Empirical Research
- The Quality Improvement Paradigm
6. Personality, Intelligence, and Expertise: Impacts on Software Development
- How to Recognize Good Programmers
- Individual or Environment
- Concluding Remarks
- 7. Why Is It So Hard to Learn to Program?
8. Beyond Lines of Code: Do We Need More Complexity Metrics?
- Surveying Software
- Measuring the Source Code
- A Sample Measurement
- Overall Analysis
- Differences Between Header and Nonheader Files
- The Confounding Effect: Influence of File Size in the Intensity of Correlation
- Some Comments on the Statistical Methodology
- So Do We Need More Complexity Metrics?
II. Specific Topics in Software Engineering
- 9. An Automated Fault Prediction System
10. Architecting: How Much and When?
- Does the Cost of Fixing Software Increase over the Project Life Cycle?
- How Much Architecting Is Enough?
Using What We Can Learn from Cost-to-Fix Data About the Value of Architecting
- The Foundations of the COCOMO II Architecture and Risk Resolution (RESL) Factor
- The Architecture and Risk Resolution Factor in Ada COCOMO and COCOMO II
- ROI for Software Systems Engineering Improvement Investments
- So How Much Architecting Is Enough?
- Does the Architecting Need to Be Done Up Front?
- 11. Conway’s Corollary
- 12. How Effective Is Test-Driven Development?
13. Why Aren’t More Women in Computer Science?
- Why So Few Women?
- Should We Care?
14. Two Comparisons of Programming Languages
- A Language Shoot-Out over a Peculiar Search Algorithm
- Plat_Forms: Web Development Technologies and Cultures
- So What?
- 15. Quality Wars: Open Source Versus Proprietary Software
16. Code Talkers
- A Day in the Life of a Programmer
- What Is All This Talk About?
- A Model for Thinking About Communication
17. Pair Programming
- A History of Pair Programming
- Pair Programming in an Industrial Setting
- Pair Programming in an Educational Setting
- Distributed Pair Programming
- Lessons Learned
- 18. Modern Code Review
- 19. A Communal Workshop or Doors That Close?
20. Identifying and Managing Dependencies in Global Software Development
- Why Is Coordination a Challenge in GSD?
Dependencies and Their Socio-Technical Duality
- The Technical Dimension
- The Socio-Organizational Dimension
- The Socio-Technical Dimension
- From Research to Practice
- Future Directions
- 21. How Effective Is Modularization?
22. The Evidence for Design Patterns
- Design Pattern Examples
- Why Might Design Patterns Work?
- The First Experiment: Testing Pattern Documentation
- The Second Experiment: Comparing Pattern Solutions to Simpler Ones
- The Third Experiment: Patterns in Team Communication
- Lessons Learned
- 23. Evidence-Based Failure Prediction
24. The Art of Collecting Bug Reports
- Good and Bad Bug Reports
- What Makes a Good Bug Report?
- Survey Results
- Evidence for an Information Mismatch
- Problems with Bug Reports
- The Value of Duplicate Bug Reports
- Not All Bug Reports Get Fixed
25. Where Do Most Software Flaws Come From?
- Studying Software Flaws
- Context of the Study
- Phase 1: Overall Survey
- Phase 2: Design/Code Fault Survey
- What Should You Believe About These Results?
- What Have We Learned?
26. Novice Professionals: Recent Graduates in a First Software Engineering Job
- Study Methodology
- Software Development Task
- Strengths and Weaknesses of Novice Software Developers
- Misconceptions That Hinder Learning
- Reflecting on Pedagogy
- Implications for Change
27. Mining Your Own Evidence
- What Is There to Mine?
- Designing a Study
A Mining Primer
- Step 1: Determining Which Data to Use
- Step 2: Data Retrieval
- Step 3: Data Conversion (Optional)
- Step 4: Data Extraction
- Step 5: Parsing the Bug Reports
- Step 6: Linking Data Sets
- Step 6: Checking for Missing Links
- Step 7: Mapping Bugs to Files
- Where to Go from Here
- 28. Copy-Paste as a Principled Engineering Tool
29. How Usable Are Your APIs?
- Why Is It Important to Study API Usability?
- First Attempts at Studying API Usability
- If At First You Don’t Succeed...
- Adapting to Different Work Styles
30. What Does 10x Mean? Measuring Variations in Programmer Productivity
- Individual Productivity Variation in Software Development
- Issues in Measuring Productivity of Individual Programmers
- Team Productivity Variation in Software Development
- A. Contributors
- About the Authors
- Title: Making Software
- Release date: October 2010
- Publisher(s): O'Reilly Media, Inc.
- ISBN: 9780596808310