Desenvolvimento ágil de software

36
Engenharia de Software Unidade III – Desenvolvimento Ágil de Projetos de Software Objetivo: Enfatizar o modelo e as práticas ágeis de desenvolvimento de software Prof. Nécio de Lima Veras

Transcript of Desenvolvimento ágil de software

Page 1: Desenvolvimento ágil de software

Engenharia de SoftwareUnidade III – Desenvolvimento Ágil de Projetos de Software

Objetivo: Enfatizar o modelo e as práticas ágeis de desenvolvimento de software

Prof. Nécio de Lima Veras

Page 2: Desenvolvimento ágil de software

Roteiro...

Manifesto Ágil Agilidade e Processos Ágeis

Frameworks TDD BDD User Stories Velocity

Modelos Ágeis SCRUM e XP;

Page 3: Desenvolvimento ágil de software

Manifesto Ágil

Um grupo em fevereiro de 2001, chamado de Agile Alliance, começou a descobrir maneiras melhores e mais leves de desenvolver software valorizando: pessoas e interações ao invés de processos e

ferramentas; softwares funcionando no lugar de documentações

abrangentes; colaborações com clientes do que negociações de

contratos e respostas à mudanças por planos fechados.

Page 4: Desenvolvimento ágil de software

Manifesto Ágil

O modelo é baseado em mudanças abrangentes;

O desenvolvedor deve melhorar

continuamente um protótipo incompleto até que o cliente fique feliz com o resultado;

O Manifesto Ágil está reforçado com outros DOZE princípios que regem a filosofia de criar softwares com agilidade [BECK, 2001].

Page 5: Desenvolvimento ágil de software

Os doze princípios

1. Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de software com valor agregado.

2. Mudanças nos requisitos são bem-vindas, mesmo tardiamente no desenvolvimento. Processos ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente.

3. Entregar frequentemente software funcionando, de poucas semanas a poucos meses, com preferência à menor escala de tempo.

4. Pessoas de negócio e desenvolvedores devem trabalhar diariamente em conjunto por todo o projeto.

Page 6: Desenvolvimento ágil de software

Os doze princípios

5. Construa projetos em torno de indivíduos motivados. Dê a eles o ambiente e o suporte necessário e confie neles para fazer o trabalho.

6. O método mais eficiente e eficaz de transmitir informações para e entre uma equipe de desenvolvimento é através de conversa face a face.

7. Software funcionando é a medida primária de progresso.

8. Os processos ágeis promovem desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter um ritmo constante indefinidamente.

Page 7: Desenvolvimento ágil de software

Os doze princípios

9. Contínua atenção à excelência técnica e bom design aumenta a agilidade.

10.Simplicidade (a arte de maximizar a quantidade de trabalho não realizado) é essencial.

11.As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis.

12.Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e então refina e ajusta seu comportamento de acordo.

Page 8: Desenvolvimento ágil de software

Agilidade e Processos Ágeis Frameworks TDD BDD User Stories Velocity

Page 9: Desenvolvimento ágil de software

Agilidade

Você não tem que escolher entre agilidade e engenharia de software.

Em vez disso, defina uma abordagem de engenharia de software que seja ágil.

Page 10: Desenvolvimento ágil de software

Test Driven Development

“A grande maioria das pessoas já teve alguma experiência com um software que não funcionou como esperado. Softwares que não funcionam corretamente podem levar a muitos problemas, incluindo financeiro, tempo e reputação das empresas. Podendo, inclusive, chegar a influenciar na integridade das pessoas” [ISTQB 2011].

Page 11: Desenvolvimento ágil de software

Test Driven Development

Podemos associar a qualidade de um software à quantidade de falhas percebidas no mesmo; O teste de software ajuda a medir e/ou garantir essa

qualidade;

Níveis de Teste: Unidade (componente) Integração (interface entre componentes) Sistema (comportamento) Aceitação (apropriado para uso).

Page 12: Desenvolvimento ágil de software

Test Driven Development

Modos de Testar: Manual

Ex.: Inspeção manual de Código

