SlideShare uma empresa Scribd logo
1 de 79
Baixar para ler offline
Testes de Unidade com C++
Semana Acadˆmica El´trica e Inform´tica 2011
           e       e              a


            Ramiro Batista da Luz

    DAINF - Departamento Acadˆmico de Inform´tica
                                 e              a
  Programa de P´s-Gradua¸˜o em Computa¸˜o Aplicada
                o         ca               ca
       Universidade Tecnol´gica Federal do Paran´
                          o                     a


                23 Agosto 2011
Quem?




Ramiro Batista da Luz, programador, debian-pr [GUD-PR(2006)],
grupy-pr [Grupy-PR(2007)], dojo-pr [Dojo-PR(2010)].
  • Mestrando pela Universidade Tecnol´gica Federal do Paran´.
                                      o                     a
Quem?




Ramiro Batista da Luz, programador, debian-pr [GUD-PR(2006)],
grupy-pr [Grupy-PR(2007)], dojo-pr [Dojo-PR(2010)].
  • Mestrando pela Universidade Tecnol´gica Federal do Paran´.
                                      o                     a
  • Programador da Cˆmara Municipal de Curitiba.
                    a
Onde?




• Nascido em Florian´polis-SC
                    o
Onde?




• Nascido em Florian´polis-SC
                    o
• Aos 3 anos foi para Chapec´-SC.
                            o
Onde?




• Nascido em Florian´polis-SC
                    o
• Aos 3 anos foi para Chapec´-SC.
                            o
• Aos 6 anos mudan¸a para Curitiba-PR.
                  c
Onde?




• Nascido em Florian´polis-SC
                    o
• Aos 3 anos foi para Chapec´-SC.
                            o
• Aos 6 anos mudan¸a para Curitiba-PR.
                  c
• Estudou no Positivo, at´ a gradua¸˜o, Bacharelado em Inform´tica.
                         e         ca                        a
Onde?




• Nascido em Florian´polis-SC
                    o
• Aos 3 anos foi para Chapec´-SC.
                            o
• Aos 6 anos mudan¸a para Curitiba-PR.
                  c
• Estudou no Positivo, at´ a gradua¸˜o, Bacharelado em Inform´tica.
                         e         ca                        a
• Ingressou no mestrado profissional em computa¸˜o aplicada da
                                              ca
  UTFPR.
Como?




• Palestra JUnit Adolfo, [Adolfo Neto(2010)]
Como?




• Palestra JUnit Adolfo, [Adolfo Neto(2010)]
• Sugest˜o de Coding Dojo na UTFPR
        a
Como?




• Palestra JUnit Adolfo, [Adolfo Neto(2010)]
• Sugest˜o de Coding Dojo na UTFPR
        a
      ca                                          e      ´
• Sele¸˜o do Mestrado - Engenharia de Software - M´todos Ageis -
  Coding Dojo [CodingDojo(2004)].
Porque?




• Python Unittest [Foundation(2001)]
Porque?




• Python Unittest [Foundation(2001)]
• Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)]
          ca
Porque?




• Python Unittest [Foundation(2001)]
• Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)]
          ca
• Algoritmos [DAINF - UTFPR(2011a)] - Testes simples
Porque?




• Python Unittest [Foundation(2001)]
• Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)]
          ca
• Algoritmos [DAINF - UTFPR(2011a)] - Testes simples
• Programa¸˜o Avan¸ada [DAINF - UTFPR(2011b)] - Foco em
          ca      c
  orienta¸˜o a objetos - Testes mais avan¸ados.
         ca                              c
Testes



• TDD - Test Driven Development [Beck(2002)]
Testes



• TDD - Test Driven Development [Beck(2002)]
• SUnit - Original para Smalltalk. [Wikipedia(1999b)] e
  [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)]
Testes



• TDD - Test Driven Development [Beck(2002)]
• SUnit - Original para Smalltalk. [Wikipedia(1999b)] e
  [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)]
• xUnit - Nomenclatura usada para generalizar o padr˜o, muitas
                                                    a
  linguagens desenvolveram bibliotecas similares, JUnit, NUnit,
  PyUnit, CPPUnit, ... [Wikipedia(1999a)]
Testes



• TDD - Test Driven Development [Beck(2002)]
• SUnit - Original para Smalltalk. [Wikipedia(1999b)] e
  [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)]
• xUnit - Nomenclatura usada para generalizar o padr˜o, muitas
                                                    a
  linguagens desenvolveram bibliotecas similares, JUnit, NUnit,
  PyUnit, CPPUnit, ... [Wikipedia(1999a)]
• Bowling Kata in C por Olve Maudal [Maudal(2007)] inspirado por
  Robert C. Martin [Martin(2005)]
CPPUnit



CPPUnit
 • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)]
CPPUnit



CPPUnit
 • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)]
 • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ...
CPPUnit



CPPUnit
 • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)]
 • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ...
 • instalar via gerenciador de pacotes(linux/debian)
   # aptitude install libcppunit-1.12-1 libcppunit-dev libcppunit-doc
CPPUnit



CPPUnit
 • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)]
 • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ...
 • instalar via gerenciador de pacotes(linux/debian)
   # aptitude install libcppunit-1.12-1 libcppunit-dev libcppunit-doc
 • Utilizada na Disciplina de Programa¸˜o Avan¸ada
                                      ca      c
   [DAINF - UTFPR(2011a)]
Quem est´ usando?
                     a




• Cities3D
Quem est´ usando?
                             a




• Cities3D
• PSI - cliente jabber.
Quem est´ usando?
                             a




• Cities3D
• PSI - cliente jabber.
• Rhodes framework
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
  • Registro de testes para reduzir a recompila¸˜o
                                               ca
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
  • Registro de testes para reduzir a recompila¸˜o
                                               ca
  • Plugin de teste para agilizar o ciclo de compila¸˜o/teste
                                                    ca
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
  • Registro de testes para reduzir a recompila¸˜o
                                               ca
  • Plugin de teste para agilizar o ciclo de compila¸˜o/teste
                                                    ca
  • Protetor para encapsular a execu¸˜o do teste
                                    ca
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
  • Registro de testes para reduzir a recompila¸˜o
                                               ca
  • Plugin de teste para agilizar o ciclo de compila¸˜o/teste
                                                    ca
  • Protetor para encapsular a execu¸˜o do teste
                                    ca
  • Executor de teste MFC (MfcTestRunner MfcTestRunner ) por
    Baptiste Lepilleur [Baptiste Lepilleur(2002b)]
