SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Testes unitários como ferramentas de
design de código
VI encontro PythOnRio - 27 de março de 2016
Paula Grangeiro Programadora por profissão,
desenhista nas horas vagas e
colecionadora de gatos.
Sobre mim
Ministério da procrastinação adverte:
Os fatos relatados durante esta apresentação são
baseados em experiências pessoais.
Utilize-os com moderação.
Por que pensar em
Design de Código?
Código Mogwai
Testes unitários
Garantia de entrada/saída no teste unitário
- Unittest
- Py.test
Padrões de Projeto
Design Patterns
Indicação de estudo
● Padrões de Projeto - Soluções Reutilizáveis de Software Orientado a Objetos
● Utilizando UML e Padrões
● Código limpo
● Curso Python Patterns - Luciano Ramalho
Testes unitários como ferramenta
de design
Teste unitariamente o seu código
Teste fluxos de sucesso e erro separadamente
Nomeie os testes de acordo com o fluxo testado
Testes devem ser isolados!
Testes devem ser pequenos!
TestCases também devem ser pequenos!
TDD
http://www.paulagrangeiro.com.br
https://twitter.com/paulagrangeiro
http://fb.me/paula.grangeiro
https://github.com/pgrangeiro
pgrangeiro.dev@gmail.com
Obrigada!

Weitere ähnliche Inhalte

Was ist angesagt?

Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumRenato Groff
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal EngineAdolfo Neto
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresElias Nogueira
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Renato Groff
 
Automação em Wearables para Android
Automação em Wearables para AndroidAutomação em Wearables para Android
Automação em Wearables para AndroidElias Nogueira
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Elias Nogueira
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDDDiana Ungaro Arnos
 
Você ainda não pratica TDD?
Você ainda não pratica TDD?Você ainda não pratica TDD?
Você ainda não pratica TDD?Maurício Aniche
 
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDPHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDDiana Ungaro Arnos
 
Introdução a Automação de Testes
Introdução a Automação de TestesIntrodução a Automação de Testes
Introdução a Automação de TestesLorena Caldas
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
JMockit & Hamcrest
JMockit & HamcrestJMockit & Hamcrest
JMockit & HamcrestPT.JUG
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesDiana Ungaro Arnos
 
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando Appium
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando AppiumAutomação para Aplicaticos Móveis - Testes Automáticos Utilizando Appium
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando AppiumFabio Moura
 
Como aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisComo aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisMarcelo Galvão
 
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017Renato Groff
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksDiana Ungaro Arnos
 

Was ist angesagt? (20)

Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal Engine
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadores
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
 
Automação em Wearables para Android
Automação em Wearables para AndroidAutomação em Wearables para Android
Automação em Wearables para Android
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
 
Você ainda não pratica TDD?
Você ainda não pratica TDD?Você ainda não pratica TDD?
Você ainda não pratica TDD?
 
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDPHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
 
Apres s4
Apres s4 Apres s4
Apres s4
 
Introdução a Automação de Testes
Introdução a Automação de TestesIntrodução a Automação de Testes
Introdução a Automação de Testes
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
JMockit & Hamcrest
JMockit & HamcrestJMockit & Hamcrest
JMockit & Hamcrest
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de Testes
 
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando Appium
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando AppiumAutomação para Aplicaticos Móveis - Testes Automáticos Utilizando Appium
Automação para Aplicaticos Móveis - Testes Automáticos Utilizando Appium
 
Como aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisComo aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuais
 
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017
Test-Driven Development (TDD): primeiros passos - QA-SP - Julho/2017
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalks
 
TDC 2015 - Torne-se um programador melhor
TDC 2015 - Torne-se um  programador melhorTDC 2015 - Torne-se um  programador melhor
TDC 2015 - Torne-se um programador melhor
 

Andere mochten auch

Andere mochten auch (17)

Keep on smiling
Keep on smilingKeep on smiling
Keep on smiling
 
Fall 2016 Professional mentor training slide deck
Fall 2016 Professional mentor training slide deckFall 2016 Professional mentor training slide deck
Fall 2016 Professional mentor training slide deck
 
I am not a Philanthropist!
I am not a Philanthropist!I am not a Philanthropist!
I am not a Philanthropist!
 
Slide_Deck
Slide_DeckSlide_Deck
Slide_Deck
 
7 AML Training (CHKLC) by Jason - Copy
7 AML Training (CHKLC) by Jason - Copy7 AML Training (CHKLC) by Jason - Copy
7 AML Training (CHKLC) by Jason - Copy
 
Innovations in SBCC
Innovations in SBCCInnovations in SBCC
Innovations in SBCC
 
Etiquetas
EtiquetasEtiquetas
Etiquetas
 
SUN Civil Society CALL TO ACTION
SUN Civil Society CALL TO ACTIONSUN Civil Society CALL TO ACTION
SUN Civil Society CALL TO ACTION
 
AdWords Academy [論壇] 搶攻節慶大檔商機
AdWords Academy [論壇] 搶攻節慶大檔商機 AdWords Academy [論壇] 搶攻節慶大檔商機
AdWords Academy [論壇] 搶攻節慶大檔商機
 
Innovation plan malawi
Innovation plan malawiInnovation plan malawi
Innovation plan malawi
 
Relating systems thinking and design within the charitable sector final
Relating systems thinking and design within the charitable sector finalRelating systems thinking and design within the charitable sector final
Relating systems thinking and design within the charitable sector final
 
臉書的經營與效益分析-殘盟篇
臉書的經營與效益分析-殘盟篇臉書的經營與效益分析-殘盟篇
臉書的經營與效益分析-殘盟篇
 
Origins of World War I
Origins of World War IOrigins of World War I
Origins of World War I
 
Facebook 競價
Facebook 競價Facebook 競價
Facebook 競價
 
La contribution de la théorie de la régulation sociale à l'analyse de la resp...
La contribution de la théorie de la régulation sociale à l'analyse de la resp...La contribution de la théorie de la régulation sociale à l'analyse de la resp...
La contribution de la théorie de la régulation sociale à l'analyse de la resp...
 
Réincarnation (French)
Réincarnation (French)Réincarnation (French)
Réincarnation (French)
 
Contrôle de Colère (French)
Contrôle de Colère (French)Contrôle de Colère (French)
Contrôle de Colère (French)
 

Ähnlich wie Testes unitários como ferramentas de design de código

DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilElias Nogueira
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Daniel Carvalhinho
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingSamanta Cicilia
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Gabriel Rubens
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeElias Nogueira
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
4 engenharia de software
4   engenharia de software4   engenharia de software
4 engenharia de softwareFelipe Bugov
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorAndré Phillip Bertoletti
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Igor Abade
 
T@rget trust t-curso de ferramentas para automação de teste de software
T@rget trust   t-curso de ferramentas para automação de teste de softwareT@rget trust   t-curso de ferramentas para automação de teste de software
T@rget trust t-curso de ferramentas para automação de teste de softwareTargettrust
 
T@rget trust t-curso de ferramentas para automação de teste de software
T@rget trust   t-curso de ferramentas para automação de teste de softwareT@rget trust   t-curso de ferramentas para automação de teste de software
T@rget trust t-curso de ferramentas para automação de teste de softwareTargettrust
 
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoWorkshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoCarla De Bona
 
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesVR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesStefan Teixeira
 
[Recife Summer School 2013] Testers Tecnicos
[Recife Summer School 2013] Testers Tecnicos[Recife Summer School 2013] Testers Tecnicos
[Recife Summer School 2013] Testers TecnicosGuilherme Motta
 
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...
TDC2016POA | Trilha Education -  Aprendizagem baseada em projetos: Uma experi...TDC2016POA | Trilha Education -  Aprendizagem baseada em projetos: Uma experi...
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...tdc-globalcode
 
TDD e UnitTest em Java
TDD e UnitTest em JavaTDD e UnitTest em Java
TDD e UnitTest em JavaJúlio de Lima
 

Ähnlich wie Testes unitários como ferramentas de design de código (20)

