No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Pruebas de caja de cristal

26/31
Recursos

Aportes 140

Preguntas 39

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

El testing tambien es un campo interesante,
Aqui la lista de los ** 7 principios de Testing ** de acuerdo al libro de ISTQB.

1 Las pruebas muestran la presencia de defectos
Significa que las pruebas pueden demostrar que EXISTEN problemas, pero no que los problemas NO EXISTEN.
El objetivo principal de llevar a cabo una prueba es para detectar defectos. Trabajando bajo la premisa de que cada producto contiene defectos de alg煤n tipo, una prueba que revela los errores es generalmente mejor que una que no lo hace. Todas las pruebas por lo tanto, deben ser dise帽ados para revelar tantos errores como sea posible

2 Las pruebas exhaustivas son imposibles
Las pruebas exhaustivas tratan de cubrir todas las combinaciones posibles de datos en el software, a fin de garantizar que ninguna situaci贸n puede surgir, una vez probado el software se ha liberado. Excepto en aplicaciones muy simples, el n煤mero de combinaciones posibles de datos es demasiado alta, es m谩s eficaz y eficiente que los ingenieros de pruebas se centren en las funcionalidades de acuerdo a riesgos y prioridades.

3 Pruebas tempranas.
Un producto (incluyendo los documentos, tales como la especificaci贸n del producto) se puede probar tan pronto como se ha creado. ISTQB recomienda probar un producto tan pronto como sea posible, corregir los errores m谩s r谩pidamente posible. Los estudios han demostrado que los errores identificados al final del proceso de desarrollo por lo general cuestan m谩s para resolver.
Por ejemplo: un error encontrado en las especificaciones puede ser bastante sencillo de solucionar. Sin embargo, si ese error se transfiere a la codificaci贸n de software, una vez descubierto el error puede ser muy costoso y consume tiempo.

4 Agrupamiento de Defectos
Los estudios sugieren que los problemas en un elemento de software tienden a agruparse en torno a un conjunto limitado de m贸dulos o 谩reas. Una vez que estas 谩reas han sido identificadas, los administradores eficientes de prueba son capaces de enfocar las pruebas en las zonas sensibles, mientras que siguen buscando a los errores en los m贸dulos de software restantes. Me recuerda al 80/20.

5 La paradoja del 鈥淧esticida鈥
Al igual que el sobre uso de un pesticida, un conjunto de pruebas que se utilizan repetidamente en el disminuir谩 en su eficacia. Usando una variedad de pruebas y t茅cnicas expondr谩 una serie de defectos a trav茅s de las diferentes 谩reas del producto.

6 La prueba es dependiente del contexto
Las mismas pruebas no se deben aplicar en todos los 谩mbitos. Distintos productos de software tienen diferentes requisitos, funciones y prop贸sitos. Una prueba dise帽ada para realizarse en un sitio web, por ejemplo, puede ser menos eficaz cuando se aplica a una aplicaci贸n de intranet. Una prueba dise帽ada para una forma de pago con tarjeta de cr茅dito puede ser innecesariamente rigurosa si se realiza en un foro de discusi贸n.
En general, cuanto mayor es la probabilidad y el impacto de los da帽os causados 鈥嬧媝or el software fallado, mayor es la inversi贸n en la realizaci贸n de pruebas de software.

7 La falacia de ausencia de errores
Declarar que una prueba no ha descubierto ning煤n error no es lo mismo que declarar que el software es 鈥渓ibre de errores鈥. Con el fin de garantizar que los procedimientos adecuados de software de prueba se lleva a cabo en todas las situaciones, los evaluadores deben asumir que todo el software contiene algunos (aunque disimulada) errores.

if __name__ == '__main__':
    unittest.main(verbosity=2)

Se le puede agregar el par谩metro verbosity=2 al m茅todo unittest.main para que el resultado en la consola sea mas detallado.

Les dejo el links a mis apuntes https://github.com/karlbehrensg/introduccion-pensamiento-computacional

Pruebas de caja de cristal

Se basan en el flujo del programa, por lo que se asume que conocemos el funcionamiento del programa, por lo que podemos probar todos los caminos posibles de una funci贸n. Esto significa que vamos a probar las ramificaciones, bucles for y while, recursi贸nes, etc.

Este tipo de pruebas son muy buenas cuando debemos realizar:

  • Regression testing o mocks: descubrimos un bug cuando corremos el programa, por lo que vamos a buscar el bug gracias a que conocemos como esta estructurado el c贸digo.

No hay que entender el aspecto t茅cnico al 100%.

.
Solo tienes que quedarte con que estas herramientas se utilizan para prevenir -
futuros errores.
.
Como cuando un arquitecto dibuja el plano de una casa que se va a construir y -
determina que las ventanas deben ser rectangulares.

Si el alba帽il instala ventanas circulares la forma m谩s sencilla de detectar un error es volver al plano original.
.

Las ventanas circulares cumplen la misma funci贸n que unas rectangulares pero-
est谩n fuera del contexto que se le prometi贸 al futuro due帽o de la casa.
.

Con Unittest


podemos establecer algo similar a un plano como la base de desarrollo de forma que nuestro c贸digo no se salga de contexto.

La diferencia entre las pruebas de Caja Negra y Caja de Cristal es que en las pruebas de caja negra se escriben primero los test para ayudarnos a implementar nuevo c贸digo. En las pruebas de caja de cristal se asume que se tiene c贸digo escrito y las pruebas se escriben para verificar todas las ramificaciones del programa y probar todos los diferentes caminos posibles.

Por si alguien se pregunta esto, assertEqual() lo que hace es comprar el resultado de tu funci贸n con el resultado que tu esperabas, assertEqual(<resultado de funci贸n>, <resultado que esperabas>) y si estos dos son iguales, el test es correcto.

La mejor manera de entender algo es con ejemplos del mundo real para poder relacionar el concepto tecnol贸gico con algo que conocemos.

caja negra testing ser铆a el cual una persona har铆a antes de comprar un coche, encender las luces, encender el motor entre otras pruebas (Sin necesidad de saber c贸mo funciona el coche por dentro)

realizar pruebas de tipo caja de cristal ser铆a la t茅cnica que usa un mec谩nico cuando llevas tu coche al mec谩nico y tiene que buscar una aver铆a.

Fuente: https://www.testermoderno.com/caja-blanca-vs-caja-negra/

No se si alguien mas lo noto pero si las funciones declaradas dentro de la clase de unittest no empiezan con test, no se contemplado al momento de hacer las pruebas, por ejemplo si corres el siguiente codigo que en ambas funciones deberia marcar error no te marcara ninguno:

import unittest


def mayor_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):
    
    def es_mayor(self):
        edad = 15
        result = mayor_edad(edad)

        self.assertEqual(result, True)

    def es_menor(self):
        edad = 100
        result = mayor_edad(edad)

        self.assertEqual(result, False)


if __name__ == '__main__':
    unittest.main()

Ahora aqui el mismo codigo solo que las funciones empiezan con test:

import unittest


def mayor_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor(self):
        edad = 15
        result = mayor_edad(edad)

        self.assertEqual(result, True)

    def test_es_menor(self):
        edad = 100
        result = mayor_edad(edad)

        self.assertEqual(result, False)


if __name__ == '__main__':
    unittest.main()

Espero le sirva este aporte a alguien y sepan que es importante a帽adir al nombre de la funci贸n la palabra test al inicio 馃槂

Hola.
La diferencia es que las pruebas de caja negra se realiza teniendo en cuenta los datos de entrada y de salida, sin aun tener una idea de como se va a realizar la l贸gica del programa, mientras que las pruebas de caja de cristal o caja blanca, como tambi茅n se le suele llamar, se centra en el procedimiento que tiene el programa, por lo que la implementaci贸n de esta prueba esta fuertemente ligada al c贸digo que realices.
Saludos.

