sábado, 15 de octubre de 2016

Pruebas Web




Pruebas Web

Christian Alexis Manzanares Cruz a, Eric Francisco Matute Velásquez b,
Gabriel Alexander Sosa Ramírez c Kevin Ariel Santamaría Figueroa d

a Estudiante de la Carrera de Ingeniería en Sistemas de la UNAH
b Estudiante de la Carrera de Ingeniería en Sistemas de la UNAH
c Estudiante de la Carrera de Ingeniería en Sistemas de la UNAH
d Estudiante de la Carrera de Ingeniería en Sistemas de la UNAH


Resumen. En los proyectos basados en tecnología web podemos destacar sus ventajas y características que brindan un valor agregado en disponibilidad, flexibilidad, accesibilidad, capacidad, desempeño y seguridad. Sin embargo, cumplir dichas características representa un diseño y desarrollo adecuado, el cual se puede medir por medio de pruebas con la finalidad de encontrar errores que afecten la confianza del sistema, ya que, sin ella, el proyecto se irá al fracaso.

Abstract. In projects based on web technology we can highlight its advantages and features that provide added value in availability, flexibility, accessibility, capacity, performance and security. However, comply with these characteristics represents a suitable design and development, which can be measured by tests in order to find errors affecting confidence in the system, because without it, the project is going to fail.


Palabras Claves. Pruebas, Proyectos, Sitios, Paginas, Web, Aplicaciones.



PRUEBAS DE SOFTWARE
Las pruebas de software son un conjunto de técnicas que forman parte del control de calidad para verificar el cumplimiento de las expectativas del usuario referente a los requerimientos funcionales y no funcionales del software, también respecto a la disponibilidad, usabilidad, rendimiento, velocidad, seguridad y confianza. En simples palabras las pruebas son investigaciones empíricas que tienen el propósito de encontrar errores en el software desarrollado permitiendo corregirlos antes de su debida implementación o antes de proseguir a otra etapa de pruebas, generalmente con los usuarios finales.
De manera práctica una prueba es una actividad la cual se ejecuta el sistema o cierta parte de él con condiciones previamente definidas, observando los resultados registrándolos y aplicándoles una evaluación. La evacuación pertenece a algún caso de prueba el cual se compara respecto a un conjunto de entradas, condiciones de ejecución y resultados esperados.
El objetivo de las pruebas es encontrar errores, una prueba que encuentra uno o más errores es una prueba exitosa.
Las pruebas del sistema deben ir añadidas desde el análisis como estáticas, ya que por medio de pruebas de escritorio o pequeñas compilaciones ya que dará un mejor flujo y seguridad en el avance del proyecto.
Las pruebas dinámicas se ejecutan cuando la etapa del desarrollo ha concluido, por tanto, son pruebas dedicadas con mucha mayor amplitud porque con el software terminado se obtiene un mayor panorama, realizando las métricas correspondientes a las características críticas del proyecto correspondiente a la eficiencia y eficacia del mismo.

TIPOS DE PRUEBAS
Entre las más importantes respecto a nuestro contexto están:

Pruebas de compatibilidad:
Son las pruebas que se realizan a determinado software con el motivo de comprobar si es compatible con todos los navegadores de internet y dispositivos para los cuales va dirigido. Esta prueba es de suma importancia ya que determinará si el producto llegará a todos los usuarios a tal manera de que lo utilicen con el equipo con que disponen.

Pruebas de integración:
Es una prueba dinámica posterior a las pruebas en cada módulo del sistema. Se centra en probar el cruce de la información entre módulos.


Pruebas de regresión:
Se evalúa la adaptabilidad del software referente a cambios funcionales o contextuales ya sea a nivel hardware y software. Comprobando que el software funcione de manera óptima solamente con el cumplimiento de las especificaciones básicas.

ENFOQUES DE PRUEBAS

Pruebas de caja blanca
Las pruebas de caja blanca se centran en la estructura interna del programa, analizando los caminos de ejecución.
Consiste en predefinir valores de entrada para examinar cada flujo de ejecución para verificar los valores de salida adecuados. Este tipo de pruebas es muy específica y subjetiva, por tanto, debe diseñarse una prueba por cada caso particular que se desee experimentar.
Generalmente se aplican a subsistemas o a módulos ya que sería muy complicado evaluar la intervención de un flujo demasiado complejo.
Este tipo de pruebas es muy específico y adecuado para encontrar problemas funcionales, a pesar de ellos podría pasar por alto requisitos faltantes pese a realizar pruebas exhaustivas de todos los flujos.

Pruebas de caja negra
Es un conjunto de técnicas que se centran en estudiar desde todos los puntos de vista las entradas que recibe el sistema y las salidas que produce el mismo respecto a las entradas, dejando de tomar en cuenta el funcionamiento interno del software caso contrario de las pruebas de caja blanca.
Este tipo de pruebas nos da un panorama más amplio ya que permite ver al sistema como un todo, dando la facilidad de aislar un fallo más ágilmente, conociendo que hace el software y no como lo hace.

Pruebas Aleatorias
Las pruebas aleatorias son las más importantes en el desarrollo de cualquier software ya que acompañan el desarrollo del mismo, por tanto, se vuelve de los tipos de pruebas más complicadas ya que cada prueba conlleva objetivos diferentes en cada etapa del desarrollo.
Consiste en buscar errores en cada uno de los componentes del software, llamados pruebas de unidad, que pueden probar la existencia de bug pero no la ausencia de ellos.

Hemos especificado en qué consisten las pruebas globalmente para cualquier software, ahora nos enfocaremos a sistemas basados en tecnología web, por tanto, entraremos en contexto a continuación:

SISTEMAS WEB DE CALIDAD

Es preciso saber que los requerimientos del software son una gran prioridad ya que el ellos se basan los objetivos del proyecto, sin embargo, fuera de ellos existen ciertas características que brindan mucha importancia en el desempeño del proyecto, las cuales podríamos definirlas como determinantes de calidad.

Según el estándar ISO 9126 la calidad la podemos conocer como un conjunto de propiedades y características que dan aptitud para satisfacer las expectativas, necesidades implícitas y explícitas, o sea que los elementos que brindan la calidad brindan una excelente plataforma para el cumplimiento de los requisitos funcionales y no funcionales del sistema.

A un alto nivel de abstracción podemos desglosar la calidad en los siguientes elementos:

·         Funcionalidad: Es la capacidad del software de cumplir con los requisitos definidos.

·         Fiabilidad: Es la capacidad del sistema para mantenerse en las mismas condiciones de rendimiento sin importar la hora o en lugar desde donde se accede.

·         Usabilidad: Podemos interpretarlo como la amigabilidad y comodidad del software, este elemento se determina respecto a la experiencia del usuario.

·         Portabilidad: Es la capacidad de adaptabilidad del sistema cuando se cambia de contexto, aquí juega un papel muy importante la compatibilidad, la sencillez en la implementación y una planificación para escalabilidad adecuada.


·         Mantenibilidad: Es el esfuerzo que se necesita hacer para realizar cambios necesarios al sistema, entre menor sea es mucho mejor, y preferiblemente automatizado.

·         Eficiencia: Aquí es muy importante el manejo de los recursos, ya que un mal manejo de ellos afectará definitivamente a uno o varios de los elementos anteriores, también se debe considerar la usabilidad en todo tipo de dispositivos que el usuario podría disponer para usar el sistema.

En vista a lo anterior el estándar ISO 14598 nos da a conocer tres aproximaciones para conocer la calidad de un producto:
·         Calidad interna: Se refiere a la calidad de organización y estética del código, lo cual brinda mayor facilidad para interpretar el código para cualquier programador.

·         Calidad externa: Aquí se evalúa el código en acción.


·         Calidad en uso:  Se mide por el grado por el cual el software está realizado en función de las necesidades del usuario en el entorno de trabajo para el que fue construido.
Es preciso hacer un mayor énfasis en la usabilidad, ya que de ella depende la satisfacción del usuario, porque es el atributo más visible en una aplicación web, y lo más curioso es que este elemento también da a conocer la fiabilidad, seguridad y productividad al usuario, que generalmente es una característica interna del sistema.


PRUEBAS WEB
A continuación, detallaremos las pruebas básicas correspondientes a cada componente importante de los sistemas web:

Prueba de funcionalidad
Consiste en probar todos los enlaces de la página, las cookies, la conexión a la base de Datos, etc…

·         Verificación de los enlaces:
o   Enlaces externos.
o   Enlaces internos.
o   Redirección de los enlaces externos a la página correspondiente.
o   Verificar enlaces para envío de emails.
o   Verificar la inexistencia de páginas aisladas.
o   Verificar la ausencia de enlaces rotos.




·         Verificación de los formularios en todas las páginas:
Los formularios son prácticamente la parte más importante del sistema ya que por medio de ella se intercambia información con el usuario, por tanto, debemos tener presente los siguientes puntos:
·         Validación para cada campo.
·         Valores por defecto en cada campo.
·         Entradas equivocadas o no correspondientes en el formulario.

·         Pruebas de cookies:
Las cookies son archivos pequeños almacenados en la computadora del usuario, básicamente estos archivos mantienen la sesión iniciada, es recomendable probar el sistema habilitando y deshabilitando las cookies en el navegador. Se debe probar si las cookies están encriptadas, también es importante saber reconocer el estado del usuario cuando este cierra la sesión, lo más adecuado sería eliminar las cookies.

·         Validar con HTML/CSS
Para optimizar la página web se deben hacer las validaciones a nivel de sintaxis con html y css.


·         Pruebas a la base de datos
La consistencia de la base de datos también es muy importante en las aplicaciones web. Debemos comprobar la integridad y posibles errores a la hora de añadir, modificar y eliminar datos de los formularios o datos pertenecientes a otras funcionalidades del sistema.

Pruebas de Usabilidad
·         Navegación:
La navegación es la manera en la que el usuario se conduce en las diferentes páginas del sitio, tomando en cuenta los diversos controles que se pueden emplear, por ejemplo: botones, cajas e imágenes que servirán de enlaces en las páginas internas o externas. En las pruebas respecto a la navegación se debe considerar
·         Facilidad de uso.
·         Instrucciones claras.
·         Instrucciones precisas y específicas.
·         Menú principal en todas las páginas.
·         Todo el sitio debe ser lo suficientemente consistente.

·         Contenido de la página:
El contenido mostrado en las páginas debe estar presentado de manera fácil de entender. Se debe considerar escoger los colores adecuados, también el tamaño del texto, las imágenes y la distribución de los elementos.

·         Información de ayuda:
Aquí va incluida la opción de búsqueda, el mapa del sitio. Se debe procurar validar las búsquedas para presentar al usuario lo que desea encontrar de manera precisa.


Pruebas de Conectividad
La conexión cliente-servidor y la conexión a la base de datos son las interfaces más importantes. Se debe comprobar si la conectividad al servidor no presenta algún error, en caso de que si presente un error se debe capturar y analizar para el mantenimiento que conllevaría realizar. Ya que un error de conectividad puede causarse por muchas razones.


Pruebas de Compatibilidad
La compatibilidad del sitio web es un aspecto muy importante, que se debería poner a prueba tomando en cuenta los siguientes aspectos:

·         Compatibilidad de los navegadores:
Se sabe que hoy en día muchas aplicaciones web dependen en gran manera de un navegador determinado, ya que cada uno de los navegadores tiene configuraciones diferentes, las cuales deben ser compatibles con nuestra página web. Se debe considerar probar la aplicación web en diferentes navegadores como: Interner Explorer, Firefox, NetScape, AOL, Opera, Chrome, en sus diferentes versiones.

·         Compatibilidad en diferentes sistemas operativos:
Algunas funcionalidades de nuestra aplicación web no podrían funcionar en todos los sistemas operativos. Es preciso mencionar tecnologías de diseño gráfico, conexión a diferentes API’s no disponibles en todos los sistemas operativos. Por tanto es importante probar nuestra app en diferentes sistemas operativos como Windows, unix, MAC, Linux, Solaris en sus diferentes versiones para cada uno.


·         Opciones de impresión:
Debemos prestar atención que todas las fuentes están disponibles, la alineación, los gráficos de la página, etc. También es importante ajustar la impresión al tipo de papel que el usuario desea imprimir.

Pruebas de Rendimiento
En la prueba de carga se utiliza en diferentes conexiones de internet para acceder a la misma página. Lo importante es registrar los tiempos de carga, y saber cómo el sitio maneja las solicitudes simultáneas al servidor y a la base de datos.
En la prueba de estrés generalmente se prueba el sistema cuando este llega a su límite, el propósito es registrar el comportamiento de la página cuando esta se encuentra en estado de estrés y cómo se recupera de este estado. También es importante testearla en diferente tipo de hardware para conocer diferentes errores que pueden surgir.

Pruebas de Seguridad
En seguida nombraremos algunos casos importantes a considerar a la hora de comprobar la seguridad de nuestro sitio:
·         Evitar el acceso a ciertas páginas sin antes haber accedido al login.
·         Validación en el login, evitando inyecciones SQL manuales.
·         El directorio de la página web no debe ser accedido por el navegador.
·         Aplicar autómatas CAPTCHA.
·         Probar las medidas del certificado de seguridad https://
·         Comprobar y registrar todas las transacciones y sus errores.

Herramientas para Pruebas
·         Wireshark: Es un analizador de tráfico web, también utilizado para detectar vulnerabilidades en la red.
·         Jmeter: Es un proyecto de apache caracterizado por hacer pruebas de desempeño en variedad de servicios.
·         Sonarqube: Nos permite analizar la organización de nuestro código, con soporte de más de 20 lenguajes de programación.
·         Beyond Compare: Nos permite comparar distintos archivos binarios que se utilizan como contenido en nuestro sitio web.


      CONCLUSIONES
                                I.            Las características que definen la calidad de un producto o servicio web deben establecerse como requerimientos no funcionales ya que ellos proveen la plataforma para que el software cumpla con los requisitos funcionales.
                             II.            Las pruebas deben acompañar en todo el proceso de desarrollo del proyecto para reducir los bugs, aunque jamás estaremos cien por ciento seguros tener todo el funcionamiento perfecto.
                          III.            Las pruebas deben ser exhaustivas en cada componente atómico ya que un problema en un lugar desencadena más errores debido a que los proyectos web integran muchas tecnologías y piezas necesarias para su correcto funcionamiento.

      AGRADECIMIENTOS
                                I.            A la Universidad Nacional Autónoma de Honduras por brindarnos la oportunidad de la educación, la cual nos permite escalar en el ámbito profesional. 
                             II.            A nuestros padres que nos han apoyado, tanto económicamente para que el sueño de poder alcanzar un título en título e integrarnos en la sociedad para aportar ideas valiosas que puedan desarrollar nuestro país.

      REFERENCIAS
                             I.               Macario Polo Usaola, Automatización y gestión de pruebas de software, http://alarcos.esi.uclm.es/per/fruiz/curs/santander/mpolo-pruebas.pdf
                          II.               Carlos D. Gonzales (2016), Evaluación de Calidad Web. http://www.usabilidadweb.com.ar/metodos_eval_calidad_web.php
                       III.               Vijay (2016), How can a Web site be tested? http://www.softwaretestinghelp.com/how-can-a-web-site-be-tested/
                       IV.               Vijay (2016), Web Testing: A Complete guide about testing web applications. http://www.softwaretestinghelp.com/web-application-testing/
                          V.               Paulina Aillón, (2011), Pruebas de Aplicaciones Web.  http://es.slideshare.net/paulinaaillon/pruebas-de-aplicaciones-web
                       VI.               Testeando Software (2015), Herramientas fundamentales para pruebas. http://testeandosoftware.com/10-herramientas-para-pruebas-de-software-ii/