O documento discute os princípios do Clean Code e como aplicá-los para manter código de teste limpo e de alta qualidade. Ele apresenta seis pontos importantes: 1) usar nomes significativos; 2) criar classes pequenas; 3) criar funções pequenas e focadas; 4) usar comentários de forma apropriada; 5) seguir boas práticas de formatação; 6) tratar os testes como código importante e mantê-los limpos. O objetivo é produzir código que seja fácil de ler, modificar e dar manutenção.
É notável a quantidade de aplicações em PHP que ainda utilizam nosso velho e conhecido modo Macarrônico de programar: dezenas de snippets e blocos de código que trabalham com regras de negócio, apresentação e tudo mais espalhados por N lugares na aplicação. A solução mais sustentável para esse tipo de situação seja provavelmente a adoção de um framework, mas existe uma resistência muito grande que é completamente justificável: voltamos àquelas perguntas relativas à “para que mexer num time que está ganhando?“. Vamos trabalhar um pouco essa idéia mostrando exemplos e confrontando situações reais.
Domando a irreversibilidade com feature flagsHugo Bessa
Feature Flags é uma excelente ferramenta para ajudar desenvolvedores a cconstruir software com qualidade. A possibilidade de rapidamente desativar uma funcionalidade quebrada ou incompleta pode dar ao seu time mais precisão e paz de espírito. Nessa talk vou mostrar quais os benefícios e as preocupações que todos devem ter ao usá-las.Feature Flags é uma excelente ferramenta para ajudar desenvolvedores a cconstruir software com qualidade. A possibilidade de rapidamente desativar uma funcionalidade quebrada ou incompleta pode dar ao seu time mais precisão e paz de espírito. Nessa talk vou mostrar quais os benefícios e as preocupações que todos devem ter ao usá-las.
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Rogerio Prado de Jesus
Palestra apresentada na PHP Conference Brasil, o maior evento de PHP da América Latina, edição 2012.
Mais informações:
- http://www.phpconference.com.br/
- https://joind.in/talk/view/7764
Nessa palestra relato minha experiência não como um desenvolvedor de software altamente sinistro com duzentos anos de experiência e mil livros publicados - mas sim como um "mero mortal", um desenvolvedor "de verdade", do "mundo real" aplicando a teoria que aprendeu do TDD.
É notável a quantidade de aplicações em PHP que ainda utilizam nosso velho e conhecido modo Macarrônico de programar: dezenas de snippets e blocos de código que trabalham com regras de negócio, apresentação e tudo mais espalhados por N lugares na aplicação. A solução mais sustentável para esse tipo de situação seja provavelmente a adoção de um framework, mas existe uma resistência muito grande que é completamente justificável: voltamos àquelas perguntas relativas à “para que mexer num time que está ganhando?“. Vamos trabalhar um pouco essa idéia mostrando exemplos e confrontando situações reais.
Domando a irreversibilidade com feature flagsHugo Bessa
Feature Flags é uma excelente ferramenta para ajudar desenvolvedores a cconstruir software com qualidade. A possibilidade de rapidamente desativar uma funcionalidade quebrada ou incompleta pode dar ao seu time mais precisão e paz de espírito. Nessa talk vou mostrar quais os benefícios e as preocupações que todos devem ter ao usá-las.Feature Flags é uma excelente ferramenta para ajudar desenvolvedores a cconstruir software com qualidade. A possibilidade de rapidamente desativar uma funcionalidade quebrada ou incompleta pode dar ao seu time mais precisão e paz de espírito. Nessa talk vou mostrar quais os benefícios e as preocupações que todos devem ter ao usá-las.
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Rogerio Prado de Jesus
Palestra apresentada na PHP Conference Brasil, o maior evento de PHP da América Latina, edição 2012.
Mais informações:
- http://www.phpconference.com.br/
- https://joind.in/talk/view/7764
Nessa palestra relato minha experiência não como um desenvolvedor de software altamente sinistro com duzentos anos de experiência e mil livros publicados - mas sim como um "mero mortal", um desenvolvedor "de verdade", do "mundo real" aplicando a teoria que aprendeu do TDD.
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
Inicialmente trataremos sobre padrões de construção de componentes, para então falar sobre interoperabilidade entre aplicações PHP e bibliotecas de componentes interoperáveis. Finalmente mostraremos exemplos de combinações de componentes de diferentes frameworks.
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
O frontend de aplicações web tem importância tão grande quanto o backend para o sucesso do projeto, veremos aqui algumas dicas básicas de otimização de frontend em aplicações django.
Código de má qualidade afeta negativamente tudo ao seu redor. Prejudica a produtividade, demora para desenvolver novas funcionalidades, apresenta muitos defeitos, e por fim desmotiva os desenvolvedores, fazendo-os muitas vezes sair da empresa ou mesmo mudar de área de atuação. Aprender técnicas de refactoring e clean code para manter o código saudável é a solução para alcançarmos um código legível, criando assim um produto manutenível a longo prazo e mantendo os envolvidos motivados.
Apresentação sobre testes em React utilizando Jest e Enzyme. Foi realizado como repasse de conhecimento interno do Instituto Atlântico, ministrado por Henrique Soares, Lucas Gomes e Matheus Freitas Cezar
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
O mercado tem exigido cada vez mais rapidez nas entregas dos times de desenvolvimento, para atender as demandas de negócio e manter a competitividade. Para garantir que essas entregas aconteçam no tempo esperado e com qualidade, é muito importante investir em todos os níveis de teste automatizados. Vamos ver quais são esses níveis de teste e alguns exemplos práticos usando Python de testes unitários, integração, funcionais, performance e mutação.
Apresentação sobre temas abordado no livro Clean Code de Robert C. Martim.
Os benefícios sobre manter seu código limpo. Quais prejuízos um código sujo pode trazer para sua empresa.
Como se expressar no seu código dispensando o uso de inúmeros comentários que poluem o código.
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
Inicialmente trataremos sobre padrões de construção de componentes, para então falar sobre interoperabilidade entre aplicações PHP e bibliotecas de componentes interoperáveis. Finalmente mostraremos exemplos de combinações de componentes de diferentes frameworks.
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
O frontend de aplicações web tem importância tão grande quanto o backend para o sucesso do projeto, veremos aqui algumas dicas básicas de otimização de frontend em aplicações django.
Código de má qualidade afeta negativamente tudo ao seu redor. Prejudica a produtividade, demora para desenvolver novas funcionalidades, apresenta muitos defeitos, e por fim desmotiva os desenvolvedores, fazendo-os muitas vezes sair da empresa ou mesmo mudar de área de atuação. Aprender técnicas de refactoring e clean code para manter o código saudável é a solução para alcançarmos um código legível, criando assim um produto manutenível a longo prazo e mantendo os envolvidos motivados.
Apresentação sobre testes em React utilizando Jest e Enzyme. Foi realizado como repasse de conhecimento interno do Instituto Atlântico, ministrado por Henrique Soares, Lucas Gomes e Matheus Freitas Cezar
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
O mercado tem exigido cada vez mais rapidez nas entregas dos times de desenvolvimento, para atender as demandas de negócio e manter a competitividade. Para garantir que essas entregas aconteçam no tempo esperado e com qualidade, é muito importante investir em todos os níveis de teste automatizados. Vamos ver quais são esses níveis de teste e alguns exemplos práticos usando Python de testes unitários, integração, funcionais, performance e mutação.
Apresentação sobre temas abordado no livro Clean Code de Robert C. Martim.
Os benefícios sobre manter seu código limpo. Quais prejuízos um código sujo pode trazer para sua empresa.
Como se expressar no seu código dispensando o uso de inúmeros comentários que poluem o código.
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
O Projeto (Design) de APIs é algo que todo programador deveria saber, afinal de contas, inevitavelmente todos escrevem programas que se comunicam com outros programas, sejam seus próprios programas ou de terceiros. Muitas vezes, integrar seu código ao de uma API pode ser algo terrível e complicado ou uma experiência simples prazerosa. Mas o que faz uma API ser simples e fácil de usar? O que de fato é uma API e quando devemos criar uma? Como desenvolvemos uma API? Basta usar Padrões de Projeto, DDD, TDD, etc? Esperamos responder essas e outras questões sobre o projeto de API e apresentar exemplos relacionados a um projeto open source real, como o JRimum.
O Projeto (Design) de APIs é algo que todo programador deveria saber.
Afinal de contas, inevitavelmente todos escrevem programas que se comunicam com outros programas, sejam seus próprios programas ou de terceiros. Muitas vezes, integrar seu código ao de uma API pode ser algo terrível e complicado. Outras, uma experiência simples e prazerosa. Mas o que faz uma API ser simples e fácil de usar? O que de fato é uma API e quando devemos criar uma? Como desenvolvemos uma API? Basta usar Padrões de Projeto, DDD, TDD, etc?
Nesta palestra, esperamos responder essas e outras questões sobre o projeto de API e apresentar exemplos relacionados a um projeto open source real, como o JRimum.
Aplicações de Alto Desempenho com JHipster Full StackJoão Gabriel Lima
Palestra apresentada no Meetup da comunidade Sou Java Campinas sobre o JHipster, desmistificando muitas premissas e validando aquilo que temos de melhor no mercado de tecnologias Java.
Palestra ministrada no evento Javou! #08, realizado pela comunidade JavaCE, dia 12/11/2016 no Auditório Nadir Papi Saboya, Faculdade Farias Brito, em Fortaleza-CE
4º Encontro do Grupo de Testes Carioca - Testes de Carga com LocustStefan Teixeira
Palestra apresentada no 4º encontro do Grupo de Testes Carioca, no dia 14/06. Link do Meetup: http://www.meetup.com/Grupo-de-Testes-Carioca/events/229959338/
Meetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
TDC 2014 POA - Clean Code para Testers
1. Clean Code para Testers
Globalcode – Open4education
Stefan Teixeira
stefanfk@gmail.com / stefanteixeira.com.br
2. Sobre o palestrante
Stefan Teixeira!
• QA Engineer!
• Bacharel em Ciência da Computação pela UFRJ!
• Finalizando MBA em Garantia de Qualidade de Software pela Escola
Politécnica da UFRJ!
• Mantém um blog técnico sobre testes: stefanteixeira.com.br!
• Certificado CTAL-TM / TA pelo ISQTB e CPRE-FL pelo IREB!
Contatos:!
• E-mail: stefanfk@gmail.com!
• Twitter: twitter.com/stefan_teixeira!
• Facebook: facebook.com/stefan.teixeira!
• LinkedIn: linkedin.com/in/stefanteixeira!
• GitHub: github.com/stefanteixeira!
• SlideShare: slideshare.net/stefanteixeira
11. !
!
!
!
“I like my code to be elegant and
efficient. Clean code does one thing
well.”!
Bjarne Stroustrup, criador do C++
12. !
!
!
!
“Clean code always looks like it was
written by someone who cares.”!
Michael Feathers, criador do livro “Working
Effectively with Legacy Code"
13. !
!
!
!
“You know you are working on clean code
when each routine you read turns out to
be pretty much what you expected”!
Ward Cunningham, criador do Wiki, do Fit e um dos
signatários originais do Manifesto Ágil
14. The Boy Scout Rule!
“Leave the campground cleaner than you
found it."
17. Use nomes que revelem a
intenção!!
“Se um nome requer um comentário, então ele não
revela sua intenção."!
!
int v1; //valor do produto à vista
int v2; //valor total do produto a prazo
int v3 = v2 - v1; //diferença entre valores à vista e a prazo
!
int valorAVista;
int valorAPrazo;
int diferencaEntreValoresAVistaAPrazo;
18. Use nomes buscáveis!!
• Evite usar variáveis com apenas uma letra!
‣Usar apenas como variáveis de controle (em um
“for”, por exemplo) !
• Evite usar valores “hardcoded" (constantes, strings,
etc.)!
!
assertEquals(“Cadastrado com sucesso”, cadastroPage.getMensagem());
!
public static final String MSG_SUCESSO = “Cadastrado com sucesso”;
assertEquals( MSG_SUCESSO, cadastroPage.getMessage() );
19. Nomes de classes e métodos!
!
Classes:!
•Devem conter substantivos ou frases nominais!
• Ex: LoginPage, Usuario, ConnectionFactory, Conta…!
!
Métodos:!
•Devem conter verbos ou frases verbais!
• Ex: deletarPagina, salvar, incluirUsuario,
removerConta
22. Classes devem ser pequenas!!
!
“The first rule of classes is that they should be small.
The second rule is that they should be smaller than
that.”!
!
“Se a gente não consegue dar um nome sucinto a
uma classe, então provavelmente a classe é grande
demais.”!
!
23. SRP (Single Responsibility
Principle)!
!
!
“Uma classe ou módulo deve ter um, e
apenas um, motivo para mudar."!
!
26. Funções devem ser pequenas!!
!
!
“The first rule of functions is that they
should be small. The second rule is that
they should be smaller than that.”!
27. Use nomes descritivos!!
“Não tenha medo de dar um nome longo a uma função. !
Um nome longo e descritivo é melhor do que um curto
e enigmático. !
Um nome longo e descritivo é melhor do que um
comentário.”!
!
//Testa a inclusão de um usuário informando CPF inválido
testeIncluirFalha()
!
testeIncluirUsuarioComCPFInvalidoSemSucesso()
!
28. Faça apenas uma coisa!!
!
public static String renderizarPaginaComSetupsETeardowns(PageData
pageData, boolean isSuite) throws Exception {
if( isTestPage(pageData) )
{
incluiSetupsETeardowns(pageData, isSuite);
}
return pageData.getHtml();
}
!
O método faz apenas uma coisa?!
!
1) Determina se a página é uma página de teste!
2) Caso seja, inclui setups e teardowns!
3) Renderiza a página em HTML!
29. Faça apenas uma coisa!!
!
• Parágrafo PARA:!
!
PARA renderizarPaginaComSetupsETeardowns, verificamos se
a página é uma página de teste e, caso seja, incluímos os
setups e teardowns. Em ambos os casos, renderizamos a
página em HTML. !
!
!
Observe que todos os passos da função do
exemplo estão a um nível de abstração abaixo
do seu nome.
30. Como saber se a função faz apenas uma
coisa?!
!
• Veja se é possível extrair outra função com um nome que
não seja uma reafirmação da implementação inicial.!
!
!
“Se uma função executa passos que estão a apenas
um nível de abstração abaixo do seu nome, então a
função faz apenas uma coisa.”!
!
“Funções que fazem apenas uma coisa não podem
ser divididas em seções."
34. !
!
“Don’t comment bad code - rewrite it.”!
!
“The proper use of comments is to compensate for our
failure to express ourself in code.”!
!
“Innacurate comments are far worse than no comments
at all. Truth can only be found in one place: the code.”!
!
!
35. Comentários BONS!
• Comentários legais (copyright)!
• TODOs!
‣ Cuidado para não encher o código com TODOs!
• Amplificar importância!
‣ Dar ênfase em algo importante que possa
passar despercebido
37. Comentários RUINS!
• Redundância!
//Método usado para preencher o form de login, passando usuário e senha
como parâmetros e submetendo o form em seguida
private void preencherESubmeterForm(String _usuario, String _senha) {
usuario.sendKeys(_usuario);
senha.sendKeys(_senha);
loginForm.submit();
}
38. Comentários RUINS!
• Comentários obrigatórios!
/**
* @param _usuario Nome do usuario
* @param _senha Senha do usuario
*/
public void preencherESubmeterForm(String _usuario, String _senha) {
usuario.sendKeys(_usuario);
senha.sendKeys(_senha);
loginForm.submit();
}
39. Comentários RUINS!
• Noise comments (reafirmam o óbvio)!
/**
* Retorna o nome
* @return o nome
*/
public String getNome() {
return nome;
}
40. Comentários RUINS!
• Código comentado!
‣ Quem encontrar um trecho de código
comentado não vai ter coragem de deletá-lo.
Podem pensar que é algo importante.!
‣ Pratique o desapego. Temos ferramentas
de controle de versão para isso. :)
44. • Funções Dependentes!
‣ Se uma função chama outra, elas devem estar
próximas verticalmente, e a função que chama deve
estar acima da que é chamada, se possível. !
‣ Isso dá a seu código um fluxo natural.!
!
• Afinidade Conceitual!
‣Quanto maior for a afinidade entre conceitos de
funções, menor deve ser a distância vertical entre
elas.
45. • Formatação Vertical!
‣ Projetos Java complexos (JUnit, TestNG, Ant,
Tomcat) não possuem arquivos com mais de 500
linhas!
!
• Formatação Horizontal!
‣Cuidado com scroll horizontal!
49. … que não se importava com a
qualidade do código de testes.
50. Com o passar das releases, o
custo de manter a suite só
aumentava…
51. … até que tiveram que descartar a
suite inteira.
52. Moral da História!
!
!
!
Código de teste é tão importante
quanto código de produção!
53. “Having dirty tests is equivalent to, if not
worse than, having no tests.”!
!
“What makes a clean test? Three things.
Readability, readability, and readability.”!
!
Mantenha seus testes limpos!
55. “Any fool can write code that a computer
can understand. Good programmers write
code that humans can understand.”!
- Martin Fowler!
!
“Refactoring is an iterative process full of
trial and error, inevitably converging on
something we feel is worthy of a
professional."!
- "Uncle Bob" Martin