Software Architecture and Design

  • Richard N. TaylorEmail author


The activity of designing is pervasive in software development. A software system’s architecture is the set of principal design decisions made about the system. As such, architecture and design are central pillars of software engineering. This chapter provides a coherent set of definitions for architecture, highlights key techniques for designing, and illustrates their application in well-known, influential applications. The development of the central concepts is traced from early beginnings in both domain-specific and domain-independent contexts. Techniques for analysis of architectures are discussed, and particular emphasis is placed on the distinctive role that connectors play in complex systems. Cost-benefit trade-offs are examined, the importance of maintaining conceptual integrity is stressed, and future directions for the field are explored.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. Abbott, R.J.: Program design by informal English descriptions. Commun. ACM. 26, 882–894 (1983)CrossRefGoogle Scholar
  2. Alexander, C.: The Timeless Way of Building. Oxford University Press, New York (1979)Google Scholar
  3. Alexander, C., Ishikawa, S., Silverstein, M.: A Pattern Language: Towns, Buildings, Construction. Oxford University Press, New York (1977)Google Scholar
  4. Allen, R.: A formal approach to software architecture. PhD Dissertation, Carnegie Mellon University, Pittsburgh, CMU-CS-97-144, p. 248 (1997)Google Scholar
  5. Beaver, D., Kumar, S., Li, H.C., Sobel, J., Vajgel, P.: Finding a needle in Haystack: Facebook’s photo storage. OSDI’10: Symposium on Operating System Design and Implementation, pp. 1–8 (2010)Google Scholar
  6. Booch, G.: Object-oriented development. IEEE Trans. Softw. Eng. 12, 211–221 (1986)CrossRefGoogle Scholar
  7. Bosch, J.: From software product lines to software ecosystems. Proceedings of the 13th International Software Product Line Conference, San Francisco, CA, pp. 111–119 (2009)Google Scholar
  8. Brooks Jr., F.P.: The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley, Reading, MA (1975)Google Scholar
  9. Brown, N., Cai, Y., Guo, Y., et al.: Managing technical debt in software-reliant systems. Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research, pp. 47–52. ACM, Santa Fe, NM (2010)Google Scholar
  10. Clements, P., Kazman, R., Klein, M.: Evaluating Software Architectures: Methods and Case Studies. Addison-Wesley Professional, Reading, MA (2002)Google Scholar
  11. Clements, P., Northrop, L.: Software Product Lines: Practices and Patterns. Addison-Wesley, New York, NY (2002)Google Scholar
  12. Dean, J., Ghernawat, S.: MapReduce: simplified data processing on large clusters. OSDI’04: Sixth Symposium on Operating System Design and Implementation, San Francisco, CA (2004)Google Scholar
  13. DeRemer, F., Kron, H.H.: Programming-in-the-large versus programming-in-the-small. IEEE Trans. Softw. Eng. 2, 80–86 (1976)MathSciNetCrossRefGoogle Scholar
  14. Di Nitto, E., Rosenblum, D.S. Exploiting ADLs to specify architectural styles induced by middleware infrastructures. 21st International Conference on Software Engineering, pp. 13–22. IEEE Computer Society, Los Angeles, CA (1999)Google Scholar
  15. Dobrica, L., Niemela, E.: A survey on software architecture analysis methods. IEEE Trans. Softw. Eng. 28, 638–653 (2002)CrossRefGoogle Scholar
  16. Estublier, J., Leblang, D.B., Clemm, G., et al.: Impact of the research community on the field of software configuration management. ACM Trans. Softw. Eng. Methodol. 14, 383–430 (2005)CrossRefGoogle Scholar
  17. Fielding, R.T., Taylor, R.N.: Principled design of the modern web architecture. ACM Trans. Internet Technol. 2, 115–150 (2002)CrossRefGoogle Scholar
  18. Fielding, R.T., Taylor, R.N., Erenkrantz, J.R., et al.: Reflections on the REST architectural style and “Principled design of the modern web architecture”. In: Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2017), pp. 4–14. ACM, New York, NY (2017)Google Scholar
  19. Freeman, P.: The central role of design in software engineering. In: Freeman, P., Wasserman, A. (eds.) Software Engineering Education, pp. 116–119. Springer, New York (1976)CrossRefGoogle Scholar
  20. Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, Reading, MA (1995)zbMATHGoogle Scholar
  21. Garlan, D., Shaw, M.: An introduction to software architecture. In: Ambriola, V., Tortora, G. (eds.) Advances in Software Engineering and Knowledge Engineering, pp. 1–39. World Scientific Publishing Company, Singapore (1993)Google Scholar
  22. Jackson, M.: System Development. Prentice Hall, Englewood Cliffs, NJ (1983)Google Scholar
  23. Jackson, M.A.: Principles of Program Design. Academic Press, Orlando, FL (1975)Google Scholar
  24. Kang, K.-C., Lee, J., Donohoe, P.: Feature-oriented product line engineering. IEEE Softw. 19, 58–65 (2002)CrossRefGoogle Scholar
  25. Krasner, G.E., Pope, S.T.: A cookbook for using the Model-View-Controller user interface paradigm in Smalltalk-80. J. Object Orient. Program. 1, 26–49 (1988)Google Scholar
  26. Kruchten, P.: The 4+1 view model of architecture. IEEE Softw. 12, 42–50 (1995)CrossRefGoogle Scholar
  27. Marcus Vitruvius Pollio. On Architecture (De Architectura). Scholar
  28. Medvidovic, N., Dashofy, E., Taylor, R.N.: Moving architectural description from under the technology lamppost. Inf. Softw. Technol. 49, 12–31 (2007)CrossRefGoogle Scholar
  29. Medvidovic, N., Taylor, R.N.: A classification and comparison framework for software architecture description languages. IEEE Trans. Softw. Eng. 26, 70–93 (2000)CrossRefGoogle Scholar
  30. Mehta, N.R., Medvidovic, N., Phadke, S.: Towards a taxonomy of software connectors. 2000 International Conference on Software Engineering, pp. 178–187. ACM Press, Limerick, IE (2000)Google Scholar
  31. Metzger, A., Pohl, K.: Software product line engineering and variability management: achievements and challenges. Proceedings of Future of Software Engineering, pp. 70–84. ACM, Hyderabad, India (2014)Google Scholar
  32. Ommering, R., Linden, F., Kramer, J., Magee, J.: The Koala component model for consumer electronics software. IEEE Comput. 33, 78–85 (2000)CrossRefGoogle Scholar
  33. Oreizy, P., Gorlick, M.M., Taylor, R.N., et al.: An architecture-based approach to self-adaptive software. IEEE Intell. Syst. [see also IEEE Expert]. 14, 54–62 (1999)CrossRefGoogle Scholar
  34. Oreizy, P., Medvidovic, N., Taylor, R.N.: Runtime software adaptation: framework, approaches, and styles. Companion of the 30th International Conference on Software Engineering, Leipzig, pp. 899–910. ACM, New York, NY (2008)Google Scholar
  35. Parnas, D.L.: On the criteria to be used in decomposing systems into modules. Commun. ACM. 15, 1053–1058 (1972)CrossRefGoogle Scholar
  36. Parnas, D.L.: On the design and development of program families. IEEE Trans. Softw. Eng. 2, 1–9 (1976)CrossRefGoogle Scholar
  37. Parnas, D.L.: Designing software for ease of extension and contraction. IEEE Trans. Softw. Eng. 5, 128–137 (1979)CrossRefGoogle Scholar
  38. Perry, D.E.: Software interconnection models. 9th International Conference on Software Engineering (ICSE), pp. 61–69. IEEE Computer Society (1987)Google Scholar
  39. Perry, D.E., Wolf, A.L.: Foundations for the study of software architecture. ACM SIGSOFT Softw. Eng. Notes. 17, 40–52 (1992)CrossRefGoogle Scholar
  40. Prieto-Diaz, R., Neighbors, J.M.: Module interconnection languages. J. Syst. Softw. 6, 307–334 (1986)CrossRefGoogle Scholar
  41. Roshandel, R., van der Hoek, A., Mikic-Rakic, M., Medvidovic, N.: Mae – a system model and environment for managing architectural evolution. ACM Trans. Softw. Eng. Methodol. 13, 240–276 (2004)CrossRefGoogle Scholar
  42. Shaw, M., DeLine, R., Klein, D.V., Ross, T.L., Young, D.M., Zelesnik, G.: Abstractions for software architecture and tools to support them. IEEE Trans. Softw. Eng. 21, 314–335 (1995)CrossRefGoogle Scholar
  43. Taylor, R.N., Medvidovic, N., Dashofy, E.M.: Software Architecture: Foundations, Theory, and Practice. Wiley, Hoboken, NJ (2010)Google Scholar
  44. Tracz, W.: DSSA (Domain-Specific Software Architecture): pedagogical example. ACM SIGSOFT Softw. Eng. Notes. 20, 49–62 (1995)CrossRefGoogle Scholar
  45. van der Hoek, A.: Design-Time Product Line Architectures for Any-Time Variability. Sci. Comput. Program. Spec. Issue Softw. Var. Manag. 53, 285–304 (2004)MathSciNetGoogle Scholar
  46. van Duyne, D.K., Landay, J.A., Hong, J.I.: The Design of Sites: Patterns, Principles, and Processes for Crafting a Customer-Centered Web Experience. Addison-Wesley, Boston (2003)Google Scholar
  47. Wolf, A.L., Clarke, L.A., Wileden, J.C.: The AdaPIC toolset: Supporting interface control and analysis throughout the software development process. IEEE Trans. Softw. Eng. SE-15, 250–263 (1989)CrossRefGoogle Scholar
  48. Yourdon, E., Constantine, L.L.: Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Prentice-Hall, Upper Saddle River, NJ (1979)zbMATHGoogle Scholar
  49. Zheng, Y., Cu, C., Taylor, R.N.: Maintaining architecture-implementation conformance to support architecture centrality: from single system to product line development. ACM Trans. Softw. Eng. Methodol. 27(2), Article 8, 52 pages (2018)CrossRefGoogle Scholar

Copyright information

© Springer Nature Switzerland AG 2019

Authors and Affiliations

  1. 1.University of CaliforniaIrvineUSA

Personalised recommendations