Si alguien desea tener sus apuntes en jupyter notebook o en google colab y correr estas pruebas deben agregar
argv=[鈥榝irst-arg-is-ignored鈥橾, exit=False al unittest.main() as铆:

unittest.main(argv=['first-arg-is-ignored'], exit=False)

Cual ser铆a entonces la diferencia con la pruebas de caja negra? Veo que la implementaci贸n es igual.

buenas compa帽eros pueden revisar otros usos e inclusive algunos ejemplos de como se utilizan estas pruebas, y obviamente que m谩s puedes hacer leyendo la documentaci贸n de la librer铆a unittest ac谩:
https://docs.python.org/3/library/unittest.html
nota est谩 en ingles, pero es la documentaci贸n oficial.

Normalmente los test se corren en archivos aparte? O deber铆a ser parte del c贸digo. Osea, si pasa el test, reci茅n se ejecuta la funci贸n.

Ac谩 un articulo que me ayud贸 a entender:

"Entrando ya de lleno en el tema del testing en la programaci贸n pura, que es lo que realmente nos interesa, 驴Cu谩l ser铆a una definici贸n m谩s concreta del testing en este 谩mbito? El testing en programaci贸n se refiere a la comprobaci贸n de que todo el c贸digo que se ha escrito funciona.

Por ejemplo, si estamos dise帽ando una app para pedir taxis, tendremos que comprobar que cuando el usuario abre la app, le aparece un mapa con su posici贸n actual y un bot贸n para pedir un taxi; que al apretar el bot贸n de 鈥減edir un taxi鈥 lo lleva a una pantalla para elegir la hora; que despu茅s va a la pantalla de confirmar y que, cuando acaba el viaje, le sale el bot贸n de pagar.

Pero ojo, tambi茅n probamos si la app responde bien ante los errores. Por ejemplo, que, si no hay taxis, le aparezca el mensaje de error correspondiente; que si no tiene internet le aparezca un mensaje indic谩ndolo; que cuando el pago falla, le aparezca una interfaz para volverlo a intentar."

https://diegolaballos.com/podcast/40-que-es-y-para-que-sirve-el-testing-en-programacion/#:~:text=El testing en programaci贸n se,que se ha escrito funciona.

En Test Development se escriben los Test antes de escribir el c贸digo. EN las Pruebas de Caja de Cristal ya existe el c贸digo, ya est谩 escrito y se corren los test sobre dicho c贸digo, en todos y cada uno de sus m贸dulos y para todas y cada una de las posibilidades del m贸dulo.

import unittest

def es_mayor_de_edad(edad):
    if edad>=18:
        return False
    else:
        return False

class PruebaDeCristalTest(unittest.TestCase):

    def test_es_mayor_de_edad(self):
        edad=20
        resultado=es_mayor_de_edad(edad)
        self.assertEqual(resultado, True)
    def test_es_menor_de_edad(self):
        edad =15
        resultado=es_mayor_de_edad(edad)
        self.assertSetEqual(resultado,False)    

if __name__ == "__main__":
    unittest.main()```

Concepto


鈥 鈥忊忊
La prueba de caja de cristal es un m茅todo de testing de software que examina la funcionalidad de una aplicaci贸n asumiendo que sabe acerca de la estructura interna de nuestro programa. Las pruebas que realiza se basa en probar todos los caminos posibles de una funci贸n, es decir: ramificaciones, bucles como for o while, y tambi茅n la recursi贸n.
鈥 鈥忊忊庘忊忊

Diferencias entre caja negra y caja de cristal


鈥 鈥忊忊

  1. En Caja Negra, las pruebas se efect煤an sin el conocimiento de la estructura interna del programa o la aplicaci贸n, mientras que en Caja de Cristal las pruebas se realizan con el conocimiento de la estructura interna del pgm.
    鈥 鈥忊忊
  2. En Caja Negra, las pruebas no requieren conocimientos de programaci贸n, sin embargo, en Caja de Cristal tienen el objetivo principal de probar el programa de manera interna, y esto obviamente requiere conocimientos en estos temas.
    鈥 鈥忊忊
  3. En Caja Negra, las pruebas se centran en la perspectiva del usuario final o externo, mientras que las pruebas de Caja de Cristal se centran en la estructura del c贸digo, las condicionales, las rutas y las ramas.
    鈥 鈥忊忊
  4. En Caja Negra, las pruebas son un proceso que no requiere mucho tiempo, mientras que en las pruebas de Caja de Cristal son un proceso m谩s tard铆o.
    鈥 鈥忊忊

Criterios al elegir entre las dos


鈥 鈥忊忊
Los test de caja negra:
Son implementadas cuando no conoces la estructura interna del c贸digo, este tipo de cajas son realizadas por ingenieros que no est谩n involucrados en el desarrollo de la aplicaci贸n y los cuales se limitan a probar la funcionalidad desde una perspectiva del usuario.
鈥 鈥忊忊
Los test de caja de cristal:
Son implementadas cuando conoces la estructura del c贸digo y son realizadas para probar la funcionalidad todos los componentes. Normalmente esta es la elecci贸n que toman los desarrolladores o programadores de la aplicaci贸n.

Notas 馃槂
Pruebas de caja de cristal

  • Se basan en el flujo del programa.
  • Prueba todos los caminos posibles de una funci贸n. Ramificaciones, bucles for y while, recursi贸n.
  • Sirve para regression testing o mocks. Esto es, cuando ya se liber贸 el programa pero descubrimos un bug que queremos arreglar.
    • if: Debemos probar todas las condiciones.
    • for y recursi贸n: Una donde no entre, otro donde entre una vez y otra donde entre varias.
    • while: Donde la condici贸n de entrada sea falsa y otra donde probemos los break statements.
  • Tambi茅n debemos probar todas las excepciones.
import unittest   

def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False

class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor_de_edad(self):
        edad = 20
        resultado = es_mayor_de_edad(edad)
        
        self.assertEqual(resultado, True)
        
    def test_es_menor_de_edad(self):
        edad = 16
        resultado = es_mayor_de_edad(edad)
        
        self.assertEqual(resultado, False)

if __name__ == '__main__':
    unittest.main()

Las pruebas de Caja de Cristal

Se basan en el flujo del programa

prueba todos los caminos posibles de una funcion. (ramificaciones, bucles for y while, recursion.

Regression testing o mocks.

![](urlhttps://s3-us-west-2.amazonaws.com/secure.notion-static.com/9e84a4d2-2c43-4784-878e-f44268d864c6/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9e84a4d2-2c43-4784-878e-f44268d864c6/Untitled.png)

aqui la prueba de cristal salio correcta porque el parametro de la funcion es correcto ya que 20 es mayor de edad

Pero si tuvieramos una falla o pusieramos un error a la hora de hacer el test nos saldria negativo el resultado.

Las pruebas de caja de cristal (tambi茅n son conocidas como pruebas de caja blanca o pruebas estructurales) se centran en los detalles procedimentales del software, por lo que su dise帽o est谩 fuertemente ligado al c贸digo fuente.

[1:31] Si tenemos un while loop, lo que queremos probar son dos cosas, una prueba donde la condici贸n de entrada sea falsa y una prueba en donde veamos los break statements y c贸mo se comportan.

Sin duda el testing es tan importante como la programacion misma; despues de todo los humanos cometemos muchos errores de manera seguida. Antes las 鈥榗omputadoras鈥 humanas que hacian todos los calculos a mano cometian errores al resolverlos, me pregunto si en algun momento veremos a los programadores como vemos ahora a las computdoras.

Muy bien explicado!!

estructura codigo----unittest-----caja de cristal

estructura codigo----unittest-----caja de cristal

Hay m谩s m茅todos adem谩s del assertEqual(), por ejemplo:

self.assertTrue()
self.assertFalse()
self.assertRaises()

Asumo que son bastante auto descriptivos pero por si a caso el primero y el segundo sirven para corroborar una condici贸n que ha de cumplirse y el 煤ltimo para corroborar que se 鈥榣evante鈥 una excepci贸n espec铆fica.

Adem谩s me gustar铆a agregar que se puede hacer que la impresi贸n de los resultados en la consola sean m谩s verbales si corremos el flag -v corriendo el unittest desde consola:

python3 -m test_module.py -v

Las pruebas de caja blanca (tambi茅n conocidas como pruebas de caja de cristal o pruebas estructurales) se centran en los detalles procedimentales del software, por lo que su dise帽o est谩 fuertemente ligado al c贸digo fuente, lo cual, esto significa que tenemos que realizar un 鈥渆studio鈥, o m谩s bien, un an谩lisis de nuestro c贸digo, para esto, existen tres pautas fundamentales para poder realizar con 茅xito una prueba de caja blanca.

Pruebas de cubrimiento: Se trata b谩sicamente de ejecutar al menos una vez cada sentencia. Pero para cumplir con las pruebas de cubrimiento se necesitan varios casos de prueba:

Determinar posibles 芦caminos禄 independientes.
Cada condici贸n debe cumplirse en un caso y en otro no.
Y puede ser imposible cubrir el 100%
C贸digo que nunca se ejecuta: condiciones imposibles

Estaba tratando de ejecutar el c贸digo, pero no me entrega ninguna salida en pantalla.

import unittest


def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):

    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, True)
    
    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)

if __name__ == '__nain__':
    unittest.main()

As铆 lo estaba haciendo, 驴alguien ve algo malo? Lo compar茅 con el c贸digo que est谩 en la secci贸n de Archivos y a mi parecer est谩 igual.

Excelente!

Pruebas de caja de cristal: Son pruebas que se basan en el flujo del programa al contrario de las pruebas de caja negra que solamente ingresamos inputs y validamos los outputs. En este caso las pruebas de caja de cristal asumen que nosotros conocemos el proceso de implementacion y que podemos probar todas las diferencias o todos los caminos que existen dentro de la funcion. Ejemplo si tenemos un if se tienen que probar todas sus condiciones.


* Se basan en el flujo del programa
* Prueba todos los caminos posibles de una funcion. Ramificaciones, bucles for y while, recursion.
* Regression testing o mocks.

Ejemplo de prueba de caja de cristal:

import unittest
def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False
class PruebaDeCristalTest(unittest.TestCase):
    def test_es_mayor(self):
        edad = 20
        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado, True)
    def test_es_menor(self):
        edad = 17
        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado, False)
if __name__ == '__main__':
    unittest.main()```

Amigos comparto un enlace donde ampl铆an la explicaci贸n 馃槂

Interesante, nunca he implementado pruebas en mi c贸digo, creo que es hora de hacerlo, porque siempre me ando quebrando la cabeza cuando ya est谩 hecho鈥

Es muy necesario el uso de los mocks cuando se esta desarrollando con microservicios debido a la gran cantidad de clases que se crean

python me sorprende cada vez mas

buenardo

Hola!,aunque si bien el c贸digo est谩 bien, me sale failure,alguno sabe por que?

# -*- coding:utf-8 -*-
#2掳m茅todo debug,asume que nosotros sabemos la implementacion,a diferencia de la caja negra,por lo que no tenemos que escribir el test driven development

import unittest

age = int(input('Cu谩ntos a帽os tenes?: '))
disease = input('Ten茅s alguna enfermedad que perjudique de alg煤n modo a tu sistema autoinmune?(y/n): ')

message_more_or_equal_than_50='Usted se encuentra dentro del sector de riesgo,adem谩s de lavarse las manos,evite salir de su hogar,y en caso de necesitar compras o urgencias,comuniquese con el n煤mero proporcionado por el gobierno'
message_less='Usted no se encuentra en el sector de riesgo,pero de igual manera, evite exponerse ante multitudes y lavese las manos frecuentemente'

def avisos_segun_edad(age,disease):
    """Funct lance avisos de precauci贸n segun edad(covid19)
    if age>=number
    return message_n
    """
    
    if age >= 50 or disease == 'y':
       return print(message_more_or_equal_than_50)
    else:
        return print(message_less)




class PruebaDeCristalTest(unittest.TestCase):
    
    def test_avisos_segun_edad_mayor_o_igual(self):
        age = 50

        resultado = avisos_segun_edad(age,disease)

        self.assertEqual(resultado, message_more_or_equal_than_50)

    def test_avisos_segun_edad_menor(self):
        age = 21

        resultado = avisos_segun_edad(age,disease)

        self.assertEqual(resultado, message_less)


if __name__ == "__main__":
    unittest.main()

[7:25] Los test son una forma de proteger nuestro c贸digo de nuestro yo futuro.

Gracias a las pruebas de caja negra y de cristal, se puede tener una mejor escalabilidad de los programas desarrollados.

Estimado 驴Como hago para que mi consola me muestre los errores e ese formato mas ordenado que usa el profesor? uso VSC y el error me lo muestra en la tarminal pero sale feo ajajajaj cuesta leer y encontrar el error se帽alado, gracias

Es mejor prevenir que lamentar, as铆 se demore un poco m谩s鈥

import unittest

def es_mayor_de_edad(edad):
    if edad >= 21:
        print('Es mayor de edad')
        return True
    else:
        print('Es menor de edad')
        return False


class PruebaDeCristalTest(unittest.TestCase):
    def test_es_mayor_de_edad(self):
        edad = 23

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado,True)

    def test_es_menor_de_edad(self):
        
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado,False)


