Software architecture: Difference between revisions

Content deleted Content added
Removed the contents without citation. Removed the content which have cited unreliable sources. These unreliable text just pollute the page, distracting readers from content that matters
Line 132:
 
== Software architecture topics ==
 
=== Software architecture description ===
{{main|Software architecture description}}
Software architecture description involves the principles and practices of modeling and representing architectures, using mechanisms such as architecture description languages, architecture viewpoints, and architecture frameworks.
 
=== Architecture description languages ===
{{main|Architecture description language}}
An architecture description language (ADL) is any means of expression used to describe a software architecture ([[ISO/IEC 42010|ISO/IEC/IEEE 42010]]).
Many special-purpose ADLs have been developed since the 1990s, including [[Architecture analysis and design language|AADL]] (SAE standard), [[Wright (ADL)|Wright]] (developed by Carnegie Mellon), [[Acme (ADL)|Acme]] (developed by Carnegie Mellon), xADL (developed by UCI), [[Darwin (ADL)|Darwin]] (developed by [[Imperial College London]]), DAOP-ADL (developed by University of Málaga), SBC-ADL (developed by [[National Sun Yat-Sen University]]), and [[ByADL (ADL)|ByADL]] (University of L'Aquila, Italy).
 
=== Architecture viewpoints ===
{{main|View model}}
[[File:4+1 Architectural View Model.svg|thumb|264px|[[4+1 architectural view model]].]]
Software architecture descriptions are commonly organized into [[view model|views]], which are analogous to the different types of [[blueprint]]s made in building [[architecture]]. Each view addresses a set of system concerns, following the conventions of its ''viewpoint'', where a viewpoint is a specification that describes the notations, modeling, and analysis techniques to use in a view that expresses the architecture in question from the perspective of a given set of stakeholders and their concerns ([[ISO/IEC 42010|ISO/IEC/IEEE 42010]]). The viewpoint specifies not only the concerns framed (i.e., to be addressed) but the presentation, model kinds used, conventions used and any consistency (correspondence) rules to keep a view consistent with other views.
 
=== Architecture frameworks ===
{{main|Architecture framework}}
An architecture framework captures the "conventions, principles and practices for the description of architectures established within a specific ___domain of application and/or community of stakeholders" ([[ISO/IEC 42010|ISO/IEC/IEEE 42010]]). A framework is usually implemented in terms of one or more viewpoints or ADLs.
 
=== Architectural styles and patterns ===
An [[architectural pattern]] is a general, reusable solution to a commonly occurring problem in software architecture within a given context.
Architectural patterns are often documented as software [[Software design pattern|design patterns]].
 
Following traditional building architecture, a 'software architectural style' is a specific method of construction, characterized by the features that make it notable" ([[architectural style]]).
 
{{cquote|''An architectural style defines: a family of systems in terms of a pattern of structural organization; a vocabulary of components and connectors, with constraints on how they can be combined.''<ref name=SG>{{cite book |last1=Shaw |first1=Mary |last2=Garlan |first2=David |date=1996 |title=Software architecture: perspectives on an emerging discipline |publisher=Prentice Hall |isbn=978-0-13-182957-2}}</ref>}}
 
{{cquote|''Architectural styles are reusable 'packages' of design decisions and constraints that are applied to an architecture to induce chosen desirable qualities.''<ref>[http://www.isr.uci.edu/architecture/styles.html UCI Software Architecture Research – UCI Software Architecture Research: Architectural Styles]. Isr.uci.edu. Retrieved on 2013-07-21.</ref>}}
 
There are many recognized architectural patterns and styles, among them:
* [[Blackboard (design pattern)|Blackboard]]
* [[Broker pattern]]
* [[Client–server model|Client-server]] (2-tier, [[Three-tier (computing)|3-tier]], [[n-tier|''n''-tier]], [[cloud computing]] exhibit this style)
* [[Software componentry|Component-based]]
* [[Database-centric architecture|Data-centric]]
* [[Event-driven architecture|Event-driven]] (or [[implicit invocation]])
* [[Interpreter pattern]]
* [[Abstraction (computer science)#Layered architecture|Layered]] (or [[multilayered architecture]])
* [[Master–slave (technology)|Master–slave]]
* [[Microservices|Microservices architecture]]
* [[Model–view–controller|Model-view-controller]]
* [[Monolithic application]]
* [[Peer-to-peer]] (P2P)
* [[Pipes and filters]]
* [[Plug-in (computing)|Plug-ins]]
* [[Reactive architecture]]
* [[Representational state transfer]] (REST)
* [[Rule-based system|Rule-based]]
* [[Service-oriented architecture|Service-oriented]]
* [[Shared nothing architecture]]
* [[Space-based architecture]]
* Serverless architecture
 
Some treat architectural patterns and architectural styles as the same,<ref name=MSDN>[http://msdn.microsoft.com/en-us/library/ee658117.aspx Chapter 3: Architectural Patterns and Styles]. Msdn.microsoft.com. Retrieved on 2013-07-21.</ref> some treat styles as specializations of patterns. What they have in common is both patterns and styles are idioms for architects to use, they "provide a common language"<ref name=MSDN/> or "vocabulary"<ref name=SG/> with which to describe classes of systems.
 
=== Software architecture and agile development ===
{{main|Agile development}}
 
There are also concerns that software architecture leads to too much [[big design up front]], especially among proponents of [[agile software development]]. A number of methods have been developed to balance the trade-offs of up-front design and agility,<ref name="Boehm2004">{{cite book |title=Balancing Agility and Discipline |last1=Boehm|first1=Barry|last2=Turner|first2=Richard|year=2004|publisher=Addison-Wesley|isbn=978-0-321-18612-6}}</ref> including the agile method [[dynamic systems development method|DSDM]] which mandates a "Foundations" phase during which "just enough" architectural foundations are laid. ''[[IEEE Software]]'' devoted a special issue to the interaction between agility and architecture.