O Pensamento Ágil

Preview:

DESCRIPTION

Agile não é substantivo, é adjetivo.

Citation preview

O Pensamento Ágil

Insanidade é fazer as coisas sempre do mesmo jeito e

esperar que o resultado mude.

Rita Mae Brown

Qualidade

A qualidade de software é uma área de conhecimento da

engenharia de software que objetiva garantir a qualidade do software através da definição e normatização de processos de

desenvolvimento.

"

Segundo a norma ISO 9000 (versão 2000), a qualidade é o grau em

que um conjunto de características inerentes a um

produto, processo ou sistema cumpre os

requisitos inicialmente estipulados para estes.

"

No desenvolvimento de software, a qualidade do produto está diretamente

relacionada à qualidade do processo de

desenvolvimento

"

!

• CMMI • MPS.BR • ISO 9126 • ISO 15504 • ISO 12207

Modelos de qualidade:

"

qualidade de software = qualidade do

processo

no mundo tradicional…

Qualidade do Processo

repetitível

controlável

repetitível

controlável

infinitas variáveis

poucas regras

o mundo é complexo

o mundo é caóticopequenas variações no sistema podem

causar consequências estrondosas

o mundo não é linear

qualidade de software = ROI

no mundo moderno…

Our analysis suggests that 20% of features are used often and 50% of features are hardly ever

or never used.

http://versionone.com/assets/img/files/ChaosManifesto2013.pdf

"

backlog

backlog

backlog

backlog

backlog

escopo

custo

prazo

excelência

escopo

custo

prazo

excelência

fazermais

fazercertovs

escopo

custo

prazo

excelência

escopo

custo

prazo

excelência

escopo

custo

prazo

excelência

1

2

3

4

5

backlog

backlog

backlog

backlog

backlog

Lançamento

escopo

custo

prazo

excelência

1

2

3

4

5

backlog

backlog

backlog

backlog

backlog

Lançamento

http://en.wikipedia.org/wiki/Perpetual_beta

Simplicidade

20%

80%

20%

80%

esforço resultados

Menos é Mais

vs

Aprendizado

desenvolvimento de software = aprender

aprende-se constrói-se

análise de requisitos

R

Q

P D T

R

Q

P D T

R

Q

P

DT

C

(

R

Q

P

DT

C

Meses !!!

R

Q

P

DT

C

Meses !!!

!=

(

waterfall

The first formal description of the waterfall model is often cited as a 1970 article by Winston W. Royce,[4][5] although Royce did not use the term "waterfall" in

this article. Royce presented this model as an example of a flawed, non-working model.

http://en.wikipedia.org/wiki/Waterfall_model#cite_note-0

"

http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

I believe in this concept, but the implementation described above is

risky and invites failure."

http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

• Planejamento da Contratação

‣ Análise da Viabilidade da Contratação

‣ Plano de Sustentação

‣ Estratégia da Contratação

‣ Análise de Riscos

‣ Termo de Referência ou Projeto Básico

- objeto - fundamentação da contratação - descrição da solução - requisitos da solução!- modelo de prestação de serviços

- elementos para gestão do contrato - estimativa de preços - adequação orçamentária - critérios de sanções - critérios de seleção do fornecedor

• Seleção do Fornecedor

• Gerenciamento do Contrato

IN SLTI MP 04/2010!IN SLTI MP 02/2012

aprende-se constrói-se

define-se constrói-se

aprende-se contrata-se

valida-se constrói-se

valida-se constrói-se

startups

http://startupbizmodel.com/2013/04/18/sua-startup-esta-preparada-para-receber-investimento/

=

R

Q

P

DT

R

Q

PD

T

RP

DT

RP

DT

2 meses 2 meses 2 meses

R

Q

PD

T

RP

DT

RP

DT

2 semanas 2 semanas 2 semanas

Q

R P

DT

Q

R P

DT

C

)

R P

DT

C

)

R P

DT

R P

DT

RP

D T

D

D

D

T

TT

TTP

PP

P

P

R

R

R

R

R

RP

D T

D

D

D

T

TT

TTP

PP

P

P

R

R

R

R

R?

==?

Melhoria

==?

Plan Do Check Act

==?

Plan Do Check Act

?

Pilha de funcionalidades

Esforço

Prioridade

Esforço

Prioridade

X

Benefício

CustoX

RoI

Simplicidade

Diário

Semanal

Mensal

Tri-mestral

Estratégico

...

Diário

Semanal

Mensal

Tri-mestral

Estratégico

...

Design Evolutivo

?

Adaptabilidade

Qualidade Embutida

Testes Automáticos

Programa

Teste

Programa

Teste

Programa

Teste

(...) public int soma(int a, int b) { // código

} (...)

(...) public void meuTeste() { int par1 = 1; int par2 = 1; int result = Classe.soma(par1,par1); assertEquals(2, result);

} (...)

(...) public int soma(int a, int b) { // código

} (...)

(...) public void meuTeste() { int par1 = 1; int par2 = 1; int result = Classe.soma(par1,par1); assertEquals(2, result);

} (...)

Preparação

(...) public int soma(int a, int b) { // código

} (...)

(...) public void meuTeste() { int par1 = 1; int par2 = 1; int result = Classe.soma(par1,par2); assertEquals(2, result);

} (...)

Exercício

(...) public int soma(int a, int b) { // código

} (...)

(...) public void meuTeste() { int par1 = 1; int par2 = 1; int result = Classe.soma(par1,par1); assertEquals(2, result);

} (...)

Verificação

