Fábrica de Software III

 

Descrição

Participantes

Processo de Desenvolvimento

Piloto da Fábrica

Projeto Alocação Plus

Cronograma

Reuniões

Links interessantes

 

 

Processo de Desenvolvimento


1) INTRODUÇÃO
      A Fábrica III possui uma metodologia de desenvolvimento de software (processo de transformação do projeto do software no produto final) dividida em 4 fases: comercial, planejamento e gerenciamento, desenvolvimento de componentes e testes e validação.
      O fluxo de atividades executadas no "ambiente fabril" são divididas nas fases dessa metodologia e serão detalhadas neste documento, assim como os artefatos de cada fase.

1.1 Visão geral deste documento
      As demais seções apresentam os itens referentes a este documento e estão organizadas como descrito abaixo.
Seção 2 - Comercial: é a fase da definição do projeto, de acordo com as necessidades levantadas junto ao cliente;
Seção 3 - Planejamento e Gerenciamento: é a fase da elaboração do plano do projeto (plano de trabalho, riscos, acompanhamento e controle, etc) e execução das atividades recorrentes de acompanhamento e controle;
Seção 4 - Desenvolvimento de Componentes: é a fase da definição de problemas e da especificação, projeto e implementação dos componentes;
Seção 5 - Testes e Validação: é a fase dos testes e da validação dos componentes produzidos.

2) COMERCIAL


2.1 Introdução

      Para que um projeto se inicie dentro da Fábrica de Software III, ele precisa ser vendido a um cliente. No processo normal, o cliente procura a Fábrica com uma necessidade e essa necessidade é detalhada em requisitos funcionais e não-funcionais, além de serviços associados. O cliente pode já trazer a especificação da necessidade documentada, ou ela pode ser definida apenas com entrevistas entre o Gerente de Negócios e o cliente. O custo e esforço são estimados e apresentados ao cliente, que decide se contrata ou não o projeto. Independente da decisão, a fase é terminada nesse momento.

2.2 Responsáveis e Artefatos
      Os responsáveis e artefatos envolvidos neste fluxo são mostrados a seguir:

Líder de Equipe Proposta Técnica
Gerente de Negócios Planilha de Estimativa de Esforço
Proposta Comercial

      A Proposta Técnica lista e detalha os requisitos funcionais e não-funcionais, definindo o escopo positivo e negativo do projeto. Lista também os usuários, clientes e outros sistemas, que representam os atores do sistema.
      A Planilha de Estimativa de Esforço calcula o esforço em homem/hora para a execução do projeto. É necessário se categorizar os atores e casos de uso, pois a métrica de Pontos de Caso de Uso associa valores diferentes a categorias diferentes. Os requisitos não-funcionais também são relevantes no cálculo do esforço, pois eles definem o coeficiente técnico do sistema, que ajusta os pontos de caso de uso.
      A Proposta Comercial une as informações de escopo e esforço, associando custo total e prazo de entrega. É importante ressaltar que a informação de escopo que vem na proposta comercial é apenas um resumo da informação constante na proposta técnica.

2.3 Fluxo de Atividades
      O fluxo de atividades da fase comercial é composto das seguintes atividades e respectivos responsáveis:
      
1) Levantar Necessidades do Cliente - Gerente de Negócios/Cliente.
      2) Elaborar Proposta Técnica - Líderes de Equipe
      3) Estimar Esforço do Projeto - Gerente de Negócios
      4) Elaborar Proposta Comercial - Gerente de Negócios

      2.3.1 Levantar Necessidades do Cliente

Fluxo: Comercial
Atividade: Levantar Necessidades do Cliente
Objetivos:
- Levantar e Descrever as Necessidades do Cliente, Identificando as Soluções.
Entradas:
- Documentos Apresentados pelo Cliente
Saídas:
- Ata de Reunião
Passos:
- Identificar Usuários e Clientes do Sistema
- Identificar Requisitos Funcionais e Não-Funcionais
Responsável: Gerente de Negócios
Referências: "-"

      Caso o cliente apresente documentação que forneça as informações necessárias a esta atividade, esta documentação deve ser analisada antes da reunião com o cliente, ficando a reunião apenas para dirimir dúvidas.
      Identificar Usuários e Clientes do Sistema
      Nesse passo, são identificados os usuários e clientes do sistema, que representarão os atores no diagrama de caso de uso. É importante especificar quais são as responsabilidades e papéis dos clientes e usuários para que o documento também sirva como entrada para o entendimento do sistema.
      Identificar Requisitos Funcionais e Não-Funcionais
Nesse passo, serão identificados os casos de uso, com a lista de passos do fluxo de eventos principal. Os casos de uso serão necessários para a estimativa de esforço na atividade subseqüente.

      2.3.2 Elaborar Proposta Técnica

Fluxo: Comercial Atividade: Elaborar Proposta Técnica
Objetivos:
- Descrever o sistema, relacionando clientes, usuários, requisitos e serviços demandados.
Entradas:
- Atas de Reunião e/ou Documentos Apresentados pelo Cliente
Saídas:
- Proposta Técnica
Passos:
- Elaborar Proposta Técnica
Responsável: Líder de Equipe
Referências: "-"

      Elaborar Proposta Técnica
      Esse passo consiste basicamente da escrita da proposta técnica a partir das informações coletadas junto ao cliente nas reuniões de levantamento dos requisitos.

      2.3.3 Estimar Esforço do Projeto

