Fases >
Prospecção do Negócio >
Pré Engenharia >
Engenharia >
Transição >
Suporte
A fase de Engenharia é o que se pode chamar de hands on do processo,
pois nesta fase é quando todo o planejamento antevisto é revisado para ser efetivamente colocado em prática.
O marco desta fase é a liberação do release de um conjunto de histórias.
|
Planejar Release:
O objetivo do Planejamento da Release é fazer o planejamento das customizações que vão ser
entregues no próximo release do produto. Este planejamento também pode ser revisado e
alterado caso mudem as prioridades do cliente e de acordo com o andamento do projeto. O time
de desenvolvimento utiliza as histórias escritas anteriormente para estimar a sua dificuldade
de implementação. A prática "o jogo do planejamento" descreve que um release deve conter as
histórias que agregam maior valor para o negócio do cliente, ou seja, as de maior prioridade
para o cliente, de acordo com as prioridades que o Gerente atribui a cada um dos clientes,
e o time de desenvolvimento então estima quantas histórias eles poderão
implementar nas diversas iterações do release com base na experiência que possuem sobre a sua
velocidade de trabalho e com base nas estimativas de dificuldade de cada história.
O planejamento do release deve levar em conta estimativas e fatores de risco. As histórias de
alto risco devem ser escaladas primeiramente para amenizar o risco. As histórias de
investigação também são consideradas de alto risco, pois pouco se sabe sobre sua implementação,
por isso devem ser escaladas nas primeiras iterações.
|

|
Top >>
|
Atividades
|
Fazer Estimativas
|
Objetivo: Estimar esforço para realização das atividades do release.
|
Passos: Escolher histórias do release e estimar esforço necessário
para implementação de cada uma das histórias.
|
Escolher e Priorizar Requisitos
|
Objetivo: Como parte da definição de trabalho
Fazer Estimativas esta atividade tem como foco escolher e priorizar os requisitos
que estarão no próximo release.
|
Passos: Rever e validar prioridades. Escolher histórias com maior prioridade.
|
|
|
Planejar Iteração:
Neste fluxo de trabalho é onde acontece o planejamento da iteração. Em um único release de um
conjunto de features do produto podem ocorrer várias iterações. O planejamento da
iteração procura refinar as estimativas feitas no planejamento do release e verificar quantas
e quais histórias serão implementadas na iteração. A análise de cada história é realizada
como parte de cada iteração. O objetivo da análise de cada história é finalizar o detalhamento
da mesma. Cada história é destrinchada em pequenas tarefas e durante esta análise o time pode
julgar necessário dividir uma ou mais histórias alocadas para a iteração corrente ou ainda
criar uma história de pesquisa quando não houver informações suficientes para estimar a história.
O time de desenvolvimento tenta medir o esforço de uma forma mais precisa e melhorar cada
estimativa feita anteriormente no planejamento da release. O Gerente de Implantação é que tem
a responsabilidade de escolher as histórias a serem implementadas. Todo este processo deve
ser orientado pela prática do jogo do planejamento. O engenheiro de software é o responsável
pelas estimativas do esforço necessário na implementação de cada história, enquanto o cliente,
junto com o Gerente de Implantação, é responsável pela atribuição de prioridades para cada
história com base em seu valor de negócio.
As prioridades de cada história são definidas com base nas prioridades do cliente e nas
prioridades do projeto. Ou seja, os clientes definem suas prioridades e o Gerente decide
que clientes têm mais prioridades.
|

|
Top >>
|
Atividades
|
Estimar Iteração
|
Objetivo: Analisar cenário de cada história, Estimar esforço para
realização das atividades da iteração.
|
Passos: Estimar esforço necessário para
implementação de cada uma das histórias. Verificar se é necessário
quebrar histórias ou criar histórias de pesquisa.
|
Escolher Requisitos
|
Objetivo: Como parte da definição de trabalho
Estimar Iteração esta atividade tem como objetivo escolher os requisitos
que farão parte da iteração corrente.
|
Passos: Escolher os requisitos que farão parte
da iteração corrente com base nas prioridades que foram definidas.
|
|
|
Escrever Testes:
Neste fluxo de trabalho são escritos os testes funcionais do sistema. Os testes
funcionais são escritos com base nos requisitos que estão definidos no Documento de Mudanças (CDD).
Este documento serve como entrada para a atividade chave deste fluxo de trabalho.
Nesta abordagem os testes são escritos pelo Engenheiro de Testes com o auxílio dos
Engenheiros de Software. O cliente não participa diretamente da escrita dos testes, pois
nestes projetos o tipo de relacionamento com o cliente e a sua localidade normalmente
inviabilizam a utilização da abordagem padrão que considera que sempre haverá um único cliente on-site.
O produto final deste fluxo é a definição dos Cenários de Testes utilizados para validar as
funcionalidades do sistema. Estes Cenários podem ser na forma de testes automatizados ou não.
Esta decisão cabe ao time de engenharia. O objetivo dos testes funcionais é testar as
funcionalidades mais complexas do sistema, enquanto os testes unitários visam testar métodos
de classes.
|

