  Computer systems are so complex, so they are usually designed and analyzed in
terms of layers of abstraction. Complexity is still a challenge facing logical
reasoning tools that are used to find software design flaws and implementation
bugs. Abstraction is also a common technique for scaling those tools to more
complex systems. However, the abstractions used in the design phase of systems
are in many cases different from those used for assurance. In this paper we
argue that different software quality assurance techniques operate on different
aspects of software systems. To facilitate assurance, and for a smooth
integration of assurance tools into the Software Development Lifecycle (SDLC),
we present a 4-dimensional meta-architecture that separates computational,
coordination, and stateful software artifacts early on in the design stage. We
enumerate some of the design and assurance challenges that can be addressed by
this meta-architecture, and demonstrate it on the high-level design of a simple
file system.
