Introdu¸˜o
       ca                  Qualidade de Software           Test Anything Protocol           M˜o na massa
                                                                                             a




              Testes unit´rios no PostgreSQL com pgTAP
                         a

                                          Dickson S. Guedes
                                       guedes@guedesoft.net

                                            PGDay S˜o Paulo, 2009
                                                   a


                                           24 de abril de 2009




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                        PGDay S˜o Paulo, 2009
                                                                                           a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Uma vis˜o geral...
       a
      Introdu¸˜o
             ca
          Compreendendo os ambientes
          Compreendendo os resultados inesperados
          Supostas alternativas
      Qualidade de Software
          Conceitos b´sicos
                     a
          Compreendendo os testes
          O papel do DBA
      Test Anything Protocol
          Compreendendo o TAP
          Compreendendo o pgTAP
      M˜o na massa
        a
          Preparando o ambiente
          Entendendo os scripts
          Entendendo os tipos de testes
          Executando um script
Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                    Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                       a




Compreendendo os ambientes



Por onde come¸amos?
             c


              Laborat´rio
                     o
              Desenvolvimento
              Teste
              Homologa¸˜o
                      ca




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                  PGDay S˜o Paulo, 2009
                                                                                     a
Introdu¸˜o
       ca                    Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                       a




Compreendendo os ambientes



Por onde come¸amos?
             c


              Laborat´rio
                     o
              Desenvolvimento
              Teste
              Homologa¸˜o
                      ca
              Produ¸˜o
                   ca




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                  PGDay S˜o Paulo, 2009
                                                                                     a
Introdu¸˜o
       ca                   Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                      a




Compreendendo os resultados inesperados



O tempo passa... o tempo voa...
e o software vai sofrendo altera¸oes...
                                c˜




              ”Mas antes funcionava!”
              ”Isso piorou!”
              ”Eu n˜o fiz nada, foi essa mudan¸a a´
                   a                         c ı!”




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                 PGDay S˜o Paulo, 2009
                                                                                    a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Supostas alternativas



Op¸oes
  c˜



               Ignorar, fingir que n˜o ´ com vocˆ;
                                   a e         e
               Melhorar a infra-estrutura de suporte;
               Utilizar o efeito placebo;




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Supostas alternativas



Op¸oes
  c˜



               Ignorar, fingir que n˜o ´ com vocˆ;
                                   a e         e
               Melhorar a infra-estrutura de suporte;
               Utilizar o efeito placebo;
               Melhorar a qualidade do software!




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Conceitos b´sicos
           a



Qualidade de Software



               O que ´?
                     e
               Por que?
               Quem precisa?




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Compreendendo os testes



Teste Unit´rio?
          a



              O que ´?
                    e
              Por que?
              Quem precisa?




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Compreendendo os testes



Quem precisa estar envolvido?


              Analistas de Neg´cio
                              o
              Analistas de Sistemas
              Desenvolvedores
              Testadores




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Compreendendo os testes



Quem precisa estar envolvido?


              Analistas de Neg´cio
                              o
              Analistas de Sistemas
              Desenvolvedores
              Testadores
              DBA




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




O papel do DBA



Qual o papel do DBA?



              Manter os ambientes versionados
              Testar as mudan¸as
                             c
              Validar




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




O papel do DBA



Evite perder...



              tempo...
              paciˆncia...
                  e
              cabelos...




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Compreendendo o TAP



TAP
Protocolo de Teste de Qualquer coisa




              O que ´?
                    e
              Por quˆ?
                    e
              Quem usa?




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software     Test Anything Protocol           M˜o na massa
                                                                                       a




Compreendendo o pgTAP



Como o pgTAP pode ajudar?
auxiliando nos testes de regress˜o
                                a




              Testar Estrutura
                     tabelas, campos, restri¸˜es, vis˜es
                                            co       o
              Testar Dados
                     valida¸˜es de CPF, tipos de dados financeiros...
                           co




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                  PGDay S˜o Paulo, 2009
                                                                                     a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Preparando o ambiente



Obtendo o pgTAP


      Baixe e descompacte
      http://pgtap.projects.postgresql.org/




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Preparando o ambiente



Obtendo o pgTAP


      Baixe e descompacte
      http://pgtap.projects.postgresql.org/

   Instalar via make
   make USE PGXS=1
   make install USE PGXS=1
   make installcheck
   USE PGXS=1




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software     Test Anything Protocol           M˜o na massa
                                                                                       a




