240
Lidando com o Caos: testando código PLSQL em projeto crítico

Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Embed Size (px)

Citation preview

Page 1: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Lidando com o Caos: testando código PLSQL em projeto crítico

Page 2: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Preparar essa palestra me trouxe

de volta um sentimento…

Page 3: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

INSEGURANÇA

Page 4: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

parece bobagem, mas não é…

Page 5: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Imagina entrar num projeto…

Page 6: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

CRÍTICOPROJETO

Page 7: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Reestruturar Logistica

Page 8: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Integração de vários sistemas

Page 9: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Prazo Apertado

Page 10: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Onde você…

Page 11: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

NADA do

NEGÓCIO

Page 12: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 13: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

NEM dos SISTEMAS

ENVOLVIDOS

Page 14: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Tabelas e mais Tabelas

Page 15: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Pra piorar…

Page 16: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 17: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não

Page 18: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 19: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

2006

Page 20: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

2006+10 anos

Page 21: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas daí…

Page 22: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Me deram a BOA Notícia!

Page 23: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Líder Técnico

Page 24: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E quando fomos apresentados…

Page 25: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Olá, tudo bom? Meu nome Rafael. Novo desenvolvedor no projeto.

Page 26: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Olá, tudo bom? Meu nome Rafael. Novo desenvolvedor no projeto.

Opa, sou Dudu. O líder técnico do projeto.

Page 27: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Olá, tudo bom? Meu nome Rafael. Novo desenvolvedor no projeto.

Opa, sou Dudu. O líder técnico do projeto.

300, viu?

Page 28: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Olá, tudo bom? Meu nome Rafael. Novo desenvolvedor no projeto.

Opa, sou Dudu. O líder técnico do projeto.

300, viu?

ahn!!? 300? 300 o que?

Page 29: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Olá, tudo bom? Meu nome Rafael. Novo desenvolvedor no projeto.

Opa, sou Dudu. O líder técnico do projeto.

300, viu?

ahn!!? 300? 300 o que?

R$300.000 por hora se o sistema parar!

Page 30: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

R$300k/h

Page 31: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 32: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E assim eu me senti de novo…

Page 33: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

ESTAGIÁRIO

Page 34: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 35: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 36: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Me veio vários questionamentos…

Page 37: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Será que posso ajudar no projeto?

Page 38: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Minha experiência vai ajudar em algo?

Page 39: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Lidando com o Caos: testando código PLSQL em projeto crítico

Page 40: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

@rponte

Page 41: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 42: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Eduardo Menezes

Page 43: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 44: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Lidando com o Caos: testando código PLSQL em projeto crítico

Page 45: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Esclarecendo o que o Rafael falou…

Page 46: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Líder Técnico

Page 47: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Líder Técnico

Page 48: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

R$300k/h

Page 49: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Falei besteira pro Rafael…

Page 50: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

R$5.5mi/h

Page 51: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E a empresa na qual rola o projeto é…

Page 52: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 53: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 54: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

4.6bi/ano$ * Lucro Liquido - 2015

Page 55: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E este PROJETO tem por finalidade…

Page 56: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Reestruturar Logistica

Page 57: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 58: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Utilizando tecnologias como…

Page 59: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 60: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 61: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 62: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 63: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 64: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 65: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas sem dúvida…

Page 66: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Parte importante dessa integração

ficou com…

Page 67: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 68: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Para quem não conhece PL/SQL…

