Tag Archives: php-sp-blogs

Escrevendo testes com PHPT e contribuindo com o PHP

Este ano esteve em destaque a PHPTestFest09, sendo realizada em vários cantos do mundo e destacando-se a participação do PHPSP que contribuiu com o maior número de testes. Ficou de fora? Então já comece a se preparar para ano que vem.

O PHPT é um framework extremamente simples de testes criado e usado internamente pelos desenvolvedores do core. Ele é extremamente atômico e centrado em testes como os que esperamos do PHP, como testar funções e bugs específicos.

O que preciso saber?

A grande vantagem do PHPT é que para poder escrever um teste, tudo que você precisa saber é: como escrever código PHP. Claro que um pouco de conhecimento interno do funcionamento do PHP vai te ajudar a procurar detalhes para testar, mas sabendo escrever PHP você já pode contribuir com uma grande percentagem dos testes que precisamos.

Vamos então atacar por partes:

  1. Preparando o ambiente
  2. Escolhendo um teste
  3. Escrevendo um teste
  4. Rodando um teste
  5. Enviando seu teste para o PHP

1. Preparando o Ambiente

A preparação do ambiente não é nada complicada e exemplos estão disponíveis para referencia. A primeira coisa que você precisa é da versão do PHP que vai precisar para rodar testes. No caso do TestFest focamos no PHP 5.3, no momento recomendo pegar as últimas disponíveis na página do PHP QA (qa.php.net) vá lá e baixe o pacote (source ou binary para windows).

Em ambientes Linux/Mac Os X, você irá passar pelo processo de compilar o PHP, passando pelos processos normais de “./configure”, “make” mas antes de rodar o “make install”, você poderá rodar o comando “make tests”. Este comando irá rodar todos os testes do PHP (em torno de 900+), pode demorar, mas é um ótimo procedimento, pois ao final você poderá mandar um relatório para a equipe de QA e “fazer sua parte”. Rode também o comando make install pois durante a confecção de um teste será interessante você poder testar ele com a versão correta do PHP.

Mais pra frente vamos ver como usar o make tests para rodar os seus novos testes.

2. Escolhendo um teste

Antes de escrever um teste é necessário escolher o objeto de nosso teste. Para tal é preciso identificar um ponto do PHP que necessita de um teste, isto pode vir de duas fontes, um bug ou uma linha de código não “coberta” (code coverage). Para descobrir bugs com/sem testes a melhor forma é olhando a pasta de testes da extensão do bug (GD -> /ext/gd/tests) ou conversando com o pessoal na lista do QA.

Para testes específicos de linhas de código sua melhor aposta é o site http://gcov.php.net onde você deve navegar até a versão correta que esta testando e então escolher uma área sem cobertura. No caso da testfest deste ano, o PHPSP focou na GD pois sua cobertura estava bem baixa então navegamos até o gcov do gd.c para ver onde poderiamos atuar. Para fazer esta parte do processo um conhecimento básico de C e de como o PHP funciona por baixo dos panos é muito bom, mas após alguns testes você aprende a identificar os pontos e durante o testfest o Guilherme Blanco e o Erick nos ajudaram a entender o código.

Para exemplificar melhor vamos ver como identificar estas linhas e o que elas fazem. Veja por exemplo a linha abaixo:

PHPT-Gcov

O que queremos é que todas as linhas fiquem azuis (executadas) ou brancas (código não executável), as linhas não testadas estão marcadas de vermelho. Identificando a linha 1856 como não executada devemos interpretar que como há um if logo antes, a condição “== FAILURE” nunca é atingida, ou seja, esta linha nunca é executada pois a função zend_parse_parameters não retorna falso em nenhuma das chamadas a função imagecolorallocatealpha identificada logo ali encima na linha 1848.

Mas e ae? Ok, a função zend_parse_parameters é responsável por validar os parâmetros da função, ou seja, para testar esta função precisamos escrever alguns testes que passem parâmetros inválidos para a função e verifique se ela alerta o erro corretamente. Agora podemos passar para o passo de escrever este teste.

