Software Architecture Overview

UCI's approach to software architecture asserts that architecture is not just a phase or an activity in the software development life cycle, but a discipline pervading all phases of development. We define architecture as the set of principal design decisions about a system; what is principal depends on the concerns of the stakeholders involved and will likely vary from architecture to architecture. We believe that integrating the discipline of architecture into the development process has the potential to increase the quality of software produced while reducing both the costs of development and the time to market.

To effectively utilize software architectures, our vision is that an architect is able to:

  • write them down - codify design decisions, provide machine-readable design artifacts,
  • visualize them - increase communication and understanding, provide different perspectives for inspection and interaction,
  • analyze them - (automatically) check for and repair defects, determine whether the designed system has the desired qualities,
  • evolve them - increase modeling detail, capture more information, more products, address maintenance issues, and
  • apply them - to real systems, addressing their principal needs, maintaining traceability between the architecture and the product.

However, this vision is not yet realized.

In order to realize this vision, our software architecture research is guided by the following key principals:


Traditional View: Software architecture research has often focused on supporting a particular concern, addressing the needs of a particular stakeholder, or enhancing a particular quality. These approaches have been monolithic: "if you have concern X, use approach X' to address it." Unfortunately, a single approach will never work for the many, diverse software architecture needs that exist.

Our Approach: A primary goal of UCI's research in software architecture is extensible and generalizable tools and notations, applicable in many different contexts, to support different stakeholder needs. If a particular stakeholder need is not already supported, chances are that it will be possible to extend our tools and notations so that it is.


Traditional View: Many architectural issues are addressed by many different tools that perform: simulation of an architecture, a particular analysis technique, or consistency checking between architecture and code. This makes using architectures cumbersome because you must learn, and constantly switch between, different tools.

Our Approach: One of the goals of UCI's architecture research is to leverage the power of a common architecture environment, where diverse tools are combined to address architecture-related issues at all phases of the software life cycle, with a common, coherent interface.

Architectural Styles

Traditional View: One might believe that adopting a software architecture approach requires starting from scratch, 'reinventing the wheel,' or be concerned about how to elicit certain qualities using an architecture.

Our Approach: Much of UCI's architecture research focuses on designing and extending architecture styles: reusable 'packages' of design decisions and constraints that are applied to an architecture to induce chosen desirable qualities. Styles can be used to guide an architect when modeling, constructing, and analyzing a system.

Real Systems

Traditional View: Software architecture has often been viewed as a "diagram on the back of a napkin," used for communication or understanding and then thrown away. With this point of view, the architecture may or may not represent the actual system.

Our Approach: Without maintaining traceability between the architecture and the product, an architecture becomes a nice picture. The architecture descriptions of our tools not only describe the architectures, but are used to instantiate the tools and evolve them during runtime. We use our tools to make our tools! We use architectures to make architectures!

Where to go from here...

For more information about our research in software architecture, look at our software architecture research.