CPPUnit Caracter´
                                   ısticas

Caracter´
        ısticas [Feathers(2002c)]
  • Sa´ XML
      ıda
  • Sa´ de texto similar a compilador para integrar com IDE
      ıda
  • Macros auxiliares para facilitar a declara¸˜o da su´ de testes
                                              ca       ıte
  • Suporte a prepara¸˜o de testes hier´rquica
                     ca                a
  • Registro de testes para reduzir a recompila¸˜o
                                               ca
  • Plugin de teste para agilizar o ciclo de compila¸˜o/teste
                                                    ca
  • Protetor para encapsular a execu¸˜o do teste
                                    ca
  • Executor de teste MFC (MfcTestRunner MfcTestRunner ) por
    Baptiste Lepilleur [Baptiste Lepilleur(2002b)]
  • Executor de teste gr´fico baseado em QT (QtTestRunner
                        a
    QtTestRunner ) por Baptiste Lepilleur [Baptiste Lepilleur(2002a)]
CPPUnit - Includes




# include   < fstream >
# include   < cppunit / portability / Stream .h >
# include   < cppunit / C omp i l e r O u t p u t t e r .h >
# include   < cppunit / extensions / T e s t F a c t o r y R e g i s t r y .h >
# include   < cppunit / XmlOutputter .h >
# include   < cppunit / ui / text / TestRunner .h >
CPPUnit - Sa´ XML
                                       ıda


bool xml_runner ()
{
    // Get the top level suite from the r e g i s t r y
    CppUnit :: Test * suite =
        CppUnit :: T e s t F a c t o r y R e g i s t r y :: getRegistry (). makeTest ();

     CppUnit :: TextUi :: TestRunner runner ;

     runner . addTest ( suite );

     std :: ofstream file ( " result . xml " );
     CppUnit :: XmlOutputter * outputter =
         new CppUnit :: XmlOutputter (& runner . result () , file );
     runner . setOutputter ( outputter );

     // use the suite factory , then execute all tests
     return runner . run ( " " , false );
}
CPPUnit - Sa´ Compiler
                                   ıda



bool text_runner ()
{
    // Get the top level suite from the r e g i s t r y
    CppUnit :: Test * suite =
        CppUnit :: T e s t F a c t o r y R e g i s t r y :: getRegistry (). makeTest ();

     // Adds the test to the list of test to run
     CppUnit :: TextUi :: TestRunner runner ;

     runner . addTest ( suite );

     // Change the default o u t p u t t e r to a c o m p i l e r error format o u t p u t t e r
     runner . setOutputter ( new CppUnit :: C o m p i l e r O u t p u t t e r ( & runner . result () ,
                                                                              std :: cerr ) );
     // Run the tests .
     return runner . run ();
}
CPPUnit - Macros



class TestData : public CppUnit :: TestFixture
{
  C P P U N I T_ T ES T _S UI T E ( TestData );
  CPPUNIT_TEST ( testCon s tr uc to r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s M e n o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s M a i o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o M e s D i a M e n o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o M e s D i a M a i o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o s M e s D i a );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o S i m a o );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o E i s t e i n );
  CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o N e w t o n );
  CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s M e n o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s M a i o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o M e s D i a M e n o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o M e s D i a M a i o r );
  CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o s M e s D i a );
Exemplo




• Ver TestAcademico.cpp e TestData.*
Google Test



Google Test
  • Utilizado para projetos internos na Google [Google(2008b)]
Google Test



Google Test
  • Utilizado para projetos internos na Google [Google(2008b)]
  • Para instalar baixar do projeto pelo site [Google(2008a)] ou ...
Google Test



Google Test
  • Utilizado para projetos internos na Google [Google(2008b)]
  • Para instalar baixar do projeto pelo site [Google(2008a)] ou ...
  • Instalar via gerenciador de pacotes(linux/debian)
    # aptitude install libgtest-dev libgtest0
Google Test



Google Test
  • Utilizado para projetos internos na Google [Google(2008b)]
  • Para instalar baixar do projeto pelo site [Google(2008a)] ou ...
  • Instalar via gerenciador de pacotes(linux/debian)
    # aptitude install libgtest-dev libgtest0
  • Utilizada para Algoritmos [DAINF - UTFPR(2011a)] / CodingDojo
    [Dojo-PR(2010)]
Quem est´ usando?
                          a




• Os projetos Chromium (por tr´s do navegador Chrome e Chrome
                              a
  OS)
Quem est´ usando?
                          a




• Os projetos Chromium (por tr´s do navegador Chrome e Chrome
                              a
  OS)
• O compilador LLVM
Quem est´ usando?
                           a




• Os projetos Chromium (por tr´s do navegador Chrome e Chrome
                              a
  OS)
• O compilador LLVM
• Protocol Buffers (formato de intercambio de dados do Google)
Google Test - Caracter´
                                     ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
Google Test - Caracter´
                                     ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
  • Agrupa testes relacionados em casos de teste (Test Cases)
Google Test - Caracter´
                                     ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
  • Agrupa testes relacionados em casos de teste (Test Cases)
  • Funciona em v´rios sistemas operacionais e com v´rios compiladores
                 a                                  a
Google Test - Caracter´
                                      ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
  • Agrupa testes relacionados em casos de teste (Test Cases)
  • Funciona em v´rios sistemas operacionais e com v´rios compiladores
                 a                                  a
  • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes
     a e                                                a
    num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o
        ´                   ca     ca         ca
Google Test - Caracter´
                                      ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
  • Agrupa testes relacionados em casos de teste (Test Cases)
  • Funciona em v´rios sistemas operacionais e com v´rios compiladores
                 a                                  a
  • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes
     a e                                                a
    num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o
        ´                   ca     ca         ca
  • Automaticamente mant´m registro dos testes definidos
                        e
