3.4    Pruebas

3.4.1  Objetivo

       Esta t‚cnica tiene por objetivo  ejecutar  los programas  para 
       encontrar errores.


3.4.2  Utilidad

       Se  desarrolla  un  programa  de  pruebas para  probar que  no 
       existen errores en un programa, es decir hacer que el programa 
       falle.

       La confiabilidad es un aspecto del dise¤o, por  lo  que   debe 
       estar dentro del sistema, m s adelante se indican las estrate-
       gias especificas de pruebas.


3.4.3  Descripci¢n

       La prueba del equipo l¢gico es el m‚todo m s usado para deter-
       minar si ‚ste funciona como debe. El proceso de pruebas es uno 
       de los  componentes de un conjunto de actividades que permiten 
       asegurar la calidad del producto (equipo l¢gico).

       * Principio b sico de pruebas.

       Uno  de  los princios b sicos en la realizaci¢n de pruebas  es 
       que ‚stas han de ser llevadas a cabo por personas distintas  a 
       los dise¤adores de los programas, tanto para evitar una simple 
       verificaci¢n  de que el programa funcione correctamente,  como 
       para probar que ese programa ha  sido concebido e interpretado 
       correctamente.

       Los casos de prueba deben ser escritos tanto para  condiciones 
       de entradas inv lidas o inesperadas,   como  para  condiciones 
       v lidas y esperadas.

       Un principio deducido de la experiencia y observaci¢n de prue-
       bas  de  diferentes  programas,  es  que  la   probabilidad de 
       encontar errores  adicionales en una secci¢n  del programa, es 
       proporcional  al  n£mero de errores ya encontradas en la misma 
       secci¢n.

       * Realizaci¢n de las pruebas.

       Para cada sistema se realizar n diferentes clases de pruebas:
       Pruebas Unitarias: Todos los componentes del sistema  que  se 
       desarrollen individualmente para comprobar su correcto funci-
       onamiento.

       Pruebas de integraci¢n: Se prueba la integraci¢n  entre   los 
       componentes del sistema para  demostrar  que se puede encajar 
       correctamente.

       Pruebas de sistemas: Se prueba el sistema globalmente.

