    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Software Architecture</title>
        <link>https://members.accu.org/index.php/articles/516</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Design of applications and programs + Overload Journal #34 - Oct 1999</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c67/">Design</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c170/">34</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c67-170/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c67+170/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Software Architecture</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 26 October 1999 17:50:55 +01:00 or Tue, 26 October 1999 17:50:55 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>&quot;Java&quot; and &quot;UML&quot; are two of the current buzzwords in the
software industry. And, there is another one, more technically:
&quot;Software Architecture&quot;. For most software designers, &quot;Software
Architect&quot; is one of the top job titles on the business card. So,
what is &quot;Software Architecture&quot;? If you have a look to [<a href=
"#SEI">SEI</a>] or [<a href="#WWISA">WWISA</a>], you'll find quite
a lot of different definitions. One of the first definitions I've
seen was given in [<a href="#Shlaer-">Shlaer-</a>]. There, the
software architecture &quot;provides generic mechanisms and structures
for managing data and control for the system as a whole&quot;. I think
this is still a very good general definition of software
architecture, but it doesn't explain the details of software
architecture. So, I will take a different approach here.</p>
<p>For me, there are two main aspects of software architecture: (1)
(the structure aspect) dividing the whole system into several
distinct parts and defining the interactions between those parts,
and (2) (the uniformity aspect) creating uniformity throughout the
whole system. This second aspect is sometimes referred to as the
&quot;habitability&quot; of a system: how easy it is to develop a sense of
where to look for some specific detail in the system. While I
believe that both (1) and (2) are equally important, most current
discussion, papers and textbooks are about (1) only, and quite a
lot of the definitions in [<a href="#SEI">SEI</a>] reflect only the
structural aspect of software architecture. One of the reasons for
this might be that it is much easier to provide guidelines and
techniques for the much more &quot;real&quot; structure than for a somewhat
&quot;fuzzy&quot; uniformity, and this is also the reason why I will only
discuss the structure aspect in this article (but I will return to
uniformity in another article).</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e36" id="d0e36"></a>A Sample
System</h2>
</div>
<p>As a running example, I will use a software system for a
distributor. The main business processes for this system are to buy
and to sell products. But if you have a closer look to the system,
you will find quite a lot of different use cases for different
users. The system should provide two different user interfaces for
selling the products: a web interface for online ordering and a
usual GUI client for the sales person taking orders at the phone.
Both of these UIs use a powerful search machine to search for
products based on various different specifications. The customer
should be able to track the way of his/her order on the web, so you
need an additional web interface for this. The stock clerks need a
GUI to print packing lists and commit the shipping. And the product
manager must be supported with sales figures and some lists that
show those products that are currently low on stock. The product
manager also has a GUI to enter new products to the system, alter
product descriptions, etc. And finally, all orders must be reported
to the accounting system for billing, general accounting
statistics, etc. A possible use case diagram (in UML) is shown
below.</p>
<div class="c2"><img src=
"/var/uploads/journals/resources/Vollman%20Software%20Architecture%201.png" align=
"middle"></div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e42" id="d0e42"></a>Subsystems</h2>
</div>
<p>Starting from the use case diagram, you can decide on the major
subsystems. But what is a subsystem? One main aspect of a subsystem
is separate development: in general, the different subsystems can
be developed independently. To achieve this, you need clearly
defined interfaces: the functional services a subsystem provides to
or requires from other subsystems.</p>
<p>As it is always wise to separate the view (user interfaces) from
the (business) model, you might decide to have one user interface
subsystem for each of the different users and one subsystem for the
model. As you also might use some existing library for the database
access and something to connect to the company's accounting system,
you might have the following subsystems.</p>
<div class="c2"><img src=
"/var/uploads/journals/resources/Vollman%20Software%20Architecture%202.png" align=
"middle"></div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e50" id="d0e50"></a>Components and
Distribution</h2>
</div>
<p>Not only the functional side of the subsystem interfaces must be
defined, but also the technicalities. So, you must decide as what
type of physical entities you want to provide your subsystems: they
could be normal (static or dynamic) class libraries. But you could
also provide them as ActiveX controls or JavaBeans. Also, a
subsystem could be a separate process, in which case you must
decide on the type of communications between the processes.</p>
<p>Given the subsystems from Fig. 2, the central question regarding
the physical packaging is about the &quot;Business Objects&quot; subsystem.
In our example, the two web interfaces will probably run on a web
server. As the web server will run outside of a firewall, but the
critical business processes should only run inside of the firewall,
the &quot;Business Objects&quot; subsystem will be a separate process on a
different machine anyway. So, you probably want to keep the
internal GUI clients separate as well. But if you have the
processes on different machines, you need some mechanisms to
communicate between them. While you could develop your own
communication functions, you probably will use some library based
on low-level protocols or better some object-oriented distributed
framework, like CORBA, DCOM, or JAVA RMI.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e57" id=
"d0e57"></a>Concurrency</h2>
</div>
<p>As we have a multi-user system, you must think of the
concurrency requirements of your system. Of course, it should not
happen that two different customers are promised the last item in
stock of a specific product. Also, as you have decided to use a
central application server (the &quot;Business Objects&quot; subsystem), you
must think again of the physical nature of this server. How do you
handle different clients connecting simultaneously to the server?
Is there a different server process spawned for each client, or is
there a separate thread inside the same process for each client, or
does the server processes one request after the other? For the
chosen alternative, you must carefully select the (server-)
internal communication mechanisms, identify the shared resources
and decide on a policy to manage these.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e62" id="d0e62"></a>Summary</h2>
</div>
<p>Perhaps, this small example has shown you some of the tasks that
are related to software architecture. One of the main tasks is to
define the overall structure of a software system, i.e. the
partitioning into several subsystems and the interactions between
them. Part of this are the definitions about the distribution,
communications and concurrency between the parts.</p>
<p>But another aspect is the uniformity among the parts, and I will
come back to this aspect in another article. There, I will also
come back to the very beginnings of my writings for Overload: the
exception specifications and their consequences on the flexibility
of a system.</p>
</div>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e69" id="d0e69"></a>References</h2>
</div>
<div class="bibliomixed"><a name="SEI" id="SEI"></a>
<p class="bibliomixed">[SEI] Software Engineering Institute,
<span class="bibliomisc"><a href=
"http://www.sei.cmu.edu/architecture/definitions.html" target=
"_top">http://www.sei.cmu.edu/architecture/definitions.html</a></span></p>
</div>
<div class="bibliomixed"><a name="WWISA" id="WWISA"></a>
<p class="bibliomixed">[WWISA] [2] World Wide Institute for
Software Architecture, <span class="bibliomisc"><a href=
"http://www.wwisa.org/" target=
"_top">http://www.wwisa.org/</a></span></p>
</div>
<div class="bibliomixed"><a name="Shlaer-" id="Shlaer-"></a>
<p class="bibliomixed">[Shlaer-] Sally Shlaer, Stephen J. Mellor:
<span class="citetitle"><i class="citetitle">Object
Lifecycles</i></span>, Yourdon Press, 1992, ISBN 0-13-629940-7</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