Google Test - Caracter´
                                      ısticas



Cartilha ou Como come¸ar? [Google(2008c)]
                     c
  • Permite rodar testes isoladamente
  • Agrupa testes relacionados em casos de teste (Test Cases)
  • Funciona em v´rios sistemas operacionais e com v´rios compiladores
                 a                                  a
  • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes
     a e                                                a
    num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o
        ´                   ca     ca         ca
  • Automaticamente mant´m registro dos testes definidos
                        e
  • Permite o reuso de recursos compartilhados entre os testes
Google Test - Rodando testes isolados



//    Google GTest F r a m e w o r k Example
//    To COMPILE IT
//    g ++ t e s t _ a r v o r e . cpp - l g t e s t _ m a i n - pthread -o t e s t _ a r v o r e
//    TO RUN
//    ./ t e s t _ a r v o r e
//
//    TO FILTER TEST E X E C U T I O N
//    ./ t e s t _ a r v o r e -- gtest - filter = A r v o r e T e s t . Insere
//

# include < gtest / gtest .h >
# include " arvore . cpp "

...
TEST_F ( ArvoreTest , Insere ) {
Google Test - Test Case


// ./ t e s t _ a r v o r e -- gtest - filter = A r v o r e T e s t . Insere
//

# include < gtest / gtest .h >
# include " arvore . cpp "

namespace {

// The fixture for testing class Arvore .
class ArvoreTest : public :: testing :: Test {

...
TEST_F ( ArvoreTest , R e m o v e R a i z S e m F i l h o s ) {
    ostringstream impressao ;

      impressao << " Arvore vazia , nada para imprimir " << endl ;

      arvore_insere (5);
      arvore_remove (5);
      ASSERT_EQ ( impressao . str () , arvore_texto ());
}
Google Test - N˜o ´ interrompido
                         a e


[==========] Running 17 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 17 tests from ArvoreTest
[ RUN      ] ArvoreTest.Insere
test_arvore.cpp:81: Failure
...
[ FAILED ] ArvoreTest.Insere (7 ms)
[ RUN      ] ArvoreTest.CriaArvoreAltura3
[       OK ] ArvoreTest.CriaArvoreAltura3 (0 ms)
[ RUN      ] ArvoreTest.RemoveNo2FilhosEsquerda
...
Google Test - Registro autom´tico
                                         a




int main ( int argc , char ** argv ) {
    :: testing :: InitGoogleTes t (& argc , argv );
    return RUN_ALL_TESTS ();
}
Google Test - Reuso




      ArvoreTest () {
        // You can do set - up work for each test here .
      }

...
      virtual void SetUp () {
        // Code here will be called i m m e d i a t e l y after the c o n s t r u c t o r ( right
        // before each test ).
      }
Google Test - Asser¸˜es
                                   co




B´sicos
 a
  • ASSERT TRUE(condi¸˜o); EXPECT TRUE(condi¸˜o);
                     ca                     ca
  • ASSERT FALSE(condi¸˜o); EXPECT FALSE(condi¸˜o);
                      ca                      ca
Google Test - Compara¸˜o Binaria
                             ca




• == ASSERT EQ(esperado, atual); EXPECT EQ(esperado, atual);
• != ASSERT NE(val1, val2); EXPECT NE(val1, val2);
• <ASSERT LT(val1, val2); EXPECT LT(val1, val2);
• <= ASSERT LE(val1, val2); EXPECT LE(val1, val2);
• >ASSERT GT(val1, val2); EXPECT GT(val1, val2);
• >= ASSERT GE(val1, val2); EXPECT GE(val1, val2);
Google Test - Compara¸˜o de strings
                                ca



• ASSERT STREQ(str esperada, str atual);
  EXPECT STREQ(str esperada, str atual);
• ASSERT STRNE(str1, str2); EXPECT STRNE(str1, str2);
• ASSERT STRCASEEQ(str esperada, str atual);
  EXPECT STRCASEEQ(str esperada, str atual);
• ASSERT STRCASENE(str1, str2); EXPECT STRCASENE(str1,
  str2);
Google Test - Exce¸˜es
                                co




• ASSERT THROW(comando, tipo exce¸˜o);
                                 ca
 EXPECT THROW(comando, tipo exce¸˜o);
                                ca
• ASSERT ANY THROW(comando);
 EXPECT ANY THROW(comando);
• ASSERT NO THROW(comando);
 EXPECT NO THROW(comando);
Google Test - Compara¸˜o de n´meros ponto flutuante
                     ca      u




  • ASSERT FLOAT EQ(esperado, atual);
    EXPECT FLOAT EQ(esperado, atual);
  • ASSERT DOUBLE EQ(esperado, atual);
    EXPECT DOUBLE EQ(esperado, atual);
Exemplo




• Ver arvore.cpp e test arvore.cpp
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
• Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada
          a      a                          ca      c
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
• Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada
          a      a                          ca      c
• Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira)
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
• Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada
          a      a                          ca      c
• Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira)
• Arthur Furlan(@afurlan) Autor do http://va.mu
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
• Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada
          a      a                          ca      c
• Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira)
• Arthur Furlan(@afurlan) Autor do http://va.mu
• Organizadores e Equipe da Semana Acadˆmica de Eletrˆnica e
                                       e             o
  Inform´tica
        a
Agradecimentos



• Adolfo Gustavo Serra Seca Neto - Orientador
• Tania Mezzadri - Algoritmos
• Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada
          a      a                          ca      c
• Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira)
• Arthur Furlan(@afurlan) Autor do http://va.mu
• Organizadores e Equipe da Semana Acadˆmica de Eletrˆnica e
                                       e             o
  Inform´tica
        a
• Ao p´blico presente.
      u
Referencias I

