Much of the difficulties concerning software acquisition, development and use are related with its essential characteristics [9]. Software is embedded knowledge, structured in the form of instructions, databases and documentation. Software is changeable, differently from products, which are usually unchanged after manufacturing, being superseded by later models. Software is embedded in a matrix of applications, users, laws and machines, which all change continuously, and these changes forces changes in software systems. Software is invisible, and it cannot be represented geometrically. Geometrical abstractions have been extensively used in all engineering areas, in order to prototype new product development. Although some powerful software modeling techniques have been developed during last years, software remains inherently unvisualizable, and it does not permit the mind to use some of its most powerful conceptual tools.
One fundamental characteristic of software is the repeatability of its development process. Software development always includes four fundamental processes, which must be performed in all software projects [10]: