Faço programação de sites há 15 anos e PHP nos últimos 5 anos. Eu sempre escrevi um código sólido. No entanto, eu tenho um cliente que insiste em 80% do código sendo testado em unidade. Como o cliente SEMPRE ESTÁ CERTO, estou planejando usar o PHP_CodeSniffer para garantir que meu código pareça correto e o PHPUnit para realizar meus testes de unidade. Espero aprender algo com essa experiência.
Essas são as ferramentas certas para usar? Quanto tempo está envolvido na configuração do PHPUnit e na gravação do código adicional? Levarei cerca de 8 semanas para escrever as páginas da web e fazer o autoteste, como fiz no passado. Se eu adicionar 4 dias adicionais (10%) para teste de unidade (PHPUnit), isso é suficiente? Pensamentos? Sugestões? Obrigado.
Respostas:
Em uma linha: depende de como você trabalha. Eu sinceramente acho que 10% é muito pouco. Deve ser pelo menos 25%, se não 40%, se não 60%, se não mais.
Primeiro, eu concordo muito com o seu cliente lá. Os testes de unidade são uma parte essencial de um produto robusto, fácil de manter e fácil de depurar.
Eu vou falar do que eu sei. Eu uso TDD (Test-Driven Development) para a maioria dos projetos. O TDD basicamente faz você escrever os testes antes do código real. Eles estabelecem um conjunto de critérios de aceitação que o produto final precisa atender. Geralmente, você gasta de 50% a 70% do seu tempo escrevendo testes e o restante para implementar código para fazê-los passar.
Embora possa parecer absurdo e / ou enorme, posso garantir que não é. Aqui está o porquê:
O PHPUnit é praticamente a ferramenta de fato para testes de unidade do PHP, e é muito bom nisso. Eu não usei muito o PHP_CodeSniffer. No entanto, acho que se você está trabalhando sozinho, provavelmente não precisa. É mais útil em uma equipe garantir que o código tenha a mesma aparência, independentemente de quem o codificou.
fonte
Adereços para você por ter a atitude de que você aprenderá algo com essa experiência. Tenho certeza que você vai.
A primeira coisa que você deve aprender é que a necessidade de teste de unidade não tem nada a ver com a sua experiência . O melhor desenvolvedor também será um dos melhores testadores de unidades:
Em http://www.artima.com/intv/refactorP.html
Eu costumava escrever PHP sem teste de unidade. Depois de anos praticando testes de unidade em Java, descobri que não podia trabalhar em nada muito mais complicado do que páginas únicas em PHP sem testes de unidade. O motivo? Produtividade . Sem o teste de unidade, eu não poderia refatorar com confiança - isso significava que: A) eu precisaria desanimar muito mais e trabalhar com tudo desde o início novamente, ou B) , teria que lidar com códigos legados e feios.
Ao fazer um lance, você precisa levar em consideração a hora de testar? Sim . Parece intuitivo que isso levará mais tempo? Sim de novo . Você provavelmente, como algumas outras respostas estimaram aproximadamente, precisará estimar 50-100% maior do que sem testes de unidade.
Contudo!...
E, como resultado, suas estimativas serão mais precisas . Se você cobrar a cada hora, impressionará mais seus clientes e poderá aumentar suas taxas. Se você cobrar uma taxa fixa, você ganhará mais dinheiro por hora.
Sem o teste, suas estimativas provavelmente são um crapshoot. Erros, pedidos de alteração e redefinições são terríveis para se estimar com precisão. Testar é a chave para minimizar o impacto de todos os três!
fonte
Não há uma resposta fácil quanto tempo vai demorar.
Mas, como regra básica, se for um projeto curto: eu diria que o desenvolvimento juntamente com um bom teste de unidade levará 1,75 a 2 vezes o tempo do desenvolvimento sem o teste de unidade. Para projetos mais longos, talvez 25-30%?
Sugiro fazer testes de unidade antes de escrever seu código. Desta forma, a construção do andaime de teste de unidade na verdade se torna parte do seu processo de design e, portanto, você não deve considerar que está perdendo tempo para o teste de unidade, mas a construção do teste de unidade está ajudando você a projetar um um ótimo produto e a existência desse teste após a sua criação tornam mais fácil garantir que ele continue assim. Ter que escrever os primeiros testes de unidade é maravilhoso para ajudar a focar em requisitos reais, nos fornece uma maneira clara de testar se estamos prontos (passando nos testes de unidade) e nos ajuda a "testar cedo e testar frequentemente".
Quanto ao PHPUnit .... Já faz um tempo desde que eu o usei, minha impressão é de que ele é poderoso, mas talvez precise de mais trabalho antes de ser realmente polido.
Porém, se há uma coisa que quero comunicar aqui: Por favor, não veja o Teste de Unidade como uma mera formalidade no final do seu projeto. Se isso é tudo, na minha opinião, é inútil.
fonte
As respostas até agora são bastante completas, então adicionarei um ponto não coberto: o tempo extra devido ao uso do PHPUnit será
As classes de modelo de teste de unidade que não lidam com apresentação são bastante diretas. Você escreve um teste para cada classe e, nesses casos, pode instanciar e configurar diretamente um objeto para testar um método / recurso específico. Depois de configurar e executar o PHPUnit, você poderá fazer com que esses testes funcionem rapidamente.
As páginas da Web de teste de unidade podem ser mais complicadas. Se você usa o Zend Framework, Symfony, Smarty ou qualquer outro mecanismo MVC, conseguir que o PHPUnit funcione bem com eles pode levar mais tempo. Usamos o Zend Framework e gastei um tempo considerável construindo classes base para testar controladores e exibir scripts isoladamente. Dado o tamanho deste projeto, você provavelmente está melhor começando
ControllerTestCase
.fonte