Mostrando postagens com marcador Test Driven Development. Mostrar todas as postagens
Mostrando postagens com marcador Test Driven Development. Mostrar todas as postagens

terça-feira, 13 de janeiro de 2015

TDD. O que é, e como inicio no PHP Parte II

TDD Conceitos Importantes

Introdução
    Em algumas postagens anteriores fiz a primeira parte desta série de artigos. A primeira praticamente ensinava uma das várias formas de instalação que para o phpunit e o xdebug. Agora vamos entender alguns conceitos do TDD

Argumentação para o TDD
    No TDD sempre devemos iniciar com os testes. Isso nos obriga a pensar exatamente o que desejamos que este pedaço do sistema execute. Acredito que uma boa forma de utiliza-lo é junto com alguma ferramenta ágil, como o scrum - por exemplo. O importante em dividir seu sistema em uma parte testável do dele, inicialmente criar o teste, e depois o código para que o teste passe. Resolvido esta parte podemos evoluir o código.
    Qualidade do código
    Um dos principais ensinamentos do TDD é que se algo não puder ser testado, este foi desenvolvido errado. Em pouco tempo utilizando testes começará a desenvolver de forma visivelmente diferente, ajudando o programador a desenvolver um código cada vez com mais qualidade. Pois, para atuar com o TDD, o programador é obrigado a forçar seu raciocínio de forma mais elevada para que o código tenha menos acoplamento e dependência.
    Documentação
    Os testes acabam sendo uma excelente documentação do software. Pois ao rodar o teste no modo verbose, uma "história" é contada do software que poderá ajudar a criar a documentação.
    Testes manuais custam caro
    Sem os teste unitários, a validação para garantir a integridade do software é praticamente impossível, pois o testes deveria testar todos os fluxos possíveis em diversas situações, para encontrar possíveis erros. Com os testes unitários, sobra apenas os testes mais práticos do fluxo que realmente foi alterado.

Passos do TDD
    O TDD baseia-se em três passos, vermelho, verde e refatora. O vermelho é o início, quando você apenas criou o teste, assim ainda não existe a classe a ser testada, e consequentemente o teste não passará. O verde é o momento em que a lógica criada passou no teste, assim o código já esta funcional, mas ainda carece de melhoras. Esta melhora ocorre na parte do refatoramento, que é a melhoria do código, onde se remove duplicações e o código vai ficando mais próximo de sua versão final. É importante em cada alteração do código, passar o teste, para garantir que a mudança não interferiu em seu funcionamento.
    Para o correto funcionamento é utilizado um conceito chamado baby steps ou passos de bebê, que consiste em realizar pequenos passos de um processo complexos. Para isso devemos utilizar os seguintes princípios:
  • Os testes precisam ser rápidos;
  • Devem ser isolados, devemos testar apenas uma unidade do sistema. O ideal é que os fatores externos não interfiram na unidade.
  • Devem funcionar em qualquer ordem ou em qualquer valor. 
  • Não deve ser interferido manualmente, devem funcionar sozinhos.
  • O código deve ser desenvolvido após desenvolver o teste.
Conclusão
    Como vimos o Desenvolvimento baseado em testes é de vital importância para melhoria do código, refatoração sem erros, e facilitação da manutenção do sistema. Nos próximos artigos veremos como atuar mais na prática.

quarta-feira, 3 de setembro de 2014

TDD. O que é, e como inicio no PHP

    TDD Desenvolvimento Baseado em Testes
    Hoje inicio uma série de artigos referentes ao TDD. Farei um apanhado de várias bibliografias com o intuito de agrupar importante conhecimentos e encorajar mais desenvolvedores a atuarem por esta solução. A ideia é tentar ser o mais prático possível, encontrei diversas teorias em artigos em português, mas a prática mesmo é encontrada em artigos em inglês. Pois tenho visto poucos desenvolvedores realmente atuando com este paradigma.

    O que é Test Driven Development - TDD.
    Em português quer dizer Desenvolvimento orientado a teste. A ideia, segundo Kent Beck, que é considerado um de seus inventores, é: 
  • Não escreva uma linha de código a menos que você tenha escrito um teste de acerto e um teste de falha para a funcionalidade;
  • Elimine as duplicações
    Vantagens
    A grande vantagem é que os testes contém asserções que podem ser verdadeiras ou falsas. Após as mesmas serem consideradas verdadeiras os testes confirmam o comportamento correto, permitindo os desenvolvedores evoluir e refatorar o código.

    Como iniciar
    Vou fazer um breve roteiro de instalação do phpUnit, e do X-debug, que considero ser uma forma de iniciar o Desenvolvimento orientado a testes no PHP. Fiz um roteiro para debiam. Verifique como funcionará no seu sistema operacional.
  • Baixe o PHPUnit
wget https://phar.phpunit.de/phpunit.phar
  • Mude a permissão
chmod +x phpunit.phar
  • Mover para o bim
mv phpunit.phar /usr/bin/phpunit
  • Pegamos o Composer
php -r "readfile('https://getcomposer.org/installer');" | php
  • Escrever o composer.json
vim composer.json

{
    "require-dev": {
            "phpunit/phpunit": "4.2.*",
            "phpunit/php-invoker": "*",
            "phpunit/dbunit": ">=1.2"
    },
    "autoload": {
            "classmap": [
                "src"
            ]
}
}
  • Rode o composer
composer install || composer update
  • Instale o X-Debug
apt-get install php5-dev php-pear // PECL estará neste pacote

pecl install xdebug

  • Acesse o PHP.ini e configure o X-Debug inserindo estas linhas:

zend_extension=/usr/lib/php5/20100525/xdebug.so

xdebug.remote_enable=on

xdebug.remote_handler=dbgp

xdebug.remote_host=localhost
xdebug.remote_port=9000

Conclusão
Este seria um pequeno roteiro de instalação do PHPUnit, esta instalação seria apenas para os sistemas Debian. Se este não for seus sistema operacional, pegue um tutorial para instalação no seu Sistema Operacional ou considere as adaptações, a parte mais importante é acostumar a escrever os testes antes de escrever o código. Iremos testar alguns exemplos de aplicação nos próximos tutoriais.

Referências
https://phpunit.de/manual/current/en/installation.html
http://tableless.com.br/phpunit-como-iniciar-sem-dores/
http://br.phptherightway.com/#xdebug
http://xdebug.org/docs/install
Test-Driven Development By Example - Kent Beck
http://blog.thiagobelem.net/aprendendo-tdd-ou-desenvolvimento-orientado-a-testes/