Selecting Software Components with Multiple Interfaces Luis Iribarne University of Almer´ ıa Escuela Polit´ ecnica. 04120 Almer´ ıa, Spain liribarne@ual.es Jos´ e M. Troya and Antonio Vallecillo University of M´ alaga ETSI Inform´ atica. 29071 M´ alaga, Spain {troya,av}@lcc.uma.es Abstract Component-based software development is gaining recognition as the key technology for the construction of high-quality, evolvable, large software systems in timely and affordable manners. Component search and service matching have become two of the key issues involved in this process. However, current proposals addressing these is- sues are based on the simplistic assumptions that compo- nents present only one interface with the services they of- fer. This work presents an extension of those approaches in which components may offer and require several interfaces, extending the traditional component “substitutability” op- erator. In addition, an algorithm for selecting COTS com- ponents with multiple interfaces from a repository in order to implement a given software architecture is presented. 1. Introduction Component-Based Software Development (CBSD) is generating tremendous interest due to the need of plug-and- play reusable software for developing applications, which has led to the concept of ‘commercial off-the-shelf ’ (COTS) components. Although currently more a goal to pursue a than a reality, this approach moves organizations from ap- plication development to application assembly. In CBSD, constructing an application involves the use of prefabricated pieces, perhaps developed at different times, by different people, and possibly with different uses in mind. The ulti- mate goal is to be able to reduce development times, costs, and efforts, while improving the fle xibility, reliability, and reusability of the final application due to the (re)use of soft- ware components already tested and validated. In CBSD, the system designer has to take into account the specification of pre-developed COTS components avail- able in software repositories, that must be even considered when building the initial requirements of the system, in- corporating them into all phases of the development pro- cess [17, 21]. In this approach, an abstract software architecture of the system is defined first, that describes the specification of abstract components and their relationships. These abstract components are then matched against the list of concrete COTS components available in a repository. This process produces a list of the candidate components from the repos- itory that could form part of the application: both because they provide some of the services required by the appli- cation, and because they fulfil some of the user’s (non- functional) requirements such as price, security, etc. With this list, the system architecture is re-examined in order to accommodate as much candidates from the list a possible. Additionally, wrappers may be used for adapting the COTS components selected (for hiding extra services non required, or for adapting their interfaces for compatibility or interoperability), and some glue language can be also used for composing and coordinating component interactions. Traditionally, the search and matching processes of com- ponents have been defined on a one-to-one basis [9, 29, 30]. However, this is not the common case in most real appli- cations: COTS components are coarse-grained components that integrate several services and offer many interfaces. For instance, an Internet navigator or a Word processor, apart from their core services, they also offer others, such as web page composition, spell checking, and so on. This paper presents a proposal to deal with these issues. In particular, we study some of the problems that appear in this new setting—such as service gaps and overlaps extending the traditional compatibility and substitutability operators to deal with components that support multiple in- terfaces. In addition, we also take into account the services that components require from other components, not only the services they support, according to the currently widely- accepted component-oriented programming paradigm [24]. This paper is structured into fi ve sections. After this in- troduction, Section 2 presents an overview of the COTS based software applications. Next, Section 3 presents our proposal and an example that illustrates it. After that, Sec- tion 4 discusses some related work, and finally Section 5 describes some conclusions, and future research activities. Proceedings of the 28 th Euromicro Conference (EUROMICRO’02) 1089-6503/02 $17.00 © 2002 IEEE