Your SlideShare is downloading. ×
Manteniendo la casa limpia: Probando y depurando aplicativos en PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Manteniendo la casa limpia: Probando y depurando aplicativos en PHP

2,153
views

Published on

Charla acerca de depuración, pruebas y análisis de aplicativos en PHP.

Charla acerca de depuración, pruebas y análisis de aplicativos en PHP.

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,153
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
95
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Manteniendo la casa limpia: Probando y depurando aplicativos en PHP Jesús M. Castagnetto, Ph.D. Latinoware 2008 30 de Octubre – 1 de Noviembre, 2008 Parque Tecnológico Itaipu (PTI) Foz do Iguaçu PR/Brasil Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 2. Agenda ● El sufrimiento del programador y cómo disminuirlo ● Depuración de código y perfiles de rendimiento del aplicativo. ● Pruebas unitarias. ● Pruebas de carga y estrés. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 3. Programar es una mezcla de ciencia, ingeniería y arte. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 4. No es suficiente el conocer la teoría, técnicas y conceptos. Necesitamos aprender de la experiencia de otros. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 5. Las buenas prácticas surgen del conocimiento comunitario, y nos ayudan a evitar los problemas comunes, para así concentrarnos en los que son importantes. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 6. Problema: Estamos por finalizar un proyecto y el nuevo código no se integra como se planeó. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 7. Problema: Hemos implementado un algoritmo complejo y no da los resultados esperados. ? ¿ “Pero ésta es la versión simplificada para el público en general...” Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 8. Problema: Error aleatorio pero crítico. Proyecto con decenas de miles de líneas de código. Tienes poco tiempo y no lo escribiste tú. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 9. Problema: El aplicativo funciona muy lento y no sabemos dónde comenzar a optimizar. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 10. Soluciones que no son soluciones. Causan más dolor y problemas Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 11. ¿Soluciones o Problemas? ● El expresivo: Usa echo, print(), print_r(), var_dump(), etc., hasta encontrar el problema. ● El silencioso: Silencia código comentándolo hasta que funciona. Luego activarlo de a pocos y reza mucho para que funcione. ● El rectificador: Escribe código que “arregle” el problema causado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 12. ¿Soluciones o Problemas? ● El inconstante: Prueba varias librerías o rutinas, aun sin justificación, con la esperanza de que alguna de éstas dé el resultado esperado. ● El copista: Usa algo como Google Code Search para encontrar código que puede que funcione, sin entender lo que hace. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 13. ¿Soluciones o Problemas? ● El maestro de vudú: “Tengo que poner esta constante acá, luego haré las operaciones así y asá, y en este orden, pues la otra vez funcionó”. ● El marquetero: “Redefine” el problema para que sea una “característica” positiva o nueva, y no algo que necesita arreglo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 14. Solución: Usar la herramienta correcta para el trabajo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 15. Soluciones ● Usar depuradores de código. ● Hacer un perfil de uso del aplicativo. ● Emplear técnicas de prueba de código. ● Probar al aplicativo como un todo para ver su “resistencia”. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 16. Depurador de código ● Herramienta para probar y encontrar errores en la ejecución de software. ● Rastrea cambios en variables, puede detener la ejecución, etc. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 17. Analizador del rendimiento ● Captura el perfil de comportamiento de una pieza de software. ● Permite conocer exactamente qué partes son los cuellos de botella. ● Muestra el comportamiento real de las diversas partes, lo que a veces no corresponde a lo que habíamos diseñado o modelado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 18. Pruebas unitarias ● Probar en forma independiente los componentes de un aplicativo. ● Se prueba a varios niveles de detalle, desde una función o método, hasta toda una clase o colección de éstas. ● Las pruebas deben ser independientes del resto, para poder ser compuestas en forma coherente. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 19. Pruebas de carga ● Trata de descubrir el comportamiento de un aplicativo frente a diferentes niveles de demanda. ● Nos da una idea de cuan escalable es el software, y cuáles son sus límites prácticos. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 20. Pruebas de estrés ● Busca encontrar los límites de respuesta de un aplicativo. ● Se trata de llegar más allá del uso normal. ● Observa: recuperación de errores, degradación de la respuesta, etc. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 21. Pruebas... muchas pruebas ● Funcionalidad. ● Seguridad. ● Cobertura/uso del código. ● Regresión. ● Usabilidad y accesibilidad. ● Compatibilidad, etc. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 22. Xdebug (www.xdebug.org) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 23. Xdebug - Características Una herramienta multifacética: ● Depurador de código (Debugger). ● Analizador de perfil de rendimiento (Profiler). ● Analizador de cobertura de uso del código (Code Coverage) ● Sesiones interactivas de análisis. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 24. Xdebug: Depuración ● Rastreo completo de los cambios de valores de variables y sus contextos. ● Listado completo de las llamadas a funciones, incluyendo parámetros, uso de memoria, etc. ● Protección contra recursión infinita. ● Puede guardar los resultados a un archivo para un análisis detallado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 25. Xdebug: Rendimiento ● Permite el análisis del rendimiento de cada componente del aplicativo. ● Acumula los tiempos de ejecución de cada función y método, así como cuantas veces que fueron llamados. ● Los datos son almacenados en un formato que puede visualizarse con KCacheGrind, WinCacheGrind o MacCallGrind. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 26. Xdebug: Uso del código ● Se puede analizar la cobertura del código: cuánto del código se usa en realidad y qué partes nunca se emplean. ● El análisis es dependiente del tipo de ejecución y proceso que se esté probando. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 27. Xdebug: Juega bien con otros ● Podemos iniciar una sesión de depuración en forma remota. ● Soporta los protocolos GDB y DBGp para depuración. ● Esto le permite acceder a una gran variedad de herramientas de depuración remota, en múltiples plataformas, con interfaz gráfica o de línea de comandos. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 28. PHPUnit (www.phpunit.de) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 29. Pruebas, no print()'s “Cada vez que estén tentados a escribir un comando print o una expresión de depuración, escriban una prueba unitaria” Martin Fowler Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 30. Pasos básicos ● Escribe una prueba antes o inmediatamente después de escribir tu código. class Foo { ... } class FooTest extends PHPUnit_Framework_TestCase { ... } Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 31. Pasos básicos ● Cada prueba es un método público llamado testXYZ. class Foo { function boing() {} } class FooTest extends PHPUnit_Framework_TestCase { public function testBoing(){} } Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 32. Mentiras “blancas” ● Cuando las pruebas requieren interacción con otros componentes o sistemas, se pueden usar objetos que simulen estos (Mock Objects). ● PHPUnit provee ayuda en la creación de objetos de este tipo, hasta el punto de generar uno con sólo métodos específicos simulados. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 33. Automatizando el proceso ● PHPUnit tiene la opción de integrarse con Selenium, para pruebas instrumentadas de aplicativos web. ● Existen también herramientas que lo integran dentro un sistema de integración continua: phpUnderControl (www.phpundercontrol.org) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 34. Recomendaciones ● Las pruebas deben usar las funciones de aserciones que provee PHPUnit: assertEquals(), assertTrue(), etc. ● Organizar las pruebas en un conjunto relacionado. ● Probar lo importante, lo que puede rendir dividendos en información. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 35. Selenium (selenium.openqa.org) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 36. ¿Qué es Selenium? ● Un sistema de pruebas de aplicativos web, simple, portable y extensible. ● Las pruebas pueden ser escritas como tablas en HTML, o en varios lenguajes de programación, y ejecutados en un navegador web. ● Puede automatizarse usando una herramienta de pruebas (ej. PHPUnit) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 37. Selenium Múltiples herramientas con un mismo objetivo: facilitar la prueba de los aplicativos web. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 38. Selenium IDE ● Es una extensión para Firefox que permite el grabar, editar y depurar pruebas. ● Puede seleccionar elementos de la página en forma selectiva. ● Puede completar automáticamente código o selecciones. ● Guarda pruebas en HTML o Ruby. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 39. Selenium RC ● Un servidor escrito en Java que acepta comandos para el navegador a través HTTP. ● Se usa para realizar pruebas automáticas empleando cualquiera de los lenguajes de programación populares (PHP, Java, Python, etc.) ● Puede iniciar selectivamente un navegador y ejecutar las pruebas. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 40. Selenium Grid ● Un sistema para ejecutar pruebas en paralelo, en múltiples máquinas y en ambientes heterogéneos. ● Permite ejecutar múltiples copias de Selenium RC, en la misma o múltiples plataformas. ● Integra y controla estas múltiples instancias, haciéndolas parecer como una sola, simplificando el manejo. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 41. The Grinder (grinder.sf.net) Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 42. Características ● Permite ejecutar pruebas de carga y estrés en forma distribuida. ● Puede hacer pruebas usando múltiples protocolos: HTTP, Servicios Web (SOAP, REST), JDBC, etc. ● Usa Jython para la escritura y automatización de las pruebas. ● Los resultados se ven gráficamente. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 43. Tipos de pruebas Pruebas de carga ● Si puede soportar una carga/uso determinado, con un tiempo de respuesta especificado. ● Útil para la comparación de sistemas, algoritmos y/o librerías (benchmarking). Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 44. Tipos de pruebas Pruebas de capacidad ● La carga máxima que puede soportar el sistema antes de una falla total. Pruebas funcionales ● Probar si el aplicativo tiene el comportamiento esperado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 45. Tipos de pruebas Pruebas de estrés ● Es una prueba de carga, pero ejecutada por un periodo extendido. ● Permite la evaluación de estabilidad y confiabilidad de un aplicativo, bajo un carga dada por un tiempo determinado. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 46. Arquitectura (The Grinder) ● Contextos: Multi-hilos, multi-procesos ● Sistema distribuido ● Escalable Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 47. Manejo y control (The Grinder) ● Coordinación y vigilancia de los procesos. ● Consolidación de resultados entre múltiples instancias. ● Puede acumular estadísticas de lo que se le pida y reportarlas. ● Registros son almacenados para posterior análisis. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 48. Creación de pruebas (The Grinder) ● Puede grabar las interacciones de usuarios reales y usarlas como base para ejecutar pruebas. ● Usa Python (Jython), lo que le permite ser flexible y expresivo. ● La pruebas se pueden parametrizar y contener rutas de decisión o lazos de ejecución. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 49. Charlas relacionadas ● “Pog nunca mais! - ténicas e macetes para o desenvolvimento em php” Paulino Michelazzo ● “Integração continua com cruisecontrol e phpundercontrol” Diego Tremper ● “Qualidade no desenvolvimento de software com PHPUnit” Diego Tremper Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 50. Otros recursos ● OWASP (www.owasp.org) Comunidad enfocada en el problema de asegurar la seguridad de aplicativos web. ● PHP Security Consortium (phpsec.org) Todo acerca de seguridad de aplicativos escritos en PHP. Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 51. Otros recursos ● SimpleTest (simpletest.org) Otra opción para hacer pruebas unitarias en PHP. ● Zend Studio (www.zend.com) Un IDE comercial que incluye depurador, gestor de proyectos, etc. ● Open source software testing tools (www.opensourcetesting.org) Lista de aplicativos para pruebas Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
  • 52. ¡Gracias/Obrigado! A los organizadores del evento por la invitación y el entusiasmo. A todos ustedes por soportar mi “bla, bla, bla...”, sin dormirse. Jesús M. Castagnetto jmcastagnetto@php.net jesus@upch.edu.pe Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia