Duro de Errar 5.0 - Tratamento, Controle e Configuração de Erros em PHP 5.
-
Upload
marcelio-leal -
Category
Technology
-
view
2.399 -
download
0
description
Transcript of Duro de Errar 5.0 - Tratamento, Controle e Configuração de Erros em PHP 5.
Duro de Errar 5.0Tratamento, Controle e Configuração de Erros em PHP.
FISL 9 – Abril 2008
Marcelio [email protected]
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 - [email protected]://marcelioleal.wordpress.com