Adolfo Neto.
Desenvolvimento dirigido por testes com junit.
http://va.mu/AJ50, May 2010.
URL http://va.mu/AJ50.
Baptiste Lepilleur.
SourceForge.net: QtTestRunner - cppunit.
http://va.mu/oDe, 2002a.
URL http://va.mu/oDe.
[Online; accessed 13-June-2011].
Baptiste Lepilleur.
SourceForge.net: MfcTestRunner - cppunit.
http://va.mu/oDN, 2002b.
URL http://va.mu/oDN.
[Online; accessed 13-June-2011].
Referencias II

Beck.
Test driven development: by example.
Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA,
2002.
ISBN 0321146530.
K. Beck.
Kent Beck’s guide to better Smalltalk.
Cambridge University Press, Cambridge, U.K. New York, 1999.
ISBN 9780521644372.
CodingDojo.
Welcome to the coding dojo.
http://va.mu/3e3, 2004.
URL http://va.mu/3e3.
[Online; accessed 13-June-2011].
Referencias III
DAINF - UTFPR.
Ement´rios das disciplinas - DAINF-Departamento acadˆmico de
      a                                              e
inform´tica - Algoritmos e Estruturas de Dados (CABS-001).
      a
http://va.mu/oLH, 2011a.
URL http://va.mu/oLH.
[Online; accessed 13-June-2011].
DAINF - UTFPR.
Ement´rios das disciplinas - DAINF-Departamento acadˆmico de
      a                                             e
inform´tica - Programa¸˜o Avan¸ada (CABS-002).
      a                ca       c
http://va.mu/oNA, 2011b.
URL http://va.mu/oNA.
[Online; accessed 13-June-2011].
Dojo-PR.
Dojo-parana’s profile - GitHub.
https://github.com/dojo-parana, 28 May 2010.
URL https://github.com/dojo-parana.
[Online; accessed 13-June-2011].
Referencias IV

M. Feathers.
SourceForge.net: cppunit.
http://va.mu/oNB, 2002a.
URL http://va.mu/oNB.
[Online; accessed 13-June-2011].
M. Feathers.
SourceForge.net: cppunit download.
http://va.mu/oND, 2002b.
URL http://va.mu/oND.
[Online; accessed 13-June-2011].
M. Feathers.
SourceForge.net: cppunit what is.
http://va.mu/oNE, 2002c.
URL http://va.mu/oNE.
[Online; accessed 13-June-2011].
Referencias V
P. S. Foundation.
25.3. unittest - unit testing framework - python v2.7.1
documentation.
http://va.mu/oMf, 2001.
URL http://va.mu/oMf.
[Online; accessed 13-June-2011].
Google.
Downloads - googletest - google c++ testing framework -
Downloads.
http://va.mu/oMg, 2008a.
URL http://va.mu/oMg.
[Online; accessed 13-June-2011].
Google.
Googletest - google c++ testing framework - home page.
http://va.mu/oMi, 2008b.
URL http://va.mu/oMi.
[Online; accessed 13-June-2011].
Referencias VI
Google.
V1 5 Primer - googletest - getting started with google c++ testing
framework.
http://va.mu/oNF, 2008c.
URL http://va.mu/oNF.
[Online; accessed 13-June-2011].
Grupy-PR.
GruPy-PR grupos do google.
http://va.mu/oMk, 2007.
URL http://va.mu/oMk.
[Online; accessed 13-June-2011].
GUD-PR.
GUD-BR-PR.
http://va.mu/3ez, 2006.
URL http://va.mu/3ez.
[Online; accessed 13-June-2011].
Referencias VII

R. C. Martin.
ArticleS.UncleBob.TheBowlingGameKata.
http://va.mu/oMl, 2005.
URL http://va.mu/oMl.
[Online; accessed 13-June-2011].
O. Maudal.
Test-Driven development in c - geektalk.
http://va.mu/oMm, 27 Nov. 2007.
URL http://va.mu/oMm.
[Online; accessed 13-June-2011].
Wikipedia.
Smalltalk - wikipedia, the free encyclopedia.
http://va.mu/AKLX, 1972.
URL http://va.mu/AKLX.
[Online; accessed 20-June-2011].
Referencias VIII



Wikipedia.
xUnit - wikipedia, the free encyclopedia.
http://va.mu/oNI, 1999a.
URL http://va.mu/oNI.
[Online; accessed 13-June-2011].
Wikipedia.
Sunit - wikipedia, the free encyclopedia.
http://va.mu/AKJL, 1999b.
URL http://va.mu/AKJL.
[Online; accessed 20-June-2011].

Mais conteúdo relacionado

Semelhante a Testes de Unidade para C++

Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwareTiago Barros
 
Precisamos falar sobre Testes de infraestrutura
Precisamos falar sobre Testes de infraestruturaPrecisamos falar sobre Testes de infraestrutura
Precisamos falar sobre Testes de infraestruturaRafael Gomes
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de TrabalhoEduardo Carvalho
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoLorival Smolski Chapuis
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreGivanaldo Rocha
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCMayara Fernandes
 
Linhas de produto de software a deep introduction
Linhas de produto de software   a deep introductionLinhas de produto de software   a deep introduction
Linhas de produto de software a deep introductionFranklin Silva
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias IncluídasJonh Edson
 

Semelhante a Testes de Unidade para C++ (20)

Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
 
Precisamos falar sobre Testes de infraestrutura
Precisamos falar sobre Testes de infraestruturaPrecisamos falar sobre Testes de infraestrutura
Precisamos falar sobre Testes de infraestrutura
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de Trabalho
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Csharp
CsharpCsharp
Csharp
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software Livre
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SC
 
Linhas de produto de software a deep introduction
Linhas de produto de software   a deep introductionLinhas de produto de software   a deep introduction
Linhas de produto de software a deep introduction
 
ESTRUTURA DE DADOS (JAVA) AULA 01
ESTRUTURA DE DADOS (JAVA) AULA 01ESTRUTURA DE DADOS (JAVA) AULA 01
ESTRUTURA DE DADOS (JAVA) AULA 01
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias Incluídas
 

Mais de Ramiro Luz

Institutional Website - the longest project of my life
Institutional Website - the longest project of my lifeInstitutional Website - the longest project of my life
Institutional Website - the longest project of my lifeRamiro Luz
 
