• Nenhum resultado encontrado

3 Referências Conceituais

Estágio 4 Elaboração da estrutura

3.7.3 Processo de Software

Um processo de software, segundo Sommerville (2003), é um conjunto de atividades e resultados associados que levam a produção de um produto de software. As atividades básicas deste processo são: especificação, projeto e implementação, validação e evolução do software. Para a realização destas atividades, existem alguns modelos de processos de software. Os modelos descritos nesta seção são referidos na obra de Sommerville (2003):

O desenvolvimento em cascata considera como atividades fundamentais as atividades de especificação, desenvolvimento, validação e evolução, e as representa como fases separadas do processo. Já o desenvolvimento formal de sistemas se baseia na produção de uma especificação formal do sistema e na transformação dessa especificação para a construção de programas. A seu turno, o desenvolvimento orientado ao reuso tem como base a existência de um número significativo de componentes reutilizáveis.

O desenvolvimento evolucionário “intercala as atividades de especificação, desenvolvimento e validação” (op cit., p. 37). Um esboço do sistema é desenvolvido rapidamente de acordo com as necessidades do cliente e vai sendo testado, validado e refinado com o uso, como pode visto na figura 18.

No desenvolvimento evolucionário, a ação inicial trata de expor o resultado ao comentário do usuário e fazer seu aprimoramento por meio de muitas versões, até que um sistema adequado tenha sido desenvolvido. Este procedimento pode seguir duas vertentes: um desenvolvimento exploratório, que vai sendo construído com o usuário e culmina no produto final através de melhorias e acréscimos; e uma segunda vertente que utiliza versões descartáveis. As versões intermediárias servem apenas como uma forma de compreender o sistema e servir como fonte de detalhamento para os requisitos do sistema. Uma das principais técnicas para os sistemas evolucionários é a prototipação.

Descrição do Esboço Atividades concorrentes Versão inicial Versões intermediárias Versão Final Especificação Validação Desenvolvimento

Figura 18 – Desenvolvimento evolucionário Fonte: Sommerville (2003, p. 39).

O desenvolvimento incremental é uma abordagem intermediária, que combina as vantagens do desenvolvimento formal e evolucionário. Os usuários identificam, em um esboço, as funções a serem fornecidas pelo sistema. Em seguida é definida uma série de estágios de entrega, com cada estágio fornecendo um subconjunto das funcionalidades do sistema. Os usuários não precisam esperar até que todo o sistema seja entregue. Tão logo os primeiros incrementos estejam prontos na forma de um protótipo, o usuário experimenta e esta experiência fornece os requisitos para estágios posteriores do sistema. Com esta abordagem existe um risco menor de fracasso completo do sistema.

O desenvolvimento em espiral, em vez de representar o processo de software como uma seqüência de atividades com algum retorno de uma atividade para outra, como no caso do desenvolvimento em cascata, representa o processo como uma espiral. Cada ciclo na espiral representa uma fase do processo de software, e é dividido em quatro partes: identificação dos objetivos do produto a ser desenvolvido e as alternativas para implementação; avaliar as alternativas, identificar e resolver os riscos; desenvolvimento evolucionário do protótipo e sua validação; revisão e planejamento para seguir com a próxima fase a ser desenvolvida (BOEHM, 1997).

3.7.4 Prototipação

A prototipação consiste na construção experimental de um sistema de forma rápida e com baixos custos de forma que o usuário possa avaliá-lo. O protótipo é uma versão funcional do sistema ou de parte dele. Uma vez disponibilizado, o protótipo vai sendo refinado até chegar numa versão final que atenda completamente às necessidades do usuário (LAUDON; LAUDON, 2002). Ainda segundo aqueles autores, os passos da prototipação, apresentados na figura 19, são:

• Identificar os requerimentos básicos do usuário: o analista do projeto, normalmente um especialista em SI, trabalha com o usuário por um tempo para captar as necessidades básicas;

• Desenvolvimento um protótipo inicial: usando aplicações de geração automática de código, o especialista desenvolve rapidamente uma versão funcional;

• Utilização do protótipo: o usuário é encorajado a trabalhar com o protótipo para determinar quão bem ele atende suas necessidades e fazer sugestões de melhorias;

• Sugestão e melhoria do protótipo: o desenvolvedor anota todas as mudanças e refina o protótipo de acordo com elas.

Quando finalmente estiverem atendidas as especificações, o protótipo estará concluído e poderá ter dois destinos distintos: servirá como fonte fornecedora das especificações para o desenvolvimento da aplicação final ou no caso da prototipação evolucionária, abordada na próxima seção, o próprio protótipo servirá como versão final.

Identificar os requerimentos básicos do usuário Desenvolver um protótipo executável Usar o protótipo Revisar e melhorar o protótipo O usuário

está satisfeito? operacionalVersão

Não Sim

Figura 19 – O processo de prototipação Fonte: adaptado de Laudon e Laudon (2002, p. 323).

A vantagem da abordagem da prototipação fica evidenciada quando existe alguma incerteza sobre os requerimentos, ou sobre o projeto da solução, e é especialmente útil para projetar a interface final do usuário ou a parte final do sistema com a qual o usuário interage: tela, relatório ou página na web, como é o caso deste estudo.

A prototipação tem o mérito de engajar de forma efetiva o usuário na concepção e implementação de um sistema, aproximando-o em muito dos requisitos funcionais requeridos. Não obstante, há riscos em seu uso. Inicialmente, por sua característica de rapidez, facilmente envereda-se pela negligência de algumas etapas. Um segundo risco é o risco do protótipo funcionar razoavelmente bem e o usuário acreditar que não haja mais necessidade de esforços de reprogramação, ou do desenvolvimento da documentação e de manuais de uso para uma versão final do sistema. Há ainda uma situação mais grave: algumas versões construídas rapidamente podem não se adaptar a uma grande quantidade de dados ou de usuários em um ambiente de produção, inviabilizando o protótipo como uma versão final (SOMMERVILLE, 2003).