Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Passos/Atividades Processo
Implementação (ou codificação): A transformação de um projeto para um código deve ser a parte
mais evidente do trabalho da engenharia de software, mas não necessariamente a sua maior
porção.
Teste: Teste de partes do software, especialmente onde tenha sido codificado por dois ou mais
engenheiros trabalhando juntos, é um papel da engenharia de software.
Suporte e Treinamento de Software: Uma grande porcentagem dos projetos de software falham
pelo fato de o desenvolvedor não perceber que não importa quanto tempo a equipe de
planejamento e desenvolvimento irá gastar na criação do software se ninguém da organização irá
usá-lo. As pessoas ocasionalmente resistem à mudança e evitam aventurar-se em áreas pouco
familiares. Então, como parte da fase de desenvolvimento, é muito importante o treinamento para
os usuários de software mais entusiasmados, alternando o treinamento entre usuários neutros e
usuários favoráveis ao software. Usuários irão ter muitas questões e problemas de software os
quais conduzirão para a próxima fase.
O processo de desenvolvimento de software tem sido objetivo de vários padrões, que visam a certificação
de empresas como possuidoras de um processo de desenvolvimento, o que garantiria certo grau de
confiança aos seus contratantes.
Modelos de Processo
Há uma década, vem se tentando encontrar um processo ou metodologia previsível e repetível que
melhore a produtividade e qualidade. Alguns tentaram sintetizar e formalizar a tarefa aparentemente
incontrolável de escrever um software. Outros aplicaram técnicas de gerenciamento de projeto na escrita
de software. Sem o gerenciamento de projeto, projetos de software podem facilmente sofrer atraso ou
estourar o orçamento. Como um grande número de projetos de software não atendem suas expectativas
em termos de funcionalidades, custo, ou cronograma de entrega, ainda não existe um modelo de
processo perfeito para todas aplicações.
Processo em cascata
O mais antigo e bem conhecido processo é o Modelo em cascata, onde os desenvolvedores (a grosso
modo) seguem estes passos em ordem. Eles estabelecem os requisitos, os analisam, projetam uma
abordagem para solução, arquitetam um esboço do software, implementam o código, testam
(inicialmente os testes unitários e então os testes de sistema), implantam e mantêm. Depois que cada
passo é terminado, o processo segue para o próximo passo, tal como construtores que não revisam as
fundações de uma casa depois que as paredes foram erguidas. Se as iterações não são incluídas no
planejamento, o processo não tem meios para corrigir os erros nas etapas inicias (por exemplo, nos
requisitos), então o processo inteiro da engenharia de software deve ser executado até o fim, resultando
em funcionalidades de software desnecessárias ou sem uso.Para isso tem-que-se que fazer o implemento
dos requisitos anteriormente analisados pelo programador.
Em 1970 Royce propôs o que é agora popularmente designado no modelo em cascata como um conceito
inicial, um modelo no qual ele argumentava ser defeituoso. Seu trabalho então explorou como o modelo
inicial poderia ser desenvolvido em um modelo iterativo, com feedback de cada fase influenciando as
próximas, de modo similar a muitos métodos amplamente utilizados hoje. Ironicamente, foi somente o
modelo inicial que mereceu destaque; e sua crítica ao modelo inicial sendo amplamente ignorada. O
modelo em cascata rapidamente não se tornou o que Royce pretendia, um projeto iterativo, mas ao invés
disto um modelo puramente seqüencialmente ordenado. Este artigo ira tratar o significado popular para o
modelo em cascata. Para um modelo iterativo similar a versão final de Royce, ver o modelo em espiral.
A despeito das intenções de Royce para o modelo em cascata ser modificado para um modelo iterativo, o
uso do modelo em cascata como um processo puramente seqüencial é ainda popular, e, para alguns, o
termo modelo em cascata veio se referir a uma abordagem para criação de software a qual é vista como
inflexível e não iterativa. Aqueles que usam o termo modelo em cascata de forma pejorativa para modelos
não iterativos aos quais não apreciam usualmente vêem o modelo em cascata em si como ingênuo e
inadequado para um processo do mundo real
O Modelo em cascata estático. O andamento do processo flui de cima para baixo, como uma cascata.
No modelo em cascata original de Royce, as seguintes fases são seguidas em perfeita ordem:
1. Elicitação de requisitos
2. Projeto
3. Construção (implementação ou codificação)
4. Integração
5. Teste e depuração
6. Instalação
7. Manutenção de software
Para seguir um modelo em cascata, o progresso de uma fase para a próxima se da de uma forma
puramente seqüencial. Por exemplo, inicialmente completa-se a especificação de requerimento —
elaborando um conjunto rígido de requerimentos do software.
Portanto o modelo em cascata move-se para a próxima fase somente quando a fase anterior esta
completa e perfeita. Desenvolvimento de fases no modelo em cascata são discretas, e não há pulo para
frente, para trás ou sobreposição entre elas.
Contudo, há vários modelos em cascata modificados (incluindo o modelo final de Royce) que podem ser
incluídos como variações maiores ou menores deste processo.
O modelo em espiral foi definido por Barry Boehm em seu artigo de 1988 A Spiral Model of Software
Development and Enhancement. Este modelo não foi o primeiro a discutir o Desenvolvimento iterativo e
incremental, mas ele foi o primeiro modelo a explicar o porque do modo iterativo. Como originalmente
antevisto, as iterações têm uma duração típica de 6 meses a dois anos. Cada fase inicia com um objetivo
esperado e termina como uma revisão pelo cliente do progresso (que deve ser interna) e assim por
diante. Esforços de análise e engenharia são aplicados em cada fase do projeto, com um olho focado no
objetivo do projeto.
Aplicação
Para uma típica aplicação, o modelo em espiral deverá significar que se tem uma visão grosseira dos
elementos como uma aplicação utilizável, adicionando características nas fases e, a determinado ponto, o
gráfico final.
O modelo espiral é usado com mais freqüência em grandes projetos. Para pequenos projetos, os conceitos
de desenvolvimento de software ágil torna-se uma alternativa mais viável. O Exército Americano tem
adotado o modelo em espiral para seus programas dos Sistemas de combate do futuro.
Vantagens
Estimativas (por exemplo: cronogramas) tornam-se mais realísticas com o progresso do trabalho,
porque problemas importantes são descobertos mais cedo.
É mais versátil para lidar com mudanças (sempre inevitáveis) que desenvolvimento de software
geralmente exigem.
Engenheiros de software (que sempre estão impacientes com alongamento da fase de projeto)
podem começar o trabalho no sistema mais cedo
Processos Iterativos
Processos ágeis
Os processos em Desenvolvimento ágil de software parecem ser mais eficientes do que as metodologias
antigas. Utiliza menos tempo do programador no desenvolvimento de softwares funcionais de alta
qualidade, mas tem a desvantagem de ter uma perspectiva de negocio que não provê uma capacidade de
planejamento em longo prazo. Em essência, eles provem mais funcionalidades por custo/benefício, mas
não dizem exatamente o que a funcionalidade irá fazer.
Existem várias metodologias que podem ser consideradas como abordagens ágeis, entre elas: Scrum,
Programação extrema, FDD, Crystal Clear, DSDM entre outras.
A Programação Extrema (XP), é o mais bem conhecido processo ágil. Em XP, as fases são continuadas em
passos extremamente pequenos (ou contínuos) comparados aos processos antigos. A primeira passada
(iteração incompleta) através das etapas deve levar um dia ou uma semana, ao invés de meses ou anos
para cada fase completa do modelo em cascata. Primeiramente, escreve-se um autômato de teste, que
provê objetivos concretos para o desenvolvimento. Depois é codificado (por um par de programadores),
este passo está completo quando todos os testes se concluem, e os programadores não pensem em nada
mais que possa ser testado. Projetistas e Arquitetos executam uma refatoração do código. O projeto é
feito por pessoas que estão codificando. O sistema incompleto mas funcional é entregue e demonstrado
para os usuários. Neste ponto, os envolvidos iniciam novamente uma nova fase de escrita e teste para as
próximas partes mais importantes do sistema.
Método formal
Os Métodos Formais são abordagens matemáticas para resolver problemas de software e hardware ao
nível de requisito, especificação e projetos. Exemplos de métodos formais incluem Método-B, Redes Petri,
RAISE e VDM. Várias notações de especificação formal estão disponíveis, tais como a notação-Z. De forma
mais genérica, a teoria do autômato pode ser usada para construir e validar o comportamento da
aplicação para o projeto de um sistema de máquina de estado finito.
Máquinas de estado finito baseadas nestas metodologias permitiram especificar software executáveis e
contornar a codificação convencional.