Separation of Concerns in Aspect Oriented Software Engineering
Aimed at supporting development of complex systems, software architecture is shifting from functionality to structure. Patterns describe pre-defined design structures, which can serve as building blocks to compose the architecture of a software system. They capture existing, well-proven design experience. Not only the functional but also the non-functional aspects of software design are addressed. Software architecture, a topic of steadily growing importance within the field of software engineering, proposes a shift in emphasis from functionality to structure. Its goal is to support the development and maintenance of complex, large-scale software systems. These systems may exist in many variants and evolve over their lifespan.
To achieve this goal, software architecture goes beyond the scope of "classical" software design in which the structure of a software system is mainly defined by a proper functional decomposition of its primary subject matter. Software architecture, however, explicitly considers both the functional and the non-functional aspects of software systems. Examples for non-functional aspects are reusability, changeability, testability, efficiency, and reliability. In addition, not only the components of a software system are of importance for the quality of its structure, but also the manifold relationships that exist between them – for example, how the components interact with each other.
To address these aspects and to take advantage of the benefits of software architecture, it is necessary to base the construction of specific architectures for software systems on well-defined methods and techniques. Such methods and techniques must:
Need custom research papers? we can write custom research papers for you!
* Provide a systematic way for finding the appropriate structure for a software system being under development.
* Support the development of very specific structures with defined functional and non-functional properties. For instance, it must be possible to construct a software architecture that supports a flexible distribution of its components in a computer network.
* Guide the implementation of a given software architecture to avoid an architectural drift, which means the difference between the specified software architecture and its actual implementation.
Experienced software architects dispose of such methods and techniques. They do not necessarily have them in written form, but in their heads. The intention of a software architecture method described in a paper or book is to help a novice to act almost like an expert after a short apprenticeship without gaining years of experience of his own.
Therefore, a method should comprise as much of an expert's knowledge as possible. However, what is the ability of an expert in software architecture? He or she designs "good" software for a specific task in a reasonable amount of time; good is defined in terms of the desired non-functional properties of the system.
But what kind of knowledge makes someone an expert in software architecture? Certainly he must have some general principles, steps, and techniques. But these are not enough to support the design of architectures for specific tasks. For example, they do not tell how to create a very specific architecture – for instance, pipes and filters architecture or how to solve particular design issues under given constraints, for example, support for changeability. An expert remembers the problems he already solved and how he solved them. Confronted with a new problem, he often recalls a similar one and reuses the old solution. These problem/solution pairs tend to fall into families of similar problems and solutions with each family exhibiting a pattern in both the problems and the solutions.