Techniques and strategies for testing component-based software and product lines
During the last decade, component-based software development and software product lines have emerged as highly promising approaches to improve the productivity of the software development process and so to reduce both cost and time of developing and maintaining software systems. The potential benefits of these approaches are primarily based on the assumption that a significant portion of a new software product is built through the reuse of existing artifacts or components. Although the move towards component-based software development and product lines offers many promises for improved productivity, it also highlights the need for more effective methods and techniques for ensuring the quality of software components that are intended for reuse. In fact, reusable components must be of good quality since poor quality parts not only lead to an end product with low quality but also propagate this low quality into all the products that use them. Therefore, a high level of component quality is required and thus makes testing a crucial part of every reuse effort. However, only very few papers to date address the problems and challenges that arise in testing software components intended for the purpose of reuse as well as product lines and applications engineered under the heavy reuse of existing software artifacts. This chapter provides - based on our experience from technology transfer projects with our industrial customers and from our work on PuLSE and KobrA - an overview of the difficulties and challenges that come up when testing in a reuse context. In particular, it investigates the implications of component-based software, generic components, and software product lines from the perspective of testing. The chapter identifies how the process of testing in a reuse context needs to be different from traditional software testing. Furthermore, it presents a number of potential techniques and strategies for efficiently and thoroughly testing component-based systems and product lines.