3. Processos de Software

h2. 3.1 Definição

Um processo de desenvolvimento de software pode ser entendido como um conjunto definido de atividades, métodos, práticas e transformações a serem seguidos durante o desenvolvimento e manutenção de um software (MCT, apud Vasconcelos, 2005).

Processos de desenvolvimento de software tradicionalmente envolvem:

# Análise e definição dos requisitos, onde é estabelecido tudo o que o programa precisará fazer para atender às expectativas;
# Elaboração de um projeto de arquitetura, que determina detalhes sobre como o sistema funcionará para que atenda aos requisitos pedidos;
# Implementação do projeto em código-fonte, usando uma determinada linguagem de programação;
# Testes de unidade, de integração e de sistema;
# Liberação da versão pronta, funcional e testada.

Freqüentemente também tratam dos passos:

# Gerência de recursos e pessoas, para otimizar a produtividade;
# Gerência de cronograma, para comparar as atividades desejadas com as já concluídas e evitar que atrasos aconteçam;
# Gerência de configuração, que envolve as modificações nos itens de configuração;
# Gerência da qualidade, com definição de políticas e procedimentos para que se tenha um software de boa qualidade ao final do processo;
# Documentação.

h2. 3.2 Tipos de Processos por Ciclo de Vida

Há diversos processos de desenvolvimento de software. Estes podem ser agrupados com base no modelo de seus ciclos de vida ([[http://async.com.br/~kiko/dissert_usp.pdf | Reis, 2003]]).

# modelos seqüenciais - este tipo de processo é desenvolvido em longas etapas. Cada etapa fundamental tem seu tempo no cronograma, devendo, em situações ótimas, não se repetir;
# modelos evolucionários - são desenvolvidos em ciclos de desenvolvimento e aperfeiçoamento graduais, gerando várias versões do programa até que atinja a versão final desejada.

h2. 3.3 Processos Tradicionais

São considerados processos tradicionais, ou pesados, de desenvolvimento de software aqueles que tentam prever todos os requisitos do sistema para assim ser feito um planejamento prévio de como o sistema irá atuar. Este planejamento rigoroso é representado como documentos que guiarão todo o processo de desenvolvimento ([[http://www.simpros.com.br/Apresentacoes_PDF/Artigos/Art_12_Simpros2004.pdf | Rocha et alli, 2004]]).

Uma aplicação criada via processo tradicional vai passar por todas as fases, como citado anteriormente, seja um processo seqüencial ou evolucionário.

Processos tradicionais se caracterizam por focar a análise de sistemas, investindo esforço para a obtenção de artefatos de projeto tão completos e precisos quanto possível: relatórios, documentos e diagramas.

Grande parte dos processos tradicionais em uso atualmente tem como base os modelos de diagramas da [[http://www.uml.org/ | UML]], como é o caso do RUP (Kruchten, 2000).

h2. 3.4 Processos Ágeis

Processos ágeis surgiram como alternativa aos processos tradicionais. Tais projetos partem da premissa de que se deve permitir mudanças nos requisitos a qualquer tempo. Desta forma, o planejamento é feito durante todo o processo, ao mesmo tempo em que é feita a codificação: não há um passo dedicado exclusivamente ao planejamento (Rocha et alli, 2004).
Há diversos processos ágeis, como os da [[http://www.agilealliance.org/ | Agile Alliance]].

Segundo a [[http://www.wikipedia.org | Wikipedia]], os princípios do desenvolvimento ágil valorizam:

bq. “*indivíduos e interações* ao invés de processos e ferramentas; *software funcional* ao invés de documentação compreensível; *colaboração com clientes* ao invés de negociação de contratos; *responder a mudanças* ao invés de seguir um plano” (Wikipedia, 2006c)

[[http://www.extremeprogramming.org/ | Extremme Programming]] e [[http://www.controlchaos.com/ | Scrum]] são exemplos de processos ágeis.

-- Cárlisson Galdino