Plone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsPlone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsRamiro Luz
 
Portal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsPortal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsRamiro Luz
 
Para que serve o Python
Para que serve o PythonPara que serve o Python
Para que serve o PythonRamiro Luz
 
Minerando dados com Python
Minerando dados com PythonMinerando dados com Python
Minerando dados com PythonRamiro Luz
 
Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Ramiro Luz
 
Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Ramiro Luz
 
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Ramiro Luz
 
Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Ramiro Luz
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com PloneRamiro Luz
 
Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Ramiro Luz
 
Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Ramiro Luz
 
Python 3, patterns and indioms
Python 3, patterns and indiomsPython 3, patterns and indioms
Python 3, patterns and indiomsRamiro Luz
 
Dojo de Programação
Dojo de ProgramaçãoDojo de Programação
Dojo de ProgramaçãoRamiro Luz
 
Teaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleTeaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleRamiro Luz
 
Usando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDUsando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDRamiro Luz
 
Sabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonSabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonRamiro Luz
 
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Ramiro Luz
 
Apresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionApresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionRamiro Luz
 
python-agil-IVEnGitec
python-agil-IVEnGitecpython-agil-IVEnGitec
python-agil-IVEnGitecRamiro Luz
 

Mais de Ramiro Luz (20)

Institutional Website - the longest project of my life
Institutional Website - the longest project of my lifeInstitutional Website - the longest project of my life
Institutional Website - the longest project of my life
 
Plone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsPlone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizations
 
Portal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsPortal Modelo - Plone for Parliaments
Portal Modelo - Plone for Parliaments
 
Para que serve o Python
Para que serve o PythonPara que serve o Python
Para que serve o Python
 
Minerando dados com Python
Minerando dados com PythonMinerando dados com Python
Minerando dados com Python
 
Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.
 
Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015
 
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
 
Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
 
Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014
 
Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?
 
Python 3, patterns and indioms
Python 3, patterns and indiomsPython 3, patterns and indioms
Python 3, patterns and indioms
 
Dojo de Programação
Dojo de ProgramaçãoDojo de Programação
Dojo de Programação
 
Teaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleTeaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo Style
 
Usando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDUsando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDD
 
Sabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonSabores do desenvolvimento web com Python
Sabores do desenvolvimento web com Python
 
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
 
Apresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionApresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoption
 
python-agil-IVEnGitec
python-agil-IVEnGitecpython-agil-IVEnGitec
python-agil-IVEnGitec
 

