0740-7459/08/$25.00 © 2008 IEEE September/October 2008 IEEE SOFTWARE 45 focus software development tools Code Conjurer: Pulling Reusable Software out of Thin Air Oliver Hummel, Perot Systems Germany Werner Janjic and Colin Atkinson, University of Mannheim A tool that automatically finds and presents suitable reusable software components to developers can help speed the development process. F or many years, the IT industry has sought to accelerate the software develop- ment process by assembling new applications from existing software assets. However, true component-based reuse of the form Douglas McIlroy 1 envisaged in the 1960s is still the exception rather than the rule, and most of the systematic software reuse practiced today uses heavyweight approaches such as product-line engineer- ing or domain-specific frameworks. By component, we mean any cohesive and compact unit of software functionality with a well-defined interface—from simple programming language classes to more complex artifacts such as Web services and Enterprise JavaBeans. Historically, three main reasons explain why component-oriented reuse has failed to take off: Not enough good components were around to make it worthwhile. Indeed, during the golden years of software reuse research in the 1980s and 1990s, researchers considered themselves fortunate to have a repository with even a few hundred components. The retrieval technologies used to find suit- able components matching a user’s query were crude and often returned a high proportion of unsuitable components or missed many rel- evant ones. 2 The overhead involved in using the retrieval technology to find suitable components and evaluate their fitness for purpose was too high. As a result, the balance of effort and risk involved in software reuse always compared unfavorably to building components from scratch. Recent developments have improved the situ- ation. The rise of the open source movement and cheap, high-bandwidth Internet connectivity have given software developers access to vast swathes of free software, so the number of available com- ponents is no longer a significant problem. Also, in the last two years, high-performance code-search engines (such as Koders, Google Code Search, and Merobase) have emerged that provide better ways of retrieving assets from this code base, going be- yond simple keyword matching. The third prob- lem regarding retrieval overhead has changed little, however, and is now the main barrier to the routine reuse of software components and the emergence of software component marketplaces. This is where tools such as Code Conjurer, de- veloped at the University of Mannheim, aim to make a difference (see the “Repository-Driven Re- use Assistance Tools” sidebar for a description of similar tools). As its name implies, from a develop- er’s viewpoint, Code Conjurer effectively “conjures up” software components out of thin air and makes them available with almost no effort on the user’s part. It does this by tapping into the vast resource of components offered by a modern code-search engine to deliver high-relevance software reuse rec- ommendations with minimal, if any, disturbance to a developer’s normal practices. Moreover, it dra- matically reduces the risk and effort involved in