Fluxo: Comercial Atividade: Estimar Esforço do Projeto
Objetivos:
- Estimar esforço, em homem/hora, para a execução do projeto.
Entradas:
- Proposta Técnica
Saídas:
- Planilha de Estimativa de Esforço
Passos:
- Estimar Esforço do Projeto
Responsável: Gerente de Negócios
Referências: "-"

      Estimar Esforço do Projeto
      A métrica de estimativa de esforço usada pela Fábrica de Software III é Pontos de Caso de Uso. Essa atividade consiste basicamente do uso da métrica e da documentação dos parâmetros e valores usados, para que seja possível se fazer análises futuras e gerar dados históricos das estimativas, que é muito relevante para retro-alimentação do processo.

      2.3.4 Elaborar Proposta Comercial

Fluxo: Comercial Atividade: Elaborar Proposta Comercial
Objetivos:
- Une as informações de escopo e esforço, associando custo total e prazo de entrega.
Entradas:
- Proposta Técnica
- Planilha de Estimativa de Esforço
Saídas:
- Proposta Comercial
Passos:
- Elaborar Proposta Comercial
Responsável: Gerente de Negócios
Referências: "-"

      Elaborar Proposta Comercial
      Esse passo consiste basicamente da escrita da proposta comercial a partir das informações que estão presentes na proposta técnica e na planilha de estimativa de esforço. É importante ressaltar que apenas na proposta comercial aparece o prazo de entrega do projeto, pois esse é conseguido a partir do esforço calculado em homem/hora.
      A fase seguinte descreve o processo de planejamento e gerenciamento de uma fabrica de software.

3 PLANEJAMENTO E GERENCIAMENTO

3.1 Introdução
      O processo de administração de projetos de software inicia-se com um conjunto de atividades que são coletivamente denominadas planejamento de projetos. Os objetivos principais consistem em unificar o entendimento do produto a ser desenvolvido e fornecer uma estrutura que possibilite fazer estimativas razoáveis de recursos, custos e prazos; assim, ao utilizar-se de dados mais realísticos, aumenta-se as chances de sucesso.
      O gerenciamento da evolução do projeto é outro passo importante, uma boa forma de acompanhamento é através de controle; logo, deverão ser desenvolvidos mecanismos para avaliar do progresso, organizar o pessoal que desenvolverá o produto, rastrear e controlar o projeto.
      As próximas seções descrevem os responsáveis envolvidos nesta fase, como também os artefatos associados a cada um.

3.2 Responsáveis e Artefatos
      Os responsáveis e os artefatos envolvidos neste fluxo são mostrados a seguir:

Gerente de Projetos Plano de Projeto (Descrição, objetivos, premissas e restrições)
Anexos do Plano de Projeto
A) Work Breakdown Structure Cronológico*
B) Plano de Acompanhamento e Controle
C) Plano de Gerenciamento de Impactos
D) Plano de Gerenciamento de Configuração
E) Plano de Comunicação
* Este artefato, embora faça parte do Plano de Projetos, têm modelo próprio externo ao plano.
Participante da equipe Ata de reuniões
Analista de qualidade Formulário de Controle de Mudanças
Formulário de Validação do Cliente
Relatório Avaliando Processo de Desenvolvimento

      O Plano de Projeto fornece uma linha básica de estruturação e delimitação do trabalho, devendo produzir ações como:
      i. Comunicar o escopo e os recursos a todos os envolvidos (engenheiros de software e de testes, analistas de sistemas e de qualidade, gerentes de projeto e gerentes comerciais, clientes e líderes de equipes);
      ii. Definir riscos e sugerir técnicas para evitá-los, ou minimizá-los;
      iii. Definir cronograma com divisão de trabalho e dependência entre as atividades;
      iv. Fornecer abordagem global para o desenvolvimento de software;
      v. Planejar o acompanhamento das tarefas existentes;
      vi. Registrar o monitoramento através de relatórios, a fim de checar o planejado com o realizado efetivamente.
      É importante salientar que o plano de projeto não é um documento estático, é um registro estratégico, podendo ser revisto repetidamente, atualizando riscos, estimativas, cronogramas e informações relacionadas, à medida que o projeto progride.
      A Ata de Reuniões consiste em um resumo sobre as decisões tomadas, especificando os membros presentes ao encontro, data e duração da mesma.
      O Formulário de Controle de Mudanças foi desenvolvido para administrar as mudanças em todo o ciclo de vida do software e pode ser visto como uma atividade de garantia de qualidade de software que é aplicada durante todas as fases do processo.
      O Formulário de Validação do Cliente é elaborado ao término do produto para avaliar se o que foi produzido estava em concordância com o que o cliente solicitou.
      O Relatório Avaliando Processo de Desenvolvimento é algo elaborado com os membros internos à fábrica, com o intuito de verificar pontos positivos e negativos no processo e extrair idéias de melhorias.

3.3 Fluxo de Atividades
      O fluxo de atividades da fase de Planejamento e Gerenciamento é composto das seguintes atividades e respectivos responsáveis:

      1) Elaborar Plano de Projetos Preliminar - Gerente de Projeto
      2) Definir o Controle do Projeto - Gerente de Projeto e equipe de trabalho
      3) Acompanhar e Gerenciar o Projeto - Gerente de Projeto e Analista de Qualidade
      4) Comunicar através de Reuniões Periódicas a Evolução do Projeto - Gerente de Projeto e Equipe de Trabalho
      5) Validar o Projeto - Analista de Qualidade, Gerente de projeto, Gerente de Negócios e Cliente

      3.3.1 Elaborar Plano de Projetos Preliminar

