Wiki Article
Anti-pattern
Nguồn dữ liệu từ Wikipedia, hiển thị bởi DefZone.Net
This article only references primary sources. (September 2025) |
An anti-pattern is any common but counterproductive solution to some class of problem.[1][2] The term, coined in 1995 by Andrew Koenig, was inspired by the book Design Patterns which highlights reliable and effective software development design patterns.[3] Michael Ackroyd described anti-patterns in a paper presented at the 1996 Object World West Conference.[3] The 1998 book AntiPatterns popularized the idea and extended its scope beyond software design to include software architecture and project management.[3] Other authors have extended it further to encompass environmental, organizational, and cultural anti-patterns.[4]
An anti-pattern can be distinguished from a bad habit, bad practice, or bad idea by two traits. First, anti-patterns are commonly used processes, structures or patterns of action that initially appear to be appropriate and effective, but have greater drawbacks than benefits.[5] Second, there is another way to solve the problem that is documented, repeatable, and effective where the anti-pattern is not.
Similar to patterns, a "rule-of-three" applies: to be an anti-pattern it should have occurred at least three times.[6]
Documenting anti-patterns can help to analyze a problem space and to capture expert knowledge.[7] While some anti-pattern descriptions merely document the consequences of the pattern, good anti-pattern documentation also provides alternatives ways to minimize harm.[8]
Examples
[edit]In software engineering
[edit]In software engineering, anti-patterns include:[8]
- God object
- A single class handles all control in a program rather than control being distributed across multiple classes.
- Magic number
- A literal value with an important yet unexplained meaning which could be replaced with a named constant.
- Poltergeist
- Ephemeral controller classes that only exist to invoke other methods on classes.
- Big Ball of Mud
- A software system that lacks a perceivable architecture. Although undesirable from a software engineering point of view, such systems are common in practice due to business pressures, developer turnover and software entropy.
In project management
[edit]Project management anti-patterns included in the Antipatterns book include:[4]
- Blowhard Jamboree
- An excess of industry pundits
- Viewgraph Engineering
- Too much time spent making presentations and not enough on the actual software.
- Death by Planning
- Spending too much effort planning.
- Fear of Success
- Irrational fears near to project completion.
- The Corncob
- Difficulties with people.[vague]
- Intellectual Violence
- Intimidation through use of jargon or arcane technology
- Irrational Management
- Bad management habits.
- Smoke and Mirrors
- Excessive use of demos and prototypes by salespeople.
- Throw It Over the Wall
- Forcing fad software engineering practices onto developers without buy-in.
- Fire Drill
- Long periods of monotony punctuated by short crises.
- The Feud
- Conflicts between managers.
- e-mail Is Dangerous
- Situations resulting from ill-advised e-mail messages.
See also
[edit]- Capability Immaturity Model
- Code smell – Characteristic of source code that hints at a quality problem
- Dark pattern – Deceptive user interface designs
- Design smell – Term in computer programming
- ISO/IEC 29110: Software Life Cycle Profiles and Guidelines for Very Small Entities (VSEs)
- List of software anti-patterns
- List of software development philosophies
- List of tools for static code analysis
- Software Peter principle – Engineering term for a complex, failing project
- Software rot – Degradation or loss of the use of software over time
- The Innovator's Dilemma – 1997 book by Clayton M. Christensen
References
[edit]What supports what
[edit]- ^ Budgen 2003, p. 225.
- ^ Ambler 1998, p. 4.
- ^ a b c Neill, Laplante & DeFranco 2011, p. 4.
- ^ a b Neill, Laplante & DeFranco 2011, p. 5.
- ^ Moha, Naouel; Gueheneuc, Yann-Gael; Duchien, Laurence; Le Meur, Anne-Francoise (2010). "DECOR: A Method for the Specification and Detection of Code and Design Smells". IEEE Transactions on Software Engineering. doi:10.1109/TSE.2009.50.
- ^ Neill, Laplante & DeFranco 2011, p. 6.
- ^ Jimenez 2006.
- ^ a b Demeyer 2008, p. 102.
Sources
[edit]- Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.
- Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p. 225. ISBN 0-201-72219-4.
As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'.
- Ambler, Scott W. (1998). Process patterns: building large-scale systems using object technology. Cambridge, UK: Cambridge University Press. p. 4. ISBN 0-521-64568-9.
...common approaches to solving recurring problems that prove to be ineffective. These approaches are called antipatterns.
- Jimenez, Edward (2006-04-24). "AntiPatterns". AntiPatterns. Retrieved 24 April 2006.
- Demeyer, Serge (2008). "ObjectOriented Reengineering". In Mens, Tom; Demeyer, Serge (eds.). Software Evolution. Springer Science + Business Media. ISBN 9783540764403.
Further reading
[edit]- Koenig, Andrew (March–April 1995). "Patterns and Antipatterns". Journal of Object-Oriented Programming. 8 (1): 46–48.
- Later re-printed in: Rising, Linda (1998). The patterns handbook: techniques, strategies, and applications. Cambridge, U.K.: Cambridge University Press. p. 387. ISBN 0-521-64818-1.
An antipattern is just like a pattern, except that instead of a solution it gives something that looks superficially like a solution, but isn't one.
- Later re-printed in: Rising, Linda (1998). The patterns handbook: techniques, strategies, and applications. Cambridge, U.K.: Cambridge University Press. p. 387. ISBN 0-521-64818-1.
- Laplante, Phillip A.; Neill, Colin J. (2005). Antipatterns: Identification, Refactoring and Management. Auerbach Publications. ISBN 0-8493-2994-9.
- Brown, William J.; Malveau, Raphael C.; McCormick, Hays W.; Thomas, Scott W. (2000). Hudson, Theresa Hudson (ed.). Anti-Patterns in Project Management. John Wiley & Sons. ISBN 0-471-36366-9.
- Stamelos, Ioannis (January 2010). "Software project management anti-patterns". Journal of Systems and Software. 83 (1): 52–59. doi:10.1016/j.jss.2009.09.016.
External links
[edit]
Media related to Anti-patterns at Wikimedia Commons