a)     Tipos de pruebas

       Existen dos tipos de pruebas :

       Pruebas del tipo CAJA BLANCA, que permite examinar la estruc-
       tura interna del programa.
     
       Pruebas del tipo CAJA NEGRA, donde los casos  de  prueba   se 
       dise¤an considerando exclusivamente las entradas  y   salidas 
       del sistema, sin preocuparse por la estructura interna del mismo.

       * Pruebas unitarias de integraci¢n
       Las pruebas unitarias se realizan al crear cada m¢dulo o compon-
       ente individual de un sistema. Las pruebas de  integraci¢n   son 
       realizadas sobre estos componentes  individuales  son   llamados 
       cuando es necesarios  y  que  los  datos que se transmiten entre 
       dichos componentes son los requeridos.

       Se cuentan con dos tipos de pruebas :

          a)     Desarrollo incremental.
          b)     Estrategias de integraci¢n.
          Se detallar n ambos tipos de pruebas.

          a)     Desarrollo incremental

       Al probar cada m¢dulo individualmente es necesario crear m¢dulos 
       auxiliares que simulen las acciones de los m¢dulos indicados por 
       el m¢dulo que se est  probando.

       As¡ mismo se han de crear m¢dulos ®conductores¯ para  establecer 
       las pre-condiciones necesarias, al m¢dulo objeto  de la prueba y 
       examinar los resultados de la prueba.

       Debido a todo esto, a menudo se combinan ambos tipos  de  prueba 
       unitarias y de integraci¢n.

       El tipo de prueba incremental consiste en agregar cada  m¢dulo o 
       componente individual al conjunto de componentes existentes y el 
       conjunto resultante de prueba. Esto reduce la necesidad de crear 
       m¢dulo conductores y permitiendo adem s, examinar en detalle las 
       interfases.  Cuando  las  pruebas  unitarias y de integraci¢n se 
       realizan  separadamente,  es  dif¡cil  examinar  los componentes 
       individuales o m¢dulos que causan resultados incorrectos, por el 
       contrario, con el tipo de prueba incremental  es  probable   que 
       surgan al incorporar  un nuevo componente a un grupo previamente 
       probado, sean debidos precisamente a ‚ste £ltimo o a las interf-
       ases  entre ‚l y los otros componentes.

          b)  Estrategias de integraci¢n

          Es importante determinar la secuencia en que  van  a producir 
          e integrar los componentes. Para una estructura  de programas 
          organizada  jer rquicamente,  se podr  enfocar el problema de 
          la prueba utilizando varias estrategias diferentes:

          * Estrategias de arriba a abajo (Top-Down)
          * Estrategias de abajo a arriba (Bottom-Up)
          * Estrategias combinadas
          * Comparaci¢n de estrategias.

          * Pruebas del sistema y de aceptaci¢n

          a)   Pruebas Globales.

          Una vez que se han probado los componentes individuales  y se 
          han  integrado,  se  ha  de probar el sistema global. En esta 
          etapa pueden distinguirse  los  siguientes  tipos  de prueba, 
          cada uno con un objetivo claramente definido:

          * Pruebas funcionales
          * Pruebas de comunicaci¢n
          * Pruebas de rendimiento
          * Pruebas de volumen
          * Pruebas de sobrecarga
          * Pruebas de disponibilidad de datos
          * Pruebas de facilidad de uso
          * Pruebas de operaci¢n
          * Pruebas de entorno
          * Pruebas de seguridad

          b)  Pruebas de aceptaci¢n.

          Son aquellas pruebas que realiza el usuario con el  objeto de 
          comprobar si el sistema es aceptable  para ‚l.  Estas pruebas 
          son del mismo tipo que  las  mencionadas  anteriormente, pero 
          son determinadas por el usuario,  en  lugar  de  serlo por el 
          equipo de desarrollo.

          Un lugar especial de estas pruebas  es  el de la ejecuci¢n en 
          paralelo con el viejo sistema, para  comparar  los resultados 
          producidos por ambas ejecuciones.

          * Planificaci¢n de las pruebas.

          La fase de pruebas, por su envergadura e importancia necesita 
          una organizaci¢n seria y fiable.

          Ante una fase de pruebas, se debe tomar como  axioma  que  se 
          van a encontrar errores.

          Los componentes de una planificaci¢n ser n :

          * Objetivos:  Definir  los  objetivos  de  cada  fase  de las 
          pruebas.
     
          * Criterios  de  terminaci¢n,  Especificar  cu ndo  se  deben 
          acabar las pruebas.
     
          * Cronolog¡a:  Fijar  los  tiempos  necesarios para cada fase 
          (dise¤o, escritura, ejecuci¢n).
     
          * Responsabilidades: Especificar  los  responsables  de  cada 
          fase, as¡ como qui‚n corregir  los errores detectados.
     
          * Bibliotecas de caso de prueba y normas: Crear una sistem t-
          ica de identificaci¢n, escritura y almacenamiento de casos de 
          prueba.
     
          * Herramientas: Establecer cu les ser n las  herramientas  de 
          pruebas que se van a utilizar.
     
          * Tiempo de m quina: Determinar el tiempo de computaci¢n  que 
          se necesita en cada fase del proyecto de prueba.
     
          * Configuraci¢n de equipo: Detallar la necesidad de computac-
          i¢n especiales de equipo o de un per¡odo concreto.
     
          * Integraci¢n: Describir el plan de integracion del sistema.
     
          * M‚todos de seguimiento: Especificar los m‚todos que se han 
          de utilizar en las pruebas.
     
          * Depuraci¢n: Definir  un  mecanismo para informar sobre los 
          errores detectados, para seguir el proceso de las correccio-
          nes y para incorporar ‚stas al sistema.
     
          * Terminaci¢n de las pruebas.
          Es dif¡cil que el £ltimo error detectado,era  el  £nico  que 
          quedaba. Sin embargo, existen m‚todos  para  mostrar  cu ndo 
          esta pr¢ximo el final, los dos m s comunes son:

          Terminar  la  prueba cuando el tiempo establecido  para   la 
          misma ha expirado.

          Terminar la prueba cu ndo todos los casos de prueba se ejec-
          utan sin detectar errores.

          Otros m‚todos m s complicados de aplicar pero  m s efectivos 
          son:

          * Estimaci¢n  de  n£mero total  de   errores  del programa..
     
          * Estimaci¢n del porcentaje  de  estos  errores  que  pueden 
          encontrarse f cilmente.
     
          * Estimaci¢n de que fracci¢n de errores se originan en proc-
          esos particulares de dise¤o.

          Para realizar cualquiera de estas estimaciones  es necesario 
          contar con una historia  o  experiencia  previa  que permita
          definir dichas estimaciones.