GA9-220501096-AA1-EV01
Taller sobre codificación de módulos del software
Nathan Ospino Hernández, Jesús Sánchez y José Restrepo
Servicio Nacional de Aprendizaje (SENA)
Análisis y desarrollo de Software (ADSO)
Instructor: Jairo Antonio Muñoz Arango
Colombia
Abril de 2024
Introducción
En el ámbito del desarrollo de software, la calidad del producto final es un aspecto
fundamental que influye directamente en su éxito y aceptación por parte de los usuarios. Una de
las prácticas indispensables para garantizar esta calidad es la realización de pruebas de software.
Estas pruebas son procesos sistemáticos diseñados para identificar defectos o errores en el
software antes de su implementación, con el fin de asegurar su correcto funcionamiento y
cumplimiento de los requisitos establecidos.
En este contexto, el presente trabajo tiene como objetivo abordar diversos aspectos
relacionados con las pruebas de software. Se explorarán los diferentes tipos de pruebas
existentes, detallando sus características y beneficios particulares. Además, se analizará qué tipos
de pruebas son más adecuados para el proyecto de software en desarrollo, considerando sus
requerimientos y objetivos específicos.
¿Qué tipos de pruebas de software existen?
Pruebas unitarias: Las pruebas unitarias son de muy bajo nivel y se realizan cerca de la
fuente de la aplicación. Consisten en probar métodos y funciones individuales de las
clases, componentes o módulos que usa tu software. En general, las pruebas unitarias son
bastante baratas de automatizar y se pueden ejecutar rápidamente mediante un servidor de
integración continua.
Pruebas de integración: Las pruebas de integración verifican que los distintos módulos
o servicios utilizados por tu aplicación funcionan bien en conjunto. Por ejemplo, se puede
probar la interacción con la base de datos o asegurarse de que los microservicios
funcionan bien en conjunto y según lo esperado. Estos tipos de pruebas son más costosos
de ejecutar, ya que requieren que varias partes de la aplicación estén en marcha.
Pruebas funcionales: Las pruebas funcionales se centran en los requisitos empresariales
de una aplicación. Solo verifican el resultado de una acción y no comprueban los estados
intermedios del sistema al realizar dicha acción.
A veces, se confunden las pruebas de integración con las funcionales, ya que ambas
requieren que varios componentes interactúen entre sí. La diferencia es que una prueba de
integración puede simplemente verificar que puedes hacer consultas en la base de datos,
mientras que una prueba funcional esperaría obtener un valor específico desde la base de
datos, según dicten los requisitos del producto.
Pruebas de extremo a extremo: Las pruebas integrales replican el comportamiento de
un usuario con el software en un entorno de aplicación completo. Además, verifican que
diversos flujos de usuario funcionen según lo previsto, y pueden ser tan sencillos como
cargar una página web o iniciar sesión, o mucho más complejos, como la verificación de
notificaciones de correo electrónico, pagos en línea, etc.
Pruebas de aceptación: Las pruebas de aceptación son pruebas formales que verifican si
un sistema satisface los requisitos empresariales. Requieren que se esté ejecutando toda la
aplicación durante las pruebas y se centran en replicar las conductas de los usuarios. Sin
embargo, también pueden ir más allá y medir el rendimiento del sistema y rechazar
cambios si no se han cumplido determinados objetivos.
Pruebas de rendimiento: Las pruebas de rendimiento evalúan el rendimiento de un
sistema con una carga de trabajo determinada. Ayudan a medir la fiabilidad, la velocidad,
la escalabilidad y la capacidad de respuesta de una aplicación. Por ejemplo, una prueba
de rendimiento puede analizar los tiempos de respuesta al ejecutar un gran número de
solicitudes, o cómo se comporta el sistema con una cantidad significativa de datos. Puede
determinar si una aplicación cumple con los requisitos de rendimiento, localizar cuellos
de botella, medir la estabilidad durante los picos de tráfico y mucho más.
Pruebas de humo: Las pruebas de humo son pruebas básicas que sirven para comprobar
el funcionamiento básico de la aplicación. Están concebidas para ejecutarse rápidamente,
y su objetivo es ofrecerte la seguridad de que las principales funciones de tu sistema
funcionan según lo previsto.
¿Qué tipo de prueba se adapta mejor a nuestro proyecto Sadie?
Consideramos que las pruebas de rendimiento son especialmente relevantes y óptimas
para realizarlas a un proyecto basado en una plataforma educativa, como lo es el nuestro. Las
razones son las siguientes:
Escalabilidad: Una plataforma educativa debe ser capaz de manejar múltiples usuarios
simultáneos, ya que puede experimentar picos de tráfico durante períodos de alta
demanda, como inscripciones, exámenes o eventos importantes. Las pruebas de
rendimiento evalúan cómo responde la plataforma ante diferentes cargas de usuarios,
permitiendo identificar cuellos de botella y optimizar su capacidad para escalar conforme
aumenta la demanda.
Tiempo de respuesta: Los usuarios de una plataforma educativa esperan una experiencia
fluida y rápida al acceder a contenido, interactuar con la interfaz y realizar actividades.
Las pruebas de rendimiento ayudan a medir el tiempo de respuesta del sistema ante
diversas acciones, garantizando que se cumplan los tiempos de carga y procesamiento
necesarios para una experiencia de usuario satisfactoria.
Disponibilidad y estabilidad: La disponibilidad y estabilidad del sistema son críticas
para una plataforma educativa, ya que los usuarios dependen de ella para acceder a
recursos, realizar actividades y comunicarse con profesores y compañeros. Las pruebas
de rendimiento permiten identificar posibles puntos de fallo y evaluar la capacidad del
sistema para mantenerse estable y disponible incluso bajo condiciones adversas, como
picos de tráfico o carga inesperada.
Optimización de recursos: Las pruebas de rendimiento ayudan a identificar el uso
eficiente de recursos del sistema, como CPU, memoria y ancho de banda de red. Esto es
crucial para garantizar que la plataforma educativa pueda funcionar de manera eficaz y
rentable, minimizando costos operativos y maximizando la utilización de recursos
disponibles.
Experiencia del usuario: Una plataforma educativa exitosa debe ofrecer una experiencia
de usuario satisfactoria, que promueva la participación, el compromiso y el aprendizaje.
Las pruebas de rendimiento contribuyen a mejorar la experiencia del usuario al garantizar
un rendimiento óptimo del sistema, reduciendo tiempos de espera y asegurando una
respuesta rápida y consistente en todas las interacciones.
Ejemplo práctico
En este caso haremos una prueba de sistema, para ser más específicos la prueba de
rendimiento usando la herramienta Apache JMeter más específicamente 5.6.3, la cual requiere
Java 8 en adelante. Dentro de las pruebas de rendimiento encontramos prueba de estrés y de
carga.
Para empezar, hay que saber lo que es Jmeter.
¿Qué es Jmeter?
Es una aplicación de Apache originalmente destinada al testing no funcional, más
concretamente para las pruebas de rendimiento, la cual ha evolucionado hasta convertirse en una
aplicación completa y poder usarse en nuestros test funcionales.
Protocolos soportados
Una de sus ventajas es los múltiples protocolos que soporta:
Nosotros nos vamos a centrar en 1, el cuál es HTTP/HTTPS.
Ventajas
Desventajas
En resumen,
PROCESO PARA REALIZAR LA PRUEBA A LA PÁGINA ESCOLA
Tipo de Prueba Prueba de rendimiento
Nombre de la Prueba Prueba de Carga y Estrés con
Apache JMeter
descripción de la Prueba Esta prueba tiene como objetivo
evaluar el rendimiento del sistema bajo
condiciones de carga simulada,
midiendo tiempos de respuesta y
capacidad de procesamiento.
Ambiente o condiciones previas - Instalación previa de Apache
y necesarias para su ejecución. JMeter y Java 8 o superior en la
máquina de pruebas.
- Acceso a la red local o al
entorno de prueba donde está
alojada la aplicación Escola
Herramientas y metodología - Herramienta: Apache JMeter
utilizada. 5.6.3
- Metodología: Simulación de
escenarios de carga y estrés
utilizando Apache JMeter.
Proceso para realizar una prueba de rendimiento a nuestra página web
1. Configuración del Entorno: Instalar Apache JMeter y asegurarse de tener Java
instalado.
2. Configuración del Plan de Prueba: Configurar el número de usuarios virtuales,
el tiempo de ejecución y las solicitudes por segundo en Apache JMeter.
a. Para esto abrimos Jmeter y agregamos un nuevo grupo de hilos
b. Asignamos la cantidad de usuarios, en que tiempo queremos que mande
cada usuario y la cantidad de veces que se va a repetir el grupo de
usuarios.
c. Luego creamos un sampler para realizar las pruebas a la página web
d. Para este caso, dentro del sampler HTTP Request elegimos:
i. El tipo de protocolo (HTTP/HTTPS)
ii. La dirección IP
iii. El método
iv. Y el Path
También están los apartados de body de la request para el
caso de un Post
e. Luego elegimos unos listener para visualizar las pruebas
3. Ejecución de la Prueba: Iniciar la prueba en Apache JMeter para simular la
carga en la aplicación FlyEase Manager.
4. Monitorización del Rendimiento: Observar y analizar los resultados obtenidos
durante la ejecución de la prueba, incluyendo tiempos de respuesta y
rendimiento del sistema.
Segunda prueba (saltarse el proceso de configuracion y nos vamos directamente a
los resultados de la prueba de rendimiento)
Luego se realizó una prueba al login como tal, ya no solo el entrar a la pagina sino
también la acción de loguearse
Login es la pagina de loguear como tal
Athentication es el proceso de ingresar credenciales y loqguerase
E index es la página que carga después de loguearse correctamente
Si se procesaron 1000 hilos con un período de ramp-up de 1 segundo y el tiempo
promedio de respuesta de todas las muestras fue de 19938 milisegundos (aproximadamente
19.938 segundos), esto sugiere que el servidor está experimentando una carga considerable y que
el tiempo de respuesta promedio es relativamente alto en relación con el número de hilos
procesados.
El período de ramp-up de 1 segundo significa que Apache JMeter introducirá
gradualmente los hilos a lo largo de 1 segundo antes de alcanzar el pico de 1000 hilos. Esto
implica que la carga en el servidor aumentó rápidamente durante ese primer segundo y se
mantuvo alta durante el resto de la prueba.
El tiempo de respuesta promedio de aproximadamente 19.938 segundos indica que las
solicitudes enviadas al servidor están experimentando un procesamiento lento o hay
posiblemente cuellos de botella en el sistema que están causando retrasos en el tiempo de
respuesta.
Basándonos en la información proporcionada, podemos extraer varias conclusiones:
Resiliencia del sistema: A pesar de los tiempos de respuesta lentos, el sistema mostró una
capacidad considerable para manejar una carga significativa sin experimentar fallos graves. Esto
sugiere que el sistema es resistente y puede mantener su funcionalidad básica incluso bajo
condiciones adversas.
Tolerancia a la carga: La falta de fallos durante la prueba indica que el sistema tiene una
cierta capacidad de tolerancia a la carga. Aunque los tiempos de respuesta pueden ser lentos, el
sistema sigue siendo capaz de procesar las solicitudes de manera efectiva y producir resultados
correctos.
Optimización potencial: Los tiempos de respuesta lentos podrían indicar áreas de la
aplicación que podrían optimizarse para mejorar el rendimiento. Realizar un análisis detallado de
rendimiento y pruebas adicionales podría ayudar a identificar áreas específicas de mejora para
acelerar los tiempos de respuesta y mejorar la experiencia del usuario.
Experiencia del usuario: Aunque el sistema pudo manejar la carga y producir resultados
correctos, los tiempos de respuesta lentos podrían afectar la experiencia del usuario. Es
importante considerar la optimización del rendimiento no solo para evitar fallos, sino también
para garantizar una experiencia fluida y satisfactoria para los usuarios.
Escalabilidad del sistema: Es importante considerar cómo el sistema manejará el aumento
en el número de usuarios concurrentes. Realizar pruebas de rendimiento como la que realizaste
proporciona información valiosa sobre la capacidad del sistema para escalar y manejar una
mayor carga de usuarios.
Conclusión
Para resumir, hemos cubierto dos aspectos fundamentales en el viaje del desarrollo
colaborativo. En primer lugar, nos adentramos en el proceso de creación y ajuste de una cuenta
en GitHub, el paso más importante para trabajar juntos en proyectos de software. Desde el
primer clic hasta personalizar tu perfil.
En segundo lugar, nos sumergimos en la instalación de Git, la herramienta que potencia la
magia de GitHub. Con Git en tu kit de herramientas, estás preparado para manejar repositorios
con facilidad y contribuir de manera activa a proyectos colaborativos.