22. “ Se você desenvolve iterativamente e
não aplica práticas de engenharia ágil
sua base de código morrerá em 2 ou 3
anos...
Não se preocupar com o design
em um processo iterativo torna o
projeto insustentável”
James Shore
41. Meu Deus, que coisa mais chata e ainda
dá mais trabalho. Pra quê eu vou criar
uma nova classe com métodos, se eu
poderia fazer um método único main,
com todos os possíveis erros e ver no
console o resultado com
System.out.println!?”..
“
43. I get paid for code that works, not for tests,
so my philosophy is to test as little as possible
to reach a given level of confidence
(I suspect this level of confidence is high
compared to industry standards, but that
could just be hubris). If I don't typically make
a kind of mistake (like setting the wrong
variables in a constructor), I don't test for it.
I do tend to make sense of test errors, so I'm
extra careful when I have logic with
complicated conditionals. When coding on
a team, I modify my strategy to carefully test
code that we, collectively, tend to get wrong.
66. Refactoring is not the same activity as
redesign, where the programmers take a
conscious decision to change a large-
scale structure. That said,having taken a
redesign decision, a team can use a
refactoring techniques to get to new
design incrementally and safely.
”
“
- Growing Object Oriented
Software Guided By Tests
67. Things like TDD and Continuous
Integration have fundamentally
changed the safety in development.
”
“
- Joshua Kerievsky
68. Como praticar Design evolutivo ?
Como criar sistemas resitentes a mudanças
Como criar sistemas capazes de acomodar
constantes e continuas mudanças?
Como prover crecimento sustentável ?
TUDO FUNCIONACLIENTES E MUDANÇASSISTEMAS LEGADOS = PANICO
O ESQUECIMENTO DA ENGENHARIA DE SOFTWARE AGIL PQ O AGIL VIROU MAINSTREAM
AGILE VIROU MAINSTREAMTODO MUNDO FAZ SCRUM, MAS É REALMENTE AGIL?
MELHOR MOMENTO EH SEMPRE O ULTIMO?CULTURA LEAN E CULTURA START UP E O ACUMULO DA DIVIDA TÉCNICA.
ACRESCIDO DE DIVIDAS ANTERIORES E DAI O SOFTWARE VAI APODRECENDO.
TEM UM CARA QUE O JAMES SHORE QUE DIZ…
SE NAO SE PREOCUPAR COM A ENGENHARIA O PROJETO VAI MORRENDO E DEIXANDO DE SER AGIL
MAIS CARO POR UMA FEATURE DO QUE JOGAR FORA E REFAZER DO ZEROREAFATORAR APAGANDO CODIGO NAO EH REAFATORINGMUDANÇA MUITO CARO IMPOSSIBILITA A EVOLUÇÃO DO SOFTWARECOMPROMETIMENTO DO PREOCUPACAO COM O DESIGN EVOLUTIVO
ITERATIVAMENTE FEATURE POR FEATUREALGUM MOMENTO REPENSAR E REFATORAR O MEU DESIGN ?É FACIL ? AINDA ASSIM MANTER UM DESIGN DE QUALIDADE ?
DIFICULDADE OU IMPEDIMENTO DE MANTER O TRIPÉ DO DESIGN EVOLUTIVOREAFCTORING -> EVOLUIR O DESIGN -> REFACTORING SEM TESTE?OU SEJA: TESTAR SOFTWARE EH NECESSARIO..
MAS POR QUE QUE TESTAR SOFTWARE É NECESSARIO?
BAIXA LEGIBILIDADECRESCENTE NUMERO DE BUGSBAIXA QUALIDADE INTERNABAIXA CURVA DE APRENDIZADOFACILITAR ESPECIFICAÇÃO
DECLARAÇÃO DE PRINCIPIOS QUE FUNDAMENTAM O DESENVOLVIMENTO AGIL DE SOFTWAREOU SEJA, MESMO HAVENDO VALOR NOS INTENS À ACIMA, VALORIZAMOS MAIS OS ITENS A ABAIXOKENT BECKWARD CUNINGHAMANDREW HUNTMARTIN FOWLER
TDD É UM ESTILO DE DESENVOLVIMENTO DE SOFTWARE ÁGIL DERIVADO DO MÉTODO E DO AGILE MANIFESTO.A PRÁTICA ENVOLVE A IMPLEMENTAÇÃO DE UM SISTEMA COMEÇANDO PELOS CASOS DE TESTE DE UM OBJETO. ESCREVENDO CASOS DE TESTE E IMPLEMENTANDO ESTES OBJETOS E MÉTODOS, SURGE A NECESSIDADE DE OUTROS MÉTODOS E OBJETOS.
FINALIDADE: ENCONTRAR ERROSMYERS (2004) USA A PSICOLOGIA PARA DEFENDER QUE O OBJETIVO DO TESTE DEVE SER ENCONTRAR ERROS. SE O OBJETIVO FOR CONTRARIO, OU SEJA, PROVAR QUE O SOFTWARE NÃO POSSUI FALHAS, O SUBCONSCIENTE DO TESTADOR TENDERÁ A SELECIONAR DADOS PARA O TESTE COM BAIXA PROBABILIDADE DE FALHAR. LOGO, SE O OBJETIVO FOR ENCONTRAR ERROS, OS DADOS SELECIONADOS TENDERÃO A UMA MAIOR PROBABILIDADE DE FALHAR.
FINALIDADE: ENCONTRAR ERROSMYERS (2004) USA A PSICOLOGIA PARA DEFENDER QUE O OBJETIVO DO TESTE DEVE SER ENCONTRAR ERROS. SE O OBJETIVO FOR CONTRARIO, OU SEJA, PROVAR QUE O SOFTWARE NÃO POSSUI FALHAS, O SUBCONSCIENTE DO TESTADOR TENDERÁ A SELECIONAR DADOS PARA O TESTE COM BAIXA PROBABILIDADE DE FALHAR. LOGO, SE O OBJETIVO FOR ENCONTRAR ERROS, OS DADOS SELECIONADOS TENDERÃO A UMA MAIOR PROBABILIDADE DE FALHAR.AII A GENTE ENTRA NO CONCEITO DE MICROTESTS
TESTAR UNITÁRIO É UM CONCEITO TÃO BELO QUE FICA SIMPLES. ATRAVES DE BABY STEPS
PRECISO TESTAR TUDO?
DESIGN EMERGE
UM MUNDO DE TECNICAS PARA REFATORAR A LEGIBILIDADE DO CODIGOESCREVENDO A REGRA DE NEGOCIO NO MEU CODIGO XEGO A ALGO PARECIDO COM DDD
SEU CODIGO É O SEU DESIGNDESIGN EMERGENTEEXEMPLO DE CLIENTE QUE LIGA PERGUNTANDO A RESPEITO DE REGRA QUE VC LEH NO CODIGO
APAGAR CODIGO E REESCREVER NÃO É REFACTORING. VC PODE VOLTAR NO ERRO.NÃO PENSAR NO DESIGN E DEIXA-L EMERGIR DO REFACTORING
QUESTIONAMENTOS TDD, DESIGN EVOLUTIVO, GOSTAR DE GREENFIELD