Atualmente, ha cada vez mais sistemas controlados por software, fazendo com que a economia de praticamente todos os paises seja muito dependente da qualidade dos softwares por eles usados, justificando um investimento significativo nesse setor.Ha alguns anos atras, desenvolvia-se software de uma maneira completamente artesanal. A partir de uma simples definicao dos requisitos do software, partia-se imediatamente para a implementacao do mesmo. Hoje em dia, ainda ha muitas empresas que desenvolvem software dessa maneira, mas varias outras estao mudando suas formas de trabalho.A forma artesanal de trabalho, geralmente, nao traz grandes problemas para o desenvolvimento de software de pequeno porte, o qual nao exige um esforco muito grande de implementacao. Porem, para softwares de grande porte, serios problemas na implementacao podem comprometer todo o projeto.Com o desenvolvimento cada vez maior da tecnologia de hardware e a consequente disponibilidade de maquinas cada vez mais potentes e baratas, o uso de computadores tem-se tornado cada vez mais difundido em diversas areas. Isso tem feito com que aumente a demanda por software cada vez maior e mais complexo. No entanto, a demanda por software tem-se tornado maior que a capacidade do mercado para atende-la.Muitos projetos sao entregues com um grande atraso, custando muito mais que o inicialmente previsto, sendo nao confiaveis, dificeis de manter e/ou nao tendo um desempenho satisfatorio. Alem do mais, na tentativa de se consertar os erros, muitas vezes introduzem-se mais erros. Geralmente, a quantidade de problemas e diretamente proporcional ao aumento da complexidade do software produzido nos dias de hoje. Esses problemas no desenvolvimento de software sao conhecidos mundialmente como a crise de software. Ou seja, a crise de software corresponde a incapacidade da industria de software de atender prontamente a demanda do mercado de software, dentro dos custos e dos niveis de qualidade esperados. Desde os anos 1960, quando o termo crise de software foi pronunciado pela primeira vez, muitos problemas desta area foram identificados e muitos deles ainda persistem ate os dias de hoje, tais como [Gibbs1994]:Previsao pobre desenvolvedores nao preveem adequadamente quanto tempo e esforco serao necessarios para produzir um sistema de software que satisfaca as necessidades (requisitos) dos clientes/usuarios. Sistemas de software sao geralmente entregues muito tempo depois do que fora planejado;- Programas de baixa qualidade programas de software nao executam o que o cliente deseja, consequencia talvez da pressa para se entregar o produto. Os requisitos originais podem nao ter sido completamente especificados, ou podem apresentar contradicoes, e isto pode ser descoberto muito tarde durante o processo de desenvolvimento;- Alto custo para manutencao quando o sistema e construido sem uma arquitetura clara e visivel, a sua manutencao pode ser muito custosa;- Duplicacao de esforcos e dificil compartilhar solucoes ou reusar codigo, em funcao das caracteristicas de algumas linguagens adotadas, por falta de confianca no codigo feito por outra pessoa e ate mesmo pela ausencia/deficiencia de documentacao das rotinas e dos procedimentos ja construidos.O reconhecimento da existencia da crise de software tem provocado uma forte mudanca na forma de como as pessoas desenvolvem software de grande porte, visto que o processo de desenvolvimento atual e mais disciplinado