segunda-feira, 9 de junho de 2014

Metodologias de Desenvolvimento de Software - Principais!



         Metodologias Ágeis (principais)
     Dentre as metodologias ágeis para desenvolvimento de software podemos citar: Scrum (para gestão de projetos e que pode ser aliada a outra metodologia ágil), eXtreme Programming, Feature Driven Development (FDD), Test Driven Development (TDD), Dynamic Systems Development Method (DSDM), Adaptive Software Development, Crystal e Pragmatic Programming. Nas descrições a seguir, citaremos as quatro primeiras metodologias.

  1.   Scrum
     Scrum é um framework simples para colaboração em equipe eficaz em projetos complexo, fornecendo um pequeno conjunto de regras que criam uma estrutura para que as equipes sejam capazes de concentrar seus esforços na resolução de problemas. Apoia o aproveitamento de competências de cada membro do time.
     Para a construção de produtos complexos para os clientes é uma tarefa inerentemente difícil fornece uma base para permitir que equipes para lidem com essa dificuldade [17]. 
Podemos elencar as seguintes características do Scrum:
  •          clientes se tornam parte da equipe de desenvolvimento;
  •          entregas frequentes e parciais de funcionalidades 100% desenvolvidas;
  •          planos de mitigação de riscos desenvolvidos pela equipe;
  •          reuniões diárias de status com a equipe;
  •          A reunião diária na qual cada membro da equipe responde às seguintes perguntas:
ü  O que fiz desde ontem?
ü  O que estou planejando fazer hoje?
ü  Existem impedimentos?
  •          transparência no planejamento e desenvolvimento;
  •          reuniões frequentes com os stakeholders (todos os envolvidos no processo) para monitorar o progresso;
  •          problemas não são ignorados e ninguém é penalizado por reconhecer ou descrever qualquer problema não visto.
Os principais papéis atuantes no Scrum são:
      i.        product owners: responsável por determinar o que precisa ser construído;
    ii.        time: responsável por construir o que é necessário e, em seguida, demonstrar o que o que foi construído. Com base nesta apresentação, o Product Owner determina as demais prioridades.
   iii.        scrum master: responsável por garantir que esse processo aconteça da melhor forma possível, e deve ajudar na sua melhora contínua.
Na figura a seguir, visualize os detalhes do Scrum.
Figura 5 – Scrum
Scrum
      Dentre as vantagens do Scrum podemos citar: velocidade, motivação do time de desenvolvimento, redução de surpresas com os resultados, diminuição de defeitos, revisão de prioridades, etc.. Em relação às desvantagens, pode-se elencar: sensação de informalidade, diferença entre a ideia inicial e a final, alteração de prazo de entrega do produto final em decorrência da constante mudança de escopo e falta de planejamento do escopo [17] [18] [19] .


2. eXtreme Programming (XP)
     A XP é uma metodologia ágil para equipes pequenas e médias que desenvolvem software baseado em requisitos vagos e que se modificam rapidamente. Seus cinco valores fundamentais XP são: comunicação, simplicidade, feedback, coragem e respeito. Com base nesses valores, possui como princípios básicos: feedback rápido, presumir simplicidade, mudanças incrementais, abraçar mudanças e trabalho de qualidade.
      A XP segue uma abordagem orientada a objetos como paradigma de desenvolvimento e envolve quatro atividades metodológicas:
  •          Planejamento;
  •          Projeto;
  •          Codificação;
  •          Testes.
Para aplicar os valores e princípios durante o desenvolvimento de software, XP propõe uma série de práticas:
  •          planejamento (Planning games): são definidas as prioridades e estimativas. Nesta prática são determinadas as histórias que descrevem funcionalidades a serem implementadas;
  •          pequenas entregas (Small Releases): pequenas versões funcionais do projeto são liberadas com o intuito de auxiliar no processo de aceitação por parte do cliente, que já pode testar uma parte do sistema que está adquirindo;
  •          testes de aceitação (Customer Tests): foco na validação do projeto durante todo o processo de desenvolvimento. São testes elaborados pelo cliente, sendo os critérios de aceitação do software;
  •          integração contínua (Continuous Integration): ao produzir uma nova funcionalidade, esta deve ser integrada a versão atualizada do sistema. Assim, minimizará possíveis conflitos e erros no código fonte;
  •          metáfora (Metaphor): descrições de um software sem a utilização de termologia técnica com o objetivo de orientar o desenvolvimento;
  •          refatoração(Refactoring): foco na melhoria contínua do projeto e está presente em todo o ciclo de desenvolvimento;
  •          design Simples (Simple Design): simplicidade na codificação;
  •          desenvolvimento Orientado a Testes (Test Driven Development): primeiramente, são criados os testes unitários e depois, o código é criado para que os testes funcionem;
  •          40 horas de trabalho semanal (Sustainable Pace): foco no trabalho com qualidade e com ritmo saudável. Horas extras são permitidas quando trouxerem produtividade para a execução do projeto.
  •          padronização do código (Coding Standards): padronização na arquitetura do código para que este possa ser compartilhado entre todos os desenvolvedores;
  •          propriedade coletiva: o código pertence a todos os integrantes do time, sendo que toda contribuição de melhoria será benéfica para o projeto;
  •          programação em pares (Pair Programming): o desenvolvimento é realizado em pares, obtendo uma melhor qualidade de testes, códigos e design.
     As principais vantagens da XP são: agilidade e flexibilidade no desenvolvimento, ideal para os casos que o cliente não sabe exatamente quais são os requisitos do software, feedback constantes, adaptações às mudanças e entregas constantes.
     Dentre as desvantagens estão: não existe avaliação de riscos, a análise de requisitos é informal, Refatoração pode ser vista como irresponsabilidade e incompetência, barreira cultural empresarial e a falta de documentação.