Page 69: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Integer tamanho(String texto) { // retorna tamanho return texto.length();}

Java

Page 70: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function tamanho(texto varchar2) return number isbegin -- retorna tamanho return lENGTH(texto);end;

PL/SQL

Page 71: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Apesar de ser uma linguagem simples

Page 72: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Quando o assunto é PROCESSAR DADOS…

Page 73: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PODEROSA

Page 74: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Afinal…

Page 75: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function tamanho(texto varchar2) return number isbegin -- retorna tamanho return lENGTH(texto);end;

Page 76: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E na MDIAS trabalhamos com GRANDES VOLUMES DE DADOS

Page 77: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não dá pra ignorar isso!

Page 78: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PERFORMANCE

Page 79: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas PL/SQL tem seus problemas…

Page 80: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Milhares de Linhas

Page 81: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Fácil ter procedures com 5-10k linhas de

código

Page 82: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Ferramentas Precárias

Page 83: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 84: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Esqueça IDEs sofisticadas como

Eclipse

Page 85: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Regras de Negócio

Page 86: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não tem a mesma clareza de linguagens

OO

Page 87: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E isso era um grande problema…

Page 88: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Regras de Negócio Complexas

Page 89: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Pra piorar…

Page 90: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

A metade da equipe não dominava o

negócio

Page 91: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Agora imagina…

Page 92: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PL/SQL

Page 93: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PL/SQL +

Page 94: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PL/SQL +Regras Complexas

Page 95: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Batemos com 2 desafios sérios…

Page 96: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

MANUTENÇÃO do código

CORRETUDE das regras de negócio

Page 97: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

CORRETUDE das regras de negócio

Page 98: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Como representar as regras em código corretamente?

Page 99: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Documentação

Page 100: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Quadro-branco

Page 101: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Programação em Par

Page 102: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Programação em Par

Page 103: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

MANUTENÇÃO do código

Page 104: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Como escrever código de qualidade?

Page 105: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Como escrever código fácil de ler e manter?

Page 106: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Guia de Estilo

Page 107: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Padronização do Código

Page 108: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Padronização ajuda; estilo ajuda. Mas

precisamos ir mais longe…

Page 109: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN IF is_frete_calc(cliente) THEN processa_entrega(cliente); notifica_cliente(cliente); END IF;END;

Funções Pequenas

Page 110: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN IF is_frete_calc(cliente) THEN processa_entrega(cliente); notifica_cliente(cliente); END IF;END;

Funções Pequenas

Page 111: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN IF is_frete_calc(cliente) THEN processa_entrega(cliente); notifica_cliente(cliente); END IF;END;

Funções Pequenas

Page 112: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN IF is_frete_calc(cliente) THEN processa_entrega(cliente); notifica_cliente(cliente); END IF;END;

Funções Pequenas

Page 113: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

e claro…

Page 114: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN IF is_frete_calc(cliente) THEN processa_entrega(cliente); notifica_cliente(cliente); END IF;END;

Funções Pequenas

com NOMES LEGÍVEIS!

Page 115: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BONS NOMES

MAIOR CLAREZA=

Page 116: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BONS NOMES MENOS

COMENTÁRIOS NO CÓDIGO

=

Page 117: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Só isso é suficiente?

Page 118: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não

Page 119: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Precisamos EXECUTAR o código

para ter certeza

Page 120: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas como executar?

Page 121: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Manualmente?

Page 122: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

BEGIN processa_entrega(cliente); END;

Page 123: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 124: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

ou…

Page 125: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Usa equipe de QA…

Page 126: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

só que…

Page 127: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 128: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

e ai?

Page 129: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Testes Automatizados

Page 130: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function tamanho(texto varchar2) return number isbegin -- retorna tamanho return lENGTH(texto);end;

Page 131: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não existem boas ferramentas de testes

Page 132: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas nosso time é…

Page 133: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 134: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 135: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function tamanho(texto varchar2) return number isbegin -- retorna tamanho return lENGTH(texto);end;

Page 136: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 137: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 138: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Executa procedure

Page 139: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Executa procedure

Devolve resultado

Page 140: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Executa procedure

Devolve resultado

Page 141: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 142: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PL/SQL Calcular Frete

Page 143: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 144: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 145: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 146: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 147: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 148: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 149: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 150: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 151: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

JAVA Calcular Frete

Page 152: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}”;Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.VARCHAR);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 153: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}”;Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.VARCHAR);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 154: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}”;Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.VARCHAR);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 155: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.VARCHAR);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 156: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.VARCHAR);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 157: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 158: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 159: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute();

return cs.getDouble(1);}

}

Java

Page 160: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute(); // executa function

return cs.getDouble(1);}

}

Java

Page 161: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute(); // executa function

return cs.getDouble(1);}

}

Java

Page 162: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute(); // executa function

return cs.getDouble(1);}

}

Java

Page 163: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit Testar Calcular Frete

Page 164: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 165: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 166: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 167: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 168: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 169: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnitclass FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