Testes de Unidade para C++

  • 1. Testes de Unidade com C++ Semana Acadˆmica El´trica e Inform´tica 2011 e e a Ramiro Batista da Luz DAINF - Departamento Acadˆmico de Inform´tica e a Programa de P´s-Gradua¸˜o em Computa¸˜o Aplicada o ca ca Universidade Tecnol´gica Federal do Paran´ o a 23 Agosto 2011
  • 2. Quem? Ramiro Batista da Luz, programador, debian-pr [GUD-PR(2006)], grupy-pr [Grupy-PR(2007)], dojo-pr [Dojo-PR(2010)]. • Mestrando pela Universidade Tecnol´gica Federal do Paran´. o a
  • 3. Quem? Ramiro Batista da Luz, programador, debian-pr [GUD-PR(2006)], grupy-pr [Grupy-PR(2007)], dojo-pr [Dojo-PR(2010)]. • Mestrando pela Universidade Tecnol´gica Federal do Paran´. o a • Programador da Cˆmara Municipal de Curitiba. a
  • 4. Onde? • Nascido em Florian´polis-SC o
  • 5. Onde? • Nascido em Florian´polis-SC o • Aos 3 anos foi para Chapec´-SC. o
  • 6. Onde? • Nascido em Florian´polis-SC o • Aos 3 anos foi para Chapec´-SC. o • Aos 6 anos mudan¸a para Curitiba-PR. c
  • 7. Onde? • Nascido em Florian´polis-SC o • Aos 3 anos foi para Chapec´-SC. o • Aos 6 anos mudan¸a para Curitiba-PR. c • Estudou no Positivo, at´ a gradua¸˜o, Bacharelado em Inform´tica. e ca a
  • 8. Onde? • Nascido em Florian´polis-SC o • Aos 3 anos foi para Chapec´-SC. o • Aos 6 anos mudan¸a para Curitiba-PR. c • Estudou no Positivo, at´ a gradua¸˜o, Bacharelado em Inform´tica. e ca a • Ingressou no mestrado profissional em computa¸˜o aplicada da ca UTFPR.
  • 9. Como? • Palestra JUnit Adolfo, [Adolfo Neto(2010)]
  • 10. Como? • Palestra JUnit Adolfo, [Adolfo Neto(2010)] • Sugest˜o de Coding Dojo na UTFPR a
  • 11. Como? • Palestra JUnit Adolfo, [Adolfo Neto(2010)] • Sugest˜o de Coding Dojo na UTFPR a ca e ´ • Sele¸˜o do Mestrado - Engenharia de Software - M´todos Ageis - Coding Dojo [CodingDojo(2004)].
  • 12. Porque? • Python Unittest [Foundation(2001)]
  • 13. Porque? • Python Unittest [Foundation(2001)] • Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)] ca
  • 14. Porque? • Python Unittest [Foundation(2001)] • Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)] ca • Algoritmos [DAINF - UTFPR(2011a)] - Testes simples
  • 15. Porque? • Python Unittest [Foundation(2001)] • Disserta¸˜o - TDD [Beck(2002)] - Coding Dojo [CodingDojo(2004)] ca • Algoritmos [DAINF - UTFPR(2011a)] - Testes simples • Programa¸˜o Avan¸ada [DAINF - UTFPR(2011b)] - Foco em ca c orienta¸˜o a objetos - Testes mais avan¸ados. ca c
  • 16. Testes • TDD - Test Driven Development [Beck(2002)]
  • 17. Testes • TDD - Test Driven Development [Beck(2002)] • SUnit - Original para Smalltalk. [Wikipedia(1999b)] e [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)]
  • 18. Testes • TDD - Test Driven Development [Beck(2002)] • SUnit - Original para Smalltalk. [Wikipedia(1999b)] e [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)] • xUnit - Nomenclatura usada para generalizar o padr˜o, muitas a linguagens desenvolveram bibliotecas similares, JUnit, NUnit, PyUnit, CPPUnit, ... [Wikipedia(1999a)]
  • 19. Testes • TDD - Test Driven Development [Beck(2002)] • SUnit - Original para Smalltalk. [Wikipedia(1999b)] e [Wikipedia(1972)]. Por Kent Beck. [Beck(1999)] • xUnit - Nomenclatura usada para generalizar o padr˜o, muitas a linguagens desenvolveram bibliotecas similares, JUnit, NUnit, PyUnit, CPPUnit, ... [Wikipedia(1999a)] • Bowling Kata in C por Olve Maudal [Maudal(2007)] inspirado por Robert C. Martin [Martin(2005)]
  • 20. CPPUnit CPPUnit • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)]
  • 21. CPPUnit CPPUnit • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)] • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ...
  • 22. CPPUnit CPPUnit • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)] • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ... • instalar via gerenciador de pacotes(linux/debian) # aptitude install libcppunit-1.12-1 libcppunit-dev libcppunit-doc
  • 23. CPPUnit CPPUnit • Portado do JUnit para C++ por Michael Feathers [Feathers(2002a)] • Para instalar obter a biblioteca no site [Feathers(2002b)] ou ... • instalar via gerenciador de pacotes(linux/debian) # aptitude install libcppunit-1.12-1 libcppunit-dev libcppunit-doc • Utilizada na Disciplina de Programa¸˜o Avan¸ada ca c [DAINF - UTFPR(2011a)]
  • 24. Quem est´ usando? a • Cities3D
  • 25. Quem est´ usando? a • Cities3D • PSI - cliente jabber.
  • 26. Quem est´ usando? a • Cities3D • PSI - cliente jabber. • Rhodes framework
  • 27. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda
  • 28. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda
  • 29. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte
  • 30. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a
  • 31. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a • Registro de testes para reduzir a recompila¸˜o ca
  • 32. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a • Registro de testes para reduzir a recompila¸˜o ca • Plugin de teste para agilizar o ciclo de compila¸˜o/teste ca
  • 33. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a • Registro de testes para reduzir a recompila¸˜o ca • Plugin de teste para agilizar o ciclo de compila¸˜o/teste ca • Protetor para encapsular a execu¸˜o do teste ca
  • 34. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a • Registro de testes para reduzir a recompila¸˜o ca • Plugin de teste para agilizar o ciclo de compila¸˜o/teste ca • Protetor para encapsular a execu¸˜o do teste ca • Executor de teste MFC (MfcTestRunner MfcTestRunner ) por Baptiste Lepilleur [Baptiste Lepilleur(2002b)]
  • 35. CPPUnit Caracter´ ısticas Caracter´ ısticas [Feathers(2002c)] • Sa´ XML ıda • Sa´ de texto similar a compilador para integrar com IDE ıda • Macros auxiliares para facilitar a declara¸˜o da su´ de testes ca ıte • Suporte a prepara¸˜o de testes hier´rquica ca a • Registro de testes para reduzir a recompila¸˜o ca • Plugin de teste para agilizar o ciclo de compila¸˜o/teste ca • Protetor para encapsular a execu¸˜o do teste ca • Executor de teste MFC (MfcTestRunner MfcTestRunner ) por Baptiste Lepilleur [Baptiste Lepilleur(2002b)] • Executor de teste gr´fico baseado em QT (QtTestRunner a QtTestRunner ) por Baptiste Lepilleur [Baptiste Lepilleur(2002a)]
  • 36. CPPUnit - Includes # include < fstream > # include < cppunit / portability / Stream .h > # include < cppunit / C omp i l e r O u t p u t t e r .h > # include < cppunit / extensions / T e s t F a c t o r y R e g i s t r y .h > # include < cppunit / XmlOutputter .h > # include < cppunit / ui / text / TestRunner .h >
  • 37. CPPUnit - Sa´ XML ıda bool xml_runner () { // Get the top level suite from the r e g i s t r y CppUnit :: Test * suite = CppUnit :: T e s t F a c t o r y R e g i s t r y :: getRegistry (). makeTest (); CppUnit :: TextUi :: TestRunner runner ; runner . addTest ( suite ); std :: ofstream file ( " result . xml " ); CppUnit :: XmlOutputter * outputter = new CppUnit :: XmlOutputter (& runner . result () , file ); runner . setOutputter ( outputter ); // use the suite factory , then execute all tests return runner . run ( " " , false ); }
  • 38. CPPUnit - Sa´ Compiler ıda bool text_runner () { // Get the top level suite from the r e g i s t r y CppUnit :: Test * suite = CppUnit :: T e s t F a c t o r y R e g i s t r y :: getRegistry (). makeTest (); // Adds the test to the list of test to run CppUnit :: TextUi :: TestRunner runner ; runner . addTest ( suite ); // Change the default o u t p u t t e r to a c o m p i l e r error format o u t p u t t e r runner . setOutputter ( new CppUnit :: C o m p i l e r O u t p u t t e r ( & runner . result () , std :: cerr ) ); // Run the tests . return runner . run (); }
  • 39. CPPUnit - Macros class TestData : public CppUnit :: TestFixture { C P P U N I T_ T ES T _S UI T E ( TestData ); CPPUNIT_TEST ( testCon s tr uc to r ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s M e n o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s M a i o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o M e s D i a M e n o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o M e s D i a M a i o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ M e s m o s M e s D i a ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o S i m a o ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o E i s t e i n ); CPPUNIT_TEST ( t e s t D i f e r e n c a A n o s _ A n i v e r s a r i o N e w t o n ); CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s M e n o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s M a i o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o M e s D i a M e n o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o M e s D i a M a i o r ); CPPUNIT_TEST ( t e s t D i f e r e n c a D i a s _ B i s s e x t o M e s m o s M e s D i a );
  • 41. Google Test Google Test • Utilizado para projetos internos na Google [Google(2008b)]
  • 42. Google Test Google Test • Utilizado para projetos internos na Google [Google(2008b)] • Para instalar baixar do projeto pelo site [Google(2008a)] ou ...
  • 43. Google Test Google Test • Utilizado para projetos internos na Google [Google(2008b)] • Para instalar baixar do projeto pelo site [Google(2008a)] ou ... • Instalar via gerenciador de pacotes(linux/debian) # aptitude install libgtest-dev libgtest0
  • 44. Google Test Google Test • Utilizado para projetos internos na Google [Google(2008b)] • Para instalar baixar do projeto pelo site [Google(2008a)] ou ... • Instalar via gerenciador de pacotes(linux/debian) # aptitude install libgtest-dev libgtest0 • Utilizada para Algoritmos [DAINF - UTFPR(2011a)] / CodingDojo [Dojo-PR(2010)]
  • 45. Quem est´ usando? a • Os projetos Chromium (por tr´s do navegador Chrome e Chrome a OS)
  • 46. Quem est´ usando? a • Os projetos Chromium (por tr´s do navegador Chrome e Chrome a OS) • O compilador LLVM
  • 47. Quem est´ usando? a • Os projetos Chromium (por tr´s do navegador Chrome e Chrome a OS) • O compilador LLVM • Protocol Buffers (formato de intercambio de dados do Google)
  • 48. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente
  • 49. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente • Agrupa testes relacionados em casos de teste (Test Cases)
  • 50. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente • Agrupa testes relacionados em casos de teste (Test Cases) • Funciona em v´rios sistemas operacionais e com v´rios compiladores a a
  • 51. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente • Agrupa testes relacionados em casos de teste (Test Cases) • Funciona em v´rios sistemas operacionais e com v´rios compiladores a a • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes a e a num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o ´ ca ca ca
  • 52. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente • Agrupa testes relacionados em casos de teste (Test Cases) • Funciona em v´rios sistemas operacionais e com v´rios compiladores a a • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes a e a num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o ´ ca ca ca • Automaticamente mant´m registro dos testes definidos e
  • 53. Google Test - Caracter´ ısticas Cartilha ou Como come¸ar? [Google(2008c)] c • Permite rodar testes isoladamente • Agrupa testes relacionados em casos de teste (Test Cases) • Funciona em v´rios sistemas operacionais e com v´rios compiladores a a • N˜o ´ interrompido nas falhas, permitindo corrigir v´rios bugs/testes a e a num unico ciclo de execu¸˜o-edi¸˜o-compila¸˜o ´ ca ca ca • Automaticamente mant´m registro dos testes definidos e • Permite o reuso de recursos compartilhados entre os testes
  • 54. Google Test - Rodando testes isolados // Google GTest F r a m e w o r k Example // To COMPILE IT // g ++ t e s t _ a r v o r e . cpp - l g t e s t _ m a i n - pthread -o t e s t _ a r v o r e // TO RUN // ./ t e s t _ a r v o r e // // TO FILTER TEST E X E C U T I O N // ./ t e s t _ a r v o r e -- gtest - filter = A r v o r e T e s t . Insere // # include < gtest / gtest .h > # include " arvore . cpp " ... TEST_F ( ArvoreTest , Insere ) {
  • 55. Google Test - Test Case // ./ t e s t _ a r v o r e -- gtest - filter = A r v o r e T e s t . Insere // # include < gtest / gtest .h > # include " arvore . cpp " namespace { // The fixture for testing class Arvore . class ArvoreTest : public :: testing :: Test { ... TEST_F ( ArvoreTest , R e m o v e R a i z S e m F i l h o s ) { ostringstream impressao ; impressao << " Arvore vazia , nada para imprimir " << endl ; arvore_insere (5); arvore_remove (5); ASSERT_EQ ( impressao . str () , arvore_texto ()); }
  • 56. Google Test - N˜o ´ interrompido a e [==========] Running 17 tests from 1 test case. [----------] Global test environment set-up. [----------] 17 tests from ArvoreTest [ RUN ] ArvoreTest.Insere test_arvore.cpp:81: Failure ... [ FAILED ] ArvoreTest.Insere (7 ms) [ RUN ] ArvoreTest.CriaArvoreAltura3 [ OK ] ArvoreTest.CriaArvoreAltura3 (0 ms) [ RUN ] ArvoreTest.RemoveNo2FilhosEsquerda ...
  • 57. Google Test - Registro autom´tico a int main ( int argc , char ** argv ) { :: testing :: InitGoogleTes t (& argc , argv ); return RUN_ALL_TESTS (); }
  • 58. Google Test - Reuso ArvoreTest () { // You can do set - up work for each test here . } ... virtual void SetUp () { // Code here will be called i m m e d i a t e l y after the c o n s t r u c t o r ( right // before each test ). }
  • 59. Google Test - Asser¸˜es co B´sicos a • ASSERT TRUE(condi¸˜o); EXPECT TRUE(condi¸˜o); ca ca • ASSERT FALSE(condi¸˜o); EXPECT FALSE(condi¸˜o); ca ca
  • 60. Google Test - Compara¸˜o Binaria ca • == ASSERT EQ(esperado, atual); EXPECT EQ(esperado, atual); • != ASSERT NE(val1, val2); EXPECT NE(val1, val2); • <ASSERT LT(val1, val2); EXPECT LT(val1, val2); • <= ASSERT LE(val1, val2); EXPECT LE(val1, val2); • >ASSERT GT(val1, val2); EXPECT GT(val1, val2); • >= ASSERT GE(val1, val2); EXPECT GE(val1, val2);
  • 61. Google Test - Compara¸˜o de strings ca • ASSERT STREQ(str esperada, str atual); EXPECT STREQ(str esperada, str atual); • ASSERT STRNE(str1, str2); EXPECT STRNE(str1, str2); • ASSERT STRCASEEQ(str esperada, str atual); EXPECT STRCASEEQ(str esperada, str atual); • ASSERT STRCASENE(str1, str2); EXPECT STRCASENE(str1, str2);
  • 62. Google Test - Exce¸˜es co • ASSERT THROW(comando, tipo exce¸˜o); ca EXPECT THROW(comando, tipo exce¸˜o); ca • ASSERT ANY THROW(comando); EXPECT ANY THROW(comando); • ASSERT NO THROW(comando); EXPECT NO THROW(comando);
  • 63. Google Test - Compara¸˜o de n´meros ponto flutuante ca u • ASSERT FLOAT EQ(esperado, atual); EXPECT FLOAT EQ(esperado, atual); • ASSERT DOUBLE EQ(esperado, atual); EXPECT DOUBLE EQ(esperado, atual);
  • 64. Exemplo • Ver arvore.cpp e test arvore.cpp
  • 65. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador
  • 66. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos
  • 67. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos • Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada a a ca c
  • 68. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos • Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada a a ca c • Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira)
  • 69. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos • Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada a a ca c • Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira) • Arthur Furlan(@afurlan) Autor do http://va.mu
  • 70. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos • Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada a a ca c • Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira) • Arthur Furlan(@afurlan) Autor do http://va.mu • Organizadores e Equipe da Semana Acadˆmica de Eletrˆnica e e o Inform´tica a
  • 71. Agradecimentos • Adolfo Gustavo Serra Seca Neto - Orientador • Tania Mezzadri - Algoritmos • Jean Sim˜o e Jo˜o Alberto Fabro - Programa¸˜o Avan¸ada a a ca c • Henrique Pereira(@ikkebr) e Gabriel Oliveira(@GpaOliveira) • Arthur Furlan(@afurlan) Autor do http://va.mu • Organizadores e Equipe da Semana Acadˆmica de Eletrˆnica e e o Inform´tica a • Ao p´blico presente. u
  • 72. Referencias I Adolfo Neto. Desenvolvimento dirigido por testes com junit. http://va.mu/AJ50, May 2010. URL http://va.mu/AJ50. Baptiste Lepilleur. SourceForge.net: QtTestRunner - cppunit. http://va.mu/oDe, 2002a. URL http://va.mu/oDe. [Online; accessed 13-June-2011]. Baptiste Lepilleur. SourceForge.net: MfcTestRunner - cppunit. http://va.mu/oDN, 2002b. URL http://va.mu/oDN. [Online; accessed 13-June-2011].
  • 73. Referencias II Beck. Test driven development: by example. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2002. ISBN 0321146530. K. Beck. Kent Beck’s guide to better Smalltalk. Cambridge University Press, Cambridge, U.K. New York, 1999. ISBN 9780521644372. CodingDojo. Welcome to the coding dojo. http://va.mu/3e3, 2004. URL http://va.mu/3e3. [Online; accessed 13-June-2011].
  • 74. Referencias III DAINF - UTFPR. Ement´rios das disciplinas - DAINF-Departamento acadˆmico de a e inform´tica - Algoritmos e Estruturas de Dados (CABS-001). a http://va.mu/oLH, 2011a. URL http://va.mu/oLH. [Online; accessed 13-June-2011]. DAINF - UTFPR. Ement´rios das disciplinas - DAINF-Departamento acadˆmico de a e inform´tica - Programa¸˜o Avan¸ada (CABS-002). a ca c http://va.mu/oNA, 2011b. URL http://va.mu/oNA. [Online; accessed 13-June-2011]. Dojo-PR. Dojo-parana’s profile - GitHub. https://github.com/dojo-parana, 28 May 2010. URL https://github.com/dojo-parana. [Online; accessed 13-June-2011].
  • 75. Referencias IV M. Feathers. SourceForge.net: cppunit. http://va.mu/oNB, 2002a. URL http://va.mu/oNB. [Online; accessed 13-June-2011]. M. Feathers. SourceForge.net: cppunit download. http://va.mu/oND, 2002b. URL http://va.mu/oND. [Online; accessed 13-June-2011]. M. Feathers. SourceForge.net: cppunit what is. http://va.mu/oNE, 2002c. URL http://va.mu/oNE. [Online; accessed 13-June-2011].
  • 76. Referencias V P. S. Foundation. 25.3. unittest - unit testing framework - python v2.7.1 documentation. http://va.mu/oMf, 2001. URL http://va.mu/oMf. [Online; accessed 13-June-2011]. Google. Downloads - googletest - google c++ testing framework - Downloads. http://va.mu/oMg, 2008a. URL http://va.mu/oMg. [Online; accessed 13-June-2011]. Google. Googletest - google c++ testing framework - home page. http://va.mu/oMi, 2008b. URL http://va.mu/oMi. [Online; accessed 13-June-2011].
  • 77. Referencias VI Google. V1 5 Primer - googletest - getting started with google c++ testing framework. http://va.mu/oNF, 2008c. URL http://va.mu/oNF. [Online; accessed 13-June-2011]. Grupy-PR. GruPy-PR grupos do google. http://va.mu/oMk, 2007. URL http://va.mu/oMk. [Online; accessed 13-June-2011]. GUD-PR. GUD-BR-PR. http://va.mu/3ez, 2006. URL http://va.mu/3ez. [Online; accessed 13-June-2011].
  • 78. Referencias VII R. C. Martin. ArticleS.UncleBob.TheBowlingGameKata. http://va.mu/oMl, 2005. URL http://va.mu/oMl. [Online; accessed 13-June-2011]. O. Maudal. Test-Driven development in c - geektalk. http://va.mu/oMm, 27 Nov. 2007. URL http://va.mu/oMm. [Online; accessed 13-June-2011]. Wikipedia. Smalltalk - wikipedia, the free encyclopedia. http://va.mu/AKLX, 1972. URL http://va.mu/AKLX. [Online; accessed 20-June-2011].
  • 79. Referencias VIII Wikipedia. xUnit - wikipedia, the free encyclopedia. http://va.mu/oNI, 1999a. URL http://va.mu/oNI. [Online; accessed 13-June-2011]. Wikipedia. Sunit - wikipedia, the free encyclopedia. http://va.mu/AKJL, 1999b. URL http://va.mu/AKJL. [Online; accessed 20-June-2011].