| 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. |  |  |