if __name__ == '__main__':
    unittest.main()

26. Pruebas de caja de cristal

  • Se basan en el flujo del programa.
  • Prueba todos los caminos posibles de una funci贸n. Ramificaciones, bucles for y while, recursi贸n.
  • Regression testing o mocks.
import unittest

def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False
    

class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor_de_edad(self):
        edad = 20
        
        resultado = es_mayor_de_edad(edad)
        
        self.assertEqual(resultado, True)

    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)

if __name__ == '__main__':
    unittest.main()

White testing


.
Las 鈥pruebas de caja de cristal鈥 (tambi茅n conocidas como pruebas de caja blanca) son pruebas que se centran en la estructura interna del c贸digo de un programa y verifican que funciona correctamente. Estas pruebas se realizan a nivel de c贸digo y se dise帽an para probar todos los caminos posibles que puede tomar el c贸digo.
.
Regression testing, por otro lado, es un tipo de prueba que se realiza para asegurarse de que los cambios realizados en el c贸digo no afecten el funcionamiento de las funcionalidades existentes. En otras palabras, se trata de volver a ejecutar las pruebas que se realizaron previamente para asegurarse de que todo sigue funcionando correctamente despu茅s de los cambios.
.
En Python, se pueden utilizar herramientas de pruebas de caja de cristal como pytest o unittest para escribir y ejecutar pruebas automatizadas en el c贸digo. Para hacer regression testing, se pueden utilizar estas mismas herramientas y volver a ejecutar las pruebas existentes despu茅s de hacer cambios en el c贸digo.