X

10

30

20 30 40 50 60 70

30 30 30 30 30 30

public class Romanos { !public static String parse(int entrada) { StringBuilder resultado = new StringBuilder(); if (entrada <= 3) { for (int i = 0; i < entrada; i++) resultado.append("I"); return resultado.toString(); } else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } else if (entrada < 9){ resultado.append("V"); return resultado.toString(); }else if (entrada == 9){ return "IX"; }else{ return "X"; } } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !!

public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

public class Romanos { !public static String parse(int entrada) { StringBuilder resultado = new StringBuilder(); if (entrada <= 3) { for (int i = 0; i < entrada; i++) resultado.append("I"); return resultado.toString(); } else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } else if (entrada < 9){ resultado.append("V"); return resultado.toString(); }else if (entrada == 9){ return "IX"; }else{ return "X"; } } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !!

public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

public class Romanos { !public static String parse(int entrada) { StringBuilder resultado = new StringBuilder(); if (entrada <= 3) { for (int i = 0; i < entrada; i++) resultado.append("I"); return resultado.toString(); } else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } else if (entrada < 9){ resultado.append("V"); return resultado.toString(); }else if (entrada == 9){ return "IX"; }else{ return "X"; } } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !!

public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

!public static String parse(int entrada) { else if (entrada == 4) { return "IV"; } else if(entrada == 5){ return "V"; } !} !

Tempo

Custo

Comunicação

R P D TC

R P D TC

?!

R P D TC

R

P D

T

C

Agile Manifesto

O Manifesto Agilhttp://agilemanifesto.org

Autoreshttp://agilemanifesto.org

@KentBeck

@kschwaber

@jeffsutherland

@martinfowler

@pragdave

Andrew Hunt

Arie van Bennekum

@WardCunningham

@TotherAlistair

@marick

@jimhighsmith

@unclebobmartin

@RonJeffries

Mike Beedle

@JonKernPA

Valoreshttp://agilemanifesto.org

Indivíduos e interação entre elesprocessos e feramentas

mais que

Software funcionando

mais que

documentacao abrangente

Colaboração com o cliente

mais que

negociacao de contratos

Responder a mudanças

mais que

seguir um plano

Princípioshttp://agilemanifesto.org

Nossa maior prioridade é satisfazer o cliente, através

de entregas rápidas e contínuas gerando valor

ao software.

1

Receber bem as mudanças dos requisitos, mesmo em

estágios tardios do desenvolvimento.

2

Trabalhando para entregar software, em intervalos de

2 semanas até 2 meses

3

Empresários e desenvolvedores devem

trabalhar juntos diariamente durante todo

o projeto.

4

Construa projetos com indivíduos motivados, dê-

lhes o ambiente e o suporte que precisam, e confie neles para ter o

trabalho realizado

5

O método mais eficiente e efetivo de transmitir

informação para a equipe de desenvolvimento está na conversa face-a-face

6

Software funcionando é a principal medida para o

progresso

7

Processos ágeis promovem o desenvolvimento

sustentável.

8

Atenção contínua para uma excelência técnica e um bom design aumentam

a agilidade

9

Simplicidade – a arte de maximizar o valor do trabalho não feito – é

essencial

10

As melhores arquiteturas, requisitos, e design

emergem a partir de equipes auto-organizadas

11

Em intervalos regulares, as equipes devem refletir sobre

como tornaram-se mais efetivas, em seguida aprimorar e ajustar de acordo com seu

comportamento.

12

Scrum

ScrumSCRUM

CERIMÔNIAS

Sprint Planning

Sprint Review

Retrospectiva

Daily Scrum

Estimation Meeting

ESTIMATION MEETING

PRODUCT BACKLOG

USER STORIES

USER STORIES

Cadastro de e-mail na Newsletter

Como: ClienteEu: Cadastro minha conta de e-mail na newsletter Para: Receber informações do Fornecedor

3

Pronto

- E-mail do cliente cadastrado corretamente no banco- Newsletter enviada ao e-mail cliente na publicação- Newsletter recebida corretamente no e-mal do cliente

Planning Poker

SPRINT PLANNING

SPRINT BACKLOG

TAREFAS

KAN-BAN

SPRINT BURNDOWN

DAILY SCRUM

DAILY SCRUM

• O que fez desde a última reunião?

• O que vai fazer até a próxima?

• Há algum impedimento?

SPRINT REVIEW/ DEMO

SPRINT REVIEW / DEMO

RETROSPECTIVA

RETROSPECTIVA

SE ADAPTE!“Não é o mais forte das espécies que sobrevive, nem o mais inteligente, mas o mais adaptável às mudanças.”

Charles Darwin

!

Agile Is Dead (Long Live Agility)http://pragdave.me/blog/2014/03/04/time-to-kill-agile/

The word “agile” has been subverted to the point where it is effectively meaningless (…)

“Do Agile Right” is like saying “Do Orange Right.”

Let’s abandon the word agile to the people who don’t do things.

• Find out where you are. • Take a small step towards your goal. • Adjust your understanding based on what you learned. • Repeat

http://mikehadlow.blogspot.co.uk/2014/03/coconut-headphones-why-agile-has-failed.html

Why Agile has Failed

If your role is simply asking for estimates and enforcing the agile rituals: stand-ups, fortnightly sprints,

retrospectives; then you are an impediment rather than an asset to delivery.

(…) over the decade (…), agile has come to mean ‘management agile’

In the meantime, the word ‘agile’ has become so abused, that we should stop using it

Coding Dojo