3. Escrevendo um teste

Escrever um teste é incrivelmente simples, e como testes devem ser objetivos e pontuais isso é bem claro. Você deve limitar o escopo de seu teste, procurando testar apenas uma função ou aspecto. Isso irá facilitar a nomeclatura de seu teste.

3.1 Nomeclatura de arquivos

A nomeclatura é bem simples:

  • Teste para bug: bug<bugid>.phpt
  • Funcionamento básico da função: <função>_basic.phpt
  • Erros da função: <função>_error.phpt
  • Variação do funcionamento da função: <função>_variation.phpt
  • Extensões: <extensão>_<#>.phpt

3.2 Estrutura de um .phpt

Arquivos de teste seguem uma estrutura bem simples:

Como vemos, a sessão TEST é um título de uma linha do teste descrito no arquivo. A sessão FILE é usada como o corpo de um arquivo .php que será gerado para o teste, e a sessão EXPECT demonstra o resultado que esperamos da execução da função. Recomenda-se o uso de var_dump para gerar saídas.

Estas são sessões padrões, mas a documentação completa pode ser vista aqui: phpt format

Você poderá ver situações onde os blocos acima não são o bastante, mas em geral você estará checando para ver se executando a função X irá retornar a saída esperada. Porem um bloco é interessante ser mencionado aqui, o bloco CREDIT. Caso você não tenha acesso ao CVS, colocando seu nome nesse bloco irá levar seu nome aos créditos do PHP, no caso do TestFest utilizamos este formato:

Ok. Vamos tentar escrever um teste agora para ver se entendemos tudo até agora. Usando o exemplo acima onde identificamos uma linha não coberta por testes, vamos escrever um teste para testar o primeiro parâmetro da função. Observe a linha abaixo:

O que devemos entender aqui é o trecho que diz “rllll” pois ele identifica o tipo que cada parâmetro deve ter, neste caso o primeiro parâmetro deve ser um “Resource” por isso o “r”, e os outros devem ser do tipo “long”. Pare um momento agora e verifique o manual do PHP para esta função

Ele confirma exatamente o que vemos no código, mas você poderia também achar uma situação onde o manual esta incorreto, mais um ponto onde você poderia contribuir com o PHP.

Voltando ao nosso exemplo, vamos então escrever um teste para testar a validação do primeiro parâmetro da função. Verificando a pasta /ext/gd/tests vemos que não há testes desta função, mas especificamente não há um teste chamado imagecolorallocatealpha_error1.phpt, então como vamos testar justamente isto, podemos usar esse nome. (podemos usar _error2… para os outros parametros por exemplo)

Primeiramente vamos definir o título, deixando claro que estamos testando o parâmetro 1 da função e adicionar nosso crédito, que também é importante se houver algum erro no teste ou adaptação e precisarem saber quem foi o autor original do mesmo.

O bloco –SKIPIF– é muito importante neste caso. Como estamos testando uma função da GD, que é uma extensão do PHP, ela não estará sempre ativada, portanto só devemos executar os testes caso a extensão esteja ativa. O bloco SKIPIF é exatamente para isso, faça as verificações necessárias, caso não deva rodar, execute um die. O processo que executa os testes interpreta isso como SKIP e não FAIL. Isto vale para outras condições também, como arquivos necessários e qualquer outro fator que possa determinar se um teste deve ou não ser “pulado”.

Este é o corpo do teste, a parte mais importante. Basicamente estamos executando a chamada à função com diversos parâmetros inválidos, como strings, arrays e um resource que não é uma imagem. Passando um resource que não é imagem estamos na verdade testando a linha 1859, mas é uma condição importante de se testar também. O restante dos parâmetros recebem valores válidos.

Finalmente vamos testar o resultado. Aqui no caso utilizamos o EXPECTF que funciona como um printf, poderíamos ter usado outros disponíveis com expressões regulares por exemplo, mas o funcionamento deste é bem mais simples. Aqui basicamente estamos conferindo se o texto de erro bate com o que esperamos e como usamos um formato de printf $s e %d substituem textos que são dinâmicos, como o nome do arquivo que varia em cada máquina.