Fluxo: Planejamento e Gerenciamento Atividade: Elaborar Plano de Projetos Preliminar
Objetivos:
- Gerar o Plano de Projetos Preliminar a fim de apresentar o escopo do sistema.
Entradas:
- Proposta Técnica
- Proposta Comercial
- Aval do Cliente
Saídas:
- Plano de Projeto Preliminar
Passos:
- Avaliar e definir os objetivos, o escopo, as premissas e as restrições
- Definir a estrutura organizacional da Fábrica III
- Definir a estrutura organizacional do Cliente
- Definir preliminarmente o Plano de Projeto
Responsável: Gerente de Projeto
Referências: "-"

      Avaliar e definir os objetivos, o escopo, as premissas e as restrições
      Neste passo são definidos os objetivos, o escopo, as premissas e as restrições. Os objetivos apresentam de forma genérica o trabalho a ser realizado, apresentando as necessidades do cliente. O escopo define as funcionalidades requeridas. As premissas são os pressupostos e as restrições são as dificuldades e os limites para o projeto.
      Definir a estrutura organizacional da Fábrica III
      A identificação da Fábrica III junto ao cliente é interessante, pois ele passa a conhecer as pessoas e as funções necessárias para o desenvolvimento e o gerenciamento do projeto. Isso facilita a comunicação e o reconhecimento da Fábrica de Software.
      Definir a estrutura organizacional do Cliente
      A análise da visão preliminar de requisitos permite o reconhecimento do cliente, de suas necessidades e também da sua estrutura e organização. Assim, um organograma é construído com a estrutura bem definida do cliente.
      Definir preliminarmente o Plano de Projeto
      Com a definição dos objetivos, das premissas, das restrições, do escopo e das estruturas organizacionais, faz-se um documento que terá esses tópicos, a fim de ser incrementado ao longo do processo de gerenciamento e planejamento.

      3.3.2 Definir o Controle do Projeto

Fluxo: Planejamento e Gerenciamento Atividade: Definir o Controle do Projeto
Objetivos:
- Documentar as informações relevantes sobre a forma de controle do projeto, definindo as atividades a serem conduzidas para acompanhar a evolução.
Entradas:
- Plano de projeto preliminar
- Proposta Técnica
- Proposta Comercial
- Aval do Cliente
Saídas:
- Work Breakdown Structure Cronológico
- Definição do Plano de Acompanhamento e Controle
- Plano de Gerenciamento de Impactos
- Plano de Gerenciamento de Configuração
- Plano de Comunicação
Passos:
- Elaborar Work Breakdown Structure Cronológico
- Definir Plano de Acompanhamento e Controle
- Elaborar Plano de Gerenciamento de Impactos
- Elaborar Plano de Gerenciamento de Configuração
- Elaborar Plano de Comunicação
Responsável: Gerente de Projeto, equipe de trabalho
Referências: "-"

      Elaborar Work Breakdown Structure Cronológico
      Documento que descreve a divisão do trabalho em atividades e identifica os marcos de referência e os produtos a serem concluídos ao longo do processo. Também define as interdependências entre tarefas, esforço e prazo previsto, além dos responsáveis, permitindo a visualização e acompanhamento do caminho crítico do projeto de software dentro do tempo estipulado.
      A abordagem baseada em componentes propõe iterações que são preenchidas por um conjunto de tarefas que permitem a equipe definir e desenvolver, não devendo sobrecarregar os participantes da equipe de desenvolvimento.
      Definir Plano de Acompanhamento e Controle
      Define as atividades de acompanhamento e controle das frentes do projeto, incluindo os seus responsáveis, para que o projeto tenha reavaliações periódicas. Enfim, detalha a forma a ser utilizada para verificar o progresso (cronograma, escopo, custos, recursos), a periodicidade de execução das atividades e o que deve ser produzido ao final.
      Os documentos apresentados nas atividades de acompanhamento e controle devem ser anexados a este plano e consolidados como um documento único.
      Elaborar Plano de Gerenciamento de Impactos
      O gerenciamento de impactos consiste do processo de identificação, análise, acompanhamento e controle dos riscos e problemas do projeto. Seu objetivo é facilitar a resolução em tempo e a comunicação das partes envolvidas. Pela identificação dos riscos previsíveis, busca-se evitá-los e controlá-los; então, depois que a ameaça tiver sido diagnosticada, recursos adicionais podem ser concentrados na área do problema, o pessoal pode ser novamente disposto ou a programação do projeto, redefinida.
      O plano de gerenciamento de impactos deverá ser estruturado de forma que possa registrar ameaças identificadas, analisar os impactos considerando a materialização das mesmas, associar um valor para representar a magnitude do problema e definir plano de resposta com contingências para tratá-las.
      Elaborar Plano de Gerenciamento de Configuração
      O gerenciamento de configuração é a identificação, organização e controle de modificações no software e artefatos que estão sendo construídos. A responsabilidade primordial é controlar mudanças, mas também estão inclusas: a auditoria da configuração do software para garantir que ele foi adequadamente desenvolvido e a comunicação de todas as mudanças aplicadas na configuração.
      Antes que um item de configuração de software torne-se uma linha básica, mudanças podem ser feitas rápidas e informalmente. Porém, assim que uma linha básica é estabelecida, precisamos de um procedimento específico, formal, para avaliar e verificar cada mudança. Assim, um pedido de mudança é submetido e avaliado quanto ao mérito técnico, potenciais efeitos colaterais e o custo projetado da mudança. Os resultados da avaliação são registrados no Formulário de Controle de Mudanças, o qual será analisado pelas partes interessadas, que em seguida mencionará a decisão final sobre o status e a prioridade da mudança. Para garantir que a mudança foi adequadamente implementada deverá ser executada uma auditoria de configuração de software, que focaliza a exatidão técnica do objeto de configuração que foi modificado, avaliando a consistência com os demais itens sob configuração, omissões ou potenciais efeitos colaterais.
      Elaborar Plano de Comunicação
      Esta fase tem como objetivo: definir os responsáveis pela geração e distribuição de informações do projeto, definir os procedimentos de geração de informações do projeto e definir os procedimentos de distribuição de informações do projeto.

      3.3.3 Acompanhar e Gerenciar o projeto