Caja de cristal - asume que nosotros sabemos la implementaci贸n y podemos probar todos los posibles caminos dentro de nuestra funci贸n. O sea, probar ramificaciones, bucles for y while, recursi贸n.

Regression testing: Determinar un bug ya que el programa salio a operaci贸n. Necesitamos saber como esta estructurado el c贸digo. Loops:alguna condicion falsa. Probar excepciones.

Mocks.

Pruebas de caja de cristal

  • Se basan en el flujo del programa.
  • Prueba todos los caminos posibles de una
    funci贸n. Ramificaciones, bucles for y while,
    recursi贸n.
  • Regression testing o mocks.

En resumen

La pruebas de caja de cristal pueden definirse como una t茅cnica de monitorizaci贸n o prueba de software en la se analiza el dise帽o, c贸digo y estructura interna, con el objetivo de mejorar propiedades como la seguridad y el uso eficiente del sistema.

Estas pruebas se caracterizan principalmente porque son los propios sistemas y aplicaciones quienes exponen sus m茅tricas para que el usuario pueda leerlas, analizarlas y tomar decisiones y acciones en funci贸n de la obtenci贸n de un resultado u otro.

En las pruebas de monitorizaci贸n de caja de cristal, los propios probadores aparecen en el mismo c贸digo, por lo que este recurso tambi茅n suele conocerse como prueba de caja transparente o prueba de caja blanca, entre otros.