Page 170: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 171: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 172: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 173: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 174: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 175: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 176: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 177: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit

Page 178: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Vamos complicar?

Page 179: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

PL/SQL Calcular Frete

Page 180: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 181: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

-- Calcula Fretefunction calc_frete(uf varchar2) return number isbegin if uf = 'SP' then return 30.0; end if;

return 20.20;end;

PL/SQL

Page 182: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isbegin-- nova logica

end;

PL/SQL

Page 183: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

MODELO

Page 184: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;end;

PL/SQL

Page 185: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;

end;

PL/SQL

Page 186: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;

end;

PL/SQL

Page 187: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;end;

PL/SQL

Page 188: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;end;

PL/SQL

Page 189: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;end;

PL/SQL

Page 190: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E o código Java?

Page 191: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute(); // executa function

return cs.getDouble(1);}

}

Java

Page 192: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteService {

public Double calcula(String uf) {String sql = "{? = call calc_frete(?)}";Connection c = // abre conexãoCallableStatement cs = c.prepareCall(sql);

cs.registerOutParameter(1, Types.DOUBLE);cs.setString(2, uf);

cs.execute(); // executa function

return cs.getDouble(1);}

}

Java

Nada!

Page 193: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit Testar Calcular Frete

Page 194: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 195: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit

Page 196: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";this.limpaEInsereFrete("SP", 30.0);

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 197: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";this.limpaEInsereFrete("SP", 30.0);

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 198: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";this.limpaEInsereFrete("SP", 30.0);

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

DELETE FROM TB_FRETE_VALOR;INSERT INTO TB_FRETE_VALOR VALUES(1, ‘SP’, 30.30);

Page 199: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void deveCalcularFrete() {// cenárioString uf = "SP";this.limpaEInsereFrete("SP", 30.0);

// açãoFreteService service = new FreteService();double valor = service.calcula(uf);

// validaçãoassertEquals(30.0, valor);

}}

jUnit

Page 200: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit

Page 201: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E aí, tudo testado?

Page 202: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mando pra produção?

Page 203: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E SE não encontrar a UF na tabela?

Page 204: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;end;

PL/SQL

Page 205: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

function calc_frete(uf varchar2) return number isvalor_frete number;

begin-- busca valor do frete na tabelaSELECT f.valor INTO valor_frete FROM TB_FRETE_VALOR f WHERE f.uf_destino = uf;

return valor_frete;

EXCEPTIONWHEN no_data_found THENraise_application_error(-20200, ‘oops!’);

end;

PL/SQL

Page 206: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

class FreteServiceTest {

@Testpublic void naoDeveCalcularFreteQuandoUfNaoEncontrada() {// lógica do teste vai aqui

}}

jUnit

Page 207: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit

Page 208: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

jUnit

Page 209: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E SE encontrar mais de um frete?

Page 210: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

E SE…

Page 211: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Outros Cenários

Page 212: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Desafios

Page 213: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Desconfiança

Page 214: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Pair Programming

Page 215: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Testes Automatizados

Page 216: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

O pior…

Page 217: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

ATRASOU mesmo!

Page 218: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Mas não foi à toa…

Page 219: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

não tem LITERATURA

Page 220: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

não tem COMUNIDADE

Page 221: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

não tem CULTURA

Page 222: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não se engane!

Page 223: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Tivemos bons resultados!

Page 224: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Melhoramosnosso processo

Page 225: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Simplificamos nosso ambiente

Page 226: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Diminuimos o indice de bugs

Page 227: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não temos MEDO de mexer no código

Page 228: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Padronização da Arquitetura dos testes

Page 229: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Agora a Gerência gostou!!

Page 230: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

e a partir de agora novos projetos irão

adotar esta metodologia

Page 231: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

o que ficou faltando?

Page 232: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

treinar restante da equipe

Page 233: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Servidor de

Integração

Page 234: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Page 235: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Cobrir procedures IMPORTANTES com

testes

Page 236: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Bem…

Page 237: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

O caminho é longo

Page 238: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Não será fácil…

Page 239: Lidando com o Caos: Testando Código PLSQL em um Projeto Critico

Nem acontecerá da noite pro dia…