iCommerce.com Corporation
eCommerce


Search our
entire site

Enter your search
terms below, or visit
our search page



Search
architecture only

Enter your search
terms below:




For the table
of contents and
hyperlinks to
general topics
proceed to toc



























Composing Components: How Does One Detect Potential Architectural Mismatches?

Cristina Gacek and Barry Boehm Center for Software Engineering University of Southern California Los Angeles, CA, USA, 90089-0781

Nowadays, in order to be competitive, a developer's usage of Commercial off the Shelf (COTS), or Government off the Shelf (GOTS), packages has become a sine qua non, at times being an explicit requirement from the customer. The idea of simply plugging together various COTS packages and/or other existing parts results from the megaprogramming principles [Boehm and Scherlis 1992]. What people tend to trivialize is the side effects resulting from the plugging or composition of these subsystems. Some COTS vendors tend to preach that because their tool follows a specific standard, say CORBA, all composition problems disappear. Well, it actually is not that simple. Side effects resulting from the composition of subsystems are not just the result of different assumptions in communication methods by various subsystems, but the result from differences in various sorts of assumptions, such as the number of threads that are to execute concurrently, or even on the load imposed on certain resources. This problem is referred to as architectural mismatches [Garlan et al. 1995] [Abd-Allah 1996]. Some but not all of these architectural mismatches can be detected via domain architecture characteristics, such as mismatches in additional domain interface types (units, coordinate systems, frequencies), going beyond the general interface types in standards such as CORBA.

Other researchers have successfully approached reuse at the architectural level by limiting their assets not by domain, but rather by dealing with a specific architectural style. I.e., they support reuse based on limitations on the architectural characteristics of the various parts and resulting systems [Medvidovic et al. 1997] [Magee and Kramer 1996] [Allan and Garlan 1996]. This approach can be successful because it simply avoids the occurrence of architectural mismatches.

Our work addresses the importance of underlying architectural features in determining potential architectural mismatches while composing arbitrary components. We have devised a set of those features, which we call conceptual features [Abd-Allah 1996][Gacek 1997], and are building a model that uses them for detecting potential architectural mismatches. This underlying model has been built using Z [Spivey 1992].

Conceptual Features

When composing systems, many potential architectural mismatches can be detected by analyzing their various choices for conceptual features. Mismatches may occur because the subsystems have different choices for some particular feature. E.g., one is multi-threaded and the other isn't, creating the possibility of synchronization problems when accessing some shared data (the single-threaded part assumes there is absolutely no risk). Mismatches may also occur because the subsystems make the same choice for some particular feature. E.g., if two subsystems are single-threaded, we may also run into synchronization problems when accessing some shared data, since both parts assume there is absolutely no risk.

Note that the use of conceptual features becomes a facilitator when dealing with COTS and GOTS. Conceptual features do describe the system and often help describe API's, without giving away secrets that could reduce the vendor's competitive advantage.

Conceptual Feature Set

By analyzing various architectural styles and their common descriptions [Shaw and Garlan 1996] we devised our current working set of architectural conceptual features. The architectural styles we used are distributed processes, event-based, layered, main-subroutine, object-oriented, pipe-and-filter, blackboard, rule-based, logic programming, transactional database-centric, real-time, and closed-loop feedback control. Our resulting conceptual features are:

  • Dynamism. A system is dynamic if and only if it allows non-blocking control connectors (spawns), i.e., the number of concurrent threads may vary through time.
  • Supported data transfers. These may be achieved through: explicit data connectors, an implicit global network of data connectors, or shared data variables.
  • Triggering capability. Some systems allow the transfer of data (events) along explicit data connectors or a global network to cause certain actions, e.g. control transfers or additional data transfers.
  • Concurrency. Whether single or multiple threads are allowed to execute concurrently. Note that concurrency is not the same as dynamism.
  • Distribution. A system may be distributed or not.
  • Layering. A system may or may not impose layering constraints on its control components.
  • Encapsulation. A system may be object-oriented or not.
  • Termination. Some systems may have explicit termination characteristics, e.g., under normal conditions, blackboard systems always terminate, whereas closed-loop feedback control ones never do.
  • Preemption. Some systems may allow for preemption of some execution in order to handle a more urgent situation.
  • Predictable response time. The real-time style requires that a system's response time for certain events be predictable in all cases.
  • Component priorities. In order to achieve better and/or more urgent results efficiently, several styles have components prioritized in various manners, thus specifying execution precedence.
  • Backtracking. The styles with their roots in artificial intelligence allow for backtracking while trying to solve a problem. Depending on the granularity being used, one could say the same about database centric systems while doing their rollback/recovery.
  • Reentrance. Some styles allow for multiple simultaneous, interleaved, or nested invocations of the same piece of code which will not interfere with each other, i.e., their control components are reentrant.
  • Reconfiguration. Upon some special conditions (or failures), some systems perform on-line reconfiguration, whereas others have it done off-line.
  • Central control entity. Some styles have some specific central control entity responsible for arbitrating which components are to execute at any given point in time.

Impact on Megaprogramming

How architectural mismatches can obstruct a megaprogramming effort has already been very clearly illustrated [Garlan et al. 1995]. We don't only have to consider functionality and environment, but also the architectural features intrinsic to the various parts.