Automático Ex.: Asserção com JUnit

No contexto de testes automáticos se sobressaem duas abordagens: TDD (Testing-Driven Development) ou Desenvolvimento dirigido por

testes BDD (Behavior-Driven Design) ou Projeto guiado por comportamento

Page 13: Desenvolvimento ágil de software

TDD

TDD se apoia nos passos: Escreva o teste, para a funcionalidade, antes de

estar implementada (os testes irão falhar) Escreva o código de modo a fazer os teste

passar Refatore o código Repita o processo

Page 14: Desenvolvimento ágil de software

Test Driven Development

Page 15: Desenvolvimento ágil de software

Behavior Driven Development

Sobre BDD podemos fazer as seguintes considerações [Fox e Patterson 2012]: BDD faz perguntas sobre comportamentos antes e

durante o desenvolvimento, visando reduzir falhas na comunicação dentro do projeto.

Requisitos são escritos como estórias de usuários. São criadas descrições simples de como a aplicação deve ser utilizada.

BDD se concentra no comportamento da aplicação versus a implementação da aplicação e os testes são conduzidos utilizando TDD.

Page 16: Desenvolvimento ágil de software

Behavior Driven Development

Um exemplo simples considerando a seguinte narrativa: Como um usuário Eu quero comprar produtos em promoção E então receber um email de confirmação

Scenario: Verificar produtos em promoção Given Que uma loja possui 10 produtos and Que 5 estão em promoção When Eu verifico quais estão em promoção Then Preencho minha sacola apenas com produtos

em promoção

Page 17: Desenvolvimento ágil de software

Behavior Driven Developmentpublic class PromocaoSteps extends PtBRSteps { Loja loja = new Loja(); Sacola sacola = new Sacola(); List<Produto> listaProdutoPromocao; int quantidadeProdutoPromocao;  @Given("Que uma loja possui $quant produtos") public void populaLoja(Integer quantidade) { loja.inicializaProdutos(quantidade); }   @Given("Que $quant estão em promoção") public void informaProdutosPromocao(Integer quantidade) { loja.colocaProdutosPromocao(quantidade); quantidadeProdutoPromocao = quantidade; }   @When("Eu verifico quais estão em promoção") public void verificaProdutosPromocao() { listaProdutoPromocao = loja.retornaProdutosPromocao(); }  @Then("Preencho minha sacola apenas com produtos em promoção") public void populaSacola() { sacola.populaSacola(listaProdutoPromocao);  Assert.assertEquals(listaProdutoPromocao.size(), quantidadeProdutoPromocao); }}

Page 18: Desenvolvimento ágil de software

Behavior Driven Development

Assim temos: “Given” é a condição inicial “When” é a ação realizada para a obtenção do

resultado “Then” a conclusão/comportamento esperado

Page 19: Desenvolvimento ágil de software

User Story

Story vem de conto (estória) e não de história (relato de fatos);

É basicamente uma lista de requisitos, funções que o dono do negócio solicita e que espera que elas sejam entregues, descritas em linguagem coloquial.

Aspectos críticos: Deve ser escrita em cartões (ou post-its), pois devem ser pequenas; Deve identificar uma funcionalidade; Deve ser definida uma forma de validação. Devem ser independentes umas das outras; Não são contratos, mas sim lembretes. Por isso devem ser

informais; Devem agregar valor ao cliente; Devem ser estimáveis; Devem ser testáveis.

Page 20: Desenvolvimento ágil de software

User Story - Exemplos

Page 21: Desenvolvimento ágil de software

Velocity

Uma das mais importantes métricas para um time Ágil; Em termos de gerenciamento de projetos, Velocity é o “valor

de trabalho” que um time precisa completar em um dado período de tempo (entre 1 e 4 semanas);

Este “valor de trabalho” é número total de estórias que o time estimou;

Assim, Velocity é simplesmente o trabalho dividido pelo time;

Para isso é feito um cálculo de produtividade baseado no total de funcionalidades codificadas, seu grau de importância e o tempo gasto;

Page 22: Desenvolvimento ágil de software

