<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-785957495407287423</id><updated>2011-04-21T20:26:30.284-07:00</updated><title type='text'>All About Software</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softwareindo12.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/785957495407287423/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://softwareindo12.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Software Indo</name><uri>http://www.blogger.com/profile/12114594382591873909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-785957495407287423.post-5820285645609320888</id><published>2008-01-02T08:00:00.000-08:00</published><updated>2008-01-02T08:02:39.818-08:00</updated><title type='text'>What is Software Architecture</title><content type='html'>&lt;span style="font-family:Arial;font-size:85%;"&gt;  &lt;/span&gt;&lt;p style="margin-left: 20px; margin-top: 8px; margin-bottom: 8px;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;  &lt;a name="What is Software Architecture?"&gt;&lt;/a&gt;Software architecture is the set of decisions the   &lt;a href="http://www.bredemeyer.com/who.htm"&gt;software architect&lt;/a&gt; makes.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 40px; margin-top: 8px; margin-bottom: 8px;"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt; "What decisions does the software architect make?"   &lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 20px; margin-top: 8px; margin-bottom: 8px;"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt; The   architecturally significant ones.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 40px; margin-top: 8px; margin-bottom: 8px;"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt; "What is   &lt;a href="http://www.bredemeyer.com/ArchitectingProcess/ArchitecturalRequirements.htm#Architecturally_Significant_Requirements_"&gt;architecturally significant&lt;/a&gt;?"   &lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 20px; margin-top: 8px; margin-bottom: 8px;"&gt; &lt;span style="font-family:Arial;font-size:85%;"&gt; The &lt;a href="http://www.bredemeyer.com/Architect/WhatsInAName.htm#architecturally_significant"&gt;architect decides&lt;/a&gt;!&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 40px; margin-top: 8px; margin-bottom: 8px;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;"A tautology!" you   protest.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 20px; margin-top: 8px; margin-bottom: 8px;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Ah,   think about it, I counter. &lt;/span&gt;  &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Software architecture is commonly defined in terms of     components and connectors (see &lt;a href="http://www.bredemeyer.com/definiti.htm"&gt;Definitions of Software Architecture&lt;/a&gt;).     Components are identified and assigned responsibilities that client components interact     with through "contracted" interfaces. Component interconnections specify     communication and control mechanisms, and support all component interactions needed to     accomplish system behavior. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In creating architectures, we address&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;i&gt;system decomposition&lt;/i&gt; into components, subsystems, sub-assemblies or "chunks" (Ulrich and Eppinger, 2004), paying attention to development productivity, and flexibility or extensibility requirements associated with accommodating future functionality at a reasonable cost of change. A good decomposition satisfies the principle of loose coupling between components (or pieces), facilitated by clean interfaces, simplifying the problem by dividing it into reasonably independent pieces that can be tackled separately. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Once broken down    into pieces, we need to ask:&lt;br /&gt;  - &lt;i&gt;Do we have all the necessary pieces?&lt;/i&gt; The structure must support    the functionality or services required of the system. Thus, the dynamic    behavior of the system must be taken into account when designing the    architecture. We must also have the necessary infrastructure to support    these services.&lt;br /&gt;  - &lt;i&gt;Do the pieces fit together?&lt;/i&gt; This is a matter of interface and    relationships between the pieces. But good fit—that is fit that    maintains system integrity—also has to do with whether the system, when    composed of the pieces, has the right    &lt;a href="http://www.bredemeyer.com/ArchitectingProcess/ArchitecturalRequirements.htm"&gt;properties&lt;/a&gt;.  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;i&gt;cross-cutting concerns&lt;/i&gt;. We refer    to broad-scoped qualities or properties of the system as cross-cutting    concerns, because their impact is diffuse or systemic. It may be a    matter of preferring not to isolate these concerns because the    decomposition is being driven by other concerns, or it may be that no    matter how you might “slice-and-dice” the system, multiple parts are    going to have to collaborate to address these cross-cutting concerns. At    any rate, to effectively address cross-cutting concerns, they must be    approached first at a more broad-scoped level. Many system qualities    (also known as   &lt;a href="http://www.bredemeyer.com/pdf_files/NonFunctReq.PDF"&gt;   non-functional requirements&lt;/a&gt; or system properties, often specified in    service level agreements) are of this nature. To make the picture more    complicated, the system qualities may conflict, so that trade-offs have    to be made taking into account the relative priorities of the system    qualities.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;     &lt;p align="justify"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;An architecture is not a   simple flat view of the component topology, though an architecture diagram   showing the components and relationships among them is a central thinking   and communicating tool for the architects and the development team, and   others they partner with. Our architecture needs to include:&lt;/span&gt;&lt;/p&gt;     &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;em&gt;   &lt;a href="http://www.bredemeyer.com/ArchitectingProcess/MetaArchitecture.htm"&gt;   Meta-architecture&lt;/a&gt;&lt;/em&gt;: the architectural vision, style,         principles, key communication and control mechanisms, and concepts that guide the team of         architects in the creation of the architecture.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;em&gt;   &lt;a href="http://www.bredemeyer.com/architecture_documentation_action_guides.htm"&gt;architectural views&lt;/a&gt;&lt;/em&gt;: Just as building architectures         are best envisioned in terms of a number of complementary views or models, so too are         software architectures. In particular, &lt;em&gt;structural&lt;/em&gt; views help document and         communicate the architecture in terms of the components and their relationships, and are         useful in assessing architectural qualities like extensibility. &lt;em&gt;Behavioral&lt;/em&gt; views         are useful in thinking through how the components interact to accomplish their assigned         responsibilities and evaluating the impact of what-if scenarios on the architecture.         Behavioral models are especially useful in assessing run-time qualities such as         performance and security. &lt;em&gt;Execution&lt;/em&gt; views help in evaluating physical         distribution options and documenting and communicating decisions.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;In creating these views, we pay attention to:&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;em&gt;&lt;a href="http://www.bredemeyer.com/ArchitectingProcess/architecturalPatterns.htm"&gt;architectural patterns&lt;/a&gt;&lt;/em&gt;: structural patterns such as         layers and client/server, and mechanisms such as brokers and bridges.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;key architectural design principles including abstraction,         separation of concerns, postponing decisions, and simplicity, and related techniques such         as interface hiding and encapsulation.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;design of architectural mechanisms,    where &lt;i&gt;mechanisms&lt;/i&gt; deal with the interaction of components to    achieve specific system capabilities. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;system decomposition principles and good interface design.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;     &lt;p&gt;&lt;a name="What Software Architecture Is Not"&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;What Software     Architecture &lt;em&gt;Is Not&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;     &lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Software architecture must be distinguished from   &lt;a href="http://www.bredemeyer.com/Architect/WhatsInAName.htm#Architecture_Versus_Design"&gt;lower-level design&lt;/a&gt; (e.g., design of component internals and algorithms) and implementation, on the one     hand, and other kinds of related architectures, on the other. For instance, software     architecture is not the information (or data) model, though it uses the information model     to get type information for method signatures on interfaces, for example. It is also not     the architecture of the physical system, including processors, networks, and the like, on     which the software will run. However, it uses this information in evaluating the impact of     architectural choices on system qualities such as performance and reliability. More     obviously, perhaps, it is also not the hardware architecture of a product to be     manufactured. While each of these other architectures typically have their own specialists     leading their design, these architectures impact and are impacted by the software     architecture, and where possible, should not be designed in isolation from one another.     This is the domain of &lt;em&gt;system&lt;/em&gt; architecting. (As an interesting aside, our software     architecting process has usefully been applied, without the software modeling specifics,     to system, hardware and organization architecting.)&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/785957495407287423-5820285645609320888?l=softwareindo12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareindo12.blogspot.com/feeds/5820285645609320888/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=785957495407287423&amp;postID=5820285645609320888' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/785957495407287423/posts/default/5820285645609320888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/785957495407287423/posts/default/5820285645609320888'/><link rel='alternate' type='text/html' href='http://softwareindo12.blogspot.com/2008/01/what-is-software-architecture.html' title='What is Software Architecture'/><author><name>Software Indo</name><uri>http://www.blogger.com/profile/12114594382591873909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
