No desenvolvimento de software, ao iniciar o projeto você pode ter uma visão clara sobre o sistema e o que você quer que ele seja, uma vez que os requisitos já foram levantados. Entretanto, em algum momento durante o projeto os seus requisitos podem mudar, devido principalmente à solicitações do cliente, e a sua imagem sobre ele pode não ser mais clara.
Especialmente em métodos ágeis, sempre são esperadas mudanças nos requisitos do sistema. Por tudo isso, deve-se ter um bom projeto para o sistema desde o início, e ainda o arquiteto e desenvolvedor precisam estar preparados para as mudanças. Para isso, o projeto do sistema deve ser preciso para que seja claro a todos que estejam trabalhando nele. Também é preciso ter um método eficaz para as mudanças de projeto, de forma que todos sejam atualizados com as informações. Desta forma, a concepção do software em métodos ágeis ocorre em todo ciclo de vida.
Antes das metodologias ágeis, ao projetar um software era necessário um documento extenso e detalhado sobre as possíveis necessidades para o desenvolvimento do software. Dessa forma, corre-se o risco dos desenvolvedores não lerem este documento completamente, e assim não compreenderem exatamente como o sistema será. De forma ágil, a concepção é feita de maneira simples no início, e espera-se que uma comunicação estreita e constante durante todo o processo de desenvolvimento sempre mantenha os desenvolvedores atualizados. Então, aqui estão algumas práticas de projeto do software utilizadas em métodos ágeis:
- Previsão da arquitetura – leve modelagem no início de um projeto para identificar e pensar de forma crítica nas questões de nível arquitetural.
- Modelagem por iteração – leve modelagem por alguns minutos no início de uma iteração/sprint para ajudar a identificar a estratégia da sua equipe para essa iteração.
- Modelo à prova – leve modelagem por alguns minutos de forma prática para pensar a respeito da sua solução prática.
- Teste anterior ao design (TFD) – Escrever um único teste, antes de escrever código de produção suficiente, para testá-lo.
- Refatoração – Faça pequenas alterações em uma parte da sua solução que melhore a qualidade sem alterar a semântica dessa parte.
- Integração contínua – Automaticamente compilar, testar e validar os componentes de sua solução sempre que houver uma dessas alterações nos componentes.
Percebam que estas práticas correspondem sequencialmente a práticas desde o alto nível arquitetural, até o baixo nível de programação.
Referências:
- Agile software development: principles, patterns, and practices. Upper Saddle River. (Martin, R. – 2003)
- Agile Design Practices: Lean Requirements Practices for Teams, Programs, and the Enterprise, Pearson Education, http://www.agilemodeling.com/essays/agileDesign.htm. (Leffingwell, D. – 2012)