Abstract:
Architecture based refinement is an important
technique for ensuring efficiency, effectiveness and
correctness in the practical design of complex computer
based systems. With a few exceptions, current methods of
architectural refinement focus on functional behaviour
and fail to address non-functional requirements
throughout the refinement process. A best practices
approach to refinement would address both functional
and non-functional requirements such that the refinement
of an abstract into a concrete (implementation)
architecture ensures that both sets of requirements are
met.
We propose a method that focuses on the nonfunctional
requirements while still addressing the
functional requirements throughout refinement. The
method has a formal underpinning in abstract data types
(based on term rewriting) which are used to represent the
architectures throughout the refinement process and to
place pre and post conditions on the refinements. In
addition to this, the method uses non-functional
requirement calculators to check the non-functional
qualities of the architecture as refinement proceeds.
Reflection on the practice of the method suggests that it
may be possible to extend the architectural style idea to
provide reusable refinement schema for the design of
certain non-functional qualities into architectural
patterns. The example considers reliability and
performance in the refinement of a client server
architectural pattern.
The method does not aim to replace or fully automate
the work of the designer. It aims to augment the design
process and aid the designer in performing their tasks. It
seeks to provide certain guidance for the designer that
will help them make the right design decisions, and
correct certain classes of errors.