1.
Testing de software
En las próximas vídeo-clases, estaremos analizando la esencia de la testing de
software, con el fin de comprender qué es, en qué consiste, cuál es su
funcionalidad y cómo se estudia de forma apropiada. Pero, antes de hacerlo,
nos gustaría ofrecerle una serie de ideas previas con respecto a esta temática
para que las pueda asociar más adelante.
1.1 Testing
Antes de iniciar, ¿Te has preguntado cómo saben las personas que los
softwares están correctamente escritos? Bueno, para dejar claro las ideas
claves al respecto, estaremos viendo que el testing de software es una
disciplina completa en la ingeniería de software, que permite el uso de
procesos, métodos de trabajo y herramientas para identificar los posibles
defectos que haya en el software, logrando así la estabilidad y correcto
funcionamiento del mismo.
La prueba no es una actividad que se deba realizar al finalizar del desarrollo del
software, esta va en paralelo. Permite que el contenido que se está
construyendo se construya correctamente de acuerdo con las necesidades del
usuario final. Por lo tanto, es importante porque es una forma de prevenir o
corregir posibles inconvenientes en el software antes de que este comience a
ejecutarse.
Desde siempre se ha tenido una idea equivocada, es decir, probar el software
después de escribir el software y antes de la operación de entrega, pero
actualmente, las pruebas de software deben llevarse a cabo desde el principio
del proceso. En este sentido, ha surgido la norma ISO 25000, que regula todos
los conceptos a nivel de calidad del software e indica que el producto no es el
producto final entregado, sino cada producto intermedio entregado en el
proceso de desarrollo del software. Bajo este modelo, los entregables
intermedios del proceso de desarrollo de software deben estar en un estado
intermedio.
Las pruebas son básicamente una serie de actividades en el desarrollo de
software. Dependiendo del tipo de prueba, estas actividades se pueden
implementar en cualquier momento durante el proceso de desarrollo. Existen
diferentes modelos de desarrollo de software y modelos de prueba. Todos
tenemos diferentes niveles de participación en las actividades de desarrollo.
1.2 Historia
Las pruebas de software nacieron de la crisis del desarrollo de software
alrededor de 1960, cuando comenzaron a desarrollar el primer software para el
Departamento de Defensa de EE. UU.
En ese momento, alguien afirmó que debido a que el desarrollo del software
era muy complicado, no se entregaba a tiempo, era muy costoso y era difícil
determinar su progreso porque no era un software tangible. Debido a esta
situación, comenzaron a surgir una variedad de soluciones a la crisis del
software, como la calidad del proceso de desarrollo del software, la mejora de
la infraestructura del software, el framework y por supuesto, el test que nació
como un test que se puede afrontar. La llamada crisis del software ya no es
una crisis del software, sino una industria del software natural.
1.3 Conclusión
Como pudimos ver a lo largo del texto, el testeo de softwares es un proceso
fundamental a la hora de desarrollar un software, ya que es esta actividad la
que nos permite corregir los defectos que se puedan presentar, logrando de
esta forma que se logre entregar un trabajo bien realizado y con la menor
cantidad de problemas. Es necesario tener en cuenta todos los conocimientos
aquí planteados, ya que durante las siguientes clases se estará profundizado
más en todos los aspectos que conforman el testeo de los softwares.
Asimismo, le sugerimos comprender todo esto ya que es la base de lo que se
estará viendo en el curso.
2. TESTING DE SOFTWARE
El testing es una investigación técnica del producto bajo prueba para brindar
información objetiva sobre la calidad a los interesados.
Cem Kaner
El testing no solo es reportar errores a través del reporte de incidencias
también es aportar desde un punto de vista diferente en la construcción del
software y optimizar procesos con la aplicación de técnicas y herramientas para
obtener información sobre la calidad y luego brindarla a los interesados, esta
información sirve para poder tomar decisiones. El objetivo del testing es crear
una aplicación que aporte valor o un producto de calidad al negocio.
¿Cómo conocer el valor o un producto de calidad de un negocio?
Se debe conocer el modelo de negocio de la empresa, para ello debemos:
- Saber qué valor otorga la empresa a sus clientes
- Saber cómo captura ese valor de vuelta
3. PRUEBAS DEL SOFTWARE
Evalúan el funcionamiento del software para detectar posibles errores a través
de algunas interrogantes:
- ¿Hace lo que debe hacer?
- ¿Hace correctamente?
- ¿Hace eficientemente?
3.1 Plan de pruebas
- Diseñar pruebas específicas
- Ejecutar pruebas específicas
- Evaluar la salida de las pruebas específicas
- Analizar estadísticas de errores
3.2 Estrategias de las pruebas
3.2.1 Según el momento de realización
- Prueba de unidad: Evaluar los diferentes módulos de forma
individual.
- Prueba de integración: Evaluar la integración de todos los
componentes que se han ido verificando.
- Prueba de validación: Evaluar en lo que el usuario puede visualizar
y las salidas que tiene él mismo.
3.2.2 Según la forma en que se realizan
- Prueba de caja blanca: Evaluar estructura interna del programa
realizando un plan de pruebas que:
Garantice que se prueben todos los caminos independientes de
cada módulo.
Garantice que se prueben todas las decisiones lógicas en las
vertientes tanto verdadera como falsa.
Garantice que se ejecuten todos los bucles en sus líneas
operacionales.
Garantice que se prueben todas las estructuras internas de los
datos para asegurarnos su validez.
- Prueba de caja negra: Evaluar las especificaciones de los requisitos
del software.
- Análisis de valores límites: Evaluar condiciones límites del software
(valores extremos).
4. CONCEPTOS GENERALES DEL MANEJO DE
PRUEBAS DE SOFTWARE
4.1 Definición de términos
Un error conlleva a un defecto. Si hay defectos generan fallas, las cuáles se
denominan bug cuando están en un ambiente de pruebas.
Error: Equivocación por parte del programador.
Defecto: Diferencia entre el valor esperado y el obtenido.
Falla: Problema presentado después del despliegue del software.
Bug: Inconsistencia del software encontrada en una etapa de pruebas.
4.2 Objetivos de las pruebas de software
- Encontrar defectos.
- Proporcionar información sobre la calidad del software.
- Prevenir defectos.
- Asegurar que el funcionamiento del software concuerde con los
requerimientos.
- Aumentar la confianza en la calidad del producto.
4.3 Niveles de las pruebas
4.3.1 Prueba de unidad (desarrollador)
- Probar componentes individuales o módulos.
- Detectar errores lógicos, algoritmos y datos.
4.3.2 Prueba de integración (desarrollador / tester)
- Probar grupos de componentes.
- Probar relaciones e interacciones.
4.3.3 Prueba de sistema (analista / tester)
- Probar el sistema como un todo.
- Errores a nivel de requisitos (funcionales y no funcionales)
4.3.4 Prueba de aceptación (analista / tester / usuario)
- Probar que el sistema está listo para la entrega.
4.4 Estrategias para pruebas de software
4.4.1 Caja negra
- Enfoque exhaustivo: Evalúa todo el dominio de datos de entrada y
salida.
- No devela errores de codificación: No importa la estructura interna.
- Los datos de entrada son derivados de las especificaciones de los
requisitos del sistema.
4.4.2 Caja blanca
- Enfoque en el código: Evalúa la estructura interna del programa y
no la especificación.
- Asegura que cada instrucción es ejecutada al menos una vez
- Los datos de entrada son derivados de la lógica del software.
4.5 Casos de pruebas
Conjunto de datos de entrada y resultados esperados que se ingresan a un
componente de software con el objetivo de causar fallas y detectar errores.
4.6 Proceso de pruebas
- Planeación
- Análisis y diseño
- Implementación y ejecución
- Evaluación y reporte
- Cierre
5. CONOCIMIENTOS NECESARIOS PARA EMPEZAR
COMO TESTER
Para ser tester de software una persona debe ser y/o contar con las siguientes
habilidades blandas:
- Organizado
- Detallista
- Intuitivo
- Capacidad de comunicación
- Persistente
5.1 Proceso de pruebas de Software
5.1.1 Planificación de pruebas
Etapa inicial del proceso de pruebas. Se obtiene como entregable el "Plan
de pruebas", donde se define:
- Objetivos de las pruebas
- Técnicas de pruebas
- Tipos de pruebas
- Niveles de pruebas
- Calendario de pruebas
- Riesgos de pruebas
- Criterios de entrada y salida
- Métricas
5.1.2 Monitoreo y control
Implica la comparación del progreso real con el plan de pruebas. Se
obtiene como entregable "Informe de progreso de las pruebas", donde
se define:
- Desviaciones con respecto al plan
- Medidas para subsanar las desviaciones
5.1.3 Análisis de pruebas
Analizan las bases de las pruebas buscando omisiones o ambigüedades.
Responde a la pregunta "¿qué probar?"
¿Qué son las bases de las pruebas?
Documentos o productos de trabajo a partir de los cuáles se pueden inferir
los requisitos de un componente del sistema. Entre las bases de pruebas
tenemos los requerimientos, historias de usuario, diagramas, modelos o
productos de trabajo similares.
5.1.4 Diseño de pruebas
Responde a la pregunta "¿cómo realizamos las pruebas?" Se incluyen
actividades como:
- Diseñar o priorizar casos de pruebas
- Identificar los datos de pruebas
- Diseñar el entorno de pruebas
- Verificar y actualizar la trazabilidad bidireccional entre los elementos
de las pruebas
5.1.5 Implementación de pruebas
Realizan actividades relacionadas con el entorno de las pruebas. En
algunos proyectos, esta fase está unida al diseño de las pruebas.
5.1.6 Ejecución de pruebas
Se incluyen actividades como
- Ejecutar las pruebas
- Comparar los resultados reales contra los esperados
- Reportar los defectos encontrados
- Registrar el resultado de la ejecución de prueba
- Repetir actividades de pruebas (pruebas de regresión y/o
confirmación)
5.1.7 Finalización de las pruebas
- Verificar si todos los informes de defectos están cerrados
- Crear un informe de resumen de pruebas
- Finalizar y archivar el entorno de pruebas (datos, infraestructura de
pruebas)
- Entregar el software de prueba
- Analizar las lecciones aprendidas de las actividades de las pruebas
para mejorar la madurez de las pruebas