0% found this document useful (0 votes)
19 views4 pages

Key Software Development AntiPatterns

This document discusses various software development anti-patterns, including the Blob, Continuous Obsolescence, Lava Flow, Ambiguous Viewpoint, Functional Decomposition, and more. It provides brief descriptions of each anti-pattern, focusing on the problem caused. Refactoring is presented as an effective approach to improving software structure and resolving anti-patterns.

Uploaded by

Hema
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views4 pages

Key Software Development AntiPatterns

This document discusses various software development anti-patterns, including the Blob, Continuous Obsolescence, Lava Flow, Ambiguous Viewpoint, Functional Decomposition, and more. It provides brief descriptions of each anti-pattern, focusing on the problem caused. Refactoring is presented as an effective approach to improving software structure and resolving anti-patterns.

Uploaded by

Hema
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Software Development AntiPatterns [Link]

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 [Link]

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 [Link]

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 [Link]

Refactoring (/refactoring) Forum


UML (/uml) ([Link]
Contact us
([Link]
/?show_feedback_form_private=true)
About us (/about-us)

4 of 4 4/14/2016 6:13 PM

Common questions

Powered by AI

Developers face challenges with 'Continuous Obsolescence' due to the rapid evolution of technology, making it difficult to keep up with current software versions and find compatible product releases. This can lead to interoperability issues between different system components. Effective management strategies include implementing robust configuration management processes, continuous education, and staying informed about updates in technology and compatible releases. Prioritizing adaptability in system design can also mitigate the effects of obsolescence .

The 'Functional Decomposition' AntiPattern arises when developers with a background in non-object-oriented languages like Pascal or FORTRAN attempt to apply procedural logic within an object-oriented framework. This results in class structures that mimic procedural designs, creating complex interdependencies and hindering the inherent modular advantages of object-oriented programming. Its implications include reduced scalability and increased complexity, as these designs often obscure the intended encapsulation and inheritance principles. Addressing this requires a paradigm shift in design thinking, emphasizing true object-oriented principles such as polymorphism and encapsulation, and sometimes retraining developers to adapt to these paradigms .

Continuous software refactoring is recommended before performance optimization because it improves the structure, maintainability, and extensibility of the code, which can then be optimized in smaller sections without compromising the overall architecture. Refactoring helps partition optimized code from the rest of the software, making the optimization process more manageable and less intrusive. It aligns with AntiPattern solutions by addressing common structural issues like Spaghetti Code through systematic improvement and restructuring .

The 'Lava Flow' AntiPattern impedes software quality by allowing dead code and outdated design information to accumulate, much like hardened globules of lava, which complicates understanding and maintaining the system. The key elements of its refactored solution include implementing a comprehensive configuration management process that removes dead code, adapts existing designs, and progressively refactors the system towards improved quality and maintainability .

'Poltergeist' classes have a fleeting role, often seen initiating processes for other objects, which disrupts object longevity and bloats the system with transient, ineffective classes. These classes typically do not contribute substantial, ongoing value to the system's design. To eliminate them, design adjustments involve reallocating their responsibilities to longer-lived, more robust objects that are integral to the system's function, thus enhancing stability and maintainability. This refactoring approach fosters cleaner, more coherent object interactions and a streamlined class hierarchy .

The 'Blob' AntiPattern occurs in procedural-style designs where one object holds a majority of the responsibilities, while other objects merely contain data or execute simple processes. This leads to a lack of uniform responsibility distribution and can create challenges in maintaining and scaling the system. The refactored solution involves redesigning to distribute responsibilities more evenly across objects and isolating changes to minimize their impact .

The 'Mushroom Management' AntiPattern negatively impacts software project outcomes by isolating developers from direct communication with end users, thus relying on intermediaries to convey requirements. This can lead to misinterpretations and incomplete understanding of user needs, resulting in a product that poorly aligns with market demands. Communication dynamics suffer as developers are inadvertently discouraged from engaging in user-centric dialogues, impairing team morale and innovation. Solutions include promoting direct interactions between developers and users and reducing reliance on intermediaries to foster a more collaborative and responsive development environment .

The 'Golden Hammer' AntiPattern is characterized by the obsessive application of a familiar technology or concept to solve a wide range of problems, even when it is not the most suitable approach. This can lead to suboptimal solutions that do not leverage the full potential of alternative technologies. Preventing this involves expanding developers' knowledge through targeted education, training programs, and book study groups that expose them to diverse technologies, encouraging a more thoughtful selection of tools and methods based on specific problem requirements .

Mixed viewpoints in OOA&D models hinder software development by failing to separate interfaces from implementation details, which is a critical advantage of the object-oriented paradigm. This blending of implementation-specific details with interface elements can obscure design intentions and complicate future modifications. To address this issue, solutions include clarifying and separating viewpoints from the outset, focusing on defining clear interfaces, and maintaining conceptual integrity throughout the design process .

'Cut-and-Paste Programming' negatively impacts software maintenance by creating duplicated code across the system, which increases the complexity of maintenance and the likelihood of introducing bugs when updates are needed. Alternative practices recommended include using black-box reuse methods, which involve leveraging tested and documented code modules. This approach standardizes code bases, reduces redundancy, and simplifies maintenance by promoting component-based architecture with shared code libraries .

You might also like