In order to substantiate that each one of the above features could be used to determine potential architectural mismatches we will be discussing one mismatch example for each feature.

  • Dynamism: In case we have composition via a blocking data connector, the receiving control component may be inactive when data is sent through the data connector, and it may never become active (again), thus creating a deadlock on the sending control component.
  • Data Transfers: The obvious example here is that of non-matching signatures [Zaremski and Wing 1993].
  • Triggering: Different sets of recognized messages are used by two subsystems that permit triggers and are being composed together.
  • Concurrency: When two concurrent threads share data there is a potential for synchronization problems. One of the ways this situation may occur is if composition is achieved by a system that allows for concurrency spawns another (sub)system that originally assumed no concurrency would be present.
  • Distribution: A remote connector is extended into or out of a non-distributed subsystem (i.e. a subsystem originally confined to a single node). The non-distributed subsystem is not prepared to handle any possible networking situations that may arise.
  • Layering: A layering constraint is violated during composition. This may not be as problematic as other mismatches discussed here, but it will violate the virtual machine concept that existed for a reason.
  • Encapsulation: Objects have public and private data. Private data are hidden from the outside world, hence are only visible from within that object. Consequently, if during composition there was an assumption that at least part of some private data would be available to others, we have a problem.
  • Termination: Whenever there is a call (not a spawn) from one control component to another, if the callee does not terminate (e.g., a closed-loop feedback control system, or a system having an infinite loop), the caller is in a deadlock situation.
  • Preemption: Composing two preemptive systems may cause problems, since events may be handled differently by the two subsystems (one might have a more urgent situation than the other).
  • Predicted response time: Composition of two systems that must have predicted response times brings up issues on how to combine their predicted response times.
  • Component priorities: Composition of systems which have component priorities (either implicit or explicit) may lead into problems. How do we know how components' priorities compare across systems?
  • Backtracking: Composition between a system that allows for backtracking and one that doesn't may clearly cause problems. We may have used part of the other system (which changed the overall state) and then have to backtrack. There is no way of undoing what the other system did.
  • Reentrance: As a side effect of composition we could run into the situation of trying to start some non-reentrant component that is already executing.
  • Reconfiguration: Composing a subsystem that performs on-line reconfiguration with one that doesn't, can create a situation where upon a failure only part of the overall resulting system is reconfigured and running.
  • Central control entity: In event-based systems, the event manager is responsible for selecting the control components for execution, based on the events received. When composing with other event-based systems, the existence of more than one event manager causes problems on deciding which control component to activate next. Both event managers assume that they have complete control on execution sequencing.

Conclusion

Architectural features can be used to provide information on potential architectural mismatches early on in the reuse process. Hence this information is instrumental for early risk assessment.

Here we presented a set of architectural features that are relevant to reuse. We also illustrated by examples how these features can be used to detect potential architectural mismatches. More of these mismatches have been discussed in [Abd-Allah 1996] and [Gacek 1997], but these classifications are still evolving. Although not discussed here, we have also built a prototype tool (AAA--Architect's Automated Assistant), based on the Z model, that uses as input styles, components, and/or COTS descriptions and analyzes them for compatibility.

Bibliography

[Abd-Allah 1996] A. Abd-Allah, Composing Heterogeneous Software Architectures, Doctoral Dissertation, Center for Software Engineering, University of Southern California, August 1996 (http://sunset.usc.edu/TechRpts/dissertation.html).
[Allan and Garlan 1996] R. Allen and D. Garlan, The Wright Architectural Specification Language, 24 September 1996 (http://www.cs.cmu.edu/afs/cs/project/able/ftp/wright-tr.ps).
[Boehm and Scherlis 1992] B. W. Boehm and W. L. Scherlis, "Megaprogramming," Proceedings of the DARPA Soft ware Technology Conference, April 1992 (available via USC Center for Software Engineering, Los Angeles, CA, 90089-0781).
[Gacek 1997] C. Gacek, "Detecting Architectural Mismatches During Systems Composition," USC Technical Report USC-CSE-97-506, Center for Software Engineering, University of Southern California, 8 July 1997 (http://sunset.usc.edu/TechRpts/Papers/usccse97-506/usccse97-506.ps).
[Garlan et al. 1995] D. Garlan, R. Allen, and J. Ockerbloom, "Architectural Mismatch or Why it's hard to build systems out of existing parts," IEEE Software, November 1995, pp. 17-26.
[Magee and Kramer 1996] J. Magee and J. Kramer, "Dynamic Structure in Software Architectures," in Proceeding of the ACM SIGSOFT'96: Fourth Symposium on the Foundations of Software Engineering (FSE4), San Francisco, CA, October 1996, pp. 24-32.
[Medvidovic et al. 1997] N. Medvidovic, P. Oreizy, and R. N. Taylor. "Reuse of Off-the-Shelf Components in C2- Style Architectures," in Proceedings of the 1997 Symposium on Software Reusability (SSR'97), pp. 190-198, Boston, MA, May 17-19, 1997.
[Shaw and Garlan 1996] M. Shaw and D. Garlan, Software Architectures--Perspectives on an Emerging Discipline, Prentice Hall, 1996.
[Spivey 1992] J. Spivey, The Z Notation, Prentice Hall, 1992.
[Zaremski and Wing 1993] A. M. Zaremski and J. M. Wing, "Signature Matching: A Key to Reuse", Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering, December 1993, pp. 182-190.


Architecture
Home
Distributed
IA Definition
Java Based
Mismatch
Network Monitor
Scaling Objects
Trader-Based
Web annotations