Software Testing Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar/ @jcolivares Social Network: Facebook, LinkedIn. Hi5
Competencias
• Específica: conoce los términos básicos de la reingeniería de software y aplica técnicas de reingeniería para el mejoramiento de software existente así mismo utiliza mejores prácticas para el desarrollo de software. • Genéricas • Instrumentales: Capacidad de análisis y síntesis, Solución de problemas, Toma de decisiones.
La gran foto
Testing in Refactoring
• Al realizar una reestructuración de códigos se debe probar que los cambios realizados sigan satisfaciendo
las
pruebas
unitarias,
de
integración y de aceptación. • Si un software no contiene pruebas unitarias deberá pruebas.
refactorizarse
para
crear
dichas
Testing in Modeling
• Aunque muchos de los modelos son de tipo estático como los diagramas de clases que definen la arquitectura de un sistema, todo modelo puede probarse previamente para ver si funciona. • De hecho antes de codificar los modelos deben de ser válidos y en la etapa de codificación sólo se debiera de validar que lo que se hizo se hizo bien.
Testing Software
• Las pruebas de software deben de realizarse en cada etapa de desarrollo: inicio, elaboración, construcción y despliegue. Esto se puede lograr a través de la implementación de técnicas de calidad como las Revisiones Técnicas Formales. • Las pruebas de calidad van enfocadas hacia el proceso y producto en base a métricas e indicadores dados como referencia. • Se sugiere utilizar estructuras probadas de diseño: Patrones de Diseño.
Profiling Testing
• Traen información sobre el comportamiento de la aplicación en tiempo de ejecución. • En general las herramientas de perfilado se enfocan en: manejo de hilos, memoria y rendimiento de CPU pero otras variables también pueden ser monitorizadas. • En general todas las herramientas de perfilado necesitan calibrarse para tener un óptimo desempeño.
Profiling Testing
• Las herramientas de perfilado ya tienen un conjunto de pruebas predefinidas para probar aplicaciones. • En general se pueden guardar instantáneas para el análisis posterior de la información. • En el caso del código portátil (Java, .NET) se debe recordar que la máquina virtual consume espacio de memoria y recursos de la máquina. Para aplicaciones pequeñas no se recomienda su uso.
Profile Testing
• En muchas ocasiones se necesita de un perfilado de la aplicación para que se ejecuta de forma óptima bajo una plataforma o características particulares. A este tipo de pruebas se les denomina tunning test. • En general aplica más en aplicaciones de servidor (J2EE) o aplicaciones de cómputo distribuido de alto rendimiento.
Profile Testing
• En lenguajes que utilicen recolectores de basura es necesario revisar constantemente la efectividad del mismo. Se sugiere que cuando un objeto se deje de utilizar se igual a null para un mejor desempeño. • Se sugiere utilizar tipos de datos primitivos a objetos ya que se obtiene un mejor desempeño.
Profile Testing
• El manejo del recolector de basura sólo deberá hacerse cuando la aplicación sea muy compleja. • Se deberán verificar los destructores y/o métodos finalizadores de los objetos. • Se deberá tener cuidado con estructuras de datos como String y char[] que consumen mucha memoria y tardan en ser liberada dicha memoria.
Profile Testing
• El uso de objetos sincronizados hace más lento el desempeño de las aplicaciones. Si la aplicación no maneja concurrencia no hay necesidad de utilizarlas (en java Vector y ArrayList hacen exactamente lo mismo sólo que Vector es sincronizada). • El monitoreo de los recursos fundamental del profiling.
es
parte
Profile Testing
• El manejo cadenas constantes en Java por ejemplo String cad=“hola” es única a diferencia de cadenas creadas con el operador new. • Se pueden utilizar reductores de clases como: DashO-Pro, Jax o Jsrink. Muchas de estas herramientas funcionan como ofuscadores al igual que SourceGuard.
Profile Testing
• A partir del Java SE 6 se puede uitlizar la API de JMX para el monitoreo remoto de aplicaciones • Existen diversos tipos de pruebas de perfilado: estrés, carga, rendimiento y capacidad. • Se sugiere se realicen los siguientes pasos:
• • • • • • •
Profile Testing
Identificar el ambiente de ala prueba Identificar los criterios de aceptación Planear y diseñar las pruebas Configurar el ambiente de prueba Implementar el diseño de las pruebas Ejecutar las pruebas Analizar los resultados, reportes y realizar nuevamente las pruebas.
Referencias
• Roger S. Pressman, Ingeniería de software un enfoque práctico.Ed. McGraw Hill. • • Piattini M.G. y F.O, Calidad en el desarrollo y mantenimiento del software. Ed. RAMA. • • Weitzenfeld, Ingeniería de Software Orientada a Objetos con UML, Java e Intrnet, Thomson.
多Preguntas?