Teste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e AplicandoTeste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e Aplicando
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile Testing
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Como integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu timeComo integrar um Agile Tester no seu time
Como integrar um Agile Tester no seu time
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
4 engenharia de software
4   engenharia de software4   engenharia de software
4 engenharia de software
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedor
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
 
T@rget trust t-curso de ferramentas para automação de teste de software
T@rget trust   t-curso de ferramentas para automação de teste de softwareT@rget trust   t-curso de ferramentas para automação de teste de software
T@rget trust t-curso de ferramentas para automação de teste de software
 
T@rget trust t-curso de ferramentas para automação de teste de software
T@rget trust   t-curso de ferramentas para automação de teste de softwareT@rget trust   t-curso de ferramentas para automação de teste de software
T@rget trust t-curso de ferramentas para automação de teste de software
 
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoWorkshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
 
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesVR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
 
[Recife Summer School 2013] Testers Tecnicos
[Recife Summer School 2013] Testers Tecnicos[Recife Summer School 2013] Testers Tecnicos
[Recife Summer School 2013] Testers Tecnicos
 
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...
TDC2016POA | Trilha Education -  Aprendizagem baseada em projetos: Uma experi...TDC2016POA | Trilha Education -  Aprendizagem baseada em projetos: Uma experi...
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...
 
TDD e UnitTest em Java
TDD e UnitTest em JavaTDD e UnitTest em Java
TDD e UnitTest em Java
 

Kürzlich hochgeladen

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Testes unitários como ferramentas de design de código

