Duro de Errar 5.0 - Tratamento, Controle e Configuração de Erros em PHP 5

Preview:

DESCRIPTION

Apresentação do FISL 9. Apresenta uma visão humorada sobre o controle de erros em PHP.

Citation preview

Duro de Errar 5.0Tratamento, Controle e Configuração de Erros em PHP.

FISL 9 – Abril 2008

Marcelio Lealmarcelioleal@gmail.com

http://marcelioleal.wordpress.com

Who I am● Marcelio Leal● Mestrando PPGCC/LINC - UFPA● Membro Fundador PHP Pai d'Égua● Engenheiro de Software –

Colaborador no projeto BASA para a COBRA Tecnologia

● Desenvolvedor PHP 7 anos● Classgenerator/Automatic● Meia-direita e torcedor do Paysandú● Eterno aprendiz de kitesurf e poker

Sumário● Controle e Configuração

– PHP.ini e Configurações– Funções de Erro e Log– Controle de Fluxo

● Tratamento– Tratamento tradicional– Especifidades do PHP

● Prevenção– PHPUnit

O que é um erro?

Objetivos● Diminuir o medo de achar erros

– Confiança pra mudar● Achar mais erros em tempo de

desenvolvimento● Diminuir o tempo de correção de erros● Iniciar o processo de automatização do controle

de alterações● Conhecer os bons recursos que o PHP

proporciona para um aumento na qualidade do desenvolvimento

Direito 0

Liberdade para errar e conseguir entender o

erro.

Erros em PHP● São mais claros● São o que apresentam● São categorizados● Podem ser customizados para visualização● São facilmente tratados e permitem

flexibilidade na abordagem

Configuração (PHP.ini)● Visualização

– display_errors● Recomendação: 1 Dev / 0 Prod

– ignore_repeated_errors (padrão Off)● Atentar para este parâmetros para não sobrecarregar.

Configuração (PHP.ini)● Configuração Visual

– Possibilidade de configurar a apresentação do erro– Exemplo: Tela azul Microsoft

Configuração (PHP.ini)● Melhorar acesso ao Manual

– Adicionar link para o manual● Otimiza o acesso ao manual, melhorando a

compreensão do erro e possibilitando uma correção mais rápida

● Interessante principalmente para iniciantes● Ambiente de desenvolvimento

Configuração - Reporting● Categorias

– E_ALL– Erros (fatais)

● E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, “E_PARSE”, E_RECOVERABLE_ERROR

– Warning (não fatais)● E_USER_WARNING, E_COMPILE_WARNING,

E_CORE_WARNING, E_WARNING– Notices (Dicas, estilo, indicação de possíveis erros)

● E_NOTICE, E_USER_NOTICE– Strict (Interoperabilidade, compatibilidade futura) – E_ALL não engloba

E_STRICT● E_STRICT

– Deprecaded (compatibilidade futura) 5.3 ● E_DEPRECADED

Erros

Direito 1

Direito de customizar a linguagem do jeito que eu achar conveniente,

sem me expor a perigos.

Flexibilidade● Temos como mudar a função que tratá os erros

no PHP em tempo de execução– error_reporting– set_error_handler

● Possibilidades– Mandar erros mais graves pro celular, e-mail, etc.– Gravar logs customizáveis– Monitorar determinadas funcionalidades– Integra ambiente de homologação/testes com o

controle de alterações – Mantis, Trac, etc.

Isso é bunito!!!

Direito 2

Direito de tratar exceções da mesma maneira que já existe

em outras tecnologias.

Repeat with me● Exceptions

– Try catch – tradicionalismo– Trigger_error – Gerar USER_ERROR

Isso tudo tem um porquê

Direito 3Direito de me prevenir da

incidência de erros escrevendo testes

automatizados. E assim, manter informado

acessando o PHP.net, br-linux.org, papao.net,

Ressaca Moral, Cocadaboa, ...

Testes● PHP pode ser utilizado tanto para pequenos

projetos, quanto para projetos grandes● Testes dão segurança/coragem pra mudar● Testes dão maior garantia de corretude

Testes● Unitários - PHPUnit● Sistema (Integrados) – PHPUnit/ Selenium ● Não-funcionais – Jmeter/ AB – Apache

Benchmarking

PHPUnit● Implementação do XUnit, originalmente

baseado no JUnit● Ambiente de testes reutilizáveis● Possibilidade de separação de código de

produção e código de teste● Analisa os resultados● Fácil de aprender e de usar

Teste Simples<?phpclass Calculator{ /** * @assert (0,0) == 0 * @assert (0,1) == 1 * @assert (1,0) == 1 * @assert (1,1) == 2 * @assert (1,2) != 3 */ public function add($a, $b) { return $a + $b; }}?>

Resultado Simples

Um exemplo mais real

<?phpClass Futebol{ private $campeaoCampeoes;

function __construct(){ $this->setCampeaoCampeoes("Paysandu"); } public function getMelhorPara(){ return $this->getCampeaoCampeoes(); } protected function setCampeaoCampeoes($x){ $this->campeaoCampeoes = $x; } private function getCampeaoCampeoes(){ return $this->campeaoCampeoes; }}?>

Classe de Teste

<?phprequire_once 'PHPUnit/Framework.php';require_once 'class.Futebol.php';

Class FutebolTest extends PHPUnit_Framework_TestCase{ protected $futebol; protected function setUp(){ $this->futebol = new Futebol; }

public function testGetMelhorPara(){ $this->assertNotEquals('Remo',$this->futebol->getMelhorPara()); }}?>

Resultado - Óbvio

Mas tem necessidade mesmo?

Enfim...● Poderiamos considerar bons desenvolvedores

pela capacidade de reconhecer erros e achar o caminho da correção o mais rápido possível e sem atrapalhar a equipe

● Bons softwares são os que conseguem descobrir o máximo de erros que eles possuem antes que os clientes os descubram

● A tecnologia deve dar um suporte fácil ao reconhecimento e correção dos erros

Uma outra política

Duro de Errar

Assim fica fácil não deixar que os erros nos guiem...

Simplicidade e Flexibilidade!!! Mantenha essas características!!!

PHP Pai d'Égua● http://groups.yahoo.com/group/phppaidegua● 2XX membros● IV Echo PHP● II PHP Pattern Day

Pai d'Égua <=> Tri Legal <=> Arretado

Égua <=> Báh <=> Ochente

Referências● PHP Pai d'Égua● Planet PHP● Sebastian Bergman● PHP.net● Cesar Brod● Rubens Queiroz de Almeida● Ilia Alshanetsky

Agradecimentos● Abstract BI - http://www.abstractbi.com● Cobra Tecnologia/BASA(Fomento) –

http://www.cobra.com.br● LINC/UFPA – http://linc.ufpa.br● PHP Pai d'Égua● PHP Líderes

Perguntas?

Marcelio Leal - marcelioleal@gmail.comhttp://marcelioleal.wordpress.com