Dica: Para obter as mensagens de erro, rode o arquivos usando o PHP, ex: php imagecolorallocatealpha_error1.phpt. O arquivo será executado, todo conteudo dele será echoado na tela, mas dentro do bloco –FILE– o conteudo que aparecer é o resultado da execução.


4. Rodando um teste e fazendo faxina

Agora você tem um arquivo phpt pronto e precisamos ver se este teste esta mesmo passando. Para isso precisamos chamar o executor de testes e passar o nosso teste, caso contrário ele irá executar todos os 900+ testes. Para fazer isso o processo é simples, execute o comando make test da mesma forma de antes, mas definindo o parâmetro TESTS, assim:

Você pode dar o caminho completo para o arquivo, ou usar um wildcard como assim, isso é útil se você acabou de escrever os testes para todos parâmetros e quer rodar todos testes daquela função.

Veja o resultado:

Test Results

Note que o teste passou, como indica o PASS logo em frente ao que escrevemos no bloco –TEST–.  É interessante também comentar o que acontece quando um teste falha, além de ser marcado com um FAIL o sistema gera um numero de arquivos com o mesmo nome e diferentes extensões:

  • .out – output do arquivo php criado po teste
  • .php – o código gerado para o teste (bloco –FILE–)
  • .diff – uma comparacao do que foi o output e do que se esperava
  • .exp – o texto em –EXPECTEDF– isaolado
  • .log – um resumo do processo

Estes arquivos são muito uteis para que se analise o resultado e poque da falha.

5. Enviado seu teste para o PHP

Você possui algumas formas de fazer seu teste chegar no PHP. A primeira é participando do PHPTestFest anual, onde todos os testes são enviados para um repositório separado e então integrados ao SVN oficial. A segunda forma é você enviar este teste que escreveu para a lista do QA Team e alguem irá colocar ele no SVN por você. A terceira forma é uma junção de ambas, muitas pessoas apos a testfest são presenteadas com contas do SVN e karma para poderem comitar seus próprios testes, como ocorreu comigo (viu, não é mentira!)

Conclusão

Pronto, agora você tem todas as ferramentas para começar a escreve testes para o PHP. O PHPT é excelente para sua função em testes do PHP, mas testes não param por ai, procure incluir os testes em seus sistemas e bibliotecas, mas para isso procure o PHPUnit e aprende sobre Test Driven Development (TDD). Em breve falarei destes por aqui também.


© Rafael Dohms for Rafael Dohms, 2009. |
Permalink |
No comments
Want more on these topics ? Browse the archive of posts filed under PHP.

I Encontro CakePHP SP

I Encontro CakePHP SP

I Encontro CakePHP SP

Primeiro encontro dos desenvolvedores de CakePHP em São Paulo….eu fui!

Representando o PHPSP, consegui divulgar o PHPSPTestFest 09 em primeira mão e recebi os testes das canecas do PHPSP que lançaremos em breve!

O evento contou com palestras de alto nível, mais uma vez FLEX foi um tema abordado, e as pessoas presentes conseguiram agregar muito conhecimento.

Palestras sobre helpers, componentes, TDD – Test-driven development, plugins, REST, FLEX e CAKE utilizando o FAKE para AMF e foi feito uma aplicação para demonstrar a facilidade do BAKE para sortear 10 hospedagem na IW2.

Pessoas de diversos estados estavam presentes, Minas Gerais, Rio de Janeiro porém a maioria de São Paulo mesmo.

E, como não poderia faltar, depois do evento rolou mais um PHPinga! Assim que tiver fotos do evento publico aqui!

[updated] http://blog.renangoncalves.com/2009/06/17/i-encontro-cakesp-realizado-com-sucesso/

Parabéns ao Renan Gonçalves que tornou isso possível.

Caso tenha interesse, segue a o lista que já conta com mais de 200 membros.

http://groups.google.com/group/cakephp-pt/

PHPSC Conference 2009

PHPSC Conference 2009….eu fui!

