domingo, 24 de septiembre de 2017

Cobertura de Pruebas

En este blog les estaré brindando información acerca de la cobertura de las pruebas de software, tema sumamente interesante con respecto al aseguramiento de la calidad del software. 
Resultado de imagen de pruebas de software

Para iniciar, debemos tener claro el termino de cobertura, la cual es un concepto relacionado con la medición de la relación entre factores, y se la define como el grado en el cual un elemento específico es sometido a una batería de pruebas, donde el "elemento" de la cobertura puede ser cualquier cosa que debamos cubrir durante las pruebas.[1]

Es decir, se debe determinar cómo se vincula lo que se esta probando con el pedido del cliente y expresado en el requerimiento original, convertido tal vez en especificación funcional.

Es por esto que, de la medición que se realice, resultará el grado de cobertura en la que las pruebas están dando respuesta a todo lo que se necesita cubrir.
Un primer análisis que resulta de esta medición es conocer en qué área hace falta agregar más cobertura, como por ejemplo:
  • Para las pruebas basadas en requisitos, se debe planificar medir contra las especificaciones.
  • Para las pruebas basadas en riesgos, debemos planificar medir contra aquellos eventos de amenazas que podamos detectar.
  • Para las pruebas basadas en ínter-operabilidad, se debe planificar medir la cobertura de las configuraciones y las interfaces. 
Si se logra alcanzar una cobertura de caja negra del 100%, y una cobertura de sentencias del 100%, por lo tanto podemos pasar a la siguiente fase: la cual es prueba de condiciones.

Otra forma de que pueda suceder es de que partes del código no hayan sido ejecutadas jamás (cobertura de sentencias inferior al 100%), por lo que para estos casos habrá que realizar más pruebas buscando que se ejecuten todas y cada una de las sentencias del programa. En este sentido, puede que hayamos conseguido una cobertura elevada de sentencias. pero tal ves nos estemos contemplando las ramas condicionales.

ramas condicionales: x=0; if(y<100){x++}

Si se considera durante las pruebas un valor de "y" inferior a 100, se habrán ejecutado todas las líneas; pero nunca la variante de que x no se incremente.
Se habla de una cobertura de ramas al 100% cuando se ha ejercido todas y cada una de las posibles vías de ejecución controladas por condiciones.

La cobertura de ramas es indiscutiblemente deseable; pero habitualmente es un objetivo excesivamente costoso de alcanzar en su plenitud, salvo que se haga con herramientas de automatización.
Por lo tanto, muchas personas recomiendan: 
  • Realizar pruebas de caja negra hasta alcanzar una cobertura funcional del 100% (idealmente).
  • Inspeccionar código ejecutado y agregar condiciones para someter a prueba a aquellas partes del programa no ejecutadas.
  • Inspeccionar condiciones con un cierto grado de complejidad "difíciles" del código para intentar forzar variedad.
La medición de la cobertura es algo muy común en las pruebas de unidad. El objetivo de los desarrolladores es agregar los casos de unidad necesarios para lograr un 100% de cobertura. sin embargo, no es algo muy habitual cuando se hacen pruebas funcionales. Algunos equipos de calidad mantienen un reporte de áreas donde cada probador marca que área probó, pero no hay seguridad de que probaron el 100% de las líneas de código que el desarrollador puso en esa área.[2]
Es por esto que el equipo de calidad requiere manejar un buid que les permita medir la cobertura, de la misma manera que lo hacen los desarrolladores en las pruebas unitarias.



BIBLIOGRAFÍA

[1] Terrera, G. (1 de 09 de 2014). Testing Baires. Obtenido de https://testingbaires.com/sobre-cobertura-en-testing-parte-1/

[2] Guillén, C. (17 de 11 de 2014). Testing Software . Obtenido de http://www.testingsoft.com/espanol/2014/11/17/como-medir-la-cobertura-de-las-pruebas-funcionales-con-jacoco/


domingo, 17 de septiembre de 2017

Pruebas Exploratorias

En esta nueva entrada les estaré brindando información acerca de las Pruebas Exploratorias, datos realmente interesantes desde quien las dio a conocer hasta como es que realmente funcionan.

El término "Testing Exploratorio" fue dado a conocer por Cem Kaner. Y se tiene que ver con ejecutar las pruebas a en que se va pensando en ellas, sin tener que tener que invertir mucho tiempo en preparar o explicar las pruebas, confiando más que todo en la parte del instinto. Estas pruebas exploratorias se pueden definir como el aprendizaje, el diseño de casos de prueba y la ejecución de de las pruebas de forma simultánea. 
En otras palabras, es una técnica de de pruebas en la cual quien prueba controla activamente el diseño mientras son realizadas, y utiliza la información en la exploración para diseñar nuevas y mejores pruebas.[1]