Fluxo: Planejamento e Gerenciamento Atividade: Acompanhar e Gerenciar o Projeto
Objetivos:
- Executar as reavaliações periódicas, verificando se atividades estão evoluindo de acordo com o previsto.
Entradas:
- Plano de projeto preliminar
- Proposta Comercial
- Work Breakdown Structure Cronológico
- Plano de Acompanhamento e Controle
- Plano de Gerenciamento de Impactos
- Plano de Gerenciamento de Configuração
- Plano de Comunicação
Saídas:
- Work Breakdown Structure Cronológico atualizado
- Plano de Acompanhamento e Controle atualizado
- Plano de Gerenciamento de Impactos atualizado
- Plano de Gerenciamento de Configuração atualizado
- Formulário de Controle de Mudanças
Passos:
- Avaliar Work Breakdown Structure Cronológico
- Avaliar Plano de Gerenciamento de Impactos
- Avaliar Plano de Gerenciamento de Configuração
- Registrar Dados no Plano de Avaliação e Controle
Responsável: Gerente de Projeto, Analista de qualidade*
Referências: "-"
* Responsável pela tarefa: avaliar plano de gerenciamento de configuração

      Avaliar Work Breakdown Structure Cronológico
      Averiguar se as atividades estabelecidas estão sendo cumpridas no prazo estimado; caso algum problema tenha afetado esta estrutura, deve-se discutir formas para relocação de atividades, tentando para minimizar os efeitos negativos produzidos.
      Avaliar Plano de Gerenciamento de Impactos
      Levantar possíveis ameaças ao projeto, atribuindo ao risco ou problema um responsável. Este responsável deverá monitorar os indicadores associados e reportar-se ao gerente do projeto quando houver a iminência de sua ocorrência. O gerente de projeto deverá comunicar os riscos e executar o plano de resposta quando este se materializar
      Avaliar Plano de Gerenciamento de Configuração
      Avaliar os pedidos de mudanças e armazenar os dados de cada solicitação no Formulário de Controle de Mudanças. Nos casos que a mudança é aceita pelas partes interessadas, fica estabelecido o compromisso de, tão logo que a solicitação seja incorporada, efetuar uma auditoria para garantir que a mesma foi adequadamente implementada.
      Registrar Dados no Plano de Avaliação e Controle
      Elaborar uma síntese da avaliação conduzida, dando um parecer quanto a evolução do projeto e demonstrando o grau de satisfatoriedade com o que foi observado. Unir este documento ao Plano de Avaliação e Controle e guardar como item histórico para análises futuras.

      3.3.4 Comunicar através de Reuniões Periódicas

Fluxo: Planejamento e Gerenciamento Atividade: Comunicar através de reuniões periódicas
Objetivos:
- Disseminar através da comunicação o projeto desenvolvido e incrementado.
Entradas:
- Work Breakdown Structure Cronológico
- Plano de Acompanhamento e Controle
- Plano de Gerenciamento de Impactos
- Plano de Gerenciamento de Configuração
Saídas:
- Ata de Reuniões
- Work Breakdown Structure Cronológico
- Plano de Acompanhamento e Controle
- Plano de Gerenciamento de Impactos
- Plano de Gerenciamento de Configuração
- Formulário de Controle de Mudanças
Passos:
- Avaliar o Plano de Trabalho e o Plano de Acompanhamento e Controle
- Definir e Registrar as dificuldades/ possíveis soluções
- Registrar a Ata das reuniões
Responsável: Gerente de Projeto, Líderes de equipes
Referências: "-"

      Avaliar o Plano de Trabalho e o Plano de Acompanhamento e Controle
      Reunir a equipe e checar o Work Breakdown Structure Cronológico e Acompanhamento e Controle; a fim de perceber o andamento das tarefas e a produtividade dos profissionais da Fábrica. Devem ser colhidas e geradas as informações de acompanhamento e controle do projeto tais como:
      - Progresso das frentes de trabalho
      - Problemas levantados
      - Riscos levantados
      - Requisições de mudança
      Definir e Registrar as dificuldades / possíveis soluções
      Aproveita-se também para gerenciar as questões (riscos e problemas), buscando minimizá-los. O gerente de projeto deverá comunicar os riscos, as mudanças e os problemas para a equipe discutir nas reuniões de acompanhamento.
      Registrar a Ata das Reuniões
      As decisões são registradas em atas para melhor acompanhamento e confirmação dos encaminhamentos definidos. Devem ser divulgadas através do TWIKI e da lista de discussão para conhecimento de todos.

      3.3.5 Validar o Projeto

Fluxo: Planejamento e Gerenciamento Atividade: Validar o Projeto
Objetivos:
- Receber o aval final do projeto junto ao cliente, com o devido aceite num formulário e registrar a percepção dos membros da fábrica acerca do processo de desenvolvimento utilizado.
Entradas:
- Plano de Projeto
Saídas:
- Formulário de Validação do Cliente
- Documento Avaliando o Processo Adotado
Passos:
- Reunir com o cliente para validação
- Avaliar Processo de Desenvolvimento Interno
Responsável: Analista de Qualidade, Gerente de Negócios, Gerente de Projeto, Líderes de equipes
Referências: "-"

      Reunir com o cliente para validação
      Avalia-se o sucesso do projeto, a eficácia do modelo de gestão e a qualidade dos produtos gerados. A freqüência deste encontro será apenas uma vez, para fechamento e conclusão dos trabalhos no Projeto.
      Avaliar Processo de Desenvolvimento Interno
Avalia-se a forma como o projeto foi conduzido e a necessidade dos artefatos, elucidando o grau de importância de cada atividade. Assim, análises podem ser efetuadas e se necessário, mudanças incorporadas. Sugestões são coletadas e avaliadas, apresentando possibilidades de incorporação nos projetos seguintes. Efetuado apenas no fechamento do projeto.

4) DESENVOLVIMENTO DE COMPONENTES

4.1 Introdução
      Mesmo com as recentes e constantes pesquisas na área de Desenvolvimento Baseado em Componentes (DBC), ainda existe uma carência de padrões, modelos de processos e metodologias que suportem, efetivamente, tanto o desenvolvimento "para o reuso" quanto o "desenvolvimento com reuso". Considerando o término da última década, com o acelerado crescimento da Internet, onde distribuição tem se tornado um requisito não funcional essencial de muitas aplicações, o problema torna-se ainda maior. Deste cenário, surgiu a necessidade de definição de uma Estratégia de Desenvolvimento de Software Baseado em Componentes Distribuídos (DBCD) que procura orientar o engenheiro de software em todo o processo de DBCD.
      Integrando o método Catalysis de DBC, os princípios de middleware, o framework de componentes (persistence) e o Distributed Adapters Pattern (DAP), na ferramenta MVCASE, definiu-se uma Estratégia de Desenvolvimento de Software Baseado em Componentes Distribuídos.
      A estratégia foi dividida em duas etapas, conforme mostra a Figura 1, utilizando a notação SADT. Numa primeira etapa, a estratégia parte dos requisitos do domínio do problema e produz os componentes implementados numa linguagem orientada a objetos. Uma vez implementados, o engenheiro de software desenvolve as aplicações reutilizando os componentes previamente construídos.


       A atividades da primeira etapa da estratégia (Development of Distributed Components) serão adotadas no processo de desenvolvimento de software, descrito neste documento. A fase correspondente será chamada, no processo, de Desenvolvimento de Componentes.
      As próximas seções descrevem os artefatos e responsáveis presentes nesta fase, bem como seu fluxo de atividades.

4.2 Responsáveis e Artefatos
       Os responsáveis envolvidos neste fluxo são mostrados a seguir:

Analista de Sistemas O analista de sistema é responsável por estudar o problema em questão, definir requisitos e projetar o sistema. Para estas tarefas o analista irá manipular (criar/atualizar) os artefatos correspondestes às atividades "Definir Problema", "Especificar Componentes" e "Projetar Componentes". Estas tarefas serão detalhadas mais adiante.
Engenheiro de Software O engenheiro de software participa da fase "Desenvolvimento de Componentes" com a responsabilidade de realizar a codificação dos componentes projetados pelo analista de sistemas. O produto da atividade do engenheiro de software é o código gerado.

4.3 Fluxo de Atividades
      
O fluxo de atividades da fase "Desenvolvimento de Componentes" é composta pelas seguintes atividades e respectivos responsáveis:
       1) Definir Problema - Analista de sistemas
       2) Especificar Componentes - Analista de sistemas
       3) Projetar Componentes - Analista de sistemas
       4) Implementar Componentes - Engenheiro de software
       Nesta fase, os componentes de um domínio do problema são construídos nas quatro atividades descritas acima, de acordo com a Figura 2. Na última etapa, a implementação física dos componentes é concluída.


       Segue-se uma detalhada apresentação de cada atividade do fluxo:

      
4.3.1 Definir Problema

Fluxo: Desenvolvimento de componentes Atividade: Definir Problema
Objetivos:
- Entender o problema, especificando-se "o quê" os componentes devem atender para solucionar o problema.
Entradas:
Saídas:
- Mind-maps
- Modelo de colaboração
- Modelo de casos de uso
- Documento de Requisitos
Passos:
- Identificar requisitos
- Especificar Requisitos
Responsável: Analista de sistema
Referências: "-"

       Identificar requisitos
      
Inicialmente, são identificados os requisitos do domínio, usando técnicas como storyboards ou mind-maps, visando representar as diferentes situações e cenários do domínio do problema.
      
Especificar Requisitos
      
Em seguida, os requisitos identificados são especificados em Modelos de Colaborações, representando a coleção de ações e os objetos participantes. Finalmente, os modelos de colaborações são refinados em Modelos de Casos de Uso é gerado o Documento de Requisitos.
      
A Figura 3 resume a primeira atividade da estratégia, onde um mind-map, definido na identificação dos requisitos do domínio de Ordem de Serviços, é especificado num Modelo de Colaborações, e, posteriormente, refinado e particionado em um Modelo de Casos de Uso, visando diminuir a complexidade e melhorar o entendimento do domínio do problema.

       Após definidos os Modelos de Casos de Uso, deve ser criado (ou atualizado) o Documento Requisitos do sistema. Este documento serve como um registro dos requisitos levantados e especificados durante esta atividade.
      
      
4.3.2 Especificar Componentes

Fluxo: Desenvolvimento de componentes Atividade: Especificar componentes
Objetivos:
- Descrever o comportamento externo do sistema de uma forma não ambígua.
- Refinar especificações dos requisitos para atingir a especificação dos componentes.
Entradas:
- Mind-maps
- Modelo de colaboração
- Modelo de casos de uso
Saídas:
- Modelo de tipos
- Framework de modelos
- Aplicação do framework
- Refinamento dos diagramas de iteração
Passos:
- Especificar modelo de tipos
- Projetar Framework de modelos
- Criar modelo de aplicação do framework
Responsável: Analista de sistema
Referências: "-"

       Na ferramenta CASE, o engenheiro de software refina as especificações do nível anterior, visando obter as especificações dos componentes.

      
Especificar modelos de tipos
      
Esse passo tem início com o refinamento dos modelos do domínio do problema. Especifica-se o Modelo de Tipos, conforme mostra a Figura 5, mostrando atributos e operações dos tipos de objetos, sem se preocupar com a implementação.

       Projetar Frameworks de Modelos
      