Primeiro dia (sexta-feira) de palestras estava meio estranho, muita gente reclamando/elogiando disso e daquilo via ‘twitter’  mas acredito que foi muito bom.

Achei a palestra sobre o ‘Projeto TheWebMind’ interessante, seguida por duas palestras sobre Symfony. Uma sobre um case do Governo integrando Symfony e FLEX, outra mais específica sobre o Framework.

Depois mais uma palestra sobre PHP + FLEX, mostrando que RIA está em alta, seguida por uma fenomental palestra de Samuel Crescêncio sobre LEAN.

Última palestra que vi foi sobre PHP Coding Standards e PHPDoc ministrada por Walker de Alencar. Esse tema acredito ser muito importante para quem está começando. Palestra bem dinâmica com bons exemplos.

Segundo dia (sábado) de palestras estava lotado! Palestrantes de ‘peso’ mandaram muito conteúdo pra galera.

Palestra de Er Galvão Abbott (Segurança), Adler Medrado (Zend Framework), Samuel Crescêncio (Scrum), Guilherme Blanco (Doctrine), Elton Minetto (MemCache) foram ótimas.

Mas alguém esperava algo diferente desses palestrantes?

A surpresa foi a palestra da Flávia Jobstraibizer sobre cases em empresas nacionais em que trabalhou, quem acompanhou o twitter ‘#phpscconf’ pode entender o porque da surpresa de todos.

Paralelo às palestas foram ministrados vários mini-cursos ao longo do dia.

