Support for Development and Maintenance of Generic Libraries

Abstract: Software libraries have emerged as one of the most common ways of providing reusable, organized collections of software. Practically every software project nowadays uses a number of software libraries for the most basic tasks as well as for domain-specific programming tasks. As the number, complexity, and importance of libraries increases, the need for support in development and maintenance becomes apparent. Yet, only little assistance exists for the developers and maintainers of libraries.

In this thesis we are concerned with the large class of libraries known as generic libraries, that is, libraries in the philosophy of the Standard Template Library (STL). Specifically, we tackle two issues, one related to the development and one related to the use of generic libraries.

The first issue, particularly important for a library developer, is determining the impact of a change. Since STL, generic libraries in C++ rely on concepts to precisely specify the requirements of generic algorithms (function templates) on their parameters (template arguments). Modifying the definition of a concept even slightly, can have a potentially large impact on the (interfaces of the) entire library. In particular the non-local effects of a change, however, make its impact difficult to determine by hand. In this thesis we propose a conceptual change impact analysis (CCIA), which determines the impact of changes of the conceptual specification of a generic library. In a case study, we apply CCIA to a new proposal for STL iterator concepts, which is under review by the C++ standardization committee, and show a number of unexpected incompatibilities.

The second issue, component composition, is important for the user of a library. A generic library typically provides multiple implementations that fulfill the requirements of the same concept, but differ with respect to properties that a concept does not completely determine, for example, the performance of an implementation component. Therefore, there exists often a quite large number of ways to (type-) correctly combine a set of libraries components. At the same time, it is non-trivial to see how to combine them "best." We present a component composition tool, which, based on accumulated empirical data, automatically selects and composes the combination of library components that performs best for a specific task in a specific environment. Performance prediction uses an off-the-shelf, external machine learning algorithm, which is trained on the empirical data, combined with a declarative description of performance factors. Using trait classes and metaprogramming techniques, the prediction is then mapped to a correctly configured, final component.

  This dissertation MIGHT be available in PDF-format. Check this page to see if it is available for download.