phpunit e teste de software

Download PHPUnit e teste de software

If you can't read please download the document

Upload: ricardophp

Post on 16-Apr-2017

5.001 views

Category:

Documents


0 download

TRANSCRIPT

Ricardo Striquer Soares (ricardophp)http://twitter.com/rstriquer http://www.programabrasil.org/

e teste de software

http://www.youtube.com/watch?v=dUhDggoNktA

O teste do software a investigao do software a fim de fornecer informaes sobre sua qualidade em relao ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos.

Teste de software

Definio de testeDefinio de teste de software

Frases celebres!

- Depois validamos com o cliente;

- O prazo est apertado, vamos deixar os testes para a prxima faze;

- Depois escrevo o caso de teste;

Por que escrever testes. - Ao entregar o software vc ter certeza de que fez um trab bem feito e poder atender o cliente sem a preocupao de saber se o app ir ou no estar funcionando;

- O aplicativo fica mais bem documentado pois o teste um mtodo de documentao;

- Voc ter um atestado de qualidade do aplicativo que poder ser validado por outros.

Resultados conhecidos!

- No, eu fiz o que voc mandou!

- O software podia estar incorreto, mas ele no pode ter estragado seu computador!

- Na minha mquina funcionou.

Por que escrever testes. - Ao entregar o software vc ter certeza de que fez um trab bem feito e poder atender o cliente sem a preocupao de saber se o app ir ou no estar funcionando;

- O aplicativo fica mais bem documentado pois o teste um mtodo de documentao;

- Voc ter um atestado de qualidade do aplicativo que poder ser validado por outros.

http://pt.wikipedia.org/wiki/ISO_9126

ISO/IEC 9126 ou NBR ISO/IEC 9126.

Objetivos de teste de softwares

1) Garantir que os objetivos tcnicos e de negcios que guiaram o design e o desenvolvimento foram conquistados;

2) Autenticar que o software funciona como esperado;

3) Garantir que o processo (aplicativo) pode ser implementado com as mesmas caractersticas (esperadas);

Objetivos do xUnit

Rpido ao se executar

Isolado

Composto

Fcil de escrever

Fcil de aprender

Fcil de Ler

Simples de executar

Fcil de escrever

If it's hard to learn how to write tests, developers will not learn to write them. Easy to write.

If tests are not easy to write, developers will not write them. Easy to read.

Test code should contain no extraneous overhead so that the test itself does not get lost in noise that surrounds it. Easy to execute.

The tests should run at the touch of a button and present their results in a clear and unambiguous format. Quick to execute.

Tests should run fast so so they can be run hundreds or thousands of times a day. Isolated.

The tests should not affect each other. If the order in which the tests are run changes, the results of the tests should not change. Composable.

We should be able to run any number or combination of tests together. This is a corollary of isolation.

Fcil de aprender a se escrever X Fcil de escrever

Isolados X Rpido de executar

Problemas padro de um xUnit

There are two main clashes between these constraints:

Easy to learn to write versus easy to write.

Tests do not generally require all the flexibility of a programming language. Many testing tools provide their own scripting language that only includes the minimum necessary features for writing tests. The resulting tests are easy to read and write because they have no noise to distract you from the content of the tests. However, learning yet another programming language and set of programming tools is inconvenient and clutters the mind. Isolated versus quick to execute.

If you want the results of one test to have no effect on the results of another test, each test should create the full state of the world before it begins to execute and return the world to its original state when it finishes. However, setting up the world can take a long time: for example connecting to a database and initializing it to a known state using realistic data.

'Padro de um autntico xUnit

http://flylib.com/books/en/1.104.1.24/1/

Funcionalidade padro de um xUnit

Era uma vez ....

EM 1997 Kent Beck e Eric Gamma estavam em um voo de Zrich para Atlanta seguindo para a OOPSLA Conference. Kent Beck possua um framework de testes para SmallTalk e gostaria de aprender Java, Erich Gamma possua um computador com Java e gostaria de ter um framework de testes parar Java, quando o Avio chegou a Atlanta Kent Beck havia aprendido Java de Erick Gamma e eles haviam escrito a verso inicial do que hoje conhecido como jUnit.

A concorrncia

http://ojesunit.blogspot.com/

http://code.google.com/p/snaptest/

(Mdulo Lime)http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing

http://www.simpletest.org/

- xUnit- Apoiado pela Zend utilizado no Zend Framework

Perg: Voc testar Mtodo privado?

Eu li o post sobre como testar o mtodo privado (http://pt.efreedom.com/Question/1-34571/whats-the-best-way-of-unit-testing-private-methods) porque eu normalmente no test-los, eu sempre pensei que mais rpido para testar apenas mtodo pblico que ser chamado de externas do objeto.

Voc testar Mtodo privado?ou se eu sempre testar Mtodo privado?Esta questo foi originado stackoverflow.com

Resposta

Eu fao o teste de unidade no mtodos privados. Um mtodo particular um detalhe de implementao que deve ser escondido para os usurios da classe. Testando mtodos particulares quebras de encapsulamento.

Se eu achar que o mtodo particular grande ou complexa ou suficientemente importante para exigir que seus prprios testes, eu apenas coloc-lo em outra classe e torn-la pblica l (Mtodo Object).Em seguida, posso facilmente testar o mtodo anteriormente-pblico-privado mas-agora que agora vive na sua prpria classe.

Quem utiliza phpUnit

http://logging.apache.org/log4php/

http://www.s9y.org/

http://www.osoa.org/display/PHP/SOA+PHP+Homepage

http://www.phpunit.de/wiki/WhoUsesPHPUnit

http://propel.phpdb.org/

http://gtk.php.net/

http://agavi.org/

http://www.phing.info/

Caractersticas principais

http://www.phpunit.de/wiki/Features

Pontos importantes:

TAGs para descritivos de funes@depends@dataProvider@expectedException@expectedException

Classe PHPUnit_Framework_AssertassertArrayHasKey(); assertClassHasAttribute(); assertClassHasStaticAttribute(); assertContains(); assertContainsOnly(); assertEmpty(); assertEqualXMLStructure(); assertEquals(); assertFalse(); assertFileEquals(); assertFileExists(); assertGreaterThan(); assertGreaterThanOrEqual(); assertInstanceOf(); assertInternalType(); assertLessThan();assertLessThanOrEqual(); assertNull(); assertObjectHasAttribute(); assertRegExp(); assertStringMatchesFormat(); assertStringMatchesFormatFile(); assertSame(); assertSelectCount(); assertSelectEquals(); assertSelectRegExp(); assertStringEndsWith(); assertStringEqualsFile(); assertStringStartsWith(); assertTag(); assertThat(); assertTrue(); assertType(); assertXmlFileEqualsXmlFile(); assertXmlStringEqualsXmlFile(); assertXmlStringEqualsXmlString

Teste prtico Simples.

http://ticomqi.blogspot.com/2010/08/capitulo-4-escrevendo-testes-para.html

Exemplo 4.1: operaes com matrizes Testes com PHPUnit

Teste prtico Complexo.

phpunit CarrinhoTest.phpPHPUnit 3.4.15 by Sebastian Bergmann.

..FF..

Time: 1 second, Memory: 12,25Mb

There were 2 failures:

1) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #2 (0.05, false, 10, 20, 100, 0, 120)Failed asserting that matches expected .

/srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28

2) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #3 (0.05, true, 10, 20, 100, 0, 120)Failed asserting that matches expected .

/srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28

FAILURES!Tests: 6, Assertions: 6, Failures: 2.

Exemplo de resultado de erro