Many software designers know through experience several successful
ways to structure their software to solve given problems. This
high-level structural information, called the software's architecture,
is becoming its own level of abstract design, with its own vocabulary,
design rules and guidance. When software developers get together to
discuss the creation or modification of a software system, often
they'll huddle around a board and draw box-and-line diagrams. They use
broad-brush terms like "object-orinted", "client-server", and
"event-driven" to describe the contents of the diagram, and their
discussion focuses on high-level properties like latency, rendundancy,
or resource allocation.
If software engineering hopes to become like more mature engineering disciplines, an effort is needed to capture, organize, and disseminate design knowledge. With this, ordinary practioners can solve well understood problems with tried-and-true solutions. Without this, every problem requires (re)inventing a solution. Because the retained experiences of many software developers is at the architectural level of abstraction, software architecture is a promising area for recording design knowledge. The goal of the Vitruvius project is to elucidate the architectural level of abstraction so that the collective experience of successful architects can be captured, organized, and made available to ordinary practioners.
Current practice in software architecture is marked by informality. The box-and-line diagram practictioners draw are often ambiguous or vague; the terms they use are neither formally defined nor universally agreed upon. To be able to capture design knowledge, the first step is to create architectural notations that are crisp enough to promote precision, rich enough to capture actual designs, simple enough to be readily understood, and structured enough to be amenable to tools. Such a notation has come to be called an architectural description language (ADL). The Vitruvius project has been working on an ADL called UniCon. With better description abilities in hand, the next steps are: to understand and categorize the parts out of which people build systems and the styles in which the parts are combined; to capture when and why designers make their decisions, through a notion called credentials; and to classify and improve the compositional difficulties that arise at the architectural level of abstraction, as when building systems from heterogeneous collections of parts.