|
Emergent Design: The Evolutionary Nature of Professional Software Development, Hardback
For software to consistently deliver promised results, software development must mature into a true profession. Emergent Design points the way. As software continues to evolve and mature, software development processes become more complicated, relying on a variety of methodologies and approaches. This book illuminates the path to building the next
generation of software. Author Scott L. Bain integrates the best of today's most important development disciplines into a unified, streamlined, realistic, and fully actionable approach to developing software. Drawing on patterns, refactoring, and test-driven development, Bain offers a blueprint for moving efficiently through the entire software lifecycle, smoothly managing change, and consistently delivering systems that are robust, reliable, and cost-effective.
Reflecting a deep understanding of the natural flow of system development, Emergent Design helps developers work with the flow, instead of against it. Bain introduces the principles and practices of emergent design one step at a time, showing how to promote the natural evolution of software systems over time, making systems work better and provide greater value. To illuminate his approach, Bain presents code examples wherever necessary and concludes with a complete project case study.
This book provides developers, project leads, and testers powerful new ways to collaborate, achieve immediate goals, and build systems that improve in quality with each iteration.
Coverage includes
* How to design software in a more natural, evolutionary, and professional way
* How to use the open-closed principle to mitigate risks and eliminate waste
* How and when to test your design throughout the development process
* How to translate design principles into practices that actually lead to better code
* How to determine how much design is enough
* How refactoring can help you reduce over-design and manage change more effectivelyThe book's companion Website, www.netobjectives.com/resources, provides updates, links to related materials, and support for discussions of the book's content.
CONTENTS:
Series Foreword
Preface
Acknowledgments
About the Author
Chapter 1: Software as a Profession
How Long Have Human Beings Been Making Software?
What Sort of Activity Is Software Development?
What Is Missing?
Who Is Responsible?
Uniqueness
Chapter 2: Out of the Closet, Off to the Moon
Patterns and Professionalism in Software Development
Andrea's Closet
Off to the Moon
The Value of Patterns
Summary
Chapter 3: The Nature of Software Development
We Fail Too Much
Definitions of Success
The Standish Group
Doing the Wrong Things
Doing the Things Wrong
Time Goes By, Things Improve
One Reason: The Civil Engineering Analogy
Giving Up Hope
Ignoring Your Mother
Bridges Are Hard, Software Is Soft
We Swim in an Ocean of Change
Accept Change
Embrace Change
Capitalize on Change
A Better Analogy: Evolving Systems
Summary
Chapter 4: Evolution in Code: Stage 1
Procedural Logic Replaced with Object Structure
The Origins of Object Orientations and Patterns
An Example: Simple Conditionals and the Proxy Pattern
The Next Step: Either This or That
Why Bother?
One Among Many
Summary
Chapter 5: Using and Discovering Patterns
Design from Context: More Carpentry from Scott
Patterns Lead to Another Cognitive Perspective
Patterns Help Give Us a Language for Discussing Design
Patterns in This Book
Summary
Chapter 6: Building a Pyramid
Elements of the Profession
A Visual Representation
Summary
Chapter 7: Paying Attention to Qualities and Pathologies
Encapsulation
Cohesion
Coupling
Redundancy
Testability
Readability
Pathologies
Summary
Chapter 8: Paying Attention to Principles and Wisdom
Separating Use from Creation
The Open-Closed Principle
The Dependency Inversion Principle
Advice from the Gang of Four
GoF: Consider What Should Be Variable in Your Design and Encapsulate the Concept That Varies
Summary
Chapter 9: Paying Attention to Practices
Consistent Coding Style
Programming by Intention
Encapsulating the Constructor
Commonality-Variability Analysis
Practices and Freedom
Summary
Chapter 10: Paying Attention to Disciplines: Unit Testing
Economies of Testing
JUnit Framework
Mock Objects
Summary
Chapter 11: Paying Attention to Disciplines: Refactoring
Refactoring Bad Code
Refactoring Good Code
Structural Changes Versus Functional Changes
Refactoring Helps You Choose Your Battles
Patterns Can Be Targets of Refactoring
Avoiding Refactoring: Prefactoring
The Mechanics of Refactoring
Refactoring Legacy Code
Summary
Chapter 12: Test-Driven Development
What Makes Development Test-Driven?
Testing and Quality
Test-Driven Development and Patterns
Mock Objects
Mock Turtles
Testing the Decorator Pattern
Summary
Chapter 13: Patterns and Forces
Making Decisions in an Evolving Design
Christopher Alexander and Forces
More Choices, More Forces
Summary
Chapter 14: Emergent Design: A Case Study
The Problem Domain: The MWave Corporation
The Teams
The Simplest Thing That Could Possibly Work
A New Requirement: Complex Machines
Oh, By the Way
More Good News
Summary: What a Long, Strange Trip It Has Been
Chapter 15: A Conclusion: 2020
Appendix A: Evolutionary Paths
Appendix B: Overview of Patterns Used in the Examples
Appendix C: The Principle of the Useful Illusion
Bibliography
Index
|