O Processo Unificado (PU) surgiu como um processo popular para o desenvolvimento de software visando à construção de sistemas orientados a objetos (o RUP – Rational Unified Process é um refinamento do PU). É um processo iterativo e adaptativo de desenvolvimento e vem ganhando cada vez mais adeptos devido a maneira organizada e consistente que permite conduzir um projeto. Este artigo apresenta uma breve introdução das práticas e abordagens adotadas pelo PU (Basicamente um resumo do capitulo referente ao PU do livro Utilizando UML e Padrões de Craig Larman).
Principal Idéia: Desenvolvimento Iterativo e Incremental
O PU utiliza um paradigma evolucionário paro o desenvolvimento de softwares. O ciclo de vida iterativo é baseado em refinamentos e incrementos sucessivos a fim de convergir para um sistema adequado. Em cada iteração incrementa-se um pouco mais o produto, baseando-se na experiência obtida nas iterações anteriores e no feedback do usuário. Cada iteração pode ser considerada um miniprojeto de duração fixa, sendo que cada um destes inclui suas próprias atividades de análise de requisitos, projeto, implementação e testes.
O resultado de cada iteração é um sistema executável, porém incompleto. Ele não está pronto para ser colocado em produção e pode continuar nesta situação ainda por muitas iterações. Vale ressaltar também que cada iteração produz um sistema com qualidade de produto final, e não um protótipo.
Realimentação e Adaptação: A chave para o sucesso!
Ao invés de combater a inevitável mudança que ocorre no desenvolvimento de software (principalmente nas fases iniciais), o PU prega uma atitude de aceitar a mudança e a adaptação como fatores inevitáveis e, de fato, essenciais. Não se deve tentar especificar completa e corretamente o sistema em uma tacada só, com a idéia de criar um conjunto congelado de requisitos.
Em cada iteração é escolhido um pequeno subconjunto de requisitos, os quais são rapidamente projetados, implementados e testados pelos usuários. Isso leva a uma realimentação rápida - baseada em dados concretos de usuários, desenvolvedores e testes – que possibilita modificar ou adaptar a compreensão dos requisitos do projeto. Os usuários finais podem ver um sistema parcial, utilizá-lo e assim terão mais subsídios para criticar ou aprovar. Esse ciclo de avaliações e detecção de falhas não traduz um erro, mas sim, representam um modo hábil de progredir e descobrir o que é de real valor para os interessados no projeto. Além de melhorar a compreensão dos requisitos, a implementação precoce possibilita detectar se o projeto está no caminho certo ou, por exemplo, se alguma mudança na arquitetura central deve ser feita.
Consequentemente o trabalho progride por meio de uma série de ciclos estruturados em construção-realimentação- adaptação. É melhor resolver e por à prova as decisões arriscadas e fundamentais de projeto logo no início e o desenvolvimento iterativo fornece o mecanismo para isso.
Resumindo, os principais benefícios do PU são:
- mitigação precoce, ao invés de tardia, de altos riscos;
- progresso visível desde o início;
- realimentação, envolvimento do usuário e adaptação imediatos, levando a um sistema refinado que atenda, de forma mais adequada, às reais necessidades dos interessados;
- a complexidade é administrada; a equipe não é sobrecarregada pela “paralisia da análise” ou por passos muito longos e complexos;
- o aprendizado obtido em uma iteração pode ser usado para melhorar o próprio processo de desenvolvimento.
Fases do PU
É altamente recomendado pelo PU que as iterações tenham tempo fixo pré-determinado e que se cumpra o prazo de cada iteração. Iterações pequenas, entre duas a seis semanas, é o ideal pois são mais gerenciáveis e permitem rápida realimentação e adaptações. Iterações longas subvertem a motivação central para o desenvolvimento iterativo e aumentam o risco do projeto.
O Processo Unificado organiza suas iterações em quatro fases principais:
- Concepção: o objetivo desta fase é levantar, de forma genérica e pouco precisa, o escopo do projeto. Não deve existir aqui a pretensão de especificar de forma detalhada requisitos, a idéia é ter uma visão inicial do problema, estimar de forma vaga esforço e prazos e determinar se o projeto é viável e merece uma análise mais profunda.
- Elaboração: na fase de elaboração todos (ou a grande maioria dos requisitos) são levantados em detalhes. Numa primeira iteração um ou dois requisitos, os de maior risco e valor arquitetural, são especificados em detalhes. Estes são implementados e servem como base de avaliação junto ao usuário e desenvolvedores para o planejamento da próxima iteração. Em cada nova iteração na fase de elaboração pode haver um seminário de requisitos, onde requisitos antigos são melhor esclarecidos e novos são detalhados. Ao fim da fase, 90% dos requisitos foram levantados em detalhes, o núcleo do sistema foi implementado com alta qualidade, os principais riscos foram tratados e pode-se então fazer estimativas mais realistas.
- Construção: implementação iterativa dos elementos restantes de menor risco e mais fáceis e preparação para a implantação.
- Transição: testes finais e implantação.
Conclusão
O Processo Unificado foi criado para ser um processo ágil de desenvolvimento e prega uma abordagem realística para a condução de um projeto. Ao contrário do modelo em cascata, onde cada etapa do ciclo de vida é realizada integralmente e de uma só vez (e que é mais apropriado para a construção de prédios do que para softwares), no PU as atividades são repetidas quantas vezes forem preciso, em ciclos organizados. Não há um plano detalhado para todo um projeto. Há um plano de alto nível (chamado Plano de Fases) que estima a data de término do projeto e outros marcos de referência principais, mas ele não detalha os passos de granularidade fina para se atingir tais marcos. Um plano detalhado (chamado Plano de Iterações) somente planeja a iteração a ser feita em seguida. O planejamento detalhado é feito de forma adaptativa, de iteração para iteração.