Material de Lectura QA para Principiante
Material de Lectura QA para Principiante
Unidad 1
El objetivo principal del testing es garantizar que el software funcione como se espera y
que no tenga errores que puedan afectar su rendimiento y/o seguridad. Esto incluye
probar tanto la funcionalidad como el comportamiento del software en diferentes
entornos y situaciones. El testing también ayuda a identificar y corregir errores,
mejorando así la calidad del software.
Pero, ¿cómo determina que está siguiendo la estrategia correcta para las pruebas?
Para eso, debe apegarse a algunos principios básicos de prueba.
7 principios de las pruebas de software:
2- Agrupación de defectos
Agrupación de defectos que establece que una pequeña cantidad de módulos contiene
la mayoría de los defectos detectados. Esta es la aplicación del Principio de Pareto a las
pruebas de software: aproximadamente el 80% de los problemas se encuentran en el
20% de los módulos.
Por experiencia, puede identificar tales módulos riesgosos. Pero este enfoque tiene sus
propios problemas.
Si las mismas pruebas se repiten una y otra vez, eventualmente los mismos casos de
prueba ya no encontrarán nuevos errores.
3- Paradoja de los pesticidas
El uso repetitivo de la misma mezcla de pesticidas para erradicar insectos durante la
agricultura conducirá con el tiempo a que los insectos desarrollen resistencia al
pesticida. Lo mismo se aplica a las pruebas de software. Si se realiza el mismo conjunto
de pruebas repetitivas, el método será inútil para descubrir nuevos defectos.
Para superar esto, los casos de prueba deben revisarse regularmente, agregando casos
de prueba nuevos y diferentes para ayudar a encontrar más defectos.
Debe buscar continuamente mejorar los métodos existentes para que las pruebas sean
más efectivas. Pero incluso después de todo este sudor y trabajo duro en las pruebas,
nunca podrá afirmar que su producto está libre de errores.
6- Pruebas tempranas
Pruebas tempranas: las pruebas deben comenzar lo antes posible en el ciclo de vida del
desarrollo de software. Para que cualquier defecto en la fase de requisitos o diseño se
capture en etapas tempranas. Es mucho más económico corregir un defecto en las
primeras etapas de la prueba, en el momento en que se definen los requisitos.
7- Las pruebas dependen del contexto
Todos los software desarrollados no son idénticos. Puede utilizar un enfoque,
metodologías, técnicas y tipos de pruebas diferentes según el tipo de aplicación. Por
ejemplo, probar un sistema para una pequeña empresa, no será lo mismo que probar el
sistema de un cajero automático, o para una empresa que solicita el uso de la
aplicación para millones de usuarios.
Es falso pensar que los principios de prueba no son necesarios en la práctica. Estos
principios son fundamentales para crear una estrategia de prueba efectiva y para
desarrollar casos de prueba que detecten errores. Aprender estos principios es como
aprender a conducir: al principio prestamos atención a todos los detalles, pero con la
experiencia se vuelven naturales. Los probadores experimentados aplican estos
principios sin siquiera pensar en ellos, lo que demuestra que son esenciales en la
práctica. Por lo tanto, no hay verdad en el mito de que los principios de prueba no se
utilizan en la práctica.
La calidad, por su parte, es un concepto más amplio que abarca muchos aspectos
diferentes del software, incluyendo la usabilidad, la confiabilidad, la escalabilidad, la
seguridad, la eficiencia, entre otros. El testing es solo una parte del proceso de
aseguramiento de la calidad, aunque es una parte importante y necesaria.
Muchas personas confunden el Plan de Calidad con el Test Plan, pero el Plan de
Calidad va más allá de solo pruebas y se enfoca en cómo se cumplirán los estándares
de calidad del proyecto y producto. El Control de Calidad se enfoca en medir el
rendimiento del producto contra los estándares establecidos, mientras que el
Aseguramiento de la Calidad se enfoca en controlar los procesos utilizados para
generar los entregables.
Es esencial para garantizar la entrega de un producto de calidad que cumpla con las
expectativas del cliente y los requisitos del proyecto. Se debe realizar un estudio
profundo de las características y envergadura del proyecto, de manera que pueda
determinar cuáles son los tipos y niveles de pruebas que son necesarios para llevar a
cabo una evaluación efectiva.
¿Qué es un error?
Para dar una definición precisa de que es un error, debemos diferenciar el concepto con
otras palabras que parecen similares pero tienen otro significado: fallo y defecto.
Un error es una equivocación cometida por una persona, que introduce un defecto o
problema en el software. Este defecto puede causar un fallo en el sistema cuando se
ejecuta en ciertas circunstancias.
Por si estos conceptos no quedan claros, vamos a explicarlos mejor.
Un error es una equivocación que comete la persona, ya sea en el código o en alguna
otra parte del proceso.
Y si ese fragmento de código que contiene un BUG se ejecuta, produce una Falla
Ejemplo práctico:
Se le pide a un desarrollador que construya un sitio donde puedan acceder personas de
18 años o mayores a esa edad y él escribe lo siguiente:
Figura 4: Ejemplo de error . Fuente: Fragmento de código realizado por autor en Visual Studio Code
Unidad 2
Rentabilidad: Las pruebas de software pueden ayudar a ahorrar dinero a largo plazo al
detectar errores y problemas temprano en el proceso de desarrollo, lo que significa que
cuesta menos corregirlos.
Seguridad: Las pruebas de software pueden mejorar la seguridad del producto final al
identificar y eliminar riesgos y problemas antes de que el producto se lance al mercado.
Calidad del producto: Las pruebas de software pueden mejorar la calidad del producto
final al detectar y corregir errores y problemas antes de que lleguen a los clientes.
Satisfacción del cliente: Las pruebas de UI/UX pueden mejorar la experiencia del
usuario y, por lo tanto, aumentar la satisfacción del cliente con el producto final.
En el contexto del testing de software, por lo general, las pruebas se clasifican en tres
categorías.
Pruebas Funcionales:
Las pruebas funcionales están diseñadas para verificar si el software se comporta de
acuerdo a lo esperado y cumple con los requisitos de funcionalidad. Estas pruebas se
realizan para comprobar que el software realiza las funciones para las que ha sido
diseñado de manera correcta y sin errores. Algunas de las técnicas utilizadas para
realizar pruebas funcionales incluyen:
Pruebas de unidad: se prueban los componentes individuales del software para
asegurarse de que funcionan correctamente.
Pruebas de integración: se prueban los diferentes módulos del software en conjunto
para asegurarse de que funcionan de manera coordinada y sin errores.
Pruebas de aceptación: se realizan pruebas para verificar que el software cumple con
los requisitos de funcionalidad y se comporta de acuerdo a lo esperado por el cliente.
Estos conceptos, están explicados de manera más detallada en los párrafos siguientes.
Pruebas No Funcionales:
Las pruebas no funcionales están diseñadas para evaluar aspectos del software que no
están relacionados con su funcionalidad. Estas pruebas se realizan para evaluar la
calidad del software en términos de aspectos como el rendimiento, la escalabilidad, la
seguridad y la usabilidad. Algunas de las técnicas utilizadas para realizar pruebas no
funcionales incluyen:
Pruebas de rendimiento: se realizan para evaluar el rendimiento del software en
términos de velocidad, capacidad de procesamiento y uso de recursos del sistema.
Pruebas de seguridad: se realizan para evaluar la seguridad del software en términos
de vulnerabilidades, ataques y medidas de protección implementadas.
Pruebas de usabilidad: se realizan para evaluar la facilidad de uso del software y la
satisfacción del usuario.
Pruebas de compatibilidad: se realizan para evaluar la compatibilidad del software con
diferentes sistemas operativos, navegadores y dispositivos.
Mantenimiento:
Las pruebas de mantenimiento en el testing de software son esenciales para garantizar
que el software funcione correctamente después de las actualizaciones, correcciones y
mejoras en el código fuente. Se realizan después de la fase de desarrollo y pruebas
iniciales y antes de la entrega del software.
Estas pruebas tienen como objetivo asegurarse de que las nuevas actualizaciones o
cambios no introduzcan errores o problemas adicionales en el software existente.
También incluyen la actualización de los casos de prueba existentes para asegurarse de
que sigan siendo efectivos después de los cambios realizados.
Entre ellas podemos mencionar, las pruebas de regresión, que como acabamos de
describir, son una técnica que se centra en asegurar que las funcionalidades existentes
no se hayan visto afectadas después de cambios en el software.
Pruebas Manuales
Las pruebas manuales se refieren a la realización de pruebas de software sin la ayuda
de herramientas automatizadas. Es decir, se llevan a cabo mediante la interacción
humana con el software, simulando el comportamiento de un usuario real en diferentes
escenarios y comprobando si el software funciona según lo esperado.
Tipos de pruebas
También llamadas pruebas de componentes, o pruebas de módulos, se centran en
probar componentes individuales que se pueden probar por separado. Los objetivos de
las pruebas de componentes incluyen:
Encontrar defectos en el componente.
Garantizar que el código y las estructuras de datos funcionen según lo previsto y
especificado
Identificación de defectos y fallas típicos
Verificar que se cumplan las especificaciones del componente
Reduciendo el riesgo
Generando confianza en la calidad del componente
Estas pruebas se centran en probar la funcionalidad de una unidad de código aislada,
como una clase o un método. Las pruebas unitarias suelen ser escritas por el propio
desarrollador y se ejecutan a menudo durante el proceso de desarrollo para detectar y
corregir errores temprano.
Considere el desarrollo basado en pruebas (TDD). Es altamente iterativo y se basa en
ciclos de desarrollo de casos de prueba automatizados, luego compila e integra
pequeñas piezas de código, luego ejecuta las pruebas de componentes, corrige
cualquier problema y refactoriza el código. Este proceso continúa hasta que el
componente se haya construido por completo y todas las pruebas del componente
hayan pasado.
En estas pruebas se pueden distinguir dos tipos principales: positivas y negativas.
En las pruebas unitarias positivas, se prueban casos en los que se espera que la unidad
de código funcione correctamente. Por ejemplo, para un caso de prueba positivo, se
podría probar la función sumando dos números enteros pequeños y comprobando que
el resultado es la suma correcta. Luego, se podrían probar combinaciones de números
más grandes, números negativos y cero, asegurándose de que la función produzca el
resultado esperado para cada caso. Además, se deben incluir pruebas para casos límite
como el valor mínimo y máximo que puede tomar un entero.
Por otro lado, en las pruebas unitarias negativas, se prueban casos en los que se
espera que la unidad de código falle. Esto se hace para asegurar que la unidad de
código maneje adecuadamente situaciones inesperadas o errores. Por ejemplo, se
podrían realizar pruebas con contraseñas que no cumplen con los requisitos mínimos,
como una contraseña que sea demasiado corta o no contenga caracteres especiales.
También se pueden realizar pruebas con contraseñas que ya hayan sido utilizadas
anteriormente, ya que esto debería ser invalidado por el sistema.
Verificación
También conocidas como pruebas estáticas, no implican la ejecución del software, sino
que se centran en revisar el código y la documentación para identificar posibles errores
o problemas. Algunos ejemplos de pruebas de verificación incluyen:
Revisiones de código: los desarrolladores y otros miembros del equipo revisan el código
para detectar errores, problemas de rendimiento y otros problemas.
Análisis de estática de código: se utilizan herramientas automatizadas para revisar el
código fuente en busca de posibles problemas, como variables no utilizadas, código
muerto o problemas de seguridad.
Inspecciones de documentos: se realizan revisiones de documentos, manuales de
usuario, manuales técnicos y otros documentos para garantizar que sean precisos y
claros.
Es importante tener en cuenta que las pruebas de verificación no reemplazan
completamente las pruebas de validación, ya que no pueden garantizar que el software
funcione correctamente en todas las situaciones posibles. Sin embargo, son una parte
importante del proceso de pruebas y pueden ayudar a identificar problemas antes de
que el software se pruebe en un entorno de prueba completo.
Sistema
Estas pruebas se centran en probar el comportamiento y capacidades del sistema
completo y se realizan después de las pruebas de integración. Las pruebas de sistema
suelen probar cómo el sistema se comporta en situaciones reales y pueden incluir
pruebas de rendimiento, pruebas de seguridad, pruebas de usabilidad, considerando
tareas de extremo a extremo y comportamientos no funcionales que pueda exhibir.
Suelen ser realizadas por el equipo de QA y pueden ser automatizadas o manuales.
Los objetivos de las pruebas del sistema son validar que el sistema está completo y
funciona como se espera, generar confianza en la calidad del sistema como un todo,
reducir el riesgo y evitar que los defectos escapen a niveles de prueba o producción
más altos.
Aceptación
Estas pruebas se centran en verificar que el sistema cumple con los requisitos del
cliente y es aceptable para su uso, es decir, para evaluar si un sistema o producto
cumple con el uso previsto y las especificaciones.
Suelen ser realizadas por el cliente o el equipo de QA en nombre del cliente.
Los objetivos de las pruebas de aceptación incluyen establecer la confianza en la
calidad y la integridad del sistema, validar que el sistema funcione y se comporte como
se especifica, y cumplir con los requisitos legales o reglamentarios. Los tipos comunes
de pruebas de aceptación incluyen pruebas de aceptación del usuario (UAT), pruebas
de aceptación operativa (OAT), pruebas alfa y beta, y pruebas de aceptación
regulatorias y contractuales. Los probadores pueden usar una variedad de técnicas y
herramientas para realizar pruebas de aceptación, incluidas pruebas de carga, pruebas
de rendimiento, pruebas de copia de seguridad y restauración, y pruebas de
vulnerabilidad.
Hay que enfatizar la importancia de involucrar a los evaluadores desde el principio en el
refinamiento de las historias de los usuarios o en las actividades de pruebas estáticas,
como las revisiones, para reducir la incidencia de falsos positivos y negativos en las
pruebas de aceptación.
Si bien encontrar defectos durante las pruebas de aceptación no siempre es el objetivo
principal, se pueden descubrir defectos durante las pruebas que pueden mejorar la
calidad y la confiabilidad del sistema.
Descripción de pruebas
Performance
O también llamadas pruebas de rendimiento se centran en evaluar la capacidad del
software para cumplir con los requisitos de rendimiento especificados. Es decir, miden la
capacidad del software para responder a una carga de trabajo específica. Estas
pruebas se llevan a cabo para medir la velocidad, escalabilidad, estabilidad y capacidad
del software bajo diferentes cargas de trabajo.
Estas pruebas son útiles para identificar cuellos de botella y áreas de mejora en el
rendimiento del software. También son útiles para predecir cómo se comportará el
software en situaciones de uso en tiempo real.
Seguridad
Las pruebas de seguridad son un tipo de prueba de software que tiene como objetivo
evaluar la capacidad del software para resistir diferentes tipos de ataques, incluyendo
ataques de hackers, virus y malware. Estas pruebas se realizan para garantizar que el
software sea seguro y no pueda ser explotado por atacantes malintencionados.
Interfaz de usuario
Estas pruebas evalúan la usabilidad del software. Se enfocan en la experiencia del
usuario al utilizar el software, la facilidad de uso, la navegación y la apariencia visual.
Se realizan para garantizar que el software tenga una interfaz de usuario intuitiva, fácil
de usar y estéticamente atractiva.
Stress
Las pruebas de estrés son una técnica utilizada en la ingeniería de software para
evaluar el comportamiento del software bajo condiciones extremas de carga. Estas
pruebas buscan detectar los límites del software en cuanto a su capacidad de respuesta
y su capacidad para mantener su funcionamiento estable.
Existen diferentes tipos de pruebas de estrés, como las pruebas de carga, las pruebas
de rendimiento y las pruebas de capacidad. En general, estas pruebas se realizan en
diferentes etapas del ciclo de vida del software, desde las pruebas unitarias hasta las
pruebas de aceptación.Las pruebas de carga simulan la actividad normal del sistema
bajo una carga de trabajo específica y mide cómo el sistema se comporta y responde a
esta carga. Se realizan para determinar la capacidad de un sistema para manejar la
cantidad de usuarios o transacciones que se esperan en condiciones normales.
También se pueden utilizar para identificar cuellos de botella y mejorar el rendimiento
del sistema.Las Pruebas de rendimiento miden la velocidad, capacidad de respuesta y
escalabilidad de un sistema bajo diferentes cargas de trabajo. Se utilizan para evaluar el
rendimiento del sistema en términos de tiempo de respuesta, latencia, velocidad de
transferencia de datos y capacidad de procesamiento. También pueden ayudar a
identificar problemas de red, servidores y hardware, y optimizar la configuración del
sistema para lograr un mejor rendimiento.Las pruebas de capacidad evalúan la
capacidad máxima de un sistema para manejar una carga de trabajo específica. Estas
pruebas se utilizan para identificar los límites del sistema y para determinar cuántos
usuarios o transacciones el sistema puede manejar antes de que se produzcan fallas o
se degrade el rendimiento.También pueden ayudar a identificar problemas de
infraestructura, como la necesidad de más recursos de hardware o software, para
asegurar que el sistema pueda manejar la carga de trabajo esperada.
Las pruebas de estrés son importantes para garantizar la calidad del software y su
capacidad para responder a las demandas de los usuarios en situaciones extremas. Sin
embargo, es importante tener en cuenta que estas pruebas también pueden tener un
impacto en la infraestructura del software, por lo que deben ser planificadas
cuidadosamente y realizadas por profesionales con experiencia en este tipo de pruebas.
Volumen
Las pruebas de volumen son una técnica de pruebas de carga que se enfoca en evaluar
la capacidad del software para manejar grandes cantidades de datos y transacciones.
Estas pruebas se realizan para simular situaciones de alta demanda, donde el sistema
debe procesar grandes cantidades de datos y transacciones simultáneamente.
Además de evaluar la capacidad del software, las pruebas de volumen también pueden
ayudar a identificar problemas de infraestructura, como la necesidad de más recursos
de hardware o software, para asegurar que el sistema pueda manejar grandes
cantidades de datos y transacciones.
Usabilidad
Las pruebas de usabilidad son una técnica de pruebas de software que se enfoca en
evaluar la facilidad de uso del software y la satisfacción del usuario al utilizarlo. Estas
pruebas se realizan para asegurar que el software sea fácil de usar y que cumpla con
las expectativas de los usuarios.
Durante las pruebas de usabilidad, se evalúan diferentes aspectos del software, como la
facilidad de aprendizaje, la eficiencia de uso, la facilidad de recordar y la satisfacción
general del usuario.
Regresion
Las pruebas de regresión son una técnica de pruebas de software que se enfoca en
asegurarse de que las funcionalidades existentes no se hayan visto afectadas después
de realizar cambios en el software. Estas pruebas son importantes para garantizar que
el software siga funcionando correctamente y que los cambios realizados no hayan
causado problemas en otras partes del sistema.
Durante las pruebas de regresión, se ejecutan una serie de pruebas diseñadas para
evaluar las funcionalidades críticas del software que no deberían haberse visto
afectadas por los cambios recientes.
Las pruebas de humo se ejecutan antes de que se realicen pruebas más detalladas
para asegurarse de que el software esté estable y funcional. Generalmente, las pruebas
de humo se enfocan en verificar la funcionalidad básica del software y se realizan sobre
una versión inicial del software. Estas pruebas no cubren todas las funcionalidades del
software, sino sólo las más importantes y críticas.
Unidad 3
Proceso de Pruebas
El proceso de pruebas en testing se refiere a las diferentes etapas que se siguen para
asegurar que un software cumpla con los requisitos y estándares de calidad esperados.
El proceso de pruebas implica la planificación, diseño, ejecución, monitoreo y reporte de
las pruebas realizadas sobre el software.
Es importante tener en cuenta que el proceso de pruebas puede variar dependiendo del
tipo de software y de los requisitos específicos de cada proyecto.
Análisis de requisitos:
Durante esta fase, el equipo de control de calidad interactúa con diferentes partes
interesadas para comprender los requisitos en detalle y determinar qué requisitos son
comprobables. Los requisitos pueden ser funcionales o no funcionales.
Planificación de pruebas
Implica la determinación de la estrategia del plan de pruebas para el proyecto, la
estimación de los esfuerzos y costos del proyecto, la identificación de los recursos
necesarios y la selección de las herramientas de prueba adecuadas. También se
determinan el entorno de prueba, las limitaciones y el programa de pruebas durante
esta fase.
Ejecución de pruebas
Se realiza la prueba de la compilación del software en función de los planes de prueba y
los casos de prueba preparados. El proceso consiste en la ejecución del script de
prueba, el mantenimiento del script de prueba y la notificación de errores. Si se informan
errores, se devuelve al equipo de desarrollo para su corrección y se realizan nuevas
pruebas.
Los resultados de la evaluación del ciclo de prueba, incluyendo las métricas de prueba,
se documentan en el informe de cierre de prueba. Además, se documentan las
lecciones aprendidas durante el proyecto y se proporciona un análisis de los resultados
de las pruebas, que incluyen la distribución de los defectos por tipo y gravedad.
También se proporciona un informe cualitativo y cuantitativo de la calidad del producto
del trabajo al cliente.
Identificar Funcionalidades
La identificación de funcionalidades es un proceso crucial que implica comprender las
diversas funciones y características que se espera que un software o sistema
proporcione.
Cada técnica puede ser útil por sí misma o en combinación con otras para identificar las
funcionalidades necesarias para un sistema. Depende del equipo de proyecto elegir las
técnicas adecuadas según las necesidades del proyecto y el tiempo y los recursos
disponibles.
El proceso de calidad de software incluye todas las actividades que se llevan a cabo
para asegurar que el software cumpla con los estándares y requisitos de calidad
establecidos. Esto incluye la planificación de calidad, la gestión de calidad, la garantía
de calidad y el control de calidad. En este proceso se definen las políticas y
procedimientos necesarios para garantizar la calidad del software y se realizan
revisiones y auditorías para asegurarse de que se están cumpliendo los estándares de
calidad.
Por otro lado, el proceso de pruebas es una parte importante del proceso de calidad de
software y se enfoca en detectar defectos, errores y sugerir mejoras en el software
antes de su lanzamiento al mercado. El objetivo de las pruebas es identificar y corregir
problemas para garantizar que el software funcione correctamente y cumpla con los
requisitos de calidad.
En resumen, el proceso de calidad de software es un proceso más amplio que incluye el
proceso de pruebas como una de sus partes esenciales.
Escenario de prueba
Un caso de prueba y un escenario de prueba son términos utilizados en la prueba de
software para describir dos conceptos diferentes, aunque relacionados.
Un caso de prueba es una descripción de los pasos que se deben seguir para probar
una funcionalidad específica y los resultados esperados.
Los casos de prueba son útiles porque ayudan a garantizar que cada funcionalidad o
característica del sistema se pruebe adecuadamente.
Por otro lado, un escenario de prueba se define como cualquier funcionalidad que se
puede probar. También se denomina condición de prueba o posibilidad de prueba .
Debe ponerse en el lugar del usuario final y descubrir los escenarios del mundo real y
los casos de uso de la aplicación bajo prueba.
Ahora vamos a los ejemplos para que quede más claro lo explicado hasta aquí:
Ejemplo: Escenario de prueba para la aplicación de comercio electrónico. Link:
https://www.saucedemo.com/
Ahora vamos con un ejemplo de cómo diseñar un caso de prueba para una
funcionalidad de inicio de sesión en un sitio web:
Con este caso de prueba, se puede verificar que la funcionalidad de inicio de sesión en
el sitio web funciona correctamente tanto con entradas válidas como inválidas. Al incluir
una prueba unitaria negativa, el equipo de prueba también puede detectar posibles
errores en la validación de entradas en el sitio web.
Matriz de trazabilidad
Una matriz de trazabilidad es una herramienta de gestión de proyectos que ayuda a
mantener el control de los requisitos del proyecto y a garantizar que se cumplan. Es un
documento que relaciona los requisitos del proyecto con los casos de prueba, la
documentación del usuario final y otros documentos clave para el proyecto. Esto ayuda
a garantizar que todas las partes interesadas del proyecto estén en la misma página y
que se logren los objetivos del proyecto de manera efectiva. La matriz de trazabilidad es
útil para verificar la integridad de las relaciones de muchos a muchos entre los
documentos relacionados y para asegurarse de que no se deje ningún requisito sin
probar.
Es importante tener en cuenta que si los datos de prueba no están bien diseñados,
puede ser que no se prueben todos los escenarios posibles y esto afectaría la calidad
del software. Por lo tanto, es esencial contar con una selección adecuada de datos de
prueba para lograr una prueba exhaustiva y efectiva del software.
Por lo general, los datos de prueba se crean en sincronización con el caso de prueba
para el que se pretende utilizar.
Métricas
Las métricas en el testing se utilizan para medir la calidad y eficacia de los procesos de
pruebas de software. Algunas de las métricas comunes en el testing incluyen:
Figura 8: Gráfico donde se visualiza el porcentaje de casos de pruebas ejecutados, discriminados por aprobados y
fallidos. Fuente: TestCollab.
Unidad 1
DevOps es una metodología o conjunto de prácticas que busca integrar y coordinar los
equipos de desarrollo de software y operaciones de tecnología para mejorar la eficiencia
y velocidad de entrega de software, así como también la calidad y la estabilidad de los
sistemas. El término DevOps es una combinación de "development" (desarrollo) y
"operations" (operaciones), y se enfoca en la colaboración, la comunicación, la
automatización y la medición de resultados para lograr una entrega de software más
rápida, más segura y más confiable. En resumen, DevOps busca unir las áreas de
desarrollo y operaciones de TI, y aplicar principios ágiles para mejorar la entrega de
software y los resultados empresariales.
La agilidad en el testing es una práctica dentro del proceso de desarrollo ágil que se
enfoca en la iteración continua de pruebas y validación de software. Esta práctica se
integra en el proceso SDLC para asegurar la calidad del software a medida que se
desarrolla. La metodología ágil se enfoca en desarrollar el software de manera iterativa,
incremental y evolutiva, dividiendo el producto en piezas más pequeñas y luego
integrándose para su prueba final. Esto permite que los equipos de desarrollo de
software puedan recibir comentarios y realizar ajustes a medida que avanzan en el
proceso de desarrollo. Las metodologías ágiles más populares para el testing son
Scrum, Kanban y XP.
Al incorporar el testing en todas las etapas del ciclo de vida de desarrollo, podemos
aprender cómo los usuarios interactúan con nuestro software y mejorar continuamente
su calidad. En resumen, el testing es una parte integral del enfoque DevOps, en el que
trabajamos en colaboración para crear, entregar y mantener software de alta calidad de
manera rápida y eficiente.
¿Qué está diciendo esta imagen? En el mundo de DevOps, es importante probar cada
etapa del proceso de desarrollo de software. Podemos probar el plan o diseño del
software, lo que implica una exploración exhaustiva de todas las posibles interacciones,
variables y riesgos que pueden surgir. También podemos probar ramas de desarrollo
individuales y estrategias de ramificación, y revisar el código para investigar errores y
verificar si cumple con las expectativas. Las fusiones también deben probarse y
verificarse cuidadosamente para evitar conflictos de combinación y riesgos ocultos de
diferentes integraciones.
Los 10 principios para los Agile Testers son una serie de directrices que ayudan a los
miembros del equipo, no solo a los testers, a trabajar de manera más efectiva en un
entorno ágil. Estos principios son los siguientes:
1. Proporciona un feedback continuo: los testers deben proporcionar
retroalimentación frecuente a los miembros del equipo sobre el progreso del
proyecto, los riesgos y cualquier problema que puedan surgir.
2. Entrega valor al cliente: el equipo debe centrarse en ofrecer valor al cliente en
todo momento y asegurarse de que las pruebas se realicen con ese objetivo en
mente.
3. Permite la comunicación cara a cara: la comunicación directa y efectiva es
esencial para el éxito en un equipo ágil, y los testers deben estar dispuestos a
comunicarse con los miembros del equipo.
4. Ten coraje: los testers deben estar dispuestos a tomar decisiones difíciles y
defender lo que creen que es correcto, incluso si eso significa plantear diferentes
puntos de vista a otros miembros del equipo.
5. Sim: mantener la simplicidad en todo momento y evitar la complejidad
innecesaria.
6. Práctica la mejora continua: siempre hay margen de mejora, y los testers deben
estar dispuestos a aprender de sus errores y trabajar en su crecimiento
profesional.
7. Responde al cambio: en un entorno ágil, los cambios son inevitables, y los
testers deben estar preparados para adaptarse rápidamente a los cambios en
los requisitos y objetivos del proyecto.
8. Auto-organízate: los testers deben ser capaces de gestionar su propio trabajo de
manera efectiva, sin necesidad de supervisión constante. También está
relacionado con la proactividad que requiere la metodología Ágil.
9. Céntrate en la gente: el éxito en un equipo ágil depende en gran medida de las
relaciones interpersonales y los testers deben enfocarse en construir relaciones
positivas con los demás miembros del equipo.
10. ¡Disfruta! Por último, los testers deben recordar que trabajar en un entorno ágil
puede ser divertido y gratificante.
Testing Manifiesto
Creado por Karen Greaves y Samantha Laing, el Testing Manifiesto refleja el
cambio de mentalidad necesario para un enfoque de Agile Testing exitoso.
.
Figura 12: Qué características prevalecen en el Testing Manifiesto.
Fuente: https://valexamp.wordpress.com/2016/10/31/agile-testing-manifesto/
Los valores que se pregonan son:
Es importante aclarar, que al igual que el manifiesto agile la idea es ponderar una
postura sobre la otra, en lugar de eliminar una postura para ser reemplazada por otra.
Planificación de pruebas en contextos ágiles:
Para planificar las pruebas de forma efectiva, un equipo necesita considerar su
contexto. Para entender tu contexto piensa en tres aspectos
PRODUCTO Se refiere al producto o sistema que se está desarrollando y a las necesidades y expectativas
del cliente. Es importante entender el propósito y los objetivos del producto, así como sus
funcionalidades clave y las expectativas del cliente en cuanto a calidad y rendimiento. Con
base en esto, se pueden definir los casos de prueba necesarios para garantizar la calidad del
producto y su capacidad para satisfacer las necesidades del cliente.
Consideraciones del producto:
BDD
BDD (Behavior Driven Development o Desarrollo Guiado por el Comportamiento) es una
metodología de desarrollo de software que se enfoca en la colaboración entre los
diferentes roles involucrados en el proceso de desarrollo y en la creación de una
especificación ejecutable a partir del comportamiento esperado de la aplicación.
Se utiliza un lenguaje de dominio específico (DSL, por sus siglas en inglés) para
describir el comportamiento esperado de la aplicación en términos de escenarios y
ejemplos concretos.
Su sintaxis es:
GIVEN: Precondiciones -> "Dado que"
WHEN: Disparadores -> "Cuando"
THEN: Post Condiciones -> "Entonces"
y se organizan en historias de usuario.
Como cliente, quiero poder agregar productos a mi carrito de compras para poder
comprarlos más tarde.
Un escenario concreto de esta historia de usuario podría ser:
ATDD
ATDD (Acceptance Test-Driven Development) es una forma más genérica de guiar el
desarrollo con ejemplos sin un lenguaje o reglas estrictas.
Es una práctica de desarrollo ágil que se enfoca en definir las pruebas de aceptación
antes de implementar la funcionalidad. La idea es trabajar en colaboración con el equipo
de negocio y el equipo técnico para definir las expectativas de la funcionalidad y
asegurarse de que la solución cumple con los requerimientos y expectativas del
negocio.
Se utilizan pruebas de aceptación para definir las funcionalidades que se van a
implementar y para validar que el software cumple con los requerimientos del negocio.
Estas pruebas se realizan utilizando un lenguaje de negocio entendible por todos los
involucrados en el proyecto, incluyendo a los desarrolladores, analistas y expertos del
negocio.
Se lleva a cabo:
ANTES de Implementar una necesidad todos los miembros del equipo contribuyen para
generar escenarios de cómo se comportará dicha necesidad.
DESPUÉS el equipo convierte esos escenarios en pruebas de aceptación.
El equipo técnico utiliza esta prueba para definir los casos de prueba y validar que la
búsqueda funciona como se espera. En este ejemplo, los casos de prueba podrían
incluir la verificación de que la búsqueda devuelve los resultados correctos y en el orden
correcto, que los resultados son relevantes para la búsqueda realizada y que la
búsqueda funciona correctamente en diferentes navegadores y dispositivos.
SBE
SBE se refiere a "Specification By Example" en inglés, lo que significa "Especificación
por Ejemplo" en español. Es una técnica utilizada en la ingeniería de software para
definir y comunicar los requisitos de un software a través de ejemplos concretos de
cómo debe funcionar el software en diferentes situaciones.
Habilitando la Colaboración
La colaboración dentro del equipo y entre los equipos es una de las piedras angulares
para hacer que los equipos ágiles tengan éxito. Sin embargo, nos encontramos con que
muchos equipos no saben cómo empezar a construir estas relaciones. Te presentamos
algunas prácticas que te pueden ayudar en ello.
La idea es que los tres amigos trabajen juntos desde el principio del ciclo de vida del
software para discutir y definir los requisitos, identificar y abordar posibles problemas de
calidad y asegurarse de que el software entregado cumpla con las expectativas del
cliente. Deben examinar el incremento del producto antes, durante y después del
desarrollo.
La dinámica de los tres amigos fomenta la colaboración temprana y frecuente entre los
diferentes miembros del equipo, lo que ayuda a identificar y solucionar problemas en
una etapa temprana del proceso de desarrollo de software, lo que a su vez ayuda a
reducir el tiempo y los costos asociados con la corrección de errores en etapas
posteriores del proceso de desarrollo. Además, esta práctica también ayuda a mejorar la
calidad y la entrega de software que cumpla con las necesidades del cliente.
2. Identificar los actores clave: Se deben identificar los actores clave que pueden
afectar o ser afectados por el proyecto. Estos actores pueden ser internos o
externos a la organización y pueden incluir clientes, proveedores, reguladores,
etc. WHO
4. Definir los entregables: Una vez que se han identificado los impactos y los
actores clave, se pueden definir las acciones necesarias para alcanzar los
impactos. WHAT.
Un ejemplo es:
Un ejemplo sería:
Figura 19: Ejemplo de Example Mapping. Fuente:
https://www.slideshare.net/JoseNieto1/example-mapping-presentation-125817269
Pruebas Exploratorias
Las pruebas exploratorias son un enfoque de prueba de software que se basa en la
experiencia y habilidad del probador para descubrir y evaluar el software en función de
su comportamiento, usabilidad, calidad y rendimiento. Este enfoque se centra en la
exploración del software de forma creativa y no estructurada, sin seguir un plan
preestablecido, lo que permite descubrir defectos y problemas que podrían no haber
sido detectados con otros métodos de prueba.
Existen varias técnicas de pruebas exploratorias que se pueden utilizar para descubrir
problemas y defectos en el software. Algunas de estas técnicas son:
Existen 2 tipos:
Desarollo
Son los atributos que representan el CÓMO desarrollamos el código e incluyen:
● Mantenibilidad del Código
● Reusabilidad del Código
● Testabilidad del Código
Operacionales
● Desikan, S., & Ramesh, G. (2014). Software testing: Principles and practices. Pearson.
● Kaner, C., Falk, J., & Nguyen, H. Q. (1999). Testing computer software. Wiley.
● Dustin, E., Garrett, T., & Gauf, B. (2003). Effective software testing: 50 specific ways to
improve your testing. Addison-Wesley Professional.
● Pressman, R. S., & Maxim, B. R. (2015). Ingeniería del software: un enfoque práctico.
McGraw-Hill Education.