Post on 18-Nov-2014
description
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
@KentBeck
@kschwaber
@jeffsutherland
@martinfowler
@pragdave
Andrew Hunt
Arie van Bennekum
@WardCunningham
@TotherAlistair
@marick
@jimhighsmith
@unclebobmartin
@RonJeffries
Mike Beedle
@JonKernPA
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
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