Testing
Testing
¿Qué es un QA?
Existen dos perfiles muy marcados en el mundo del software, los cuales son el Tester y el
QA. Es de suma importancia saberlos diferenciar bien, debido a que son dos roles
totalmente distintos y cada uno tiene sus respectivas responsabilidades.
Tareas de un Tester
• Diseñar el plan de pruebas.
• Definir los casos de prueba en base a los requisitos funcionales, no funcionales y técnicos.
• Test de integración: Definir las pruebas de Integración que se realizarán.
• Generar datos o lotes de prueba.
• Ejecutar los casos de prueba.
• Realizar la documentación de las pruebas (evidencia).
• Registrar los incidentes encontrados durante la fase de pruebas, así como también realizar
su seguimiento para asegurar su adecuada corrección.
• Pruebas avanzadas (carga, estrés, performance, seguridad, etc)
Tareas de un QA
• Diseño y preparación de la estrategia general de Calidad • Revisión de historias de
usuario con el Product Owner.
• Revisión de criterios de aceptación (a partir de los cuales se genera escenarios de
prueba).
• Identificación dependencias entre las historias de usuario.
• Sugiere mejoras funcionales y de usabilidad.
• Identifica los escenarios y flujos más vitales del negocio.
• Colaboración junto con los stakeholders en las pruebas UAT
• Preparación de ambientes de prueba.
• Seguimiento de releases.
• Automatización de pruebas funcionales (BDD, E2E, etc).
• Creación y aplicación de las métricas de calidad de Software.
• Mas todo lo listado en la lista del Tester.
Metodologías de trabajo
Con el tiempo, las metodologías de trabajo fueron adaptándose a las nuevas exigencias del
mercado.
Cascada
Esta metodología puede verse en bancos o proyectos gubernamentales. Es una
metodología vieja y casi obsoleta, pero entenderla sirve para entender cómo evolucionó en
el tiempo.
Esta metodología se basa en pedirle al cliente todos los requerimientos de la aplicación,
luego se hace el diseño de la misma (mockups, modelo de base de datos, etc)
Cuando ya tenemos todo eso, se desarrolla y se implementa. Finalmente procedemos a
verificarla o testear para ver si funciona bien y se presenta al cliente. En caso de que la
aplicación cumpla con todos los requisitos, ya queda productiva y empieza la etapa de
mantenimiento.
En caso de que contenga errores, nuevamente se deben revisar los requisitos y volver a
empezar desde el principio.
Kanban
En la actualidad se utilizan otras metodologías de trabajo que son ágiles. Entre ellas se
encuentra Kanban.
Kanban es muy utilizada en proyectos pequeños y para implementarla se utiliza un pizarrón
o un tablero.
Este tablero tiene varias columnas y cada una de ellas representa un estado.
Con tarjetas o post it, representamos las tareas a desarrollar.
Cada card o cada post it, se asigna a una persona distinta del equipo.
De esta forma, es fácil saber qué está haciendo cada persona y en qué estado está esa
tarea
Scrum
Scrum es un framework que puede ser aplicado a cualquier tipo de proyecto. Desde la
construcción de un edificio, hasta el desarrollo de un software
Tiene como finalidad entregar al cliente algo utilizable después de cada iteración, con el fin
de poder sacar rápidamente un MVP de un producto y probarlo en el mercado.
Scrum tiene varias ceremonias (reuniones) y cada una de ellas con un objetivo en particular.
En otras palabras: todas las situaciones posibles a las cuales vamos a someter a prueba a
un sistema.
Tip: Tener en cuenta que los resultados esperados o casos negativos también pueden
arrojar error, es un buen hábito a tener en cuenta para planificar escenarios de prueba con
distintas variables.
Si por ejemplo, tengo varios casos de prueba creados que se relacionan con el login de una
aplicación, se crea la suite de “Login”. Cualquier caso nuevo se puede agregar sobre la
marcha a la suite y se puede ejecutar en la medida de lo posible.
Test link es una herramienta para gestionar nuestras pruebas. En la misma vamos a poder
generar nuestras suites, casos de prueba y planes de prueba, como así también priorizar
los casos, asignarlos, colocarle keywords, generar métricas, entre otras funcionalidades.
Creación de un proyecto
1. Ir a “Gestión de Proyectos de Pruebas”
2. Dar click en botón “Crear”
3. Completar los campos: a. Nombre b. Prefijo c. Descripción del proyecto
4. Tildar las funciones avanzadas que se necesiten
5. Configurar la herramienta del “Gestor de Defectos”
6. Indicar si es público y si está activo
Creación de una test suite
1. Ir a “Editar Caso(s) de Prueba”
2. Pararse en la carpeta raiz
3. Ir al engranaje que se encuentra en la parte superior de la pantalla 4. Hacer clic en el
icono con el signo +
5. Completar los campos: a. Nombre de la Suite de Pruebas b. Detalles
6. Click en Guardar
Tipos de Testing
Pruebas Funcionales
Su objetivo se basa en comprobar si las funcionalidades del desarrollo se realizaron
siguiendo las especificaciones y requisitos del cliente, como también las necesidades
iniciales.
Exploratorio:
Primera experiencia que el QA tiene sobre la aplicación, suelen basarse en la experiencia y
conocimientos del ejecutor
Es un testing intuitivo, pero no es aleatorio y no se realizan Test Case
Smoke:
Es un test que se realiza no para encontrar errores pero sí para asegurarnos que las
características más importantes del sistema funcionan como se espera
En otra parte el smoke sirve para validar si el deploy fue realizado correctamente
Si lleva Test Case
Unit Test:
Consiste en probar el correcto funcionamiento de una pieza de código, generalmente una
función. Es realizado por los desarrolladores
Integración:
Una vez probadas las funcionalidades por separado se realizan testeos de integración para
verificar que funcionan bien de forma conjunta. Por otro lado, también sirven para probar la
integración con servicios externos.
Regresión
Se realiza cuando hay cambios en el sistema y sirve para verificar que lo que estaba
funcionando no falle Se ejecuta una selección de pruebas relevantes existentes
Pruebas de Performance
Estas pruebas sirven para medir y optimizar nuestras aplicaciones con el fin de reducir los
tiempos de carga Suelen ir de la mano con las pruebas de Stress
Pruebas de Stress
Es una prueba que se le somete al sistema con la finalidad de identificar cuantas peticiones
se pueden hacer al mismo tiempo
Se realizan con software
● FunkLoad
● FWPTT load testing
● loadUI
● jmeter
Pruebas de Volumen
Las pruebas de volumen tienen como objetivo medir el rendimiento de la base de datos,
insertando datos de manera masiva
Criterios de Aceptación:
Todas las funcionalidades de un sistema deben estar plasmadas en las User Story o
Historias de Usuario. Contienen información sobre todo lo que debe hacer y cómo debe ser
una funcionalidad de la aplicación.
Pruebas Automatizadas
Son pruebas que permiten la optimización de la calidad del software. Pruebas reusables
Bugs y ciclos de vida
Bug Historia
Antes de comenzar definiciones veamos el origen del bug con un poco de historia…
El origen de este término es tan viejo como la programación misma, e incluso hay quienes
afirman que el término “bug” se utilizaba en la “era pre-ordenador”, cuando alguna polilla
atascaba los delicados mecanismos de alguna máquina.
En la informática, en Harvard (1.947) los científicos que se encargaban de la
supercomputadora Mark II vieron que algo no iba bien, Después de revisar la máquina
vieron que la fuente del problema era una polilla que se había colado en el interior y había
causado el mal funcionamiento, Grace Murray Hopper (una licenciada en física y destacada
matemática), que trabajaba programando fue quien hizo el reporte, lo pegó con cinta
adhesiva en la bitácora con la siguiente entrada:
“First actual case of bug being found”, en español “Primer caso real de bug encontrado”
¿Qué es un bug?
Un bug se puede definir como una falla no esperada en el software, pero también se puede
denominar como aquellas características que no satisfacen las necesidades según las
definiciones del usuario
Error
Un error es una acción humana que produce un resultado, puede ser originada por el
desarrollador, por ejemplo en el código o en la lógica de programación, este error puede
originar más de un defecto en el sistema
Defecto
Es la presencia del error en el software, esta imperfección ocasiona resultados no
esperados
Fallo
Es la manifestación física o funcional de un defecto, es decir es detectado durante la
ejecución de pruebas, por ejemplo: al colocar los datos de Login(usuario/contraseña)
correctos el sistema no permite iniciar sesión
Entorno
Se debe indicar en el reporte, en qué ambiente se realizaron las pruebas, como por ejemplo
el ambiente de pruebas del analista QA, credenciales o perfil utilizado (si aplica)
Pasos
Esta es una parte importante donde se debe indicar el paso a paso a seguir para reproducir
el bug detectado por ejemplo: Paso 1 ingresar al link , Paso 2 Ingresar usuario y contraseña,
Paso 3 Dar clic en botón Login
Descripción
Es una descripción detallada de los pasos descritos anteriormente para guiar al
desarrollador a la reproducción del bug
Criterios de aceptación
Es una descripción de los resultados esperados definidos en la historia de usuario. Por
ejemplo: al colocar usuario y contraseña, y dar clic en el botón de Login el sistema debe
permitir iniciar sesión
Evidencia
En esta sección se colocan las evidencias que respaldan la detección del bug, por ejemplo,
unas imágenes las cuales deben tener buena definición y ser explícitas, o un video donde
se graba el proceso donde se detectó el bug
Prioridad de bugs
Al momento de reportar un bug es importante definir cuál es la prioridad del bug, de esta
forma el equipo de desarrollo podrá definir cuáles son los bugs que deben ser atendidos de
forma inmediata y cuáles pueden ser atendidos luego de resolver los más críticos
La gravedad de un bug nos permite definir cual es el impacto que este tiene sobre el
funcionamiento de un sistema
Los tipos de prioridades que se pueden ver en un bug son:
Medium(medio)
Son bugs que se presentan en el sistema donde se obtienen resultados incorrectos, como
mensajes que no deben mostrarse por ejemplo, pero estos errores no detienen el flujo de
trabajo
High (Alta)
Los bugs que se colocan en esta categoría son aquellos que afectan la funcionalidad en el
flujo de ejecución de casos de prueba, donde afecta flujos principales del sistema
Low(Baja)
Estos bugs son de bajo impacto, se consideran que afectan poco o nada la funcionalidad
del sistema como por ejemplo errores ortográficos o estéticos.
Nuevo
Este es el estado inicial del bug cuando es detectado y creado por primera vez
En análisis
Luego de que el bug es detectado y reportado, el bug pasa a estar en análisis por el equipo
de desarrollo
En curso
Este estado se puede visualizar cuando el bug fue asignado a un desarrollador y está
trabajando en la solución
Por probar
Cuando el desarrollador obtiene la solución del bug, esta solución está lista para probar en
el ambiente de pruebas y el tester debe hacer las pruebas y verificar si el bug realmente fue
resuelto o no.
Devuelto
Este estado del bug se aplica cuando pasan la solución del bug al ambiente de pruebas y el
tester al realizar el flujo de pruebas detecta que no fue solucionado, procede a devolverlo al
desarrollador para que vuelva a ser verificado y solucionado
Resuelto
Este estado aplica cuando se pasa la solución del bug al ambiente de pruebas y el tester
realiza el flujo de pruebas y verifica que fue resuelto
Completado
Luego de que un bug es resuelto se colocan las evidencias y se procede a cerrar el bug
donde se indica que fue corregido
Reabierto
Este estado en particular se puede presentar cuando un bug finalizó todo su ciclo y fue
cerrado, pero surge un factor imprevisto y este se presenta nuevamente por lo que se debe
reabrir nuevamente el bug
Rechazado
Este escenario se presenta cuando el bug luego de ser analizado por el equipo de
desarrollo no es considerado un error, para esto se deben presentar las evidencias donde
se justifique que no aplica como bug
Bloqueado
Este estado es colocado por el desarrollador cuando algún factor le impide poder dar
solución al bug y se encuentra a la espera de este desbloqueo para seguir con la solución
del bug
TEORÍA DE BUGS Y REPORTES DE JIRA
Definición de bug
● Error: Acción humana que produce un resultado incorrecto.
● Defecto: Presencia de un error en el software.
● Fallo: Manifestación física o funcional de un defecto.
SOQL Fundamentos
Que es SOQL.
SOQL es el lenguaje de consulta de objetos de Salesforce. Puede usar SOQL para leer la
información almacenada en la base de datos de su organización. SOQL es similar desde el
punto de vista sintáctico a SQL (lenguaje de consulta estructurado).
Sentencias de SOQL
SELECT campos a consultar FROM Objeto WHERE el campo que quiero en específico.
Ejemplo: SELECT id, Name FROM Account WHERE Name = 'JORGE LUIS VEGA
SORIANO'
● Uso del NULL Ejemplo: SELECT Id, Name FROM account WHERE Apellido_Materno__c
= null
● El uso del LIKE Ejemplo: SELECT Name FROM Account WHERE Name LIKE 'A%'
● Expresiones de tiempo
Interfaz
Es una capa de abstracción para que dos sistemas se comuniquen.
una capa de abstracción permite que interactúas con un sistema sin necesidad de saber
qué está pasando por debajo
API
Es una interfaz para que se comuniquen aplicaciones, programas de software y compartan
datos entre ellos ( en ingles application programming interface ).
Son un conjunto de comandos, funciones y protocolos que permiten la comunicación entre
software
JSON
Hoy en dia es el lenguaje mas usado para transferir información, significa javascript object
notation.
Es muy facil de entender y manipular
Esta construido por una colección de pares de nombre y valor
REST
Rest es un tipo de arquitectua de desarrollo web que se apoya totalmente en el estandar
HTTP
Significa Representational State Tranfesr
Es el enfoque mas popular para la creación de API
Se basa en una relación cliente-servidor que separa las partes frontal y posterior de la API
Métodos HTTP
Una de las cosas que especifica el protocolo HTTP son los verbos ( métodos ), estos
indican acciones.
Get: leer, traer información desde un servidor, cualquier dato que necesitemos una lista o
un recurso en específico
Post: crear, para enviar información hacia el servidor, es especifico para la creación de
recursos
Put: modificar, para actualizar todo un recurso ( por completo )
PATCH: modificar, se usa para actualizar solo una parte del recurso
DELETE: eliminar un recurso determinado ( rara vez se utiliza )
Códigos de estado
Cuando se solicita información a través de una API, el servidor puede contestar con
distintos códigos. Con estos vas a saber que paso con tu petición.
Los estados sirven para describir el estado de la petición
Código 400: cuando son errores del cliente, Indica que se hizo mal una solicitud, faltan
datos, headers o cualquier otro error
-400 Bad request. La solicitud contiene sintaxis erronea
-403 Forbidden. La solicitud fue legal, pero en el servidor rehusa a responder dado que el
cliente no tiene los privilegios para hacerla
-404 Not Found. Recurso no encontrado. Se utiliza cuando en el servidor web no se
encuentra la página o recurso solicitado.
Código 500: cuando existen problemas con el servidor. Indica que fallo completamente la
ejecución. No necesariamente tenemos control sobre ellos.
-500 Internal Server Error. Comunmente emitido por aplicaciones empotradas en servidores
web, cuando se encuentran con situaciones de error ajenas a la naturaleza del servidor web
¿Qué es postman?
herramienta que principalmente se utiliza para probar api de tipo rest
Postman es una herramienta muy completa que además de probar, documentar y ayudar
incluso en el proceso de desarrollo de APIs, sirve para automatizar: se pueden agregar
scripts de prueba en JS
Home: veo informacion sobre mi usuario como el historial de mis actividades o espacio de
trabajo
API Network: lugar central tanto para consumidores como productores de API para
descubrir explorar y compartir
¿Dónde trabajo?
Vamos a trabajar en workspace, de espacio privado
1. Voy a la opción de menú Workspace -> Botón create workspace
2. Se despliega la ventana de workspace, ingreso el nombre que desee, el detalle o
descripción de mi espacio de trabajo, la visibilidad y presiono el botón create
workspace
Usando variables
Variables
Una variable es una representación simbólica de datos que me permite acceder a un valor
sin tener que ingresarlo manualmente donde lo necesite.
Esto puede ser útil si estamos utilizando los mismos valores en varios lugares.
Por ejemplo, si tenemos la misma URL en más de una solicitud, pero la URL puede cambiar
más tarde, podemos almacenar la URL en una variable base_url y hacer referencia a ella en
las solicitudes mediante {{base_url}}.
El mismo principio se aplica a cualquier parte de una solicitud donde se repiten los datos.
Las variables en Postman son pares clave-valor. Cada nombre de variable representa su
clave, por lo que hacer referencia al nombre de la variable le permite acceder a su valor.
Variable Global
Variable de Colección
Están disponibles en todas las solicitudes de una colección y son independientes de los
entornos.
Son adecuadas si está utilizando un solo entorno, por ejemplo, para detalles de URL o
autenticación
Variable de entorno
Permiten encuadrar nuestro trabajo en diferentes entornos, por ejemplo, desarrollo local
frente a pruebas o producción.
Gestión de Entornos
Entornos(Environments)
Un entorno es un conjunto de variables que podemos usar en las solicitudes de Postman.
Podemos usarlos para agrupar conjuntos de valores relacionados y administrar el acceso a
los datos compartidos de Postman si trabajamos como parte de un equipo.
Ejemplo: considerar una operación POST simple sobre determinado endpoint que se
encargaría de crear una persona o usuario en la base de datos, a partir de los valores
enviados en el body del mensaje con datos básicos de una persona o usuario de un
sistema:
1- Parámetros
4- Seguridad
Aplicar vulnerabilidades potenciales, como pasar parámetros que en realidad son scripts
entre sitios, y observar los resultados.
Por ejemplo, esto puede incluir autenticación o aspectos de seguridad en los parámetros.
Conclusión POISED
La heurística podría llegar a servir de alguna manera para estandarizar dentro de un equipo
de varios testers la forma de probar una API, manteniendo una estructura y enfoque. Da un
modelo de referencia para tener en cuenta al pensar la cobertura que nos interesa alcanzar
al probar una API.
Existen otras formas también interesantes de probar una API (incluso otras heurísticas, por
ejemplo la heurística VADER).
Establece cómo un módulo de un software se comunica o interactúa con otro para cumplir
una o muchas funciones.
● Poder facilitar el trabajo a los desarrolladores y ahorrar tiempo y dinero.
● Pueden ser privadas para el uso de una empresa, abiertas sólo para partners, o públicas
para que cualquier desarrollador interactúe con ellas o crear sus propias API para que lo
hagan. También pueden ser API locales para aplicaciones que se comunican dentro de un
mismo ambiente o dispositivo, o remotas para cuando hay que acceder a otro
punto diferente
Endpoints
Los EndPoint son las URLs de una API y cada EndPoint puede tener varios métodos.
Métodos
Los métodos son todas las formas que tenemos de poder interactuar con ese EndPoint
Ejemplo: Supongamos que tenemos una tienda e-commerce integrada con una API de
productos. Con el método POST, podemos crear un nuevo producto. Con el método PUT
podemos modificar un producto de la tienda, con el GET podemos traer todos los productos
o un producto en específico, con el DELETE podemos eliminar el producto y con el PATCH
podemos modificar un atributo de un producto.
Swagger
Su objetivo es estandarizar el vocabulario que utilizan las APIs. Es el diccionario API.
Cabe aclarar que Jmeter funciona en todos los navegadores (en pruebas no manuales )
La aplicación Apache JMeter™ es un software de código abierto, una aplicación Java 100 %
pura diseñada para cargar, probar el comportamiento funcional y medir el rendimiento.
Originalmente fue diseñado para probar aplicaciones web, pero desde entonces se ha
expandido a otras funciones de prueba.
JMeter se puede usar para probar el rendimiento tanto en recursos estáticos como
dinámicos, aplicaciones dinámicas web.
Se puede usar para simular una carga pesada en un servidor, grupo de servidores, red u
objeto para probar su fuerza o para analizar el rendimiento general bajo diferentes tipos de
carga
Tipos de pruebas de performance
Carga – Load test
Con esta prueba, la empresa puede conocer la cantidad de usuarios que soporta su
producto en un lapso de tiempo determinado, según los usuarios que espera tener el
cliente en su sistema sin forzarlo a una capacidad mayor a la esperada.
Por ejemplo: Se necesita probar un puente para saber su comportamiento con 100
personas sobre él (el dato de la cantidad es determinado por el cliente), los arquitectos de
pruebas lo que hacen es dividir este grupo total en grupos más pequeños que vayan
ingresando al puente de manera paulatina en un lapso de tiempo (5 personas inician, al
minutos ingresan otras 5 y así sucesivamente hasta completar las 100 personas) y con una
actividad específica como “saltar” , lo que al final permite evaluar el comportamiento del
puente y si su estructura y estado final tuvieron el comportamiento saludable para soportar
esta actividad
Por ejemplo: Continuando con el ejemplo de personas saltando sobre el puente, en esta
prueba colocamos a las mismas 150 personas de participaron en la prueba de capacidad,
pero sin pausa entre salto y salto, con el objetivo de evidenciar si el puente puede recuperar
su forma después de alterar su estructura durante la prueba.
Algunas cosas a tener en cuenta al momento de probar stress
– Estas pruebas NO deben realizarse nunca en producción
– Se debe ejecutar esta prueba en el flujo más pesado de la aplicación. En este
caso apunté al inicio del foro, pero quizás lo correcto hubiese sido apuntar a una
petición POST a la hora de crear un post, ya que debe ir y almacenar las cosas
en la base de datos.
– Estas pruebas se realizan en un ambiente espejo de producción. Es decir, no se
deben hacer ni en producción, ni en un servidor de QA o Desarrollo. Debe ser
otro ambiente que tenga las mismas características que la producción. De lo
contrario, los datos que obtendremos no serán datos de escenarios que pasarán
en producción.
- Al momento de hacer esta prueba, nadie debería estar conectado en ese
ambiente para no afectar los resultados de las pruebas