Abstract
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.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
Abbott, R.J.: Program design by informal English descriptions. Commun. ACM. 26, 882–894 (1983)
Alexander, C.: The Timeless Way of Building. Oxford University Press, New York (1979)
Alexander, C., Ishikawa, S., Silverstein, M.: A Pattern Language: Towns, Buildings, Construction. Oxford University Press, New York (1977)
Allen, R.: A formal approach to software architecture. PhD Dissertation, Carnegie Mellon University, Pittsburgh, CMU-CS-97-144, p. 248 (1997)
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)
Booch, G.: Object-oriented development. IEEE Trans. Softw. Eng. 12, 211–221 (1986)
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)
Brooks Jr., F.P.: The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley, Reading, MA (1975)
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)
Clements, P., Kazman, R., Klein, M.: Evaluating Software Architectures: Methods and Case Studies. Addison-Wesley Professional, Reading, MA (2002)
Clements, P., Northrop, L.: Software Product Lines: Practices and Patterns. Addison-Wesley, New York, NY (2002)
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)
DeRemer, F., Kron, H.H.: Programming-in-the-large versus programming-in-the-small. IEEE Trans. Softw. Eng. 2, 80–86 (1976)
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)
Dobrica, L., Niemela, E.: A survey on software architecture analysis methods. IEEE Trans. Softw. Eng. 28, 638–653 (2002)
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)
Fielding, R.T., Taylor, R.N.: Principled design of the modern web architecture. ACM Trans. Internet Technol. 2, 115–150 (2002)
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)
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)
Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, Reading, MA (1995)
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)
Jackson, M.: System Development. Prentice Hall, Englewood Cliffs, NJ (1983)
Jackson, M.A.: Principles of Program Design. Academic Press, Orlando, FL (1975)
Kang, K.-C., Lee, J., Donohoe, P.: Feature-oriented product line engineering. IEEE Softw. 19, 58–65 (2002)
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)
Kruchten, P.: The 4+1 view model of architecture. IEEE Softw. 12, 42–50 (1995)
Marcus Vitruvius Pollio. On Architecture (De Architectura). http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Vitruvius/home.html
Medvidovic, N., Dashofy, E., Taylor, R.N.: Moving architectural description from under the technology lamppost. Inf. Softw. Technol. 49, 12–31 (2007)
Medvidovic, N., Taylor, R.N.: A classification and comparison framework for software architecture description languages. IEEE Trans. Softw. Eng. 26, 70–93 (2000)
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)
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)
Ommering, R., Linden, F., Kramer, J., Magee, J.: The Koala component model for consumer electronics software. IEEE Comput. 33, 78–85 (2000)
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)
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)
Parnas, D.L.: On the criteria to be used in decomposing systems into modules. Commun. ACM. 15, 1053–1058 (1972)
Parnas, D.L.: On the design and development of program families. IEEE Trans. Softw. Eng. 2, 1–9 (1976)
Parnas, D.L.: Designing software for ease of extension and contraction. IEEE Trans. Softw. Eng. 5, 128–137 (1979)
Perry, D.E.: Software interconnection models. 9th International Conference on Software Engineering (ICSE), pp. 61–69. IEEE Computer Society (1987)
Perry, D.E., Wolf, A.L.: Foundations for the study of software architecture. ACM SIGSOFT Softw. Eng. Notes. 17, 40–52 (1992)
Prieto-Diaz, R., Neighbors, J.M.: Module interconnection languages. J. Syst. Softw. 6, 307–334 (1986)
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)
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)
Taylor, R.N., Medvidovic, N., Dashofy, E.M.: Software Architecture: Foundations, Theory, and Practice. Wiley, Hoboken, NJ (2010)
Tracz, W.: DSSA (Domain-Specific Software Architecture): pedagogical example. ACM SIGSOFT Softw. Eng. Notes. 20, 49–62 (1995)
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)
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)
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)
Yourdon, E., Constantine, L.L.: Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Prentice-Hall, Upper Saddle River, NJ (1979)
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)
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2019 Springer Nature Switzerland AG
About this chapter
Cite this chapter
Taylor, R.N. (2019). Software Architecture and Design. In: Cha, S., Taylor, R., Kang, K. (eds) Handbook of Software Engineering. Springer, Cham. https://doi.org/10.1007/978-3-030-00262-6_3
Download citation
DOI: https://doi.org/10.1007/978-3-030-00262-6_3
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-030-00261-9
Online ISBN: 978-3-030-00262-6
eBook Packages: Computer ScienceComputer Science (R0)