Resumen 2
Resumen 2
Resumen 2
Software
Conceptos clave
• IC’s de Proceso
o Son los ítems generados por el proceso de desarrollo. Ejemplos: Plan de CM,
Propuestas de Cambio, Plan de desarrollo, Plan de Calidad, Lista de Control de
entrega, Planes de proyecto
o Algunos de estos ítems sólo son gestionados durante una parte de la vida del
producto sw, ejemplo, el plan de proyecto solo es gestionado durante el
proyecto y luego se deja de gestionar o se elimina
o Otros ítems de proceso pueden seguir siendo gestionado durante toda la vida
del producto sw, ejemplo el plan de CM
• IC’s de Producto
o Son los ítems propios del producto software y que son gestionados durante todo
el ciclo de vida del mismo. Son transversales a todos los ciclos de mantenimiento
del producto. Ejemplos: Requerimientos, Plan de Integración, Manual de
Usuario, Arquitectura del Software, Estándares de codificación, Casos de
prueba, Código fuente, Documento de despliegue
• Branching
o Es la acción de crear líneas de desarrollo separadas de una línea de trabajo. Se
las conoce usualmente como branches
o Estos branches son mecanismos utilizados por los equipos para que puedan
desarrollar nuevas funcionalidades utilizando un entorno de trabajo separado
del resto.
o Estas líneas utilizan las líneas base de un repositorio existente como punto de
partida, de esta forma, las features y bug fixes son desarrolladas de forma
separada que facilitando el trabajo de estos temas en paralelo.
o Permite a los miembros del equipo trabajar en múltiples versiones de un
producto, utilizando el mismo set de Ítems de Configuración
• Ambiente (Environment)
o Un entorno de implementación es una colección de servidores, clústeres y
servicios configurados que colaboran para proporcionar un entorno para alojar
módulos de software.
o Cada entorno se construye con un propósito, pudiendo tener características
funcionalmente similares pero no necesariamente ser iguales a nivel
infraestructura.
▪ Un ejemplo asociado a esto son los entornos de pre-producción y
producción. No necesariamente son iguales a nivel infraestructura pero
deberían ser equivalentes a nivel software.
▪ El propósito del ambiente es decidido por la organización o el equipo de
trabajo. Es decir cada organización o equipo decide para qué será
utilizado el ambiente y en qué etapa del proceso de desarrollo se
utilizará.
o Ambientes comunes en el desarrollo suelen ser desarrollo, staging, producción
Funciones de SCM (Software Configuration Management)
• No todo necesita estar bajo SCM: El ítem de configuración tiene que tener un uso, un
valor para ser gestionado
• Es necesario contar o definir con guías para qué elementos son parte o no. Define
momentos o condiciones para establecer una línea de base o bien para liberarla (es
decir, llevarla a otro ambiente, también conocido como “release”).
Define momentos o condiciones para establecer una línea de base o bien para liberarla (es
decir, llevarla a otro ambiente, también conocido como “release”).
Control de la CS
Se encarga de definir cómo serán incorporados los ICs, cuando se realizarán las líneas base,
como será la estrategia de desarrollo en paralelo, y como serán nomencladas las versiones,
entre otras definiciones.
Branching strategies
Gitflow
• Consiste en dos ramas principales que existen a lo largo de todo el ciclo de vida del
desarrollo, master y develop y tiene una serie de branches de soporte. En Master vive
el código productivo.
Github Flow
• Creado por GitHub, busca ser una alternativa simplificada del desarrollo
• Existe una rama Master de donde parten las ramas de desarrollo
• Cada nueva feature se trabaja en una rama separada que es integrada nuevamente en
master cuando el trabajo finaliza
NOTA: Estos puntos no son todo lo que hay que tener, son una base mínima necesaria para
garantizar la gestión.
Identificación de la configuración
Para esto, la actividad establece guías o criterios para entender qué elementos son parte o no
de una configuración.
La actividad tiene que identificar los ítems de configuración que serán gestionados. Para ello, se
pueden ejecutar distintas acciones, como por ejemplo:
• Identificar Código
o Buscar fuentes
o Chequear repositorios
o Entender la arquitectura
• Identificar ambientes de ejecución
o Tratar de instalar una versión
o Identificar Bases de datos, servers, configuraciones
• Identificar Documentación
o Buscar especificaciones
o Entender cambios anteriores
Nombre, Versión, Autor / Revisores, Módulos o ítems relacionados, Última modificación, Tipo
de IC (código, scripts, diagramas, requerimientos, etc).
Estos atributos serán registrados y se utilizarán como información útil en la actividad de Status
& Accounting de la configuración
Las auditorías son llevadas a cabo de acuerdo a procesos definidos y pueden ser ejecutadas
con diferentes niveles de formalidad, desde Revisiones informales basadas en checklists hasta
Pruebas exhaustivas de la configuración que son planificadas con anticipación.
Tipos de auditorías
Release Management
Se divide en 2 partes:
- Software Building
- Release Management
Software Building
Software Building es la construcción del paquete de software que será distribuido, utilizando
las versiones correctas de los Ítems de Configuración y las herramientas apropiadas para
construirlo.
Tenemos el código, hicimos los cambios pedidos, debemos construir nuestra configuración y
habilitarla para que pueda ser utilizada por los usuarios (A.K.A producción).
Desplegar SW: Cualquier software o build que sale del ambiente que fue desarrollado se dice
que está siendo desplegado.
Una vez generada la versión o release debemos buscar el mecanismo más efectivo para hacer
despliegue -deploy- controlado a los distintos usuarios. A estos mecanismos se los denomina
Deployment Strategies
Una vez generada la versión o release debemos buscar el mecanismo más efectivo para hacer
despliegue -deploy- controlado a los distintos usuarios. A estos mecanismos se los denomina
Deployment Strategies
• Qué usuarios deberán recibir los cambios (geográfico, premium, por segmento)
• En qué forma se deberá hacer el despliegue
• Entornos por los que deberá pasar (testing, staging, producción, otros)
• Procesos de Roll Forward
• Procesos de Rollback
• Validación de despliegue correcto / incorrecto
• Riesgos del despliegue y cómo se minimizan
• Aprobación por el negocio y/o área de QA
• Quienes realizarán el deployment de la versión definida
Continuous delivery
Pipelines en CD
Los procesos de Continuous Delivery establecen un pipeline de acciones (pasos a seguir) para
poder construir e instalar el producto Software:
Deployment strategies
El objetivo es realizar el cambio sin generar un downtime, de forma tal que los usuarios finales
no noten el cambio de la aplicación.
CALMS
¿Qué es un SW de calidad?
Aseguramiento de calidad
Objetivo de la prueba
Si el objetivo del testing es encontrar fallas como corolario podríamos decir que si no se
encuentran fallas ¿el testing falla?
Sabemos que siempre podemos encontrar una falla por mas mínima que sea, sin embargo
debemos tener en cuenta que el testing debe ser:
• Eficiente
o Lo mas rápido posible
o Lo mas barato posible
• Eficaz
o Encontrar la mayor cantidad de fallas
o No detectar fallas que no son
o Encontrar las mas importantes
Prueba del SW
SEGÚN IEEE: Una actividad en la cual un sistema o componente es ejecutado bajo condiciones
específicas, los resultados de dicha ejecución son observados o registrados y, a partir de los
mismos, se realiza una evaluación de algún aspecto del sistema o componente
Testing
• Es una actividad dinámica: Necesito ejecutar algo, algo que haya compilado y que
pueda correr. No es una revisión de código, ver una porción de código o un script.
• Si no tengo los requerimientos, no sé los resultados que debo esperar, no sé qué
probar, y al final del día los termina pensando el tester
Proceso de la prueba
Depuración
Proceso de depuración
PROBAR en definitiva es el
proceso de establecer confianza
en que un SW hace lo que se
supone que tiene que hacer y ya
que nunca se va a poder
demostrar que un SW es
correcto, continuar probando es
una decisión económica
• Diseño Modular
• Ocultamiento de Información
• Uso de Puntos de Control
• Programación NO egoísta
Conclusiones
• Las pruebas no mejoran el SW, sólo muestran cuantas fallas se han producido debido a
distintos tipos defectos
• El buen diseño y construcción no solo benefician a las pruebas, sino también a la
corrección de los componentes y su mantenimiento
• El No probar No elimina los errores, ni acorta tiempos, ni abarata el proyecto
• Lo mas barato para encontrar y eliminar defectos es NO introducirlos
• Probar sw es una actividad creativa e intelectualmente desafiante
Clases de equivalencia
Es por eso que seleccionamos subconjuntos de los datos de entrada posibles, esperando que
cubran un conjunto extenso de otros casos de prueba posibles
• Identificar las clases de equivalencia: se hace dividiendo cada condición de entrada en dos
grupos: clases validas y clases invalidas
• Definir casos de prueba
Condición de borde
La experiencia muestra que los casos de prueba que exploran las condiciones de borde
producen mejor resultado que aquellas que no lo hacen
En términos generales, una condición de borde es aquella que explora los límites o bordes de
un sistema o programa. Son como las instrucciones que te dicen qué hacer cuando estás en
una situación extrema o en la frontera del software, para que todo funcione correctamente y
no se rompa.
Clases invalidas
Se refiere a:
Muchas veces, la combinación de los datos de entrada es las que produce una clase válida o
inválida. Por ejemplo: podría ser que si el estado civil es divorciado, los datos del cónyuge se
deben ignorar
Conjetura de errores
Cuando “Sospechamos” que algo puede andar mal, enumeramos una lista de errores posibles
o de situaciones propensas a tener errores y creamos casos de prueba basados en esas
situaciones.
• Wish list
o Cada statement (declaración) es un requerimiento funcional
o Un requerimiento que no es testeable no es implementable
o Pensar en “variaciones” de las declaraciones funciona muy bien.
• Casos de uso
o La secuencia de eventos dentro de un caso de uso tiene variaciones indicadas
por su texto
o Cada variación de un evento constituye una “condición de prueba”
o Cada condición debe ser ejercitada por, al menos, un caso de prueba
o Cada caso ejercitará uno o varios componentes involucrados
o El conjunto de condiciones y casos constituye la base de la prueba de
aceptación funcional
• Modelo de datos: La integridad referencial entre tablas y la cardinalidad de las
relaciones definen reglas de negocio que deben ser probadas. Por ejemplo:
o Una Mesa de Examen sin Alumnos
o Una Mesa de Examen con un Alumno
o Una Mesa de Examen con muchos (n) Alumnos
• Diagrama de transición de estados: El ciclo de vida de un objeto define reglas de
negocio que deben ser probadas
o Transiciones válidas
o Transiciones inválidas
Conclusiones
• Prueba estructural
• Prueba lo que el software hace
• Se basa en cómo está estructurado el componente internamente y su definición
• Usada para incrementar el grado de cobertura de la lógica interna del componente
Grado de cobertura
Complejidad ciclomatica
Métrica del software que proporciona una medición cuantitativa de la complejidad lógica de un
programa. Se mide a partir de la cantidad de caminos independientes
Prueba que combina elementos de la caja negra y caja blanca. El conocimiento del sistema es
“parcial”, no “total”
Las pruebas de caja gris prueban el SW como si fuera caja negra, pero suman condiciones y
casos adicionales derivados del conocimiento de la operación e interacción de ciertos
componentes de SW que componen la solución
Tipos de pruebas
Prueba unitaria
Prueba de integración
Orientada a verificar que las partes de un sistema que funcionan bien aisladamente también lo
hacen en su conjunto.
Prueba de aceptación de usuario
• Prueba realizada por los usuarios para verificar que el sistema se ajusta a sus
requerimientos
• Las condiciones de pruebas están basadas en el documento de requerimientos
• Es una prueba de “caja negra”
Pruebas no funcionales
Pruebas de regresión
Orientada a verificar de una manera muy rápida que en la funcionalidad del sistema no hay
ninguna falla que interrumpa el funcionamiento básico del mismo. El test es de muy alto nivel
(solo las funcionalidades mas importantes), no se entra “en detalles”.
Se entrega una primera versión al usuario que se considera está lista para ser probada por
ellos. Normalmente hay muchos defectos y es una buena forma de abaratar costos
• ALFA: la hace el usuario en mis instalaciones (en un entorno controlado y suele estar el
developer)
• BETA: la hace el usuario en sus instalaciones. El entorno no es controlado por el
desarrollador
V-model
Exploratory Testing
• Script driven: se confeccionan las condiciones & casos tempranamente para luego ser
ejecutados
• Unscripted: se confeccionan las condiciones & casos a medida que se aprende de las
distintas ejecuciones, refocalizando las pruebas si fuera necesario (obteniendo ventajas
de lo aprendido).
• Ventajas
o Puede ser reusado para una nueva ejecución fácilmente
o Es mas fácil de medir los resultados (# de condiciones, # de casos)
• Desventajas
o Laborioso
o No podes reprogramar sobre la marcha si encontras algo que es interesante
testear
Unscripted testing
• Ventajas
o Se pueden variar los test sobre la marcha de acuerdo a lo que se considere mas
apropiado
o Permite mayor cobertura de situaciones sobre posibilidades difíciles de
anticipar
• Desventajas
o Altamente dependiente de quien lo lleva a cabo
Cuando utilizar ET
Conclusión
Metricas de testing
• Productividad Diseño
o Ej.: Condiciones Construídas x Unid. Tiempo
• Productividad Ejecución
o Ej.: Casos Ejecutados x Unid. Tiempo
• Eficacia (Pre-Release):
o Ej.: ( Incidentes Reportados Aceptados / Total Incidentes Reportados x 100 )
o Es interesante medir también la eficacia en la resolución de defectos
• Eficacia (Post-Release):
o Ej.: [ Fallas Reportadas / (Fallas Reportados + Fallas Rep. User ]x 100
• “Calidad” del Desarrollo:
o Ej.: Indice de Severidad por Defectos Reportados
• Release Readiness:
o Ej.: Indice de Severidad por Defectos Abiertos
Testing automation
• Las pruebas automáticas tienen que ser un complemento de las manuales: no busca
reemplazar manual testing ni testers
• Automatizar es un trabajo aparte (hay que invertir tiempo y esfuerzo)
• En ciertos proyectos la automatización es necesaria debido a su
magnitud/complejidad. Resulta mas eficiente automatizar los tests
Ventajas/Desventajas
• Ventajas
o Gran cobertura (pruebas de regresión)
o Bajo costo de ejecución
o Independencia del Tester
o Consistencia: si falla, falla siempre
o Reuso
o Rapidez
• Desventajas
o Costo de desarrollo & mantenimiento
o En particular el costo de Test GUI
o Skill de developers
o Las fallas pueden deberse a la automatización
Herramientas de testing