Hinweis der Redaktion

  1. Primeiramente, por que pensar em Design de Código? Gostaria de iniciar esta palestra com uma história: Prazos de entrega de software são curtos. Essa é uma realidade vivida por muitos, senão por todos nós. Então a primeira coisa que aprendemos no mundo da programação profissional é entregar código que funciona dentro do prazo.
  2. Esse é um belo exemplo de código que funciona. E está em produção! Vencemos! Yay!
  3. Esse código é o típico gerador de bugs. Ele é o Código Mogwai: aos olhos do cliente parece fofo, corresponde às especificações, mas basta uma iteração do usuário, geralmente próximo às 18:00hrs, para que ele se multiplique em diversos Gremlins. E então todo o tempo que foi economizado para que a entrega fosse realizada, é disperdiçado na caça aos bugs. Aquele código é reflexo da imaturidade técnica da equipe (a qual fiz parte na época, e não tenho nenhuma vergonha de assumir. Quem nunca foi iniciante antes?). E apesar disto ser um panorâma comum quando se trata em desenvolvimento de software, isto não é aceitável. [enfase]Código de entregável que gere bugs não é aceitável.[enfase] Então, o que podemos fazer para evitar isso?
  4. [Testes são o primeiro caminho para a salvação da equipe]
  5. A função dos testes unitários é verificar o funcionamento de um fluxo garantindo que, a partir de uma entrada, uma saída esperada seja reproduzida. Testes unitários são a maneira mais simples, rápida e eficiente de validar uma funcionalidade. Existem algumas libs Python para se trabalhar com testes unitários, como o unittest que estou usando no exemplo, e o py.test que tem ganhado bastante espaço pela simplicidade. Então através de testes, se quero garantir a consistência do funcionamento de uma nova feature, faço testes unitários que cubram todos os fluxos possíveis. Antes de colocar uma nova feature no ar, executo todos os testes do projeto para saber se alguma parte foi afetada pela nova funcionalidade. Basta rodar todos os testes e verificar se algum teste quebrou. Tranquilidade.
  6. E esse é a classe de teste do código anterior
  7. E esse...
  8. E esse...
  9. E continua A medida que novos bugs foram sendo encontrados, em fluxos imprevistos no momento da criação dos testes, novos testes foram criados para a garantia desses fluxos. A cada alteração na especificação da feature, testes e mais testes eram atualizados, para garantir a mudança de comportamento dos fluxos antes mapeados. Manter essa classe de teste tornou-se tão dispendioso até o momento em que a entrega teve que ser priorisada em detrimento da qualidade. E na hora que a entrega canta, quem é o primeiro a rodar? Os testes, é claro. O que acontece a partir de então é um círculo vicioso: você faz testes para cobrir fluxo de um código Gremlim, você deixa de fazer os testes porque a manutenção dos mesmos tornou-se inviável, e então você cria brechas para que novos Gremlins surjam. A verdade é que este teste estava esfregando na nossa cara todo o bad smell do nosso código, que por nossa limitação técnica éramos incapazes de ver. Testes devem ser de fácil manutenção, legíveis e simples. E se os seus testes não são assim, existe algo de errado com o seu código.
  10. Estamos caminhando para os 60 anos de existência da Engenharia de Software. Nesses zilhões de projetos de software planejados e executados desde então, muitos problemas puderam ser identificados e mapeados. Em relação ao desenvolvimento de software em si, na década de 80 começou-se a documentar quais problemas geralmente acometiam projetos de software e quais as possíveis soluções para estes problemas. Criou-se então modelos de resoluções, baseados em melhores práticas, para que qualquer programador pudesse resolver problemas comuns ao projetar um sistema. Ficaram conhecidos como Padrões de Projeto.
  11. Padrões de Projeto é um tema muito extenso, o qual não vou me aprofundar aqui, mas gostaria de citá-los somente para justificar o bed smell do nosso código anterior. Se você tem dificuldades em dar manutenção, criar novas features, desacoplar apps do seu projeto, testar, sem dúvidas você está violando [com sorte] um ou mais padrões de projeto. Eles são assunto de estudo obrigatório para qualquer programador, mas podem ser extremamente difíceis de identificar e aplicar quando não se tem muita experiência. Deixo então aqui algumas recomendações de estudo, antes de seguir com a apresentação. [Padrões de Projeto - Soluções Reutilizaveis de Software Orientado a Objetos] [Utilizando UML e Padrões] [Clean Code] [Python Patterns]
  12. Como eu disse antes, padrões de projeto exigem algum tempo de estudo e de experiência antes de que você possa fazer bom uso deles. Já testes, nem tanto assim. Além de identificadores de bad smells, eles podem te ajudar a aplicar e identificar alguns padrões de projetos que possam estar sendo violados no seu código. Para isso, podemos adotar algumas pequenas regras:
  13. procure testar unitariamente cada etapa do seu código. Cada etapa do fluxo pode conter subfluxos que podem ficar obscurecidos quando você trata tudo como uma só função. Já que você está tratando-os unitariamente, verifique no seu código se é viável criar uma função específica para cada etapa da função anterior.
  14. Se a sua função pode gerar um fluxo de erro, teste-o unitariamente também. Um programador novato ficará feliz de saber que você criou um teste que documenta este cenário.
  15. Não seja econômico, testes também ajudam na documentação do sistema.
  16. Se a sua função faz chamada a outra função, api, etc, não é responsabilidade do teste dela garantir o funcionamento de fluxos externos. Imagine ter que mecher em 299 testes por causa da mudança de comportamento em uma função? A menos que a alteração seja de mudança de referência, somente os testes relacionados a função/fluxo devem quebrar. Para isso use e abuse de mocks sempre que for necessário.
  17. [Uma verdade sobre funções-testes, elas devem ser pequenas. Outra verdade, elas devem ser menores ainda.] A menos que você esteja testando a construção de uma classe, onde você pode ter uma asserção de atributo-valor por linha em favor da legibilidade, você deve ser capaz de testar o fluxo esperado em 2~3 linhas. Se não, pare e verifique se existem subfluxos encapsulados, no seu teste e volte ao passo 1 e 2.
  18. Depois de esmiuçar os testes em sua TestCase, verifique se os testes abordam cenários muito distintos. Será que a classe testada não está com responsabilidades demais?
  19. Até então tenho falado em testes unitários no contexto de testes de regressão: estamos criando testes para funcionalidades que foram previamente codificadas. No TDD, temos a abordagem inversa: os testes são criados antes da funcionalidade ser codificada. Quando abordamos o TDD com testes unitários que aplicam as regras anteriormente citadas, muitas falhas de design podem ser evitadas.