Uma vez identificados e especificados, os tipos são agrupados em Frameworks de Modelos. Framework de Modelos são projetados num alto nível de abstração, estabelecendo um esquema genérico que pode ser importado, no nível de projeto, com substituições e extensões de modo a gerar aplicações especificas. A Figura 6 mostra este modelo.

       Os tipos com nomes entre os símbolos <> são definidos como placeholders. Esses tipos podem ser substituídos em aplicações específicas.
      
Criar modelo de Aplicação do Framework
      
O framework do domínio de locadora de carros pode ser reutilizado em diversas aplicações do domínio. A Figura 7 mostra essa Aplicação do Framework. Nesta aplicação, os tipos com placeholders são substituídos pelos seus respectivos tipos.

       4.3.3 Projetar Componentes

Fluxo: Desenvolvimento de componentes Atividade: Projetar componentes
Objetivos:
- Realizar projeto interno dos componentes.
- Especificar outros requisitos nao-funcionais, destacando-se arquitetura distribuída e persistência de dados.
Entradas:
- Modelo de tipos
- Diagramas de iteração
- Modelo de casos de uso
Saídas:
- Modelo de classes
- Refinamento dos diagramas de iteração
Passos:
- Criar modelo de classes
- Criar modelo de componentes
Responsável: Analista de sistema
Referências: "-"

       Criar modelo de classes
      
Como passo inicial, os Modelos de Tipos são refinados em Modelos de Classes, onde as classes são modeladas com seus relacionamentos, levando em consideração a identificação dos componentes e suas interfaces. A Figura 10 mostra o Modelo de Classes do domínio de Ordem de Serviços. Os Modelos de Interações, representados pelos diagramas de seqüências, são refinados para mostrar detalhes do comportamento dos métodos em cada classe.

       Criar modelo de componentes
       A partir do Modelo de Classes, usa-se o Distributed Adapters Pattern (DAP) para realizar o projeto do Modelo de Componentes, onde a organização e a dependência entre os componentes são mostradas. A seção seguinte apresenta uma visão geral deste padrão.
:: Distributed Adapters Pattern ::
       O Distributted Adapters Pattern (DAP) é um padrão que está inserido no contexto de comunicação remota entre dois componentes. De maneira a resolver esta tarefa, componentes em um cenário distribuído comunicam-se com outros por meio de algum mecanismo inter-processo. Os componentes podem se comunicar entre si ou delegar esta função a outros componentes.
       A primeira alternativa requer menos componentes, isto conduz a aplicações, onde o núcleo da funcionalidade dos componentes é realizada através de tarefas de comunicação. Deste modo, as aplicações dependem de um particular mecanismo de comunicação e os componentes se tornam difíceis de serem reutilizados e estendidos.
       A segunda alternativa (DAP) permite-se obter aplicações modulares com um conjunto de componentes interoperáveis. Como o desenvolvimento da aplicação é mais fácil de manter e estender, estes componentes podem ser facilmente reutilizados em outras aplicações.
       O DAP oferece os seguintes benefícios:
       - Um componente pode acessar serviços remotos, oferecidos por outros componentes;
       - Os componentes são independentes de Application Programming Interfaces (API) de comunicação;
       - As modificações no código dos componentes, para oferecer suporte à comunicação, são minimizadas;
       - Mudanças no mecanismo de comunicação se tornam uma tarefa facilitada, minimizando o impacto no código do negócio.
      
A técnica adotada pelo DAP, para oferecer todas estas funcionalidades mencionadas acima, é introduzir um par de objetos adaptadores, visando conseguir um melhor desacoplamento dos componentes dentro de uma arquitetura distribuída. Os adaptadores, basicamente, encapsulam a API, que é necessária para permitir o acesso distribuído ou remoto, para objetos Targets. Deste modo, objetos Sources de uma aplicação possuem autonomia em relação à camada de distribuição, e as mudanças nesta camada não causam impactos.
      
No padrão, existem dois tipos de adaptadores: Source Adapter e Target Adapter. Em uma típica interação, um objeto que possua a interface do usuário em uma máquina solicita serviços de um Source Adapter localizado na mesma máquina. O Source Adapter, em seguida, solicita os serviços de um correspondente Target Adapter, residido em uma máquina remota. Finalmente, o Target Adapter solicita serviços de um objeto Facade, co-localizado com o Target Adapter. A Figura 11 mostra este exemplo.

       Aplicando o DAP
      
Assim, para cada classe de negócio identificada (ex. customer, employee), cria-se uma estrutura de pacotes semelhante à Figura 12.

       A partir dessa estrutura de pacotes, cria-se o Modelo de Classes com a estrutura do DAP. A Figura 13 mostra esse processo para a classe Customer.

       Uma vez criado o Modelo de Classes, especifica-se os métodos disponibilizados pelas suas interfaces e algumas características intrínsecas de distribuição. Uma vez definido o Modelo de Classes, desenvolve-se o Modelo de Componentes

      
4.3.4 Implementar Componentes

Fluxo: Desenvolvimento de componentes Atividade: Implementar Componentes
Objetivos:
- Utiliza um gerador de código, da MVCase, para implementar os componentes projetados.
Entradas:
- Modelo de componentes
Saídas:
- Código gerado
Passos:
Responsável: Engenheiro de software
Referências: "-"

       Para que o componente possa ser distribuído, é gerado o código segundo o padrão CORBA. Para cada componente, têm-se os stubs e skeletons e as interfaces que disponibilizam seus serviços.
       Uma vez gerado o código dos componentes e das interfaces, realiza-se sua compilação numa outra ferramenta, como, por exemplo, o JBuilder.
       Feito isso, seguimos para a fase de teste e validação do software. A seção seguinte apresenta uma sugestão de um processo de teste e validação para uma fábrica de software.

5) TESTES E VALIDAÇÃO

