COBRA Architecture


As the first part of architectural design, a goal-oriented approach has been presented for the process of identifying software architectural components from the (partial) requirements description. Now, the second part shows a series of decomposition of the COBRA tool in terms of its nested components. The third part shows an architectural composition of the components using styles, connectors, and constraints. The last part shows how to ensure that the architectural design is good enough concerning the set of scenarios constructed and used to elicit, specify and validate requirements. The rationale for the composition is described in terms of non-funtional requirements, domain characteristics, and the development constraints.

The process of requirements engineering and software architectural design is an evolutionary process.
Rejuvenating Table of Contents
Sections Description
Components? What are the building blocks of the Cooperative APN?
The Generative Process How to generate an architectural solution with "-ilities" built in.
Decomposition of "-Ilities"
Process Guidelines
An illustration How to use the generative approch to generating an architectural solution with "-ilities" built in.
An Initial Step
Continuing the Process
From Microscopic to Macroscopic Architecture How to utilize middlewares, intermediaries and knowledgewares
Goal-Oriented Approach to Compositional Software Architecting


Components:



The Generative Process

The quality of the architecture is as good as the decisions. Rely on your intuition, consider a small number of alternatives at each decision point, prune the tree by making informed decisions considering "-ilities", and generate a first-cut approximation both functionality-wise and quality-wise. Repeat the process while making improvements by considering more alternatives and making better decisions at various decision points by considering more "-ilities" and perhaps a different prioritization scheme.

Decomposition of "-Ilities"

Each architectural choice can make either positive or negative contributions towards the satisficing of non-functional requirements (NFRs). There are two cases:

  • i) Some architectural components are there specifically for the purpose of satisficing particular kinds of NFRs (e.g., an indexing scheme to improve time performance, an authorization scheme to improve security, a simulation component to held understand the requirements, a tutoring component to improve learnability, etc.); and
  • ii) A functional mapping can be evaluated against NFRs.

Guidelines:

The process of system/software architectural design can take into consideration the following guidelines:

  • separating out each of those components that would need the most coupling into a layer somewhere <<+design simplicity, -indirect communication overhead>>.
    • place those components with high affinity to the layer components closer to the layer.
    • see if they can be merged into the same layer
  • separating out each of those components that are common to all the rest into a layer somewhere.
  • group those components that would need the most cohesion in a bag <<+design simplicity, -invisibility>>
    • place the rest of the components relative to the bags according to the degree of their affinities.
    • see if some of the components can be merged into some of the bags.
  • examine the presence of a transaction center or a transformation center
  • identify data representations that need to be shared among components
    • Consider the possibility of both main-memory and secondary-memory residency.
    • Consider architectures of Shared Data <<+performance, -independence/modifiability>> or Implicit Invocation <<+modifiability/enhanceability, -performance>> (as sub-architectures)
    • Consider, then, architectures of Client & Server or Middleware <<+interoperability, -comprehensibility>>
  • see if the system has characteristics strong enough to have an overall architectural style of:
    • OO <<+info. hiding/security/modularity+methodological support, - performance (cf. info. sharing)>>
    • Structure Chart
    • Event-driven: simple repository, virtual repository, BB,
    • Pipe-&-Filter <<+simplicity, -performance>>: purely sequential <+simplicity, -performance>, concurrent <-simplicity, +performance>
    • Process Control
    • Client & Server: File-based, DB-based, TP-based, Groupware-based, Web-based
    • Middleware
  • decide on the flow/path of data and control
  • decide on the number, and types, of interfaces


An Illustration

The First Half:

Continuing the Process


  From Microscopic to Macroscopic Architecture

The intent of the categorization is to explain why there are non-trivial differences in the architectural descriptions of software systems varying in size and complexity. It would be interesting to draws an analogy between this classification and the one in economics, namely, microeconomics and macroeconomics.

A "microscopic-architecture" refers to an architecture for a reasonably small system with a small number of components which are small in size and low in complexity. For example, the KWIC system architectures can be classified as "microscopic". An important observation here is that all components are clearly identified together with their interactions. Additionally, every interface description is provided for each component, along with at least an informal description of what it does.

A "mesoscopic-architecture" refers to an architecture for a bigger system which typically is localized geographically with little outside communication. For example, a library system architecture might be classified as "mesoscopic", in which the KWIC system now may become only one component of the system Other components might include processes for check-in, check-out, fines, new acquisition, disposal, etc. This type of architecture may not present either every microscopic-architectural component or every interface description. Here, a microscopic architecture may be seen as a black-box component with of course most/all of the interfaces, both input and output, visible from outside. The components of a microscopic architecture would be invisible, as wellas their internal interactions.

A "macroscopic-architecture" would refer to an architecture for a much bigger system which can be distributed geographically with no limit on the possibly multimodal outside communications. For example, a library computer system - a collection of a library system, operating systems and communication network systems - could be classified as "macroscopic". Consequently, the term "macroscopic" would also apply to a system any bigger than the library computer system (e.g., a library computer system cooperating with a publisher's computer system, a book store computer system, a digital library computer system, an electronic commerce application, etc.). For this type of architecture, it seems hard to present microscopic components and interactsions. The emphasis here would be on treating mesoscopic/macroscopic systems as units of components and analyzing their interactions. As with a mesoscopic architecture, a mesoscopic architecture may be seen as a black-box component with of course most/all of the interfaces, both input and output, visible from outside.

In terms of the level of abstraction, a "microscopic-architecture" would be finer-grained than "mesoscopic-architecture", which in turn would be finer-grained than "macroscopic-architecture". In terms of the level of abstraction, a "micro-architecture" would be finer-grained than "mesoscopic-architecture", which in turn would be finer-grained than "macroscopic-architecture". In other words, a macroscopic architecture represents the top level(s) of abstraction; each component in a macroscopic architecture is represented by a mesoscopic architecture; and each component in a mesoscopic architecture is represented by a microscopic architecture.

This categorization seems to help us understand, for example, why there is little interface description in CORBA and in the 7-layer protocol stack, if their descriptions are adequate, what should be done if not.




Goal-Oriented Approach to Compositional Software Architecting

Styles
Connectors
Constraints
Rationale

My home page Requirements->architecture Top