Sommerville afirma que um processo de software é um conjunto de atividades e resultados associados que produzem um produto de software. Portanto, um processo de software se dá pela estruturação de um conjunto de atividades que resultam num produto software. Um processo deve contribuir na redução de custos, aumento de qualidade e de produção. Um processo que não suporta esses objetivos não é considerado um processo adequado
Um processo de software pode conter diversas atividades. As principais atividades que normalmente todo processo possui são: especificação, projeto, implementação, validação, manutenção e evolução. As atividades constituem um conjunto mínimo para se obter um produto de software.
Quando temos um processo definido temos a garantia de uma estabilidade, controle e organização. Na próxima seção veremos mais sobre os modelos de processos prescritivos.
Modelos Prescritivos
Mesmo com a ascensão dos métodos ágeis os modelos prescritivos ainda são muito utilizados na indústria de software.
Os modelos prescritivos de processo surgiram para trazer certa estrutura inicial aos processos. Como o próprio nome sugere, esses modelos prescrevem um conjunto de elementos e a maneira como esses elementos se inter-relacionam. Apesar das características dos modelos prescritivos, sempre devemos adaptá-los aos problemas e projetos específicos que estamos tratando.
Temos um conjunto de quatro modelos prescritivos, são eles: Modelo Cascata, Modelo Incremental, Modelo Evolucionário e Modelos Concorrentes.
No restante deste artigo veremos dois modelos prescritivos, o modelo incremental e o modelo evolucionário. Este último ainda é subdivido em outros dois modelos.
Modelo Incremental
Alguns projetos de software definem requisitos iniciais de software razoavelmente bem definidos. Pode ser necessário o rápido fornecimento de um determinado conjunto funcional aos usuários, para que após esse fornecimento, possamos melhorar e expandir suas funcionalidades em versões de software posteriores. Nesses casos, podemos optar por um modelo de processo que desenvolve software de uma forma incremental.
O modelo de processo incremental combina elementos dos fluxos de processos tanto lineares quanto paralelos. A Figura 1 demonstra o modelo incremental:
Figura 1. Ilustração do Modelo Incremental.
Podemos notar pela figura acima que o modelo de processo incremental aplica sequências lineares (como no modelo cascata) de forma escalonada, à medida que o tempo for avançando. Cada uma das sequencias lineares gera um incremento do software. Esses incrementos são entregáveis e prontos para o cliente. Um exemplo de um processo incremental é um software de e-mail que inicialmente contém funções apenas para enviar e-mails à destinatários e ler e-mails recebidos. Em um segundo incremento o software poderia adicionar funções de revisão ortográfica e gerenciamento de e-mails recebidos. No terceiro incremento o software poderia adicionar um controle de spam. E assim sucessivamente.
No primeiro incremento de um produto que utiliza o modelo incremental temos apenas o essencial do produto, ou seja, os requisitos básicos que devem ser atendidos para o software entrar em operação. Portanto, no primeiro incremento muitos recursos complementares ainda não são entregues para os clientes. Após o término do primeiro incremento o cliente utiliza e avalia esse incremento fornecendo posteriormente um resultado ou feedback. Com base nesse resultado fornecido pelo cliente o próximo incremento é planejado considerando a modificação do primeiro incremento, caso seja necessário, de acordo com o feedback do cliente. Após a liberação de cada incremento é realizado esse mesmo processo até que o produto esteja completo.
O modelo de processo incremental entrega um produto operacional a cada incremento, ou seja, um produto sem erros e pronto para o usuário utilizar. Mesmo que os primeiros incrementos sejam partes do produto, essas partes são operacionais e funcionam sem as outras. Portanto, os incrementos possuem totais condições de atender ao usuário.
De forma geral, os primeiros incrementos podem ser implementados com um número reduzidos de pessoas. Nos próximos incrementos um pessoal adicional poderá ser acrescido de forma a implementar o incremento seguinte. Também podemos administrar alguns riscos através de um planejamento baseado nos incrementos. Por exemplo, se uma determinada versão de um software utilitário fornecido por terceiros que será integrado ao nosso projeto estiver disponível apenas numa data mais posterior, poderíamos deixar para desenvolver um determinado complemento do software que use essa versão mais atual numa data posterior quando esse utilitário já estiver disponível para uso.
Modelo Evolucionário
O software evolui ao longo do tempo e conforme o desenvolvimento deste software avança também temos mudanças nas necessidades de negócio e de produtos que mudam frequentemente. Isso torna inadequado seguirmos um planejamento em linha reta de um produto. Os modelos de processo evolucionário tornaram-se realidade para que possamos desenvolver um produto que evolua ao longo do tempo.
Modelos evolucionários são caracterizados por serem iterativos e apresentarem características que possibilitem desenvolvermos versões cada vez mais completas do software. Os processos evolucionários se caracterizam por dois modelos comuns: Prototipação e Espiral.
- Prototipação: A prototipação é utilizada quando
o desenvolver não tem certeza quanto à eficiência de um algoritmo, ou quanto à
adaptabilidade de um sistema operacional ou ainda quanto à forma em que deva
ocorrer a interação entre o cliente e o sistema. Quando temos essa situação a
prototipação é uma excelente alternativa. Vale ressaltar que a prototipação
pode ser utilizada em qualquer processo de software, visto que a prototipação
auxilia os interessados a compreender melhor o que está para ser construído.
A prototipação se dá basicamente com a comunicação que ocorre através de uma reunião com todos os envolvidos afim de definir objetivos gerais do software e identificar quais requisitos já estão bem conhecidos e esquematizar as áreas que realmente necessitam de uma definição mais ampla. Uma iteração de prototipação deve ser planejada rapidamente e dessa forma ocorre a modelagem na forma de um projeto rápido. O projeto rápido foca na representação dos aspectos do software que serão visíveis aos usuários como layout da interface e os formatos de exibição. Esse projeto rápido leva à construção de um protótipo que será avaliado pelo cliente. O cliente por sua vez retornará um feedback á equipe de software que irá aprimorar os requisitos. A iteração vai ocorrendo conforme vamos ajustando o protótipo às necessidades dos usuários. A Figura 2 demonstra essas etapas
Figura 2. Etapas da Prototipação de forma iterativa.
De forma geral o protótipo auxilia na identificação dos requisitos do software. Os protótipos podem ser descartados quando usamo-los apenas para entender um determinado requisito ou pode ser utilizado como um produto evolucionário que servirá para o cliente.
- Modelo espiral: O famoso modelo espiral foi proposto por Boehm. Esse é um modelo de processo de software evolucionário que também é iterativo como a prototipação, porém com aspectos sistemáticos e controlados do modelo cascata. O modelo espiral fornece um grande potencial para que possamos ter rápido desenvolvimento de versão cada vez mais completas.
Um modelo espiral possui diversas atividades definidas pela engenharia de software, onde cada uma dessas atividades representa um segmento do caminho espiral. Para termos uma ideia melhor, a Figura 3 demonstra o modelo espiral.
Figura 3. Ilustrando o Modelo espiral.
Sempre iniciamos pelo centro da espiral e prosseguimos no sentido horário. Os riscos são considerados à medida que cada evolução é realizada. A primeira atividade se dá com o desenvolvimento de uma especificação de produto, as próximas passagens podem ser usadas para desenvolver um protótipo e, assim sucessivamente vamos evoluindo para versões cada vez mais sofisticadas do software. Cada passagem pela parte de planejamento, por exemplo, resulta em ajustes no planejamento do projeto. O custo e o cronograma são sempre ajustados de acordo com o feedback obtido do cliente após uma entrega. Também teremos um ajuste no número de iterações planejadas para completar o software.
Podemos notar que diferente de outros modelos que terminam quando o software é entregue, o modelo espiral pode ser adaptado a cada entrega. O projeto finaliza quando o cliente fica satisfeito, quando o software é retirado de operação ou uma data encerra definitivamente o projeto.
O modelo espiral é largamente utilizado e é considerada uma abordagem realista para desenvolver sistemas em larga escala.
Neste artigo vimos o que são os modelos prescritivos e quais são os modelos que fazem parte deles. Também vimos mais especificamente dois modelos bastante utilizados que é o modelo incremental e o modelo evolucionário. Também vimos outros dois modelos que os modelos evolucionários se caracterizam, são eles a prototipação e o modelo espiral. Dois modelos muitos utilizados e que servem como base para outros modelos atuais.
Bibliografia
[1] Pressman, R. Engenharia de Sof//www.devmedia.com.br/cursos/tware: Uma abordagem Profissional. 7º edição. Editora Bookman.
[2] Ken Schwaber e Jeff Sutherland. Scrum Guide. Disponível em http://www.scrum.org
[3] Mike Cohns: Succeding with Agile. Disponível em http://www.mountaingoatsoftware.com/blog/