Caracter铆sticas de las pruebas de caja de cristal

El sistema de monitorizaci贸n basado en las pruebas de caja de cristal cuenta con una serie de propiedades y elementos que lo caracterizan y permiten su funcionamiento en las m谩quinas o equipos de software con los que trabaja. Se realiza sobre un m贸dulo en espec铆fico, esto es, sobre un subsistema en concreto.

Estas pruebas de caja de cristal se basan en los detalles referentes al c贸digo fuente, es decir, que se enfoca en su an谩lisis y puede llevarse a cabo a nivel de integraci贸n o unidad del sistema para el desarrollo de software.

Uno de los objetivos fundamentales de los sistemas de monitorizaci贸n basados en las pruebas de caja de cristal es el de comprobar el flujo de trabajo de las aplicaciones y software para garantizar que todo est茅 funcionando de manera adecuada y eficiente o si, por el contrario, existe alg煤n tipo de inconveniente que interrumpa o retrase los procesos.

Elementos principales

Dentro de los elementos principales que permiten la realizaci贸n de las pruebas de caja de cristal en un software determinado, se encuentran:

M茅tricas

Las m茅tricas en las pruebas de caja de cristal pueden ser de todo tipo, dependiendo del sistema monitorizado. Este est谩ndar de medici贸n se utiliza con el objetivo de medir de forma cuantitativa el estado del sistema con respecto a diferentes componentes o atributos, como puede ser la seguridad, eficiencia y dem谩s.

Application Performance Metrics (APM)

El Application Performance Metrics (APM) es uno de los componentes caracter铆sticos del sistema de pruebas de caja de cristal. Consiste en un sistema que se encarga de la recolecci贸n de m茅tricas claves de la infraestructura y aplicaci贸n que se analiza, lo que permite que el usuario pueda identificar y solucionar los problemas de tipo funcional antes de que estos lleguen a tener un impacto negativo sobre los resultados a nivel comercial. Algunos ejemplos del APM son la tasa de error, el rendimiento o los tiempos de respuesta, entre otros.

personalizando mi c贸digo de testing, me di cuenta que es obligatorio el uso de 鈥渢est_鈥 antes de cualquier nombre de funci贸n, es decir como prefijo hay que usarlo. ejemplo:

