Projetos novos ou legados exigem da equipe muita disciplina para manter todo o código limpo e conciso. Mesmo seguindo várias técnicas e padrões, devido a nossa condição humana, estamos sujeitos a cometer falhas o que nos leva a escrever código complexo e de difícil entendimento. Há várias práticas que ajudam a amenizar e corrigir estas falhas. Fazer testes, saber como e quando fazer um refactoring são essenciais para garantir a satisfação do cliente. Esta palestra aborda pontos que ajudam a criar ou manter um projeto através de testes, boas práticas de codificação, refactoring e design evolutivo.
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
Palestra realizada no Meetup Total PHP sobre Clean Code e Object Calisthenics aplicados no PHP.
Nesta palestra são apresentados conceitos importantes para manter seu código limpo e aplicar técnicas de refactoring para manter seu código organizado e performatico.
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
Palestra realizada no Meetup Total PHP sobre Clean Code e Object Calisthenics aplicados no PHP.
Nesta palestra são apresentados conceitos importantes para manter seu código limpo e aplicar técnicas de refactoring para manter seu código organizado e performatico.
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
- TDD: Red – Green – Refactor
- Testes de Unidade x Testes de Integração
- Ports and Adapters Pattern
- Business Domain versus Technical Domain
- Testes de Unidade com JMock
- Coverage Tests
- Logging Tests
Aula teórica 2 da unidade (disciplina) de Programação Orientada por Objectivos para os cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.
"Pau que nasce torto ...". TDD e a qualidade de código.Juliano Santos
Colocar software em produção de forma rápida é essencial para as empresas hoje em dia ... mas, a qualquer custo? É necessário ter ciclos de desenvolvimento curtos sem comprometer a qualidade dos sistemas. Vamos falar um pouco sobre o TDD e como ele pode nos ajudar a fazer um código melhor.
Um workshop que eu e Dherik Barison fizemos para levantar alguns pontos sobre como escrever bons testes, também levantamos alguns argumentos sobre o que existe no mundo de sotfware quando o tema é Testes, um workshop para trazer discussões das pessoas que o assistiram, para que conseguíssemos articular os assuntos de uma forma aberta, trazendo muitas vezes mais questionamentos do que respostas para os participantes
=D
Essa apresentação fala um pouco sobre o que é, quando e porque aplicar Refatoração em seu código.
Além de mostrar algumas técnicas que Martin Fowler mostra em seu livro.
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
- TDD: Red – Green – Refactor
- Testes de Unidade x Testes de Integração
- Ports and Adapters Pattern
- Business Domain versus Technical Domain
- Testes de Unidade com JMock
- Coverage Tests
- Logging Tests
Aula teórica 2 da unidade (disciplina) de Programação Orientada por Objectivos para os cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.
"Pau que nasce torto ...". TDD e a qualidade de código.Juliano Santos
Colocar software em produção de forma rápida é essencial para as empresas hoje em dia ... mas, a qualquer custo? É necessário ter ciclos de desenvolvimento curtos sem comprometer a qualidade dos sistemas. Vamos falar um pouco sobre o TDD e como ele pode nos ajudar a fazer um código melhor.
Um workshop que eu e Dherik Barison fizemos para levantar alguns pontos sobre como escrever bons testes, também levantamos alguns argumentos sobre o que existe no mundo de sotfware quando o tema é Testes, um workshop para trazer discussões das pessoas que o assistiram, para que conseguíssemos articular os assuntos de uma forma aberta, trazendo muitas vezes mais questionamentos do que respostas para os participantes
=D
Essa apresentação fala um pouco sobre o que é, quando e porque aplicar Refatoração em seu código.
Além de mostrar algumas técnicas que Martin Fowler mostra em seu livro.
Fundamentos dos padrões de projeto de desenvolvimento de software General Responsability Assignment Software Pattern (GRASP), Gang of Four (GoF) e do Padrão Arquitetural Model View Control (MVC)
Existem diversas arquiteturas no mundo Android hoje em dia, a mais vista entre elas é a MVVM que utiliza programação imperativa. Nessa palestra vamos falar sobre MVI e como criar uma arquitetura reative utilizando um fluxo unidirecional entre as ações do usuário e os diferentes estados apresentados na tela.
Como usar a biblioteca SimpleTest do PHP para ganhar tempo resolvendo os problemas mas simples do dia-a-dia. Essa apresentação foi elaborada para o PHPConference2008 que aconteceu em Osasco, SP Brasil.
24. public boolean finalizar(AditivoContato aditivo) {
if ((aditivo.getValor() > aditivo.getContrato().getValor() * 0.30
&& aditivo.getAprovacaoGerente() == ‘S’)
&& aditivo.getValor() < getSaldoConta(aditivo.getConta())) {
aditivo.getContrato().setStatus(‘A’);
aditivo.getContrato().setValor(aditivo.getValor() ...);
aditivo.setStatus(‘F’);
dao.save(aditivo);
return true;
} else {
return false;
}
1 - Checa se ultrapassa 30% e se está aprovado
}
25. public boolean finalizar(AditivoContato aditivo) {
if ((aditivo.getValor() > aditivo.getContrato().getValor() * 0.30
&& aditivo.getAprovacaoGerente() == ‘S’)
&& aditivo.getValor() < getSaldoConta(aditivo.getConta())) {
aditivo.getContrato().setStatus(‘A’);
aditivo.getContrato().setValor(aditivo.getValor() ...);
aditivo.setStatus(‘F’);
dao.save(aditivo);
return true;
} else {
return false;
}
1 - Checa se ultrapassa 30% e se está aprovado
}
2 - Verifica se há saldo para o aditivo
26. public boolean finalizar(AditivoContato aditivo) {
if ((aditivo.getValor() > aditivo.getContrato().getValor() * 0.30
&& aditivo.getAprovacaoGerente() == ‘S’)
&& aditivo.getValor() < getSaldoConta(aditivo.getConta())) {
aditivo.getContrato().setStatus(‘A’);
aditivo.getContrato().setValor(aditivo.getValor() ...);
aditivo.setStatus(‘F’);
dao.save(aditivo);
return true;
} else {
return false;
}
1 - Checa se ultrapassa 30% e se está aprovado
}
2 - Verifica se há saldo para o aditivo
3 - atualiza status e calcula novo valor do
contrato
27. public boolean finalizar(AditivoContato aditivo) {
if ((aditivo.getValor() > aditivo.getContrato().getValor() * 0.30
&& aditivo.getAprovacaoGerente() == ‘S’)
&& aditivo.getValor() < getSaldoConta(aditivo.getConta())) {
aditivo.getContrato().setStatus(‘A’);
aditivo.getContrato().setValor(aditivo.getValor() ...);
aditivo.setStatus(‘F’);
dao.save(aditivo);
return true;
} else {
return false;
}
1 - Checa se ultrapassa 30% e se está aprovado
}
2 - Verifica se há saldo para o aditivo
3 - atualiza status e calcula novo valor do
contrato
4 - Define novo status
28. public boolean finalizar(AditivoContato aditivo) {
if ((aditivo.getValor() > aditivo.getContrato().getValor() * 0.30
&& aditivo.getAprovacaoGerente() == ‘S’)
&& aditivo.getValor() < getSaldoConta(aditivo.getConta())) {
aditivo.getContrato().setStatus(‘A’);
aditivo.getContrato().setValor(aditivo.getValor() ...);
aditivo.setStatus(‘F’);
dao.save(aditivo);
return true;
} else {
return false;
}
1 - Checa se ultrapassa 30% e se está aprovado
}
2 - Verifica se há saldo para o aditivo
3 - atualiza status e calcula novo valor do
contrato
4 - Define novo status
5 - Responde a resquisição
36. public boolean finalizar(AditivoContato aditivo) {
return aditivo.podeFinalizar() &&
hasSaldoAditivo(aditivo) &&
repository.salvo(aditivo.finalizado()));
}
Realizando apenas uma operção :)
37. public boolean finalizar(AditivoContato aditivo) {
return aditivo.podeFinalizar() &&
hasSaldoAditivo(aditivo) &&
repository.salvo(aditivo.finalizado()));
}
Uma mudança de requisitos pode impactar
apenas um método no sistema
38. public boolean finalizar(AditivoContato aditivo) {
return aditivo.podeFinalizar() &&
hasSaldoAditivo(aditivo) &&
repository.salvo(aditivo.finalizado()));
}
Realizando apenas uma operção :)
Uma mudança de requisitos pode impactar
apenas um método no sistema
60. ...para atingir o objetivo
✓Faça mudanças necessárias
✓Não quebre funcionalidade
✓E melhore o design do código
61. regra 1: contato com código
siga o modelo já existente
nomenclaturas, bibliotecas, estrutura
62. regra 2: contato com código
respeite os desenvolvedores
que estão ou que passaram pelo projeto
63. regra 3: em quem não confiar?
em sistemas de deploy
analise as etapas, dependências e refine-o removendo passos
personalizados
64. regra 4: em quem não confiar?
apenas nas especificações
documentos facilmente estão desatualizados
65. regra 5: em quem não confiar?
apenas no código e testes
eles estão atendendo ao propósito?
66. regra 6: feedbacks rápidos
faça deploy, execute e teste-o!
Mais de uma vez
quanto tempo você gasta?
67. regra 7: feedbacks rápidos
crie falhas!
veja o quão tolerante é o seu sistema
68. regra 8: feedbacks rápidos
crie um ambiente de testes
não fique no escuro e porque não integração contínua?
69. regra 9: feedbacks rápidos
prove que suas mudanças
funcionaram
Tudo continua funcionando
Nova funcionalidade está ok
70. regra 9: feedbacks rápidos
prove que suas mudanças
funcionaram
Tudo continua funcionando
Nova funcionalidade está ok
Como?
71. regra 9: feedbacks rápidos
prove que suas mudanças
funcionaram
Tudo continua funcionando
Nova funcionalidade está ok
Como?
Testes Unitários + Testes de Integração
72. regra 10: manter a ordem
evite inserir comentários
deixe o código falar pro si
73. código auto-explicativo
// funcionários de contratação mensal que tenha
certificações e que
tenham mais de 5 anos de carreira ganham 5%
if (tipoContratacao() == “mensal” || certificacoes > 0 &&
getTotalEmAnosContratado() > 5) {
bonus = 0.05;
}
74. código auto-explicativo
// funcionários de contratação mensal que tenha
certificações e que
tenham mais de 5 anos de carreira ganham 5%
if (tipoContratacao() == “mensal” || certificacoes > 0 &&
getTotalEmAnosContratado() > 5) {
bonus = 0.05;
}
Que tal isso?
if (possuiCriteriosParaBonus())
75. regra 11: manter a ordem
remova códigos comentados
se é velho ou desnecessário porque está aqui?
76. regra 12: manter a ordem
sempre que puder, remova
excessos de acoplamento
o ideal é ter um ponto de mudança