Modelos ágeis:SCRUM e XP

Page 23: Desenvolvimento ágil de software

Scrum

É um modo ágil de processo que foi desenvolvido por Jeff Sutherland e por sua equipe no início da década de 1990.

Nos últimos anos foi realizado desenvolvimento adicional de métodos Scrum por Sewaber e Beedle.

Page 24: Desenvolvimento ágil de software

Scrum

Princípios: Pequenas equipes de trabalho são organizadas

de modo a “maximizar a comunicação, minimizar a supervisão e maximizar o compartilhamento de conhecimento tácito informal”.

O processo precisa ser adaptável tanto a modificações técnicas quanto de negócios “para garantir que o melhor produto possível seja produzido”.

O processo produz frequentes incrementos do software “que podem ser inspecionados, ajustados, testados, documentados e expandidos”.

Page 25: Desenvolvimento ágil de software

Scrum

Princípios: O trabalho de desenvolvimento e o pessoal que o

realiza é dividido “em partições claras de baixo acoplamento, ou em pacotes”.

Testes e documentação constantes são realizados à medida que o produto é construído.

O processo Scrum fornece a “habilidade de declarar o produto ‘pronto’ sempre que necessário (porque a concorrência acabou de entregar, porque a empresa precisa de dinheiro, porque o usuário/cliente precisa das funções, porque foi para essa data que foi prometido.)”

Page 26: Desenvolvimento ágil de software

SCRUM

Page 27: Desenvolvimento ágil de software

eXtreme Programming

O XP usa uma abordagem orientada a objetos como seu paradigma de desenvolvimento predileto.

Inclui um conjunto de regras e práticas que ocorrem no contexto de quatro atividades: planejamento, projeto, codificação e teste.

Page 28: Desenvolvimento ágil de software

Extreme Programming (XP)

Planejamento: Começa com a criação de

um conjunto de histórias (histórias do usuário) que descrevem as características e funcionalidades requeridas para o software a ser construído.

Cada história é escrita pelo cliente e é colocada em um cartão de indexação.

Page 29: Desenvolvimento ágil de software

Extreme Programming (XP)

Planejamento: O cliente atribui um

valor (prioridade) para a história, com base no valor de negócio global da característica ou da função.

Membros da equipe XP avaliam então cada história e lhe atribuem um custo – medido em semanas de desenvolvimento.

Page 30: Desenvolvimento ágil de software

Extreme Programming (XP)

Planejamento: Se a história precisar

mais do que três semanas de desenvolvimento, pede-se ao cliente para dividir a história em histórias menores e a atribuição de valor e custo ocorre novamente.

Novas histórias podem ser escritas a qualquer momento.

Page 31: Desenvolvimento ágil de software

Extreme Programming (XP)

Planejamento:

Histórias

Page 32: Desenvolvimento ágil de software

Extreme Programming (XP)

Projeto: O projeto XP segue rigorosamente o princípio KIS

(keep it simple – mantenha a simplicidade).

Um projeto simples é sempre preferível em relação a uma representação mais complexa.

Além disso, o projeto fornece diretrizes de implementação para uma história como ela está escrita – nada mais e nada menos.

O XP encoraja o uso de cartões CRC (Class Responsability Colaborator) como um mecanismo efetivo para raciocinar sobre o software no contexto orientado a objetos.

Page 33: Desenvolvimento ágil de software

Extreme Programming (XP)

Características:

Encoraja a refatoração; A Programação em par; Desenvolvimento incremental; A integração contínua; Testes!!!

Page 34: Desenvolvimento ágil de software

Extreme Programming (XP)

Page 35: Desenvolvimento ágil de software

Exercícios

Page 36: Desenvolvimento ágil de software

Referências

Beck, K., et al. (2001). "Manifesto for Agile Software Development". Agile Alliance. http://agilemanifesto.org/. Acessado em 18 de agosto de 2012.

Fox, A., Patterson, D. (2012). “Engineering Long-Lasting Software: An Agile Approach Using SaaS and Cloud Computing”, Alpha Edition. Strawberry Canyon LLC, 2012.