In the 60s and 70s the software engineering offensive emerged from long-standing problems in software development, which are captured by the term software crisis. Though there has been significant progress since then, the current situation is far from satisfactory. According to the recent report of the Standish Group, still only 34% of all software projects succeed. Since the early days, two fundamental principles drive software engineering research to cope with the software crisis: separation of concerns and modularity. Building software according to these principles is supposed to improve its understandability, maintainability, reusability, and customizability. But it turned out that providing adequate concepts, methods, formalisms, and tools is difficult. This dissertation aspires to contribute to this field. Specifically, we target the two novel programming paradigms feature-oriented programming (FOP) and aspect-oriented programming (AOP) that have been discussed intensively in the literature. Both paradigms focus on a specific class of design and implementation problems, which are called crosscutting concerns. A crosscutting concern is a single design decision or issue whose implementation typically is scattered throughout the modules of a software system. Hence, crosscutting concerns contradict and violate the principles of separation of concerns and modularity. Though FOP and AOP provide method-level, language-level, and tool-supported means to deal with crosscutting concerns, they do so in different ways. In this dissertation we demonstrate that FOP and AOP are not competing approaches but that their combination can overcome their individual limitations. We underpin this insight by a classification of crosscutting concerns and an evaluation of FOP and AOP with respect to different classes of crosscutting concerns. The result is a set of programming guidelines in form of a catalog that contrasts the strengths and weaknesses of FOP and AOP. In order to profit from their individual strengths, we propose the symbiosis of FOP and AOP. To this end, we present aspectual feature modules (AFMs) that realize the symbiosis by the integration of concepts, design rationales, languages constructs, and tools for FOP and AOP. An evaluation and comparison with traditional FOP and AOP corroborates that AFMs largely profit from either's strengths. Furthermore, we emphasize that current AOP languages are not suited to be combined with the stepwise development style of FOP. Consequently, we introduce the notion of aspect refinement (AR) that unifies AOP and stepwise software development and that is underpinned by a set of accompanying language constructs and tools. A non-trivial case study demonstrates the practical applicability of AFMs and AR to a medium-sized software project. This study reveals a further fundamental issue: Given the programming guidelines, how are mechanisms related to AOP and FOP used in contemporary programs? The background is that a specific class of crosscutting concerns, called collaborations, is connected naturally with FOP. Due to the missing support in main stream programming languages today, AOP has frequently been used to implement collaborations. However, with the advent of languages that support collaborations and the classification and evaluation contributed by this dissertation, we ask: What fraction of aspect-oriented code implements collaborations? What fraction implements crosscutting concerns beyond collaborations? A quantitative analysis of 8 AspectJ programs of different size reveals that on average 98% of the code base is associated with collaborations and only 2% exploits the advanced capabilities of AOP. Furthermore, we observed that the impact of AOP decreases as the program size increases. Finally, the dissertation discusses why this (dis)proportion of code related to AOP and FOP is not surprising and whether and how the impact of AOP can be increased.
Feature-Oriented Programming, Aspect-Oriented Programming, Software Product Lines, Stepwise Development