|
Top >>
|
Atividades
|
Escrever Testes Funcionais
|
Objetivo: Analisar cada requisito descrito no CDD e
escrever os Cenários de Testes que serão utilizados
para testar as funcionalidades do sistema como um todo.
|
Passos: Analisar requisitos, Decidir se os testes
serão automatizados ou não, Escrever testes com base na decisão tomada.
|
Artefatos: Cenários de Testes
|
|
|
Desenvolver Feature:
O desenvolvimento de uma feature compreende as atividades de projeto, implementação e testes
de uma unidade de trabalho.
No contexto de Customização de Produtos de Software um dos principais objetivos do processo é
evitar mudanças às funcionalidades core do produto.
Portanto, decisões de projeto que venham a impactar a arquitetura e a lógica de negócios base
do sistema devem estar fora do contexto da customização. Quando alterações de base forem
identificadas como sendo necessárias, deve haver um consenso entre a equipe de campo e a
equipe do produto no sentido de minimizar os esforços individuais para cada cliente. Caso uma
nova feature seja identificada como uma necessidade comum que poderá ser compartilhada por
vários clientes, a mudança pode ser escalada para a equipe do produto. Cabe à equipe de
campo a decisão de esperar por uma nova versão do produto ou realizar uma adaptação na
versão corrente para atender às necessidades do cliente.
Cada uma das features deve ser desenhada de maneira a minimizar ao máximo grandes mudanças
às funcionalidades padrão do sistema. Em seguida as features são especificadas, implementadas
e testadas individualmente. A especificação da feature é realizada através de testes unitários.
Os esforços devem ser concentrados nas tarefas de maior importância para o cliente.
A depender do nível de controle desejado pelo time, pode ser interessante incluir como
parte do documento de projeto todas as alterações realizadas no código durante o
desenvolvimento da feature (ex. classes e métodos alterados, mudanças na base de dados,
triggers, procedures, tabelas, etc.).
|

|
Top >>
|
Atividades
|
Fazer Projeto
|
Objetivo: Modelar feature. Projetar módulos ou classes.
|
Passos: Obter entendimento da feature, fazer projeto.
|
Artefatos: Documento de Projeto
|
Fazer Testes de Unidade
|
Objetivo: Especificar feature
e testar eficientemente a unidade de trabalho desenvolvida.
|
Passos: Escrever testes de unidade, Executar Testes.
|
Implementar
|
Objetivo: Construir a feature de acordo com as decisões de projeto.
|
Passos: Realizar alterações necessárias de acordo com
especificações do projeto. Implementar novas classes ou módulos quando necessário.
|
Artefatos: Código e Documento de Projeto (atualizado)
|
|
|
Integrar:
A integração contínua do código gerado com o repositório de código deve acontecer com freqüência
e idealmente as mudanças nunca devem passar mais do que um dia para serem integradas ao repositório.
Cada engenheiro de software é responsável por integrar o seu próprio código e sempre que for
possível quebrar a feature em unidades lógicas. Isto deve acontecer quando 100% dos testes de
unidade forem executados ou quando uma pequena parte da funcionalidade planejada for
finalizada.
A integração das funcionalidades compreende a realização dos testes funcionais. Isto
significa que as funcionalidades que forem integradas devem estar 100% testadas pelos
engenheiros de software através dos testes unitários para evitar que uma nova funcionalidade
quebre alguma feature do sistema que já esteja testada funcionalmente.
|

|
Top >>
|
Atividades
|
Integrar Funcionalidades
|
Objetivo: Realizar integração das funcionalidades concluídas para que os
testes funcionais possam ser realizados.
|
Passos: Realizar build do produto com as novas funcionalidades.
|
Realizar Testes de Sistema
|
Objetivo: Realizar testes funcionais das novas features.
|
Passos: Seguir Cenários de Testes.
|
Artefatos: Planilha de Resultados.
|
|
|
Realizar Testes de Aceitação:
A intenção dos testes de aceitação é garantir que os requisitos do cliente foram atendidos
e que o sistema é aceitável, ou seja, o objetivo deste fluxo de trabalho é verificar se as
funcionalidades estão de acordo com as necessidades e expectativas do cliente. Estes testes
são críticos para o sucesso da aplicação porque durante este estágio é que será determinado
se a aplicação pode ser liberada para os usuários finais.
Os testes de aceitação são criados a partir das histórias que devem ser selecionadas a cada
nova iteração e traduzidas em testes de aceitação. Uma história só é considerada finalizada
quando os testes de aceitação são concluídos com sucesso.
Os cenários de teste escritos servem para guiar a realização dos testes que podem ou não ser
automatizados.
O formato da reportagem dos resultados dos testes é decidido pela Engenharia. Estes resultados
podem ser reportados através de uma ferramenta de controle de bugs, como o Bugzilla, por exemplo.
Ou em forma de planilha de resultados. O ideal, porém, é uma combinação das duas opções,
a utilização da planilha seguida do registro de bugs na ferramenta.
Os testes de aceitação, considerados como testes caixa-preta, também são usados como teste de
regressão que antecede um release de produção.
|

|
Top >>
|
Atividades
|
Executar Testes
|
Objetivo: Permitir ao cliente validar as funcionalidades implementadas.
|
Passos: Realizar testes e reportar os resultados.
|
|
|