def test_esMayorDeEdad(self) sino lo haces, no funciona.

Algo que no sab铆a y que me hizo pasar un mal rato porque el c贸digo no me funcionaba es que todos los m茅todos (las funciones dentro de la clase test) deben tener un nombre que inicie con la palabra 鈥渢est鈥. Esto me pas贸 porque suelo renombrar el c贸digo para que quede en ingl茅s y en una de esas cree m茅todos que no empezaban con 鈥渢est鈥 y por lo tanto no corr铆an

Al igual que la clase anterior dejo un v铆deo para complementar:
https://www.youtube.com/watch?v=N-a5DEa_f0U

la vi dos veces, no entendi mucho 馃槪

la clase estuvo super me costo un poco pero aprendi

import unittest


def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):

    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, True)

    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)


if __name__ == '__main__':
    unittest.main()
F.
======================================================================
FAIL: test_es_mayor_de_edad (__main__.PruebaDeCristalTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/macbook/Downloads/python/caja_cristal.py", line 18, in test_es_mayor_de_edad
    self.assertEqual(resultado, True)
AssertionError: False != True

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
[email protected] python % python3 caja_cristal.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Pruebas de cajas de cristal:

Se basan en el flujo del programa

Prueba todos los caminos posibles de una funcion, ramificaciones, bucles, for y while, recursion.

Regression testing o moks.

Buena clase!

Las pruebas de caja blanca (tambi茅n conocidas como pruebas de caja de cristal o pruebas estructurales) se centran en los detalles procedimentales del software, por lo que su dise帽o est谩 fuertemente ligado al c贸digo fuente, lo cual, esto significa que tenemos que realizar un 鈥渆studio鈥, o m谩s bien, un an谩lisis de nuestro c贸digo, para esto, existen tres pautas fundamentales para poder realizar con 茅xito una prueba de caja blanca.

Excelente, nunca lo habia visto

import unittest #M贸dulo de Python para hacer pruebas

def es_mayor_de_edad(edad): # Ya el c贸digo est谩 escrito
    if edad >= 18:
        return True
    else: 
        return False

class PruebaDeCristalTest(unittest.TestCase):
    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado, True) #Prueba de la rama mayor de edad

    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado, False) #Prueba de la rama menor de edad

if __name__ == '__main__':
    unittest.main()

Yo utilizar铆a los test para hacer implementaciones nuevas sobre el c贸digo o cuando te mandan a parchar 馃榿

Como ejecuto la funci贸n testeada despu茅s de su testing???

<code>

import unittest
 
def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebasDeCritalTest(unittest.TestCase):
    
    def test_mayor_de_edad(self):
        edad = 20
        
        resultado = es_mayor_de_edad(edad)
        
        self.assertEqual(resultado, True)

    def test_menor_de_edad(self):
        edad = 15

        resulado = es_mayor_de_edad(edad)

        self.assertEqual(resulado, False)

if __name__== "__main__":
    unittest.main()
en qu茅 curso puedo aprender m谩s sobre Debug?馃

Buen dia companeros, tengo una pregunta. A que hace referencia la palabra reservada 鈥渟elf鈥?

Al intentar ejecutar el scrip me salta este error:

Estoy usando la terminal Bash en vsCode
驴C贸mo puedo solucionarlo?

Muy bueno!!

Excelente herramienta!

Pruebas de caja de Cristal:

  • Se basan en el flujo del programa
  • Probamos todos los posibles caminos: ramificaciones, bucles y recursion
  • Se usan para hacer regression testing o mocks

Regresion Testing o mocks
Probamos los bugs que se presenten en su uso una vez ya ha salido el programa a luz.

chicos++ a mi cuando lo pongo me salta un archivo de pyton y se borra osea wtf ++

super buena explicaci贸n y que buena herramienta

Un tema muy 煤til cuando se desarrollan proyectos complejos y en equipo:

Revisar este contenido en el futuro.

Revisar este contenido en el futuro.

#Pruebas cajas de cristal
import unittest

def es_mayor_de_edad(edad):
    if edad >18:
        return True #Si le coloco False, me salta error
    else:
        return False

class PruebaDeCristalTest(unittest.TestCase):
    def test_es_mayor_de_edad(self):
        edad = 20
        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado,True)

    def test_es_menor_de_edad(self):
        edad = 15
        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado, False)



if __name__=='__main__':
    unittest.main()
