Software Development AntiPatterns
Software Development AntiPatterns
Software Development
AntiPatterns
(/antipatterns/software-
development-
antipatterns)
Good software
structure is Software Development
essential for system AntiPatterns
extension and (/antipatterns/software-
maintenance. development-
Software antipatterns)
development is a The Blob (/antipatterns
chaotic activity, /the-blob)
therefore the Continuous
implemented Obsolescence
structure of systems tends to stray from the planned structure as (/antipatterns
determined by architecture, analysis, and design. /continuous-
obsolescence)
Software refactoring is an effective approach for improving
Lava Flow (/antipatterns
software structure. The resulting structure does not have to
/lava-flow)
resemble the original planned structure.
Ambiguous Viewpoint
The structure changes because programmers learn constraints (/antipatterns
and approaches that alter the context of the coded solutions. /ambiguous-viewpoint)
When used properly, refactoring is a natural activity in the Functional
programming process. Decomposition
For example, the solution for the Spaghetti Code AntiPattern (/antipatterns/functional-
defines a software development process that incorporates decomposition)
refactoring. Refactoring is strongly recommended prior to Poltergeists
performance optimization. Optimizations often involve (/antipatterns
compromises to program structure. Ideally, optimizations affect /poltergeists)
only small portions of a program. Prior refactoring helps partition Boat Anchor
optimized code from the majority of the software. (/antipatterns/boat-
anchor)
Golden Hammer
Development AntiPatterns utilize various formal and informal
(/antipatterns/golden-
refactoring approaches. The following summaries provide an
hammer)
overview of the Development AntiPatterns found in this chapter
and focus on the development AntiPattern problem. Included are Dead End (/antipatterns
descriptions of both development and mini-AntiPatterns. The /dead-end)
refactored solutions appear in the appropriate AntiPattern Spaghetti Code
templates that follow the summaries. (/antipatterns
/spaghetti-code)
The Blob (/antipatterns/the-blob)
Input Kludge
Procedural-style design leads to one object with a lion’s share
(/antipatterns/input-
of the responsibilities, while most other objects only hold data
kludge)
or execute simple processes. The solution includes refactoring
the design to distribute responsibilities more uniformly and Walking through a
isolating the effect of changes. Minefield (/antipatterns
/walking-through-
Continuous Obsolescence (/antipatterns/continuous- minefield)
1 of 4 4/14/2016 6:13 PM
Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
obsolescence) Cut-And-Paste
Technology is changing so rapidly that developers often have Programming
trouble keeping up with current versions of software and (/antipatterns/cut-and-
finding combinations of product releases that work together. paste-programming)
Given that every commercial product line evolves through new Mushroom Management
releases, the situation is becoming more difficult for (/antipatterns
developers to cope with. Finding compatible releases of /mushroom-
products that successfully interoperate is even harder. management)
Lava Flow (/antipatterns/lava-flow)
Dead code and forgotten design information is frozen in an Software Architecture
ever-changing design. This is analogous to a Lava Flow with AntiPatterns
hardening globules of rocky material. The refactored solution (/antipatterns/software-
includes a configuration management process that eliminates architecture-antipatterns)
dead code and evolves or refactors design toward increasing
Software Architecture
quality.
AntiPatterns
Ambiguous Viewpoint (/antipatterns/ambiguous-viewpoint) (/antipatterns/software-
Object-oriented analysis and design (OOA&D) models are architecture-
often presented without clarifying the viewpoint represented by antipatterns)
the model. By default, OOA&D models denote an Autogenerated
implementation viewpoint that is potentially the least useful. Stovepipe (/antipatterns
Mixed viewpoints don’t allow the fundamental separation of /autogenerated-
interfaces from implementation details, which is one of the stovepipe)
primary benefits of the object-oriented paradigm.
Stovepipe Enterprise
Functional Decomposition (/antipatterns/functional- (/antipatterns/stovepipe-
decomposition) enterprise)
This AntiPattern is the output of experienced, nonobject- Jumble (/antipatterns
oriented developers who design and implement an application /jumble)
in an object-oriented language. The resulting code resembles Stovepipe System
a structural language (Pascal, FORTRAN) in class structure. It (/antipatterns/stovepipe-
can be incredibly complex as smart procedural developers system)
devise very “clever” ways to replicate their time-tested methods
Cover Your Assets
in an object-oriented architecture.
(/antipatterns/cover-
Poltergeists (/antipatterns/poltergeists) your-assets)
Poltergeists are classes with very limited roles and effective life Vendor Lock-In
cycles. They often start processes for other objects. The (/antipatterns/vendor-
refactored solution includes a reallocation of responsibilities to lock-in)
longer-lived objects that eliminate the Poltergeists.
Wolf Ticket
Boat Anchor (/antipatterns/boat-anchor) (/antipatterns/wolf-ticket)
A Boat Anchor is a piece of software or hardware that serves Architecture By
no useful purpose on the current project. Often, the Boat Implication (/antipatterns
Anchor is a costly acquisition, which makes the purchase even /architecture-
more ironic. by-implication)
2 of 4 4/14/2016 6:13 PM
Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
3 of 4 4/14/2016 6:13 PM
Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
4 of 4 4/14/2016 6:13 PM