Toward a Catalogue of Architectural Bad Smells

  • Joshua Garcia
  • Daniel Popescu
  • George Edwards
  • Nenad Medvidovic
Part of the Lecture Notes in Computer Science book series (LNCS, volume 5581)


An architectural bad smell is a commonly (although not always intentionally) used set of architectural design decisions that negatively impacts system lifecycle properties, such as understandability, testability, extensibility, and reusability. In our previous short paper, we introduced the notion of architectural bad smells and outlined a few common smells. In this paper, we significantly expand upon that work. In particular, we describe in detail four representative architectural smells that emerged from reverse-engineering and re-engineering two large industrial systems and from our search through case studies in research literature. For each of the four architectural smells, we provide illustrative examples and demonstrate the smell’s impact on system lifecycle properties. Our experiences indicate the need to identify and catalog architectural smells so that software architects can discover and eliminate them from system designs.


Software Engineer Software Architecture Procedure Call Resource Discovery Grid Technology 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Mens, T., Tourwe, T.: A survey of software refactoring. IEEE Transactions on Software Engineering (January 2004)Google Scholar
  2. 2.
    Fowler, M.: Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, Reading (1999)zbMATHGoogle Scholar
  3. 3.
    Garcia, J., Daniel Popescu, G.E., Medvidovic, N.: Identifying Architectural Bad Smells. In: 13th European Conference on Software Maintenance and Reengineering (2009)Google Scholar
  4. 4.
    Bowman, I., Holt, R., Brewster, N.: Linux as a case study: its extracted software architecture. In: Proc. of the 21st International Conference on Software Engineering (1999)Google Scholar
  5. 5.
    Mattmann, C.A., Garcia, J., Krka, I., Popescu, D., Medvidovic, N.: The anatomy and physiology of the grid revisited. Technical Report USC-CSSE-2008-820, Univ. of Southern California (2008)Google Scholar
  6. 6.
    Taylor, R., Medvidovic, N., Dashofy, E.: Software Architecture: Foundations, Theory, and Practice. John Wiley & Sons, Chichester (2008)Google Scholar
  7. 7.
    Lippert, M., Roock, S.: Refactoring in Large Software Projects: Performing Complex Restructurings Successfully. Wiley, Chichester (2006)Google Scholar
  8. 8.
    Shaw, M., Garlan, D.: Software architecture: perspectives on an emerging discipline. Prentice-Hall, Inc., Upper Saddle River (1996)zbMATHGoogle Scholar
  9. 9.
    Marinescu, R.: Detection strategies: metrics-based rules for detecting design flaws. In: Proc. of the 20th IEEE International Conference on Software Maintenance (2004)Google Scholar
  10. 10.
    Lozano, A., Wermelinger, M., Nuseibeh, B.: Assessing the impact of bad smells using historical information. In: 9th International Workshop on Principles of Software Evolution (2007)Google Scholar
  11. 11.
    Brown, W.J., Malveau, R.C., McCormick III, H.W., Mowbray, T.J., Wiley, J., Sons, I.: AntiPatterns - Refactoring Software, Architectures, and Projects in Crisis. Wiley, New York (1998)Google Scholar
  12. 12.
    Garlan, D., Allen, R., Ockerbloom, J.: Architectural mismatch or why it’s hard to build systems out of existing parts. In: Proc. of the 17th International Conference on Software Engineering (1995)Google Scholar
  13. 13.
    Gacek, C.: Detecting Architectural Mismatches During Systems Composition. PhD thesis, Univ. of Southern California (1998)Google Scholar
  14. 14.
    Abd-Allah, A.: Composing heterogeneous software architectures. PhD thesis, University of Southern California (1996)Google Scholar
  15. 15.
    Roshandel, R.: Calculating architectural reliability via modeling and analysis. In: Proc. of the 26th International Conference on Software Engineering (2004)Google Scholar
  16. 16.
    Leveson, N.G.: Safeware: System Safety and Computers. Addison-Wesley, Reading (1995)Google Scholar
  17. 17.
    Foster, I., et al.: The anatomy of the grid: Enabling scalable virtual organizations. International Journal of High Performance Computing Applications 15(3) (2001)Google Scholar
  18. 18.
    Mattmann, C., Medvidovic, N., Ramirez, P., Jakobac, V.: Unlocking the Grid. In: Heineman, G.T., Crnković, I., Schmidt, H.W., Stafford, J.A., Szyperski, C., Wallnau, K. (eds.) CBSE 2005. LNCS, vol. 3489, pp. 322–336. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  19. 19.
    Malek, S., Seo, C., Ravula, S., Petrus, B., Medvidovic, N.: Reconceptualizing a family of heterogeneous embedded systems via explicit architectural support. In: Proc. of the 29th International Conference on Software Engineering (2007)Google Scholar
  20. 20.
    Seo, C., Malek, S., Edwards, G., Popescu, D., Medvidovic, N., Petrus, B., Ravula, S.: Exploring the role of software architecture in dynamic and fault tolerant pervasive systems. In: International Workshop on Software Engineering for Pervasive Computing Applications, Systems and Environments (2007)Google Scholar
  21. 21.
    Godfrey, M.W., Lee, E.H.S.: Secrets from the monster: Extracting mozilla’s software architecture. In: Proc. of the Second International Symposium on Constructing Software Engineering Tools (2000)Google Scholar
  22. 22.
    Gröne, B., Knöpfel, A., Kugel, R.: Architecture recovery of apache 1.3 – a case study. In: Proc. of the International Conference on Software Engineering Research and Practice 2002 (2002)Google Scholar
  23. 23.
    Tran, J., Godfrey, M., Lee, E., Holt, R.: Architectural repair of open source software. In: 8th International Workshop on Program Comprehension (2000)Google Scholar
  24. 24.
    Shaw, M., et al.: Abstractions for software architecture and tools to support them. IEEE Transactions on Software Engineering (1995)Google Scholar
  25. 25.
    Mehta, N.R., Medvidovic, N., Phadke, S.: Towards a taxonomy of software connectors. In: Proc. of the 22nd International Conference on Software Engineering (2000)Google Scholar
  26. 26.
    Tatebe, O., Morita, Y., Matsuoka, S., Soda, N., Sekiguchi, S.: Grid datafarm architecture for petascale data intensive computing. In: Proc. of the 2nd IEEE/ACM International Symposium on Cluster Computing and the Grid (2002)Google Scholar
  27. 27.
    Kiczales, G., Hilsdale, E.: Aspect-Oriented Programming. Springer, Heidelberg (2003)zbMATHGoogle Scholar
  28. 28.
    Haase, K.: Java message service tutorial (2002)Google Scholar
  29. 29.
    Oki, B., Pfluegl, M., Siegel, A., Skeen, D.: The Information Bus: an architecture for extensible distributed systems. In: Proc. of the 14th ACM Symposium on Operating Systems Principles (1994)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2009

Authors and Affiliations

  • Joshua Garcia
    • 1
  • Daniel Popescu
    • 1
  • George Edwards
    • 1
  • Nenad Medvidovic
    • 1
  1. 1.University of Southern CaliforniaLos AngelesUSA

Personalised recommendations