import unittest

def es_mayor_de_edad(edad):
    if edad >= 18:
        return True

    else: 
        return False

class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor_de_edad(self):
        edad = 20 

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, True)

    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)
if __name__ == "__main__":
    unittest.main()```

Estoy impaciente por hacer mi primer programa.

excelente explicaci贸n, se entiende claramente la diferencia

import unittest

def es_mayor_de_edad(edad):
    if edad >= 18:
        return False
    else:
        return False

class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)
        self.assertEqual(resultado,True)
    
    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)
        
        self.assertEqual(resultado,False)

if __name__ == '__main__':
    unittest.main()

Para verificar que todas las lineas pasen por el test pueden usar coverage instalandolo con pip

  • pip3 install coverage

y ejecutarlo:

luego de eso ejecutan


donde te indica la covertura de los tests y las lineas que no estan cubiertas

mi codigo es el siguiente:

Las pruebas de caja de cristal: Prueba TODOS los posibles caminos o flujos de un programa, algoritmo o funci贸n.

Hola, buen d铆a, hay manera de acceder a las diapositivas de la clase?

import unittest

def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):
    
    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, True)

    def test_es_menor_de_edad(self):
        edad = 17

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)

Hola a todos, el ejecutar el programa me aparece en siguiente error:

import unittest

def es_mayor_de_edad (edad):
      if edad >=18:
        return True
      else:
        return False 

         
class PruebaDeCristalTest(unittest.TestCase):
      def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad (edad)

        self.assertEqual(resultado, True)


      def test_es_menor_de_edad (self):
        edad = 15

        resultado = es_mayor_de_edad (edad)

        self.assertEqual(resultado, False)



if __name__ == '__main__':
      unittest.main()
<h1>E</h1>

ERROR: /root/ (unittest.loader._FailedTest)

AttributeError: module 鈥main鈥 has no attribute 鈥/root/鈥


Ran 1 test in 0.002s

FAILED (errors=1)
An exception has occurred, use %tb to see the full traceback.

SystemExit: True

Al parecer corre el primer test de manera correcta pero el segundo no, creo que el c贸digo esta bien pero sigue arrojando este error, cualquier ayuda es bienvenida.

Se comprendi贸!!

Genial, todo claro.

Me encanto esta clase 馃槃

Esto es como tener guarda espaldas

no entend铆 la diferencia entre las pruebas, porque entiendo el objetivo de ambas pruebas, pero si comparo los codigos son parecidas las implementaciones, entiendo que de cristal es un analisis del bloque de c贸digo con ramificaciones,etc, no hay otro ejemplo que pueda entender mejor o alguna lectura?

No entendia la diferencia de caja de cristal(o caja blanca)y caja negra. La blanca analiza el interior de una funcion, mientras que la negra no toma en cuenta el funcionamiento de la funcion, si no su resultado .

Excelente tema!

Solo conoc铆a el uso de excepciones para evitar errores, ahora con estos nuevos conceptos me siento m谩s preparado.

import unittest

def is_adult(age):
    return (age >= 18)


class WhiteBoxTest(unittest.TestCase):
    
    def test_is_adult_true(self):
        age = 20
        result = is_adult(age)
        self.assertTrue(result)
    
    def test_is_adult_false(self):
        age = 10
        result = is_adult(age)
        self.assertFalse(result)

if __name__ == '__main__':
    unittest.main()

[1:46] Por 煤ltimo se deben probar todas las excepciones, es decir todos los lugares en donde puede haber errores.

import unittest


def es_mayor_de_edad(edad):
    if edad >= 18:
        return True
    else:
        return False


class PruebaDeCristalTest(unittest.TestCase):

    def test_es_mayor_de_edad(self):
        edad = 20

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, True)

    def test_es_menor_de_edad(self):
        edad = 15

        resultado = es_mayor_de_edad(edad)

        self.assertEqual(resultado, False)


if __name__ == '__main__':
    unittest.main()```

[0:13] Las puebas de caja de cristal, se basan en el flujo del programa. Prueba todos los caminos posibles de una funci贸n, asumiendo que se conoce la implementaci贸n. Se verifican las ramificaciones, bucles for y while, ademas de la recursi贸n.

[1:03] Tips: si tenemos un if, debemos probar todas Las condiciones, el if principal, elif y adem谩s del else. Si tenemos un loop, debemos probar sin entrar en el, entrando una vez, y entrando m谩s de una vez al loop junto con las recursiones.