5.1 Introdução
       Durante o processo de desenvolvimento de software, há uma grande possibilidade de ocorrência de falhas no produto e o custo associado à correção destas falhas é muito alto. Por este motivo, uma série de testes bem executados, iniciados no começo do ciclo de vida do software, reduz significativamente o custo com manutenção de software.
       Os testes representam a última oportunidade de detectar erros antes do software ser distribuído aos usuários, e podem ser feitos de forma manual e/ou automática. Os principais objetivos do Fluxo de Testes são:
       - verificar a correta integração entre todos os componentes do software;
       - verificar se todos os requisitos do sistema foram corretamente implementados;
       - planejar os testes que devem ser executados em cada iteração, incluindo testes de integração e sistema;
       - executar vários testes e comparar o resultado dos mesmos com os resultados esperados, a fim de produzir uma indicação da qualidade e da confiabilidade do software;
       - realizar os testes de aceitação (homologação).
      
O processo de gerenciamento dos testes pode ser feito com a utilização de ferramentas adequadas para cada sistema. Estas devem ser definidas logo que surgir uma concepção mais clara sobre o tipo de software a ser produzido.
      
As seções seguintes deste documento apresentam os artefatos gerados nesta fase juntamente com seus responsáveis, e detalha o fluxo de atividades da fase.

5.2 Responsáveis e artefatos
      
Os responsáveis e artefatos envolvidos nesta fase são mostrados a seguir:

Engenheiro de Testes Plano de Teste
Relatório de Avaliação dos Testes
Engenheiro de Software Componentes de Teste

       Os artefatos descritos acima são assim descritos:
       - O Plano de Testes descreve as estratégias, os casos e os procedimentos de testes realizados em uma iteração e seu cronograma. Na estratégia de teste estão definidos os tipos de teste que serão executados na iteração e os objetivos que devem ser atingidos. Um caso de teste especifica uma maneira de testar o sistema: o que testar, que procedimentos de teste usar levando em consideração um aspecto de qualidade como, por exemplo, corretude, desempenho ou robustez. Um procedimento de teste especifica como realizar um ou diversos casos de teste. É um conjunto de instruções para execução e avaliação de resultados para um ou mais casos de teste, que podem ser efetivadas manualmente ou através de ferramentas.
       - O Relatório de Avaliação dos Testes é uma análise da cobertura dos casos de teste, bem como de métricas associadas aos testes, de modo a verificar a necessidade de realização de novos testes ou de testes de regressão na próxima iteração.
       - Um Componente de Teste automatiza um ou mais procedimentos de teste, ou partes deles, e pode ser desenvolvido usando-se uma linguagem de programação ou gerado através de uma interação com uma ferramenta de testes. Os componentes de teste podem ser programas, ou scripts e são usados para testar os componentes do modelo de implementação, fornecendo entradas, controlando e monitorando a execução e reportando os resultados.

5.3 Fluxo de atividades
      
O fluxo de atividades da fase de testes e validação é composta das seguintes atividades e respectivos responsáveis:
       1) Elaborar Plano de Testes - Engenheiro de testes
       2) Implementar Testes - Engenheiro de software
       3) Executar Testes - Engenheiro de testes
       4) Avaliar Testes - Engenheiro de testes
      
5) Executar Testes de Aceitação - Usuário/cliente validador
      
Cada uma das fase é melhor descrita nas subseções seguintes:

      
5.3.1 Elaborar Plano de Testes

Fluxo: Testes Atividade: Elaborar Plano de Testes
Objetivos:
- Documentar as informações relevantes ao planejamento dos testes para cada iteração.
Entradas:
- Documento de Requisitos
Saídas:
- Plano de Testes
Passos:
- Definir requisitos a testar
- Descrever casos de testes
- Estruturar Procedimentos de testes
- Projetar componentes
Responsável: Engenheiro de testes
Referências: "-"

       Definir requisitos a testar
       Neste passo, são definidos os requisitos (casos de uso e requisitos não-funcionais) que devem ser testados. Requisitos a testar são itens que têm seus comportamentos observados e medidos.
      
Descrever casos de teste
       A identificação dos casos de testes é feita através da análise dos fluxos de eventos, e dos diferentes cenários dos casos de uso.
       A análise dos fluxos de eventos tem por objetivo descrever as ações do ator ao interagir com o sistema e utilizar estas ações para identificar os casos de testes necessários.
       Os casos de testes funcionais são identificados a partir dos diferentes cenários dos casos de uso (fluxos básicos e alternativos).
       O modelo de análise e projeto e os requisitos não-funcionais devem ser analisados para identificar casos de testes não-funcionais, que podem não ter sido encontrados apenas com base nos casos de uso e seus cenários.
      
Estruturar procedimentos de teste
       Um procedimento de testes descreve, basicamente, passos e informações necessárias para realização do caso de teste ao qual está associado. Deve conter:
      
- Preparação do ambiente (environment set-up): Prover as condições (massa de dados, ferramentas de apoio e equipamentos) necessárias para que o caso de testes seja executado adequadamente e permita a simulação do ambiente real de produção;
      
- Como (através de ferramentas de automação de testes, scripts, etc.) e quando fornecer os dados de entrada e obter os resultados da saída;
      
- Passos para implementação e execução dos testes;
      
- Forma de avaliação dos resultados.
       Os procedimentos de testes definirão como os testes serão implementados e executados.
      
Projetar componentes
       Projetar os componentes constitui, basicamente, em definir quais serão os componentes de apoio, e como deverão ser implementados. Esses componentes podem ser scripts gerados com o auxílio de uma ferramenta de teste, ou implementados pelo engenheiro de software.
      
      
5.3.2 Implementar Testes