Una estrategia básica para realizar testing exploratorio es concebir un plan de ataque general, pero que permita desviarse de él por periodos cortos de tiempo e intereses diversos. Cem Kaner lo denomina el principio del "tour bus", las personas bajan del bus y conocen los alrededores con visiones variadas. La clave es no perderse el tour entero[1].
El éxito o el fracaso del testing exploratorio está íntimamente ligado con lo que sucede en la mente del tester. Algunas habilidades deseables en los testers son la capacidad de analizar el producto y evaluar los riesgos, utilizar herramientas y tener un pensamiento crítico acerca de lo que se sabe al momento de diseñar las pruebas. También es importante que los testers tengan la capacidad de distinguir lo observado de lo inferido; ya que las inferencias podrían inducirlos a no realizar pruebas que evidencien vulnerabilidades del producto. El uso de heurísticas desempeña un rol importante en la producción de ideas variadas. Una heurísticaes un mecanismo mental para generar pruebas variadas y acordes a las características del producto que se está probando, por lo que es deseable que los testers las tengan presentes al momento de realizar testing exploratorio [2].

¿Y para qué sirve el testing exploratorio?
Las pruebas exploratorias deben ser como complemento a todas los demás tipos de pruebas existentes.
Es bastante importante para: 
* Profundizar y obtener feedback rápido sobre algo concreto.
* Aprender sobre la aplicación.
* Si ya cubres una parte del testing con automatización, testeo y verificación manual de funcionalidades etc. y quieres buscar bugs más complejos.
* Mejorar la documentación de la aplicación, de los casos de prueba o los scripts de automatización (ya que podemos usar la experiencia adquirida para mejorar la documentación de la aplicación, de los casos de prueba, etc.)[3].

El testing exploratorio requiere su planificación, limitación de tiempo y objetivo, no está reñido con documentar y hacerlo bien es más complicado[3].


Referencias:
[1] J. Bach, “Exploratory Testing Explained”, The Test Practicioner, 2002, Obtenido de: http://www.satisfice.com/articles/et-article.pdf

[2] Pérez, B., Pittier, A., Travieso, M., & Wodzislawski, M. (2007). Testing exploratorio en la práctica. CES.COM, 7.

[3] Garzas, J. (9 de Enero de 2015). javiergarzas.com. Obtenido de http://www.javiergarzas.com/2015/01/testing-exploratorio-10-min.html

domingo, 10 de septiembre de 2017

Técnica: Análisis de Valores Límites (Caja Negra)


Para introducir un poco más con el tema de Caja Negra, les mostraré un video que me pareció atractivo y con la información necesaria para dar a conocer de donde proviene la idea de Caja Negra, y que no solo es esta, sino que también se cuenta con otro termino que es el de Caja Blanca, así que se los dejo para que, de una manera creativa visualicen el siguiente video animado y comprendan estos dos términos.


Ahora bien, habiendo interpretado los términos anteriores, les menciono que existen 3 tipos de técnicas que se que se pueden utilizar para diseñar las pruebas de Caja Negra, como lo son las siguientes:

  1. Distribución de equivalencia: es una técnica de diseño de prueba de software que implica dividir los valores de entrada en particiones válidas e inválidas y seleccionar valores representativos de cada partición como datos de prueba.
  2. Análisis de valores de límite: es una técnica de diseño de prueba de software que implica la determinación de límites para los valores de entrada y selección de valores que están en los límites y solo dentro / fuera de los límites como datos de prueba.
  3. Representación gráfica de efectos de causa: es una técnica de diseño de prueba de software que implica identificar los casos (condiciones de salida), producir un gráfico de efecto de causa y generar casos de prueba en consecuencia.[1]
En esta ocasión nos enfocaremos en hablar a cerca de la técnica Análisis de Valores Límites de Caja Negra. Pero antes de iniciar, comprenderemos algunos términos: 

Valores Límites: 
•Esta técnica se encarga de probar la habilidad del programa para el manejo de datos que se encuentren en los límites aceptables.
•Esta es una técnica específicamente asociada con la técnica de equivalencia ya que el análisis se concentra solamente sobre la clase de equivalencia válida.

Análisis Valores Límites:
•El Análisis de valores límite es la técnica de diseño de pruebas de caja negra en la cual los casos de prueba son diseñados basándose en los valores límite.

Método de Análisis Valores Límites:
Este se basa en la evidencia experimental de que los errores suelen aparecer con mayor probabilidad en los extremos de los campos de entrada.
Un análisis de las condiciones límites de las clases de equivalencia aumenta la eficiencia de la prueba.

Este método utiliza un proceso para el análisis, los pasos son los siguientes:
  1. Identificar la variable.
  2. Identificar la(s) clase(s) válida(s). Para cada clase válida debemos identificar:
    1. Valor inferior, valor menor al límite inferior, valor mayor al límite inferior.
    2. Valor límite superior, valor menor al límite superior, valor mayor al límite superior.

      3. Crear un caso de prueba por cada valor identificado.
      4.Identificar el representante para cada caso.


Blibliografía: