Validación LDAP con PHP

Activar soporte para LDAP en el archivo de configuración php.ini. Quitar el comentario (eliminar el punto y coma inicial) en la línea correspondiente.

Reiniciar el servidor de aplicaciones, ya sea Apache o IIS.

Ejemplo de secuencia típica en una aplicación que accede a un servidor LDAP:

  1. ldap_connect(): Establece la conexión al servidor LDAP.
  2. ldap_bind(): Autentifica a un usuario, ya sea de forma anónima o con un “login” proporcionado.
  3. Efectuar una búsqueda o actualización del directorio, desplegar resultados, etc.
  4. ldap_close(): Cierra la conexión con el servidor LDAP.

Pruebas de Software en Aplicaciones Web

Pruebas:

  • Actividad en la que un componente es ejecutado bajo condiciones y requerimientos específicos.
  • Los resultados se observan y se comparan con los esperados.
  • Garantizan la calidad mínima del software.
  • Validan que el software funcione.
  • Validan que los requisitos hayan sido implementados.
  • Verifican la interacción de los componentes.

Caso de prueba:

  • Especificación formal de una prueba.
  • Definen el mecanismo de prueba, las entradas y las salidas esperadas.
  • Un buen caso de prueba es aquel que detecta un error.

Clasificación de Pruebas

Pruebas de caja blanca

  • Permiten examinar la estructura interna del programa.
  • Casos de prueba que garanticen que:
    • Se ejecutan al menos una vez todos los caminos independientes de cada módulo.
    • Se prueben todas las decisiones lógicas en sus ramas verdaderas y falsas.
    • Se ejecuten todos los bucles o ciclos con los límites que se les haya definido.
    • Se ejecuten las estructuras internas de datos para asegurar su validez.
  • Ejemplo de métodos de caja blanca: Complejidad ciclomática de McCabe.

Pruebas de caja negra

  • Complementarias a las de caja blanca.
  • Más frecuentes que las de caja blanca.
  • Se llevan a cabo sobre la interfaz del software.
  • Los casos de prueba de la caja negra buscan demostrar que:
    • Las funciones del software son operativas.
    • Las entradas se aceptan de forma adecuada.
    • Se produce una salida correcta.
    • La integridad de la información externa se mantiene.

Tipos de Pruebas

Pruebas de Unidad

Evalúan un módulo (clase, función, etc.) concreto.

Pruebas Funcionales

Evalúan una funcionalidad completa. Pueden estar implicadas una o varias clases.

Pruebas de Integración

Integración de módulos de acuerdo a lo especificado en el diseño.

  • Integración no incremental: Se combinan los módulos por anticipado.
  • Integración incremental: El programa se integra progresivamente y se va probando en pequeños segmentos.

Pruebas de Aceptación

Demuestran al cliente que una funcionalidad está correctamente terminada.

Pruebas de Seguridad

Verifican que los mecanismos de protección funcionan.

Tipos de Pruebas (II)

Pruebas del Sistema

Verifican que cada elemento encaja adecuadamente y que se alcanza la funcionalidad y el rendimiento del sistema total.

Pruebas de Regresión

Aseguran que los defectos identificados en una prueba anterior se han corregido y que los cambios realizados no han introducido nuevos defectos o reintroducido defectos anteriores.

Pruebas de Carga

Determinan el rendimiento del sistema bajo condiciones de carga que se aproximan a la realidad esperada en producción.

Pruebas de Volumen

Buscan encontrar debilidades en el sistema al momento de manejar grandes volúmenes de datos.

Ejecución de Pruebas

Pruebas manuales

  • Sentencias del tipo echo, print, print_r, var_dump para imprimir por pantalla.
  • Silenciar el código con comentarios e irlo activando poco a poco hasta detectar el error.
  • Incluir librerías o rutinas, esperando lograr el resultado esperado.
  • Usar un código encontrado en la red, sin entender lo que se hace.

Los mecanismos manuales pueden ser útiles si los módulos a probar son pequeños y manejables.

En entornos grandes y con un volumen de líneas de código muy elevado pueden ser engorrosas y poco prácticas.

Pruebas automatizadas

Apoyadas en un software.

  • Depurador de código.
  • Analizador de rendimiento.

PHPUnit: Herramienta de pruebas unitarias en PHP

PHPUnit

  • Ayuda a probar el código PHP escrito.
  • Disponible en PEAR (http://pear.php.net/).
  • PEAR: Aplicación para distribución de extensiones para PHP.
  • PHPUnit se basa en otras aplicaciones PEAR.

Casos de Prueba en PHPUnit

  • Deben ser programados para poder ser reutilizados.
  • Recomendación: El nombre del caso de prueba debe procurar imitar el nombre de la clase o módulo que se pruebe. Ejemplo:
    • Clase a Probar: conexiónRemota
    • Caso de Prueba: TestConexionRemota
  • Los métodos de prueba deben ser públicos y empezar con la palabra “test”.
  • Por lo general, una clase de prueba extiende de la clase TestCase de PHPUnit.

Aserción

Afirmación que se considera cierta. Útil para la configuración de pruebas.

Tipos de aserciones

  • AssertTrue / AssertFalse: Comprueba si la entrada es igual a true / false.
  • AssertEquals: Comprueba el resultado frente a otra entrada.
  • AssertGreaterThan: Comprueba el resultado para ver si es mayor que un valor (también hay LessThan, GreaterThanOrEqual, y LessThanOrEqual).
  • AssertContains: Comprueba que la entrada contiene un valor específico.
  • AssertType: Comprueba que una variable es de un cierto tipo.
  • AssertNull: Comprueba que una variable es nula.
  • AssertFileExists: Comprueba que un archivo existe.
  • AssertRegExp: Comprueba la entrada con una expresión regular.

Si éxito: Puntos. Número de puntos = número de pruebas.

“F” : error.

“I”: incompleta.

“S”: omitida (Skipped).