Embora tenhamos hoje os processo do desenvolvimento de software bastante desenvolvidos, ele ainda está longe de ter a maturidade que temos em outros segmentos da engenharia com a civil, mecânica entre algumas outras. Ainda assim podemos dizer que os processos de desenvolvimento de software está cada vez mais estruturado e robusto ao longo dos anos.
Existe uma série de etapas que são essências no ciclo de vida de um software, e outras que acabam por ser passiveis de descarte diante do tipo do projeto, o que ainda assim não tira a sua relevância e importância para outro tipo de projeto, um exemplo deste tipo seria a documentação. Algumas das etapas que compreende o processo de desenvolvimento de software são:
- Análise de requisitos de software – entendimento dos requisitos básicos, e por que não dos problemas que se queira solucionar com a implantação do sistema. Esta etapa geralmente é realizada com o cliente por meio de reuniões, questionários e observações do ambiente em questão.
- Especificação dos requisitos – uma vez que os requisitos já foram identificados, cabe a especificação dos requisitos descrever precisamente o software que será escrito, ou o mais próximo disso.
- Arquitetura de Software – este processo remete a uma representação abstrata do sistema, com o objetivo de tentar garantir que o sistema irá ao encontro dos requisitos assim como assegurar que futuros requisitos possam ser atendidos.
- Codificação – trata-se do processo de transformar as definições que até então foram detalhados no projeto em código do sistema.
- Teste – etapa da validação das funcionalidades do software, assim como a verificação sobre o que foi especificado esta em conformidade com o que está sendo apresentado.
- Manutenção de software – a fase da manutenção de software é frequentemente o período mais demorado no ciclo de vida de um software e compreende as mudanças realizadas neste período, seja pela realização de melhorias ou correções no software.
Para facilitar a realização de tais etapas, uma série de modelos foram criados ao longo dos anos com o intuito de representar a melhor abordagem possível sobre um determinado conceito e conhecimentos existentes no período em que tal modelo foi proposto.
Um exemplo disto seria o modelo de desenvolvimento de software Waterfall (Cascata), sendo este um dos primeiros modelos propostos, hoje em dia temos a absoluta certeza que este é uma abordagem impraticável no contexto atual, diante de seu processo inflexível que está totalmente em desacordo com as constantes mudanças que temos no projeto de um software. O que acaba por favorecer a adesão aos métodos ágeis de desenvolvimento de software, a qual está com um maior entrosamento com o contexto atual.
Alguns dos modelos que auxiliam o processo de desenvolvimento de software são:
- Modelo em cascata (Waterfall development)
- Prototipação (Prototyping)
- Desenvolvimento incremental (Incremental development)
- Desenvolvimento iterativo e incremental (Iterative and incremental development)
- Desenvolvimento Rápido de Aplicação (Rapid application development – RAD)
- Desenvolvimento ágil de software (Agile development)
- Programar e Arrumar (Code and fix)
- Metodologias leves (Lightweight methodologies)
- Modelo em espiral (Spiral development)
- Feature Driven Development (FDD)
- Scrum
- eXtreme Programming (XP)
- Crystal