Domingo aconteceu o TestFest, depois de alguns contratempos executamos alguns testes. Porém como está no final do período de testes quase tudo já está realizado. :(

Gostei do meu primeiro TestFest, compilamos php 5.3, rodamos os testes e executamos alguns nossos. Valeu muito a experiência.

Todos os dias após as palestras rolavam os famosos #phpinga. Que em Santa Catarina não deixaram nada a desejar.

Algumas palestras já estão publicadas. http://www.slideshare.net/tag/phpscconf

Conclusão: ótima cidade, ótimo evento, ótimo networking e ótimos #phpinga. Voltarei ano que vem.

p.s.: #jesusmechicoteia

php|tek09: Dia #1

Dia de tutoriais na php|tek! O dia começou com um café da manha regado a PHP onde pude falar com muitas pessoas do dia anterior e conhecer o Matthew Weier O’Phinney. Depois um rápido registro e la vamos nós para os tutoriais.

O primero tutorial foi um Bootcamp de Segurança por Christian Wenz (@chwenz) onde analisamos fatores de segurança (ou insegurança) e aplicações de exemplo, revendo conceitos básicos de seguran;ca no PHP e conhecendo mais sobre problemas mais recentes, como XSS e CSRF. Uma palestra muito boa para revisar fatores que as vezes podem passar despercebidos e excelente para apontar novatos no caminho da segurança ou simplesmente lembrar o que devemos procurar.

Após o almoço fornecido pela MTACon, segui para o tutorial de Analise de Código por Sebastan Bergmann, Arne Blankerts e Stefan Priebsch. Esta sessão foi otima e um puxão de orelha para lembrarmos de coisas que não devemos fazer. Analisando frameworks e apps como Habari, Magento, dentre outros, isolamos os piores e mais feios exemplos de código PHP. Os tipos de problemas que encontramos eram incirvies, desde falhas graves de segurança no Habari até codigo altamente inutil a insano no Magento. A palestra foi altamente interativa e muito válida para quqalquer programador.

Após as sessões fomos pegar uma Pizza de Chicago, a famosa Stuffed Pizza, que devo admitir ter fama por bons motivos! Este jantar terminou de volta no hotel para muita conversa de PHP e um pouco de Hoquei e Basquete.

Que venha o primeiro dia oficial de palestras. Ah.. e temos camisetas incriveis a venda aqui!

Fotos no Flickr: http://www.flickr.com/search/?q=phptek+OR+tek09&m=tags&d=taken-20090515-20090525&ss=2&ct=0&w=all


© Rafael Dohms for Rafael Dohms, 2009. |
Permalink |
One comment
Want more on these topics ? Browse the archive of posts filed under Conferences.

php|tek09: Dia #0

O primeiro dia em Chicago começou cedo, as 5h. Do aeroporto pro hotel foi uma viagem tranquila, após ligar para o excelente supporte da MTACon que prontamente me apontou pro transporte do hotel, sim.. o aeroporto é enorme!

Checkin sem problemas, internet fácil e dencente (fail no form, letras brancas/fundo branco), um banho e pé na estrada. Mas não antes de esbarrar com grandes nomes na porta do hotel, como Derick Rethans, Andrei Zmieski, Sara Golemon e mais uma meia duzia, a caminho da Microsoft, que cedeu uma sala para uma reunião interna do PHP (go Gates!). O resto da tarde foi o que é toda viagem de um brasileiro para os EUA… cara! Muitas compras, mas faz parte.

No retorno desci para o lobby onde pude conversar com muitas figuras, dentre elas Eli White, Keith Casey, Gregg, Sebastian, enfim, muitos. Após muita conversa vem, conversa vai o papo seguiu para o Shoeless Joe’s, ou era Shirtess Schmoe’s? Enfim, janta regada a muita cerveja e mais “celebridades”, como Ben Ramsey, Elizabeth Smith, Michalangelo Van Dam, e diversos. Por sinal, FAILS stickers brotavam de todo lado, sem dúvida a culpa é do Spoons.

Chegada no hotel ainda me surpreendeu com um encontro com Lorna Jane, Chris Jones .. são muitos nomes. Dentre todas estas conversas destaco uma com o Gregg sobre tecnologias e projetos de geolocation. Um execlente papo com o Michelangelo sobre comunidades e o que anda acontecendo pela Bélgica, esse papo merece mais atenção em breve. E um papo legal sobre conferencias e o que o Brasil tem a oferecer neste campo com o grupo de volta no hotel.

Dia pré-evento foi um sucesso, muitos contatos e amigos. O primeiro dia de conferência amanha promete.


© Rafael Dohms for Rafael Dohms, 2009. |
Permalink |
No comments
Want more on these topics ? Browse the archive of posts filed under Conferences.

php|tek’09: Preparativos

Este ano estarei presente na php|tek, conferencia de PHP muito famosa que ocorre em Chicago nos Estados Unidos. A conferencia é organizada pela MTA, mesma empresa responsável pela PHP|architect renomada revista impressa e digital de PHP.

Fique atento ao meu twitter e neste blog (ou no blog em inglês) pois estarei postando novidades nele ao longo da viagem, que vai ocorrer de 18/05 a 22/05.


© Rafael Dohms for Rafael Dohms, 2009. |
Permalink |
2 comments
Want more on these topics ? Browse the archive of posts filed under Conferences, PHP.

Novidades no mundo PHP

PHP está cada vez mais ativo!

Gravamos o “segundo” PHPSPCast, tema segurança. Foi bem divertido gravar e, após a edição, será muito divertido ouvir.

Mas não estou aqui para falar sobre isso e sim sobre o Projeto PHP Counter – Censo de programadores PHP!

Uma ótima iniciativa de Er Galvão Abbott e Silvano Girardi Jr.

Quer saber mais?! Acesse esse post do PHP-SP ou o site do projeto www.phpcounter.org/

PHPSPCast: Uma nova iniciativa

PHPSPCastDesde que me mudei para São Paulo minha participação na comunidade PHP em geral esta cada vez mais emocionante. Desde que conversei com alguns amigos e decidimos organizar o PHPSP (Grupo de Desenvolvedores PHP de São Paulo) as ídeias não param de surgir, e muitas ideias já estão virando fatos concretos.

A algum tempo venho ouvindo ótimos podcasts, tudo começou com o Nerdcast que tras um pouco de diversão ao meu dia toda manha no trem. Logo me vi procurando algo relacionado ao PHP e acabei esbarrando em dois podcasts, o PHP Abstract realizado por Cal Evans e o P3 da equipe do php|architect. Este projetos eram otimos e renderam alguns bons episódios e descobertas. Porém, perto do final de 2008 todos sumiram, sendo que o último P3 foi gravado ao redor de uma mesa em um evento descontraido de PHP, gerando um excelente episódio com o mesmo ambiente de descontração.

Continuei alimentando minha fome de podcasts ouvindo o Nerdcast, que para quem não conhece é um bate papo divertido entre amigos sobre diversos assuntos, algo muito próximo de um papo de mesa de bar. Este clima de mesa de bar rende momentos excelentes, muita risada e ao mesmo tempo uma absorção de conhecimento enorme, como dizem, você aprende sem perceber.

Por algum tempo pensei que o PHP precisava de um podcast, e após ouvir meu colega Luciano do site “A Sala” gravar o primeiro podcast junto com amigos (CineCast), a idéia estalou. Por que não unir a diversão do Nerdcast com meu ganha pão, o PHP? Foi exatamente isso que fizemos.

Conversei com os coordenadores do PHPSP, respectivamente, O Augusto, Anderson e Ivan, e decidimos que a idaia tinha tudo para dar certo. Nem duas semanas depois do espório da ideia, já estavamos testando nossos softwares gravando o primeiro episódio. No momento da gravação este seria apenas um “teste de microfones” mas a facilidade que encontramos em começar a falar sobre o assunto nos levou a seguir em frente. Variando entre uma apresentação da iniciativa, falando sobre o PHPSP e apresentando projetos relacionados, como o PHPBC,  o podcast foi um excelente primeiro passo. Após a gravação possamos pela primeira grande dificuldade, a edição. Sem nenhuma pessoa com experiência em edição e audio em geral tivemos que nos virar com vinhetas e musicas, mas a experiencia foi muito divertida e o resultado final muito satisfatório.

Assim nasceu o PHPSPCast, que você pode ouvir aqui, especificamente o primeiro episódio. A recepção foi incrível com diversas mensagens de apoio e incentivo, além de centenas de downloads em poucos dias. Este resultado só que dizer uma coisa, acertamos e devemos seguir em frente.

O PHPSPCast #1 já esta sendo gravado, desta vez eu não estarei participando, pois estou atualmente na África do Sul a trabalho e sem uma conexão de internet decente o bastante para podermos gravar o cast, sem contar o fusu horário que me faria gravar no meio da madrugada. Este episódio será coordenado pelo Augusto e contará com dois convidados então fiquem de olho no resultado e aguarde novos episódios. Visite o site do PHPSPCast e descubra como enviar sugestões de assuntos, feedback e você poderá inclusive ter seu email lido no proximo episódio.

Espero que gotem do resultado e que possamos trazer mais informações para a comunidade PHP com este cast, 0 primeiro podcast de PHP na lingua portuguesa.


© Rafael Dohms for Rafael Dohms, 2009. |
Permalink |
5 comments
Want more on these topics ? Browse the archive of posts filed under PHP.

Adeus Brasil, olá Nova Zelândia

All Blacks width=

Opa!

É com muita alegria que comunico a todos que vou finalmente realizar meu sonho de trabalhar na Nova Zelândia!

Estava curtindo absurdos na Arizona!

Entrei na empresa em Janeiro mas consegui aprender muito sobre o ‘meio’ gráfico e impressão e aprimorar meus conhecimentos de integrar PHP com outras linguagens.

Tudo indo bem quando me aparece a oportunidade de trabalhar em outro país e, para minha alegria, será em um lugar que sempre sonhei visitar.

Inicialmente vou trabalhar com PHP mesmo mas quem sabe não consigo outro trabalho com esportes radicais que tanto gosto!?!?

Já pensou assistir um jogo dos All Blacks ao vivo? Pular de ‘bungee’ todo dia? Demais né?

Claro que não vou sumir! Continuarei na coordenação do PHP SP e ajudarei remotamente.

Aguardem minha festa de despedida….vai ser ‘loka’!

[ para os mais 'lentos' olhem a data do post....1º de Abril ]