Fluxo: Testes Atividade: Implementar Testes
Objetivos:
- Automatizar procedimentos de teste, criando componentes de teste consistentes com os casos de teste associados.
Entradas:
- Plano de Testes (casos e procedimentos de teste)
Saídas:
- Componentes de Teste
Passos:
- Gerar componentes de teste
- Definir conjunto de dados externo
Responsável: Engenheiro de software
Referências: "-"

       Nesta atividade, são gerados componentes de teste para dar apoio à execução dos testes. Por exemplo, a geração de stubs para simular o comportamento de módulos do sistema que ainda não estão prontos; componentes para geração de massa de dados, para conversão de base de dados, para registro das entradas e saídas do sistema; e scripts que simulam o funcionamento do sistema são artefatos que podem ser gerados durante a implementação dos testes.
      
Gerar componentes de teste
       Neste passo, componentes de apoio existentes podem ser modificados, ou novos componentes podem ser iniciados.
       Os componentes de teste são responsáveis por executar os casos e procedimentos de teste definidos e podem ser gerados de duas formas:
      
- Utilizando ferramenta de automação de testes;
      
- Programando explicitamente os componentes de teste;
      
Definir conjuntos de dados externos
       Aqui, o objetivo é criar e manter os dados armazenados externamente aos componentes de teste (em arquivos ou banco de dados, por exemplo), e que serão usados por estes componentes de teste durante a execução dos mesmos.
       Os conjuntos de dados externos agregam valor ao teste das seguintes maneiras:
      
- Dados externos podem ser facilmente modificados com pouco ou nenhum impacto nos componentes de teste;
      
- Casos de teste adicionais podem ser facilmente inseridos nos dados de teste com pouca ou nenhuma modificação nos componentes de teste;
      
- Dados externos podem ser compartilhados por vários componentes de teste;
      
- Conjuntos de dados externos podem conter valores de dados usados para controlar os componentes de teste.

       5.3.3 Executar Testes

Fluxo: Testes Atividade: Executar Testes
Objetivos:
- Verificar a corretude e a qualidade dos casos de uso, builds e releases implementados, avaliando os resultados e registrando os problemas encontrados.
Entradas:
- Plano de Testes
- Componentes de teste
Saídas:
- Registro dos resultados
Passos:
- Executar os procedimentos de teste
- Registrar resultados
Responsável: Engenheiro de testes
Referências: "-"

       A execução dos testes acontece, basicamente, em três momentos bem definidos: durante a implementação dos casos de uso (testes unitários), onde é realizada pelo próprio programador; após a integração dos casos de uso e/ou dos demais módulos do sistema (testes de integração e/ou de sistemas), onde os testes são realizados pelos próprios programadores ou, por uma equipe independente de testes; e durante a homologação do sistema, onde os testes são executados pelo usuário (testes de aceitação).
       Executar os procedimentos de teste
       Neste passo, os procedimentos e casos de testes são executados com objetivo de encontrar falhas no caso de uso ou módulo em teste. Para tanto, o ambiente de teste, as ferramentas e componentes de apoio devem estar descritos conforme nos procedimentos de teste para que o testador possa executar os casos de teste nas condições ideais. Os testes realizados neste passo são os testes de integração ou de sistema.
       Registrar resultados
       Os resultados dos testes devem ser registrados sob forma de algum dado que possa ser posteriormente analisado: planilha, arquivo texto, etc.

       5.3.4 Avaliar Testes

Fluxo: Testes Atividade: Avaliar Testes
Objetivos:
- Medir quantitativamente e qualitativamente o progresso dos testes e gerar um relatório de avaliação dos testes.
Entradas:
- Plano de Testes
- Registro dos resultados
Saídas:
- Relatório de Avaliação de Testes
Passos:
- Avaliar procedimentos de teste
- Verificar se os critérios de completude e sucesso dos testes foram atingidos
Responsável: Engenheiro de testes
Referências: "-"

       A avaliação dos testes pode ser feita através de resultados e gráficos produzidos por ferramentas usadas durante a execução dos mesmos.
       Avaliar procedimentos de teste
       A avaliação dos procedimentos de teste envolve verificar se o ambiente definido para os testes realizados refletiu a necessidade dos testes, ou seja, se os testes foram realizados no ambiente definido. Também devem ser analisados, aspectos que envolvem a cobertura dos casos de testes projetados, ou seja, se os casos de testes definidos cobriram todos os cenários para o caso de uso associado e se as informações contidas em cada caso de teste realmente refletiram o que precisava ser testado.
       Verificar se os critérios de completude e sucesso dos testes foram atingidos
       O objetivo deste passo é determinar se os testes foram completamente executados e de forma aceitável. Neste momento a estratégia definida no Plano de Testes deve ser revisada. Esta estratégia deve apresentar critérios de teste em termos de cobertura dos testes e/ou avaliação de defeitos. Os resultados dos testes, os defeitos e a análise destes defeitos devem ser estudados para verificar se eles satisfizeram os critérios estabelecidos.
       No caso dos critérios não terem sido atingidos, há algumas alternativas:
       - Coletar informações adicionais e repetir os testes;
       - Modificar o critério de aceitação dos testes e repeti-los;
       - Sugerir testes adicionais.

       5.3.5 Executar Testes de Aceitação

Fluxo: Testes Atividade: Executar testes de aceitação
Objetivos:
- Executar testes de aceitação para o último build gerado e registrar os problemas encontrados.
Entradas:
- Último build gerado
Saídas:
- Observações do validador
Passos:
Responsável: Usuário validador
Referências: "-"

       Os testes de aceitação devem ter início quando a avaliação dos testes indicarem que o sistema atingiu os objetivos de qualidade definidos no Plano de Testes. Esta atividade não possui passos, uma vez que o usuário é responsável por realizar e executar testes sem seguir um roteiro fixo. Os problemas encontrados devem ser reparados.