SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Workshop: Testesautomatizados,
RefactoringeDesginPatterns
#GUMA10ANOS
Maurício Andreazza Sganderla - @m_andreazza
• Desenvolvedor na uMov.me
• Aficionado por Agile
• No mercado de T.I. há 8 anos
• Formado em Sistemas de Informação
• Pós-Graduando em Métodos Ágeis
Jorge Oleques - @jorgeoleques
• Desenvolvedor na uMov.me
• Entusiasta XP
• No mercado de T.I. há 6 anos
• Formado Analise e Desenvolvimento
• Pós-Graduando em Eng. Software na FGV
ANO:
2014
Ano de copa
amigo...
quem testa
seu
software?
Quem testa de
forma
automatizada
?
Já pensou no
tempo que
você perde?
PIRÂMIDE DE TESTES
PIRÂMIDE DE TESTES
MAS AFINAL, O
QUE É TESTE DE
UNIDADE ?
“
“
mas tenho uma
equipe de teste,
por que
testar?
Equipes de testes
testes caixa preta
E o teste de
unidade pra
que serve ?
definição de pronto
REFATORAR
REFATORAR? Do que se trata?
para refatorar preciso de patterns?
● Extrair Método (Extract Method)
● Mover Método (Move Method)
● Mover Atributo (Move Field')
● Extrair Classe (Extract Class)
● Encapsular Atributo (Encapsulate Field)
● Renomear Método (Rename Method)
● Subir Método (Pull Up Method)
● Subir Atributo (Pull Up Field)
● Descer Método (Push Down Method)
● Descer Atributo (Push Down Field)
● Extrair Sub-classe (Extract Subclass)
● Extrair Super-classe (Extract Superclass)
Refactory
public void save()
{
// Verifica propriedades
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome");
}
else if (this.getTipo() == "E"&& this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
this.getDatabase().save(this);
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código ruim
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código melhor
mas ta realmente bom?
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código melhor
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
como vamos testar?
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
mas o que faço então?
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
REFATORAR ENTÃO
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
1. extrair para uma clase
2. extrair para metodo
3. extrair interface
4. aplicar strategy
5. criar factory
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
Extrair para uma classe
1. extrair para uma clase
2. extrair para metodo
3. extrair interface
4. aplicar strategy
5. criar factory
public classe checkProperties{
public void check()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
Extrair para uma classe
public classe checkProperties{
public void check()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
quantas responsabilidades?
public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
Extrair para metodo
public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
métodos testaveis
public interface Check(){
public void check();
}
Extrair interface
public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
aplicar strategy
public classe checkNome implements Check{
@Override
public void check() {
if (this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
}
aplicar strategy
public classe checkDescritpion implements Check{
@Override
public void check() {
if (this.getDescription() == null){
throw new Exception("Falta a descrição do produto.");
}
}
}
aplicar strategy
public classe CheckFactory{
public static Check getInstance(String type) {
if (type == "E"){
return new CheckDescription();
}else if (type == "P"){
return new CheckName();
}
}
aplicar factory
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
o que tinhamos
public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
CheckFactory.getInstance(this.getTipo()).check();
}
e agora
e agora
vod save();
void chekProperties();
Cliente
Check getInstance();
CheckFactory
void check();
Check
void check();
CheckName
void check();
CheckDescription
vantagens
1. Código testável
2. Código mais simples
3. Mais fácil evoluir
4. Rápida manutenção
vantagens
1. Maior complexidade nas classes
desvantagens
LET'S
CODE !!!

Mais conteúdo relacionado

Mais procurados

TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 

Mais procurados (12)

JUnit
JUnitJUnit
JUnit
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOS
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
O Pensamento Ágil
O Pensamento ÁgilO Pensamento Ágil
O Pensamento Ágil
 
Java 12
Java 12Java 12
Java 12
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Vraptor
VraptorVraptor
Vraptor
 
Series lab
Series labSeries lab
Series lab
 

Destaque

E:\programacion 6d\mdi\presentación1
E:\programacion 6d\mdi\presentación1E:\programacion 6d\mdi\presentación1
E:\programacion 6d\mdi\presentación1ewlias
 
Agilidade na política em uma das maiores cidades do rs- quem disse que não-
Agilidade na política  em uma das maiores cidades do rs- quem disse que não-Agilidade na política  em uma das maiores cidades do rs- quem disse que não-
Agilidade na política em uma das maiores cidades do rs- quem disse que não-Mauricio Andreazza
 
Lewis Shireman resume 2014 09 06
Lewis Shireman resume 2014 09 06Lewis Shireman resume 2014 09 06
Lewis Shireman resume 2014 09 06Lewis Shireman
 
Bailey advertisement
Bailey advertisementBailey advertisement
Bailey advertisementbbkett
 
Introductie De Telecom Adviseur
Introductie De Telecom AdviseurIntroductie De Telecom Adviseur
Introductie De Telecom Adviseursubhasishroy
 
Presentación1
Presentación1Presentación1
Presentación1ewlias
 
Anexo3 tipologia-proyectos-version4 1
Anexo3 tipologia-proyectos-version4 1Anexo3 tipologia-proyectos-version4 1
Anexo3 tipologia-proyectos-version4 1Opportune Times
 
Presentación1
Presentación1Presentación1
Presentación1ewlias
 
Lewis shireman resume project manager 2014 11 20
Lewis shireman resume project manager 2014 11 20Lewis shireman resume project manager 2014 11 20
Lewis shireman resume project manager 2014 11 20Lewis Shireman
 

Destaque (9)

E:\programacion 6d\mdi\presentación1
E:\programacion 6d\mdi\presentación1E:\programacion 6d\mdi\presentación1
E:\programacion 6d\mdi\presentación1
 
Agilidade na política em uma das maiores cidades do rs- quem disse que não-
Agilidade na política  em uma das maiores cidades do rs- quem disse que não-Agilidade na política  em uma das maiores cidades do rs- quem disse que não-
Agilidade na política em uma das maiores cidades do rs- quem disse que não-
 
Lewis Shireman resume 2014 09 06
Lewis Shireman resume 2014 09 06Lewis Shireman resume 2014 09 06
Lewis Shireman resume 2014 09 06
 
Bailey advertisement
Bailey advertisementBailey advertisement
Bailey advertisement
 
Introductie De Telecom Adviseur
Introductie De Telecom AdviseurIntroductie De Telecom Adviseur
Introductie De Telecom Adviseur
 
Presentación1
Presentación1Presentación1
Presentación1
 
Anexo3 tipologia-proyectos-version4 1
Anexo3 tipologia-proyectos-version4 1Anexo3 tipologia-proyectos-version4 1
Anexo3 tipologia-proyectos-version4 1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Lewis shireman resume project manager 2014 11 20
Lewis shireman resume project manager 2014 11 20Lewis shireman resume project manager 2014 11 20
Lewis shireman resume project manager 2014 11 20
 

Semelhante a Testes Automatizados, Refactoring e Design Patterns

Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraValberto Carneiro
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato Haddad
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaElaine Cecília Gatto
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitárioselliando dias
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2irenescotolo
 
Testes Unitários com GTest e Catch
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e CatchUilian Ries
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIElias Nogueira
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Danilo Pereira De Luca
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 

Semelhante a Testes Automatizados, Refactoring e Design Patterns (20)

Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHP
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitários
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
Testes Unitários com GTest e Catch
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e Catch
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de API
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 

Mais de Mauricio Andreazza

TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...
TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...
TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...Mauricio Andreazza
 
Equipes de alto desempenho - Hora da Tecnologia
Equipes de alto desempenho - Hora da TecnologiaEquipes de alto desempenho - Hora da Tecnologia
Equipes de alto desempenho - Hora da TecnologiaMauricio Andreazza
 
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?Mauricio Andreazza
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!Mauricio Andreazza
 
Agile brazil 2014 - Do legado ao green bar: uma imersão em testes unitários,...
Agile brazil 2014 -  Do legado ao green bar: uma imersão em testes unitários,...Agile brazil 2014 -  Do legado ao green bar: uma imersão em testes unitários,...
Agile brazil 2014 - Do legado ao green bar: uma imersão em testes unitários,...Mauricio Andreazza
 
Evento Senac: E você, faz parte de um time?
Evento Senac: E você, faz parte de um time?Evento Senac: E você, faz parte de um time?
Evento Senac: E você, faz parte de um time?Mauricio Andreazza
 
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...Mauricio Andreazza
 
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável Mauricio Andreazza
 
Meu teste falou e eu me fingi de surdo
Meu teste falou e eu me fingi de surdoMeu teste falou e eu me fingi de surdo
Meu teste falou e eu me fingi de surdoMauricio Andreazza
 
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudável
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudávelAgile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudável
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudávelMauricio Andreazza
 
2012...E o meu software continua sem testes
2012...E o meu software continua sem testes2012...E o meu software continua sem testes
2012...E o meu software continua sem testesMauricio Andreazza
 
Me formei e agora, preparado para o mercado ou academia?
Me formei e agora, preparado para o mercado ou academia?Me formei e agora, preparado para o mercado ou academia?
Me formei e agora, preparado para o mercado ou academia?Mauricio Andreazza
 
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutos
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutosDo Caos ao Objetivo: Como implementamos Scrum em 5 minutos
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutosMauricio Andreazza
 

Mais de Mauricio Andreazza (13)

TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...
TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...
TDC 2016 : Agilidade na política? em uma das maiores cidades do rs? quem diss...
 
Equipes de alto desempenho - Hora da Tecnologia
Equipes de alto desempenho - Hora da TecnologiaEquipes de alto desempenho - Hora da Tecnologia
Equipes de alto desempenho - Hora da Tecnologia
 
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?
TDC 2O15 - Equipes de alto desempenho: o mundo evoluiu e você parou?
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
 
Agile brazil 2014 - Do legado ao green bar: uma imersão em testes unitários,...
Agile brazil 2014 -  Do legado ao green bar: uma imersão em testes unitários,...Agile brazil 2014 -  Do legado ao green bar: uma imersão em testes unitários,...
Agile brazil 2014 - Do legado ao green bar: uma imersão em testes unitários,...
 
Evento Senac: E você, faz parte de um time?
Evento Senac: E você, faz parte de um time?Evento Senac: E você, faz parte de um time?
Evento Senac: E você, faz parte de um time?
 
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...
TDC 2013 POA: Todo Super Herói tem suas fraquezas. Saiba como o Super Agile f...
 
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável
TDC 2013 POA: TDD e Clean Code, garantia de um desenvolvimento saudável
 
Meu teste falou e eu me fingi de surdo
Meu teste falou e eu me fingi de surdoMeu teste falou e eu me fingi de surdo
Meu teste falou e eu me fingi de surdo
 
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudável
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudávelAgile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudável
Agile Brazil 2013: TDD e Clean Code, garantia de um desenvolvimento saudável
 
2012...E o meu software continua sem testes
2012...E o meu software continua sem testes2012...E o meu software continua sem testes
2012...E o meu software continua sem testes
 
Me formei e agora, preparado para o mercado ou academia?
Me formei e agora, preparado para o mercado ou academia?Me formei e agora, preparado para o mercado ou academia?
Me formei e agora, preparado para o mercado ou academia?
 
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutos
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutosDo Caos ao Objetivo: Como implementamos Scrum em 5 minutos
Do Caos ao Objetivo: Como implementamos Scrum em 5 minutos
 

Testes Automatizados, Refactoring e Design Patterns

  • 2. Maurício Andreazza Sganderla - @m_andreazza • Desenvolvedor na uMov.me • Aficionado por Agile • No mercado de T.I. há 8 anos • Formado em Sistemas de Informação • Pós-Graduando em Métodos Ágeis Jorge Oleques - @jorgeoleques • Desenvolvedor na uMov.me • Entusiasta XP • No mercado de T.I. há 6 anos • Formado Analise e Desenvolvimento • Pós-Graduando em Eng. Software na FGV
  • 8. Já pensou no tempo que você perde?
  • 11. MAS AFINAL, O QUE É TESTE DE UNIDADE ?
  • 13. mas tenho uma equipe de teste, por que testar?
  • 16. E o teste de unidade pra que serve ?
  • 19. REFATORAR? Do que se trata?
  • 20. para refatorar preciso de patterns?
  • 21.
  • 22.
  • 23.
  • 24. ● Extrair Método (Extract Method) ● Mover Método (Move Method) ● Mover Atributo (Move Field') ● Extrair Classe (Extract Class) ● Encapsular Atributo (Encapsulate Field) ● Renomear Método (Rename Method) ● Subir Método (Pull Up Method) ● Subir Atributo (Pull Up Field) ● Descer Método (Push Down Method) ● Descer Atributo (Push Down Field) ● Extrair Sub-classe (Extract Subclass) ● Extrair Super-classe (Extract Superclass) Refactory
  • 25. public void save() { // Verifica propriedades if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome"); } else if (this.getTipo() == "E"&& this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } this.getDatabase().save(this); } fonte:http://pt.wikipedia.org/wiki/Refatoração código ruim
  • 26. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração código melhor
  • 28. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração código melhor
  • 29. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração como vamos testar?
  • 30. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração quantas responsabilidade?
  • 31. mas o que faço então?
  • 32.
  • 33. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração quantas responsabilidade?
  • 34. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração quantas responsabilidade? REFATORAR ENTÃO
  • 35. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração quantas responsabilidade? 1. extrair para uma clase 2. extrair para metodo 3. extrair interface 4. aplicar strategy 5. criar factory
  • 36.
  • 37. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração Extrair para uma classe 1. extrair para uma clase 2. extrair para metodo 3. extrair interface 4. aplicar strategy 5. criar factory
  • 38. public classe checkProperties{ public void check() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } } Extrair para uma classe
  • 39. public classe checkProperties{ public void check() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } } quantas responsabilidades?
  • 40. public classe checkProperties{ public void check() { validateName(); validateDescription(); } public void validateName() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } } public void validateDescription() { if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } } Extrair para metodo
  • 41. public classe checkProperties{ public void check() { validateName(); validateDescription(); } public void validateName() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } } public void validateDescription() { if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } } métodos testaveis
  • 42. public interface Check(){ public void check(); } Extrair interface
  • 43. public classe checkProperties{ public void check() { validateName(); validateDescription(); } public void validateName() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } } public void validateDescription() { if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } } aplicar strategy
  • 44. public classe checkNome implements Check{ @Override public void check() { if (this.getName() == null) { throw new Exception("Falta nome do produto."); } } } aplicar strategy
  • 45. public classe checkDescritpion implements Check{ @Override public void check() { if (this.getDescription() == null){ throw new Exception("Falta a descrição do produto."); } } } aplicar strategy
  • 46. public classe CheckFactory{ public static Check getInstance(String type) { if (type == "E"){ return new CheckDescription(); }else if (type == "P"){ return new CheckName(); } } aplicar factory
  • 47. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { if (this.getTipo() == "P" && this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getTipo() == "E" && this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } fonte:http://pt.wikipedia.org/wiki/Refatoração o que tinhamos
  • 48. public void save() { this.checkProperties(); this.getDatabase().save(this); } private void checkProperties() { CheckFactory.getInstance(this.getTipo()).check(); } e agora
  • 49. e agora vod save(); void chekProperties(); Cliente Check getInstance(); CheckFactory void check(); Check void check(); CheckName void check(); CheckDescription
  • 51. 1. Código testável 2. Código mais simples 3. Mais fácil evoluir 4. Rápida manutenção vantagens
  • 52. 1. Maior complexidade nas classes desvantagens