Preparando o ambiente



Obtendo o pgTAP


      Baixe e descompacte
      http://pgtap.projects.postgresql.org/

   Instalar via make                               Instalar via gmake
   make USE PGXS=1                                 gmake USE PGXS=1
   make install USE PGXS=1                         gmake install USE PGXS=1
   make installcheck                               gmake installcheck
   USE PGXS=1                                      USE PGXS=1



Testes unit´rios no PostgreSQL com pgTAP
           a                                                                  PGDay S˜o Paulo, 2009
                                                                                     a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Preparando o ambiente



Preparando o pgTAP
      Variaveis que ajudam
      $PGDATABASE
      $PGHOST
      $PGPORT
      $PGUSER




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Preparando o ambiente



Preparando o pgTAP
      Variaveis que ajudam
      $PGDATABASE
      $PGHOST
      $PGPORT
      $PGUSER

      Exemplo
      export        PGDATABASE=testedb
      export        PGHOST=dbteste.srv.intranet
      export        PGPORT=5433
      export        PGUSER=teste


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Preparando o ambiente



Gerenciando o pacote pgTAP
      Diretamente no banco de dados
      psql -f pgtap.sql
      psql -f uninstall pgtap.sql

      Diretamente no banco template
      psql -d template1 -f pgtap.sql
      psql -d template1 -f uninstall pgtap.sql

      Sem altera¸˜es no banco
                co
      Neste caso utilizamos o pgtap apenas dentro de uma transa¸˜o,
                                                               ca
      sem inserir as fun¸˜es no banco.
                        co

Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                   Qualidade de Software    Test Anything Protocol           M˜o na massa
                                                                                       a




Entendendo os scripts



Anatomia de um script de teste
O pseudo-c´digo
          o


               Configurar silenciamento
               Configurar formata¸˜o da saida
                                ca
               Configurar rever¸˜o das mudan¸as em caso de falhas
                              ca           c
               BEGIN
                        Carregar as fun¸˜es do pgTAP (se necess´rio)
                                        co                     a
                        Planejar os testes
                        Executar os testes
                        Finalizar e limpar
               ROLLBACK


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                  PGDay S˜o Paulo, 2009
                                                                                     a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Entendendo os scripts



Anatomia de um script de teste
O cabe¸alho do script
      c
       -- Configura silenciamento
       set ECHO
       set QUIET 1

       -- Configura formata¸~o de saida
                           ca
       pset format unaligned
       pset tuples_only true
       pset pager

       -- Configura recer¸~o das mudan¸as em caso de falhas
                         ca           c
       set ON_ERROR_ROLLBACK 1
       set ON_ERROR_STOP true
       set QUIET 1

Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Entendendo os scripts



Anatomia de um script de teste
O corpo do script

       BEGIN;
         i pgtap.sql -- Carrega as fun¸~es do pgTAP
                                       co

             -- Planeja os testes
             SELECT plan(1);

             -- Executa os testes
             SELECT pass( ’Passei no teste!’ );

         -- Finaliza e limpa
         SELECT * FROM finish();
       ROLLBACK;


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Entendendo os scripts



Executando o teste
Via psql




       Exemplo de um teste individual

       $ psql -Xf teste.sql
       1..1
       ok 1 - Passei no teste!




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Entendendo os scripts



