Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
Facebook 1159 Twitter 1.4k Google+ 1k
(/) / AntiPatterns (/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)
Golden Hammer (/antipatterns/golden-hammer) Warm Bodies
A Golden Hammer is a familiar technology or concept applied (/antipatterns/warm-
obsessively to many software problems. The solution involves bodies)
expanding the knowledge of developers through education, Design By Committee
training, and book study groups to expose developers to (/antipatterns/design-
alternative technologies and approaches. by-committee)
Dead End (/antipatterns/dead-end) Swiss Army Knife
A Dead End is reached by modifying a reusable component if (/antipatterns/swiss-
the modified component is no longer maintained and army-knife)
supported by the supplier. When these modifications are Reinvent The Wheel
made, the support burden transfers to the application system (/antipatterns/reinvent-
developers and maintainers. Improvements in the reusable the-wheel)
2 of 4 4/14/2016 6:13 PM
Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
component are not easily integrated, and support problems
Project Management
can be blamed upon the modification.
AntiPatterns
Spaghetti Code (/antipatterns/spaghetti-code) (/antipatterns/software-
Ad hoc software structure makes it difficult to extend and project-management-
optimize code. Frequent code refactoring can improve
antipatterns)
software structure, support software maintenance, and enable
iterative development.
Input Kludge (/antipatterns/input-kludge)
Software that fails straightforward behavioral tests may be an
example of an input kludge, which occurs when ad hoc
algorithms are employed for handling program input.
Walking through a Minefield (/antipatterns/walking-through-
minefield)
Using today’s software technology is analogous to walking
through a high-tech mine field. Numerous bugs are found in
released software products; in fact, experts estimate that
original source code contains two to five bugs per line of code.
Cut-and-Paste Programming (/antipatterns/cut-and-paste-
programming)
Code reused by copying source statements leads to significant
maintenance problems. Alternative forms of reuse, including
black-box reuse, reduce maintenance issues by having
common source code, testing, and documentation.
Mushroom Management (/antipatterns/mushroom-
management)
In some architecture and management circles, there is an
explicit policy to keep system developers isolated from the
system’s end users. Requirements are passed second-hand
through intermediaries, including architects, managers, or
requirements analysts.
AntiPatterns AntiPatterns The Blob
(/antipatterns) (/antipatterns) (/antipatterns
/the-blob)
SourceMaking Design Patterns (/design_patterns) My account (/user)
(/) AntiPatterns (/antipatterns)
3 of 4 4/14/2016 6:13 PM
Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-develo...
Refactoring (/refactoring) Forum
UML (/uml) (https://sourcemaking.userecho.com/)
Contact us
(https://sourcemaking.userecho.com
/?show_feedback_form_private=true)
About us (/about-us)
4 of 4 4/14/2016 6:13 PM