SlideShare a Scribd company logo
1 of 63
Download to read offline
Agilidade no nível de
Reduzindo interrupções passivas
codificação
@andreitognolo
github.com/andreitognolo
andreitognolo@gmail.com
Testes
unitários
Teste de
integração
Deploy
QA
Deploy
produção
Smoke
test
Testes
unitários
Teste de
integração
Deploy

QA
Deploy
produção
Smoke
test
Agilidade no nível de
Reduzindo interrupções passivas
codificação
PassivaInterrupção
Codificação
Agilidade
PassivaCodificaçãoInterrupçãoAgilidade
PassivaCodificaçãoInterrupçãoAgilidade
PassivaCodificaçãoInterrupçãoAgilidade
PassivaCodificaçãoInterrupçãoAgilidade
Much of agile thinking is about setting up feedback loops so that we
can learn more quickly
Martin Fowler
Much of agile thinking is about setting up feedback loops so that we
can learn more quickly
PassivaCodificaçãoInterrupçãoAgilidade
Martin Fowler
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
PassivaCodificaçãoAgilidadeInterrupção
10-15 minutos! dá tempo de fazer 3 miojos!
Chris Parnin
PassivaCodificaçãoAgilidadeInterrupção
Fluxo de pensamento interrompido
PassivaCodificaçãoAgilidadeInterrupção
Não são apenas
segundos!
Codificar Testar Codificar Testar
Interrupção passiva
{ }RestartServidor
Testar
Login
Entratelade
incluirCliente
Insereumnovo
Cliente
Entratelade
consulta
Verificaqueo
clientefoi
inserido
Empacotar
aplicação
Compilar
PassivaAgilidadeInterrupçãoCodificação
“Tempo em que estamos sendo interrompidos, esperando feedback
para podermos continuar com o fluxo de raciocínio”
Interrupção Passiva
AgilidadeInterrupçãoCodificaçãoPassiva
A interrupção passiva tem efeito
similar a interrupção causada por uma
pessoa
Hipótese
Eu não estou sendo interrompido, eu posso ir pensando
no próximo passo
Codificar Testar Codificar Testar
Eu não estou sendo interrompido, eu posso ir pensando
no próximo passo
Será
30 seg
A interrupção passiva tem efeito
similar a interrupção causada por uma
pessoa
Hipótese
É só você codificar mais e testar tudo de uma vez!
É só você codificar mais e testar tudo de uma vez!
Será
Codificar Testar Codificar Testar
30 seg
É só você codificar mais e testar tudo de uma vez!
Será
Codificar Testar
É só você codificar mais e testar tudo de uma vez!
Será
Cod Test Cod Test Cod Test Cod Test Cod Test
?
Bret Victor
“To design quickly and confidently, we need to be
able to try out ideas and verify hypotheses 

as fast as we think of them”INSTANT
FEEDBACK
As ferramentas que usamos devem ser
como extensões do nosso corpo!
Caminhar é mais importante do que chegar
Atenção:
Os exemplos aqui apresentados são baseados em fatos reais…
Demonstrações e Exemplos
Cenário: Implementação da funcionalidade de renomear repositório no
Snap CI
{ }Testar
Exemplo 1 - Renomear repositório
Exemplo 1 - Renomear repositório
Acessar GitHub
Renomear repositório
Alterar algum arquivo Notificação (web hook)
Renomear
no Snap
Verificar no Snap que foi realmente renomeado
Exemplo 1 - Renomear repositório
Não são apenas
segundos!
Exemplo 1 - Renomear repositório Interrupção
Reduzida
V
#
# Github rename request
#
curl -H "Authorization: token $token" -X PATCH -d "{"name": "rename-$2"}"
https://api.github.com/repos/andreitognolo/$oldName
!
#
# Push something
#
cd ../rename
echo $2 > README.md
git add .
git commit -m "Update readme"
git push
rename.sh
Cenário: Você fez uma alteração no JavaScript do botão de salvar empresa
Exemplo 2 - Forms
{ }Testar
Exemplo 2 - Forms
Exemplo 2 - Forms
Exemplo 2 - Forms
Exemplo 2 - Forms
Exemplo 2 - Forms
Exemplo 2 - Forms
Onde a interrupção passiva é maior
Exemplo 2 - Forms
Onde a interrupção passiva é maior
Exemplo 2 - Forms
Não são apenas
segundos!
Exemplo 2 - Forms Interrupção
Reduzida
V
Simples como implementar um double click…
Cenário: Você fez uma alteração no método de salvar empresa
{ }Testar
Exemplo 3 - Testes
Exemplo 3 - Testes
Mas o que eu quero testar não tem nada a ver com a interface!
Exemplo 3 - Testes Interrupção
Reduzida
V
Exemplo 3 - Testes
Teste automatizado, de preferência com Test Driven Development (TDD)
In My Humble Opinion...
Codificar
Escreveteste