Executando o teste
Via pg prove
       Exemplo de um conjunto de testes

       $ pg_prove testes/*.sql
       sql/coltap.....ok
       sql/hastap.....ok
       sql/moretap....ok
       sql/pktap......ok
       All tests successful.
       Files=4, Tests=216, 1 wallclock secs
       ( 0.06 usr 0.02 sys +
       0.08 cusr 0.07 csys = 0.23 CPU)
       Result: PASS


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
OK? N˜o OK?
     a



               ok( boolean, descricao )
               is( elemento, elemento, descricao )
               isnt( elemento, elemento, descricao )
               matches( elemento, regex, descricao )
               imatch( anyelement, regex, description )
               doesnt match( anyelement, regex, description )
               doesnt imatch( anyelement, regex, description )



Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
Errar ´ umano
      e




               throws ok( consulta, errcode, errmsg, descricao )
               lives ok( query, description )




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
O esquema est´ certinho?
             a




               has tablespace( tablespace, location, description )
               hasnt tablespace( tablespace, tablespace, description )
               has schema( schema, description )
               hasnt schema( schema, schema, description )




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
Os objetos existem?



               has table( schema, table, description )
               hasnt table( schema, table, description )
               has view( schema, view, description )
               hasnt view( schema, view, description )
               has sequence( schema, sequence, description )
               hasnt sequence( schema, sequence, description )
               has index( schema, table, index, columns[], description )



Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
E a estrutura das tabelas?



               has column( schema, table, column, description )
               col not null( schema, table, column, description )
               col is null( schema, table, column, description )
               col has default( schema, table, column, description )
               col default is( schema, table, column, default, description )
               col type is( schema, table, column, type, description )




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                       Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                          a




Entendendo os tipos de testes



Tipos de testes
N˜o podemos esquecer das restri¸oes...
 a                             c˜



               has pk( schema, table, description )
               has fk( schema, table, description )
               col is pk( schema, table, column[], description )
               col is fk( schema, table, column[], description )
               fk ok( fk schema, fk table, fk column[], pk schema, pk table,
               pk column[], description )




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                     PGDay S˜o Paulo, 2009
                                                                                        a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos


      Banco teste

                    Lista de rela¸~es
                                 co
        Esquema   |    Nome     | Tipo |     Dono
      ------------+-------------+--------+----------
       aplicativo | cargo       | tabela | postgres
       aplicativo | funcionario | tabela | postgres
       aplicativo | pessoa      | tabela | postgres




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos


      Banco homologacao

                    Lista de rela¸~es
                                 co
        Esquema   |    Nome     | Tipo |     Dono
      ------------+-------------+--------+----------
       aplicativo | cargo       | tabela | postgres
       aplicativo | pessoa      | tabela | postgres




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos

      Banco teste

                   Tabela "aplicativo.cargo"
         Coluna   |         Tipo          | Modificadores
      -----------+-----------------------+---------------
        sigla     | character varying(10) | not null
        descricao | character varying(20) | not null
        salario   | numeric(17,2)         |
      ´ndices:
      I
           "cargo_pkey" PRIMARY KEY, btree (sigla)


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos

      Banco homologacao

                     Tabela "aplicativo.cargo"
         Coluna   |         Tipo          | Modificadores
      -----------+-----------------------+---------------
        sigla     | character varying(10) | not null
        descricao | character varying(20) | not null
        salario   | numeric(12,2)         |
      ´ndices:
      I
           "cargo_pkey" PRIMARY KEY, btree (sigla)


Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos
      Banco teste
                 Tabela "aplicativo.funcionario"
          Coluna    |         Tipo          | Modificadores
      -------------+-----------------------+---------------
        cpf         | numeric(14,0)         | not null
        sigla_cargo | character varying(10) | not null
      ´ndices:
      I
           "pk_funcionario" PRIMARY KEY, btree (cpf, sigla_cargo)
      Restri¸~es de chave estrangeira:
             co
           "funcionario_cpf_fkey" FOREIGN KEY (cpf)
              REFERENCES pessoa(cpf)
           "funcionario_sigla_cargo_fkey" FOREIGN KEY (sigla_cargo)
              REFERENCES cargo(sigla)
Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco homologacao
      N˜o existe tabela ”funcionario”...
       a




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco teste




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco teste




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco teste




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco teste




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a
Introdu¸˜o
       ca                  Qualidade de Software   Test Anything Protocol           M˜o na massa
                                                                                     a




Executando um script



Um exemplo
a estrutura dos bancos




      Banco teste




Testes unit´rios no PostgreSQL com pgTAP
           a                                                                PGDay S˜o Paulo, 2009
                                                                                   a

Testes unitarios no PostgreSQL com pgTAP

  • 1.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Testes unit´rios no PostgreSQL com pgTAP a Dickson S. Guedes guedes@guedesoft.net PGDay S˜o Paulo, 2009 a 24 de abril de 2009 Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 2.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Uma vis˜o geral... a Introdu¸˜o ca Compreendendo os ambientes Compreendendo os resultados inesperados Supostas alternativas Qualidade de Software Conceitos b´sicos a Compreendendo os testes O papel do DBA Test Anything Protocol Compreendendo o TAP Compreendendo o pgTAP M˜o na massa a Preparando o ambiente Entendendo os scripts Entendendo os tipos de testes Executando um script Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 3.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os ambientes Por onde come¸amos? c Laborat´rio o Desenvolvimento Teste Homologa¸˜o ca Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 4.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os ambientes Por onde come¸amos? c Laborat´rio o Desenvolvimento Teste Homologa¸˜o ca Produ¸˜o ca Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 5.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os resultados inesperados O tempo passa... o tempo voa... e o software vai sofrendo altera¸oes... c˜ ”Mas antes funcionava!” ”Isso piorou!” ”Eu n˜o fiz nada, foi essa mudan¸a a´ a c ı!” Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 6.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Supostas alternativas Op¸oes c˜ Ignorar, fingir que n˜o ´ com vocˆ; a e e Melhorar a infra-estrutura de suporte; Utilizar o efeito placebo; Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 7.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Supostas alternativas Op¸oes c˜ Ignorar, fingir que n˜o ´ com vocˆ; a e e Melhorar a infra-estrutura de suporte; Utilizar o efeito placebo; Melhorar a qualidade do software! Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 8.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Conceitos b´sicos a Qualidade de Software O que ´? e Por que? Quem precisa? Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 9.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os testes Teste Unit´rio? a O que ´? e Por que? Quem precisa? Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 10.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os testes Quem precisa estar envolvido? Analistas de Neg´cio o Analistas de Sistemas Desenvolvedores Testadores Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 11.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo os testes Quem precisa estar envolvido? Analistas de Neg´cio o Analistas de Sistemas Desenvolvedores Testadores DBA Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 12.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a O papel do DBA Qual o papel do DBA? Manter os ambientes versionados Testar as mudan¸as c Validar Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 13.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a O papel do DBA Evite perder... tempo... paciˆncia... e cabelos... Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 14.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo o TAP TAP Protocolo de Teste de Qualquer coisa O que ´? e Por quˆ? e Quem usa? Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 15.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Compreendendo o pgTAP Como o pgTAP pode ajudar? auxiliando nos testes de regress˜o a Testar Estrutura tabelas, campos, restri¸˜es, vis˜es co o Testar Dados valida¸˜es de CPF, tipos de dados financeiros... co Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 16.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Obtendo o pgTAP Baixe e descompacte http://pgtap.projects.postgresql.org/ Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 17.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Obtendo o pgTAP Baixe e descompacte http://pgtap.projects.postgresql.org/ Instalar via make make USE PGXS=1 make install USE PGXS=1 make installcheck USE PGXS=1 Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 18.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Obtendo o pgTAP Baixe e descompacte http://pgtap.projects.postgresql.org/ Instalar via make Instalar via gmake make USE PGXS=1 gmake USE PGXS=1 make install USE PGXS=1 gmake install USE PGXS=1 make installcheck gmake installcheck USE PGXS=1 USE PGXS=1 Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 19.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Preparando o pgTAP Variaveis que ajudam $PGDATABASE $PGHOST $PGPORT $PGUSER Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 20.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Preparando o pgTAP Variaveis que ajudam $PGDATABASE $PGHOST $PGPORT $PGUSER Exemplo export PGDATABASE=testedb export PGHOST=dbteste.srv.intranet export PGPORT=5433 export PGUSER=teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 21.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Preparando o ambiente Gerenciando o pacote pgTAP Diretamente no banco de dados psql -f pgtap.sql psql -f uninstall pgtap.sql Diretamente no banco template psql -d template1 -f pgtap.sql psql -d template1 -f uninstall pgtap.sql Sem altera¸˜es no banco co Neste caso utilizamos o pgtap apenas dentro de uma transa¸˜o, ca sem inserir as fun¸˜es no banco. co Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 22.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os scripts Anatomia de um script de teste O pseudo-c´digo o Configurar silenciamento Configurar formata¸˜o da saida ca Configurar rever¸˜o das mudan¸as em caso de falhas ca c BEGIN Carregar as fun¸˜es do pgTAP (se necess´rio) co a Planejar os testes Executar os testes Finalizar e limpar ROLLBACK Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 23.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os scripts Anatomia de um script de teste O cabe¸alho do script c -- Configura silenciamento set ECHO set QUIET 1 -- Configura formata¸~o de saida ca pset format unaligned pset tuples_only true pset pager -- Configura recer¸~o das mudan¸as em caso de falhas ca c set ON_ERROR_ROLLBACK 1 set ON_ERROR_STOP true set QUIET 1 Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 24.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os scripts Anatomia de um script de teste O corpo do script BEGIN; i pgtap.sql -- Carrega as fun¸~es do pgTAP co -- Planeja os testes SELECT plan(1); -- Executa os testes SELECT pass( ’Passei no teste!’ ); -- Finaliza e limpa SELECT * FROM finish(); ROLLBACK; Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 25.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os scripts Executando o teste Via psql Exemplo de um teste individual $ psql -Xf teste.sql 1..1 ok 1 - Passei no teste! Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 26.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os scripts Executando o teste Via pg prove Exemplo de um conjunto de testes $ pg_prove testes/*.sql sql/coltap.....ok sql/hastap.....ok sql/moretap....ok sql/pktap......ok All tests successful. Files=4, Tests=216, 1 wallclock secs ( 0.06 usr 0.02 sys + 0.08 cusr 0.07 csys = 0.23 CPU) Result: PASS Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 27.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes OK? N˜o OK? a ok( boolean, descricao ) is( elemento, elemento, descricao ) isnt( elemento, elemento, descricao ) matches( elemento, regex, descricao ) imatch( anyelement, regex, description ) doesnt match( anyelement, regex, description ) doesnt imatch( anyelement, regex, description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 28.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes Errar ´ umano e throws ok( consulta, errcode, errmsg, descricao ) lives ok( query, description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 29.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes O esquema est´ certinho? a has tablespace( tablespace, location, description ) hasnt tablespace( tablespace, tablespace, description ) has schema( schema, description ) hasnt schema( schema, schema, description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 30.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes Os objetos existem? has table( schema, table, description ) hasnt table( schema, table, description ) has view( schema, view, description ) hasnt view( schema, view, description ) has sequence( schema, sequence, description ) hasnt sequence( schema, sequence, description ) has index( schema, table, index, columns[], description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 31.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes E a estrutura das tabelas? has column( schema, table, column, description ) col not null( schema, table, column, description ) col is null( schema, table, column, description ) col has default( schema, table, column, description ) col default is( schema, table, column, default, description ) col type is( schema, table, column, type, description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 32.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Entendendo os tipos de testes Tipos de testes N˜o podemos esquecer das restri¸oes... a c˜ has pk( schema, table, description ) has fk( schema, table, description ) col is pk( schema, table, column[], description ) col is fk( schema, table, column[], description ) fk ok( fk schema, fk table, fk column[], pk schema, pk table, pk column[], description ) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 33.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Lista de rela¸~es co Esquema | Nome | Tipo | Dono ------------+-------------+--------+---------- aplicativo | cargo | tabela | postgres aplicativo | funcionario | tabela | postgres aplicativo | pessoa | tabela | postgres Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 34.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco homologacao Lista de rela¸~es co Esquema | Nome | Tipo | Dono ------------+-------------+--------+---------- aplicativo | cargo | tabela | postgres aplicativo | pessoa | tabela | postgres Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 35.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Tabela "aplicativo.cargo" Coluna | Tipo | Modificadores -----------+-----------------------+--------------- sigla | character varying(10) | not null descricao | character varying(20) | not null salario | numeric(17,2) | ´ndices: I "cargo_pkey" PRIMARY KEY, btree (sigla) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 36.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco homologacao Tabela "aplicativo.cargo" Coluna | Tipo | Modificadores -----------+-----------------------+--------------- sigla | character varying(10) | not null descricao | character varying(20) | not null salario | numeric(12,2) | ´ndices: I "cargo_pkey" PRIMARY KEY, btree (sigla) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 37.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Tabela "aplicativo.funcionario" Coluna | Tipo | Modificadores -------------+-----------------------+--------------- cpf | numeric(14,0) | not null sigla_cargo | character varying(10) | not null ´ndices: I "pk_funcionario" PRIMARY KEY, btree (cpf, sigla_cargo) Restri¸~es de chave estrangeira: co "funcionario_cpf_fkey" FOREIGN KEY (cpf) REFERENCES pessoa(cpf) "funcionario_sigla_cargo_fkey" FOREIGN KEY (sigla_cargo) REFERENCES cargo(sigla) Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 38.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco homologacao N˜o existe tabela ”funcionario”... a Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 39.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 40.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 41.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 42.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a
  • 43.
    Introdu¸˜o ca Qualidade de Software Test Anything Protocol M˜o na massa a Executando um script Um exemplo a estrutura dos bancos Banco teste Testes unit´rios no PostgreSQL com pgTAP a PGDay S˜o Paulo, 2009 a