1.1. Motivation
The concern and the efforts to improve the practices of software development, looking for productivity, quality growth and lower costs, bring to evidence new perspectives for software development.
The difficulty and delay in implementing a complex system can be reduced if the previously developed and tested components can be used. However, a big initial effort to accomplish this goal is necessary for a software development company to create a repository of reusable software components.
Nowadays, the object-oriented programming paradigm is widely used and, as a consequence, huge effort has been made to reuse software. A new technique has been developed by Dandashi (Dandashi, 1998) to infer the re-usability of a software component by means of measurements taken directly from the implementation.
The object-orientation paradigm has changed the elements that are used to infer the quality of the software. Traditional metrics of software products such as size, complexity, performance and quality had to be changed to include new concepts such as encapsulation, inheritance, and polymorphism, which are innate to object orientation. This way, new metrics have been defined (Chidamber & Kemerer, 1994; Hitz & Montazeri, 1996; Li & Henry, 1993) to measure the object-orientation products.
Bansiya (Bansiya & Davis, 2002) has developed a hierarchical model called Quality Model for Object-Oriented Design (QMOOD), which aims at mapping metric modeling into quality attributes. These quality attributes are: Re-usability, Flexibility, Understandability, Functionality, Extendibility and Effectiveness.
The idea of improving the modeling of object-oriented software based on metrics of quality must lead to an automated process, creating higher-quality models based on characteristics of the problem. This automated process can be achieved by the use of advanced computing techniques such as the ones from the field of Computational Intelligence.
The Computational Intelligence focuses, through the techniques inspired in Nature, on the development of intelligent systems that are able to imitate aspects of human behaviors, as learning, perception, reasoning, evolution and adaptation. The Genetic Algorithms are intelligent models inspired in biological evolution that, through adaptable methods, are able to find potential solutions by not completely exhausting all possible solutions for the problem (Bäck, Fogel, & Michalewicz, 1997; Davis, 1996; Goldberg, 1989; Michalewicz, 1996).
The Computational Intelligence Techniques, especially Evolutionary Algorithms, have been applied in problems of object-oriented code generation. In his doctoral dissertation, Bruce (Bruce, 1995) used genetic programming to automate the process considering more specific problems of code generation and its functionality.
Due to the demand growth for software products, there is a clear need for faster development and higher quality in each phase of the process to make the reuse possible. That is why models that help to automate and control the quality of each phase of the development are becoming more popular, thus this research investigates one of the possible paths for this development.