Case-Based Reasoning for Reuse of Software Designs Paulo Gomes, Francisco C. Pereira, Paulo Paiva, Nuno Seco, Paulo Carreiro, José L. Ferreira, and Carlos Bento CISUC – Centro de Informática e Sistemas da Universidade de Coimbra. Departamento de Engenharia Informática, Polo II, Universidade de Coimbra. 3030 Coimbra Abstract. Reusing the knowledge gathered in the software design development phase is an important issue for any software company. It enables software developers to work faster and with fewer mistakes, making the development time decrease due to the efficiency of the development team. In order to accomplish design knowledge reuse we have developed an intelligent CASE tool that supports software design. Our system is based on Case-Based Reasoning, providing a framework for storage and reuse of design knowledge. This paper presents our approach which is based on a knowledge base along with the reasoning mechanisms capable of reusing the stored knowledge. 1 Motivation Nowadays, one of the most important assets for a company is the know-how acquired by the development team. Each engineer or technician acquires its own specific knowledge, which is then reused in other projects and tasks. Experienced workers are very important to companies, in the sense that someone with experience has higher productivity. When an experienced engineer or other qualified employee leaves a company, it takes with her/him a corpus of knowledge, which from the company point of view is a knowledge loss. In a high competitive market environment, where companies strive to be alive, this problem is crucial. Another relevant aspect is the importance of sharing know-how among all the company employees increasing productivity and minimizing the losses when abandon. Inexperienced engineers would profit a lot from knowledge of their older peers, project development would need less resources and product quality would improve if a corporate memory and suitable retrieval mechanisms are available. Software development [1] is a task involving a lot of expertise and know-how. The best software developers have years of experience and tackle new software projects based on the know-how gathered along the years. As in other areas of business, software development companies can take competitive advantage from sharing the knowledge acquired during project development. One possible solution to knowledge sharing is through the creation of a central repository where this knowledge can be stored and indexed, ready to be reused in new projects. This has been performed in the past with software code, giving rise to code repositories and code reuse [2-6], where programmers can search for functions and objects to be reused. But there are other types of software development knowledge that can be gathered and reused. In our research work we are interested in the creation of a software design knowledge repository, and with the reuse mechanisms associated with such a knowledge base. There is a need for a methodology for design knowledge storage and usage. Decisions made in the software design phase are going to limit the next phases, we consider design reuse a research area of strategic importance.