(quefalha)
Rodaoteste
Codificar
Melhoraoteste

(quefalha)
Rodaoteste
Melhoraoteste

(quefalha)
1 seg? 10 seg? 60 seg?
Teste demora
Tende a não fazer babystep
Sem babystep o TDD perde sua magia :(
O que está matando o TDD são as interrupções passivas!
Exemplo 4 - Raiden
O que torna um teste unitário lento?
O slide a seguir contém cenas explícitas de código Java.
Se você não conhece Java, não se apavore, nem vá
embora, vou explicar cada linha...
Exemplo 4 - Raiden
O que pode deixar
esse teste lento?
Exemplo 4 - Raiden
Não são apenas
segundos!
Exemplo 4 - Raiden
If it (test) takes ten seconds just to start testing, toss it!
Allow nothing to slow down your tests.
Test Time!
03 September 2014
by Robert C. Martin (Uncle Bob)
Exemplo 4 - Raiden
Teste unitários / Micro testes
Serviço
Aceitação
UI
Exemplo 4 - Raiden
Hibernate
JPA
Raiden JPA
(especificação)
(implementação para produção) (implementação para teste)
Exemplo 4 - Raiden
Toasty!
Exemplo 4 - Raiden
github.com/andreitognolo/raidenjpa
Interrupção
Reduzida
V
A interrupção passiva tem efeito
similar a interrupção causada por uma
pessoa
Hipótese
A vida é muito curta para desperdiçarmos tempo com
interrupções passivas
Conclusão
- Bret Victor - http://vimeo.com/36579366
!
- Martin Fowler - http://martinfowler.com/bliki/FrequencyReducesDifficulty.html
!
- Chris Parnin - http://blog.ninlabs.com/2013/01/programmer-interrupted/
!
- Uncle Bob - http://blog.cleancoder.com/uncle-bob/2014/09/03/TestTime.html
Referências
@andreitognolo
github.com/andreitognolo
andreitognolo@gmail.com
Obrigado!
is hiring!
http://join.thoughtworks.com/

More Related Content

More from Andrei Tognolo

Overcoming the fear of deployments
Overcoming the fear of deploymentsOvercoming the fear of deployments
Overcoming the fear of deploymentsAndrei Tognolo
 
Fronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraFronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraAndrei Tognolo
 
Reducing passive interruptions
Reducing passive interruptionsReducing passive interruptions
Reducing passive interruptionsAndrei Tognolo
 
Porque nosso time parou de estimar
Porque nosso time parou de estimarPorque nosso time parou de estimar
Porque nosso time parou de estimarAndrei Tognolo
 
Testes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosTestes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosAndrei Tognolo
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malAndrei Tognolo
 

More from Andrei Tognolo (7)

Overcoming the fear of deployments
Overcoming the fear of deploymentsOvercoming the fear of deployments
Overcoming the fear of deployments
 
Fronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a GambiarraFronteiras entre o Lean e a Gambiarra
Fronteiras entre o Lean e a Gambiarra
 
Reducing passive interruptions
Reducing passive interruptionsReducing passive interruptions
Reducing passive interruptions
 
Porque nosso time parou de estimar
Porque nosso time parou de estimarPorque nosso time parou de estimar
Porque nosso time parou de estimar
 
Testes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativosTestes UI: não aceite mais falso negativos
Testes UI: não aceite mais falso negativos
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira mal
 

Agilidade no nível de codificação reduzindo interrupções passivas