The term software engineering originated with the intent to apply engineering principles to the development of software. In the four decades after its birth, a multitude of efforts have been made to counter what has been known as the software crisis. Software possesses essential difficulties such as complexity, conformity, changeability, and invisibility. To this date, creating good software all the while addressing all of its essential difficulties in a disciplined manner requires substantial effort. In general, attempts to thwart failures in software development are guided by a set of fundamental principles. The principle of separation of concerns is one such principle. The basic idea behind this principle is that any software created to solve a problem needs to address specific issues, called concerns, which should be separated and treated in isolation. Such separated concerns are easy to customize, maintain, reuse, and comprehend. This principle led to the development of concepts such as program families and in turn to the concept of software product lines (SPLs). Instead of creating a single software system, the stress is given on planning for and enabling an SPL of a software system from which individual software products can be obtained that are suited to specific functionality. Feature-oriented software development (FOSD) is software development paradigm used to create SPLs and focuses on features as the mechanism of separation of concerns. Features represent a specific functionality targeted at satisfying a particular requirement. The process of creating SPLs using FOSD is guided by two principal activities aimed at modeling the features of a software system and implementing the features thus modeled. In spite of being a relatively young discipline, FOSD is marked by a bewildering array of proposals for modeling and implementing features. The conceptual simplicity of features has led to adopting ideas from every conceivable programming paradigm, language, and tool that can aid in modeling and implementing features. There is a need to reconcile this enormous effort and this would require deciphering the precise roles played by feature modeling and feature implementation in FOSD. This dissertation aspires to contribute in this direction. While a multitude of feature modeling and feature implementation techniques provide paradigm-level, language-level, and tool-level means to deal with features, they do so in strikingly different ways. In this dissertation, we go back to the basics and investigate the nature of features in terms of their representation and composition. We review a variety of ways in which features and related entities are represented and composed to obtain software products. We strive to provide answers to such questions as what kind of representation of features is appropriate from both their modeling and implementation perspective? Is it possible to reconcile representation of features to so that they can be addressed uniformly during modeling and implementation? How to implement a technique so that features from modeling and implementation perspective are represented and composed in a coherent manner? We attempt to answer these questions in the form of first-class features aimed at uniform representation and coherent composition of features from both modeling and implementation perspectives. We implement first-class features in two diverse programming languages. A set of case studies demonstrate the practical applicability of first-class features and also provide further insights into the nature of features in general and first-class features in particular. With the implementations of first-class features and case-studies in them, we show that first-class features aid in a clean separation of feature concern, preserve the conceptual integrity of features due to uniform representation, provide clear traceability links between feature models and feature implementation and support easy accommodation of other extensions of the host language. Finally, after studying the nature of features closely, we suggest further avenues of development in first-class features and note what we think to be the core issues in FOSD that would attract major research in future.
Software engineering, Feature-oriented programming, Software product line, Language extensibility, Domain specific language, Sep