1. Feature Driven Development (FDD) 
A FDD - Desenvolvimento Guiado por Funcionalidades - é uma metodologia ágil para gerenciamento e desenvolvimento de software. Combina as melhores práticas do gerenciamento ágil de projetos com uma abordagem completa para Engenharia de Software orientada por objetos, considerando os três principais públicos de um projeto de software: clientes, gerentes e desenvolvedores. 
A FDD apresenta algumas características peculiares: 
  •          planejamento detalhado e guias para métricas;
  •          bloco bem pequenos de funcionalidades valorizadas pelos cliente, chamados “Features”;
  •          resultados úteis a cada iteração;
  •          rastreabilidade e relatórios precisos;
  •          monitoramento detalhado dentro do projeto, com resumos de alto nível para clientes e gerentes. 
Basicamente, essa metodologia é bem objetiva, possuindo apenas duas fases:  
  •          concepção e planejamento: reflexão e planejamento do que vai ser feito;
  •          construção: desenvolvimento de forma iterativa.
 A imagem a seguir, apresenta uma visão detalhada da FDD. 
Figura 6 – FDD

 FDD

Os cinco processos são bem definidos e integrados: 
  • DMA (Desenvolver um Modelo Abrangente): o produto é um modelo de objetos (e/ou de dados) de alto nível, que conduzirá a equipe durante os ciclos de construção;
  • CLF (Construir a Lista de Funcionalidades): decomposição funcional do modelo do domínio, resultando em uma hierarquia de funcionalidades que representa o produto a ser construído;
  • PPF (Planejar por Funcionalidade): o resultado é um plano de desenvolvimento, com os pacotes de trabalho na sequência adequada para a construção;
  • DPF (Detalhar por Funcionalidade): criação de um modelo de domínio mais detalhado e os esqueletos de código prontos para serem preenchidos;
  • CPF (Construir por Funcionalidade): codificação, testes e inspeções, resultando em um incremento do produto integrado ao repositório principal de código, com qualidade e potencial para ser utilizado pelo usuário. 
Dentre as principais vantagens da FDD estão: recomendada para qualquer tipo de desenvolvimento, foco nos aspectos que agregam valor ao cliente, possui requisitos formais, entre outros.
As principais desvantagens são: questionamentos sobre eficácia da metodologia, desconhecimento sobre o tamanho exato do time FDD e manutenções.
 2. Test Driven Development (TDD) 
     O Test Driven Development (TDD) - Desenvolvimento orientado a testes - é uma técnica de desenvolvimento de software que baseia em um ciclo curto de repetições, em que primeiramente, são criados os testes e somente depois é escrito o código necessário para passar por eles.
Um desenvolvimento TDD proporciona alguns benefícios, tais como:
  • melhor entendimento do negócio do sistema: antes de começar a implementar algum código, o engenheiro deve entender o problema/funcionalidade e projetar a solução. Baseando nessa metodologia, precisamos projetar os testes antes;
  • criação de testes ricos: o código deve passar no teste previamente implementado;
  • confiança no código: possibilidade de confiança no código entregue;
  • maior valor agregado ao produto: entregar um produto ao cliente já com os testes implementados, representa uma entrega de maior valor agregado ao produto.
 A figura a seguir, mostra as etapas da TDD. 
 Figura 7 – TDD

 TDD

As vantagens do TDD são: 
  •          facilidade na criação de código com alta coesão e baixo acoplamento;
  •          mantém alta cobertura do código
  •          facilidade do Refactoring;
  •          pode ser entendida como documentação;
  •          reduz o tempo de identificação e correção de defeitos.
 Como principais desvantagens, podemos citar: 
  •          desenvolvimento inicial mais lento;
  •          custo mais elevado de manutenção dos códigos de teste, além do código fonte.

Um comentário: