Proceso Colaborativo en Desarrollo de Software
Proceso Colaborativo en Desarrollo de Software
Los actores son personas u organizaciones afectadas por el éxito o fracaso de un proyecto, las
funcionalidades o carencias de un producto o los efectos de un servicio. En este diálogo los
actores.
1. Negocian expectativas
2. El producto les sugiere nuevas ideas.
3. Cometen errores.
4. Se reformulan las expectativas en base a riesgos identificados.
FUNCIONALIDADES
La descripción de una funcionalidad debe ser lo más simple posible. Debemos preguntarnos:
¿Qué necesita tener el software para que el usuario alcance su objetivo?
REQUERIMIENTOS
Para construir un software, los desarrolladores se basan en los requerimientos del cliente.
Esto es una necesidad o expectativa de un actor frente a un sistema de software. Estos
requerimientos pueden estar explícita o implícitamente declarados. Surgen de distintas
fuentes, como ejemplo.
Tipos de requerimientos.
1. De diseño.
2. De arquitectura.
3. Funcionales.
4. De implementación o no funcionales.
5. De performance.
Son definidos, refinados y actualizados a medida que transcurre el desarrollo del proyecto del
software.
ESPECIFICACIONES
1. Debemos contar con una interfaz en la cual se puedan escribir correos electrónicos y
luego enviarlos mediante un click.
2. También debemos contar con un sistema de seguridad y privacidad de la información.
1. Obtener
2. Negociar
3. Validar
4. Comunicar
5. Controlar
6. Explorar
Los requerimientos existen en la mente de todos los actores, por lo tanto el Documento de
requerimientos es un modelo de esa información, la cual permite gestionar el riesgo de crear
el software no deseado.
CALIDAD
Se define como la cualidad de un software de satisfacer las necesidades del usuario, éstas se
expresan mediante atributos de calidad y se clasifican en distintos factores medibles a través
de distintos indicadores.
La calidad implica un valor para algún actor, por lo tanto es inherentemente un concepto
subjetivo. Distintos actores pueden percibir distintos niveles de calidad en un mismo software.
Cada actor aporta su visión del software y por lo tanto de su calidad, veamos algunos atributos
de calidad.
Usuario final.
Desarrollador.
1. Retorno de la inversión.
2. Imagen de la Empresa.
3. Oportunidad en el Mercado.
Para el Tester es muy importante que el software sea testeable. Qué esté claro qué módulos
resuelven cuáles funcionalidades, así como la forma de integración de los distintos módulos o
componentes.
Pero el Tester también se ocupa de probar si se cumplen los objetivos o atributos de calidad
para los distintos actores, o sea, trabaja en combinación con todos.
El Tester investiga diferentes aspectos del software para los distintos involucrados, trata de
identificar y precisar los objetivos y atributos de calidad que están en juego, evidenciando los
conceptos implícitos, por ejemplo si se prevé o desea que una funcionalidad sea utilizada por
un número elevado de usuarios simultáneamente, es preciso indicarlo porque tiene un alto
impacto sobre su diseño y programación.
MODELOS, ESTÁNDARES Y NORMAS DE CALIDAD.
Las normas son guías para ayudar a lograr los estándares adoptados. En calidad de producto
de software la nueva norma es la ISO/IEC 25000, que proporciona una guía para el uso de las
nuevas series de estándares internacionales, llamados Requisitos de Calidad de Productos de
Software, (SQuaRE).
Constituyen una serie de normas basadas en la ISO/IEC 9126 y en la ISO 14598 (evaluación de
software), y su objetivo principal es guiar el desarrollo de software con la especificación y
evaluación de requisitos de calidad de software, su métrica y evaluación.
Al igual que la norma ISO/IEC 9126, este estándar define tres vistas diferenciadas en el estudio
de la calidad de un software: interna, externa y en uso. Estas vistas se relacionan entre sí,
ejemplo; la pobre calidad interna se refleja en la externa y en la de uso.
Construir software es una actividad tanto creativa como colaborativa. En el proceso vamos
explorando lo que creamos y lo vamos corrigiendo. Por ejemplo, se estudia cómo funcionan
las computadoras y se busca cómo hacerlas más eficientes, usando la imaginación y el ingenio.
Etapas:
Diseño del Sistema. Los diseñadores trabajan con estos requerimientos para diseñar una
solución al problema o desafío planteado. Estos trabajan en conjunto con los Analistas para
comprender mejor los requerimientos y con los Programadores para transmitirles el diseño
apropiado.
Testing. En diferentes momentos del proceso de construcción del software se prueban los
productos obtenidos para brindar información sobre la calidad del producto para los distintos
actores involucrados en el Proyecto.
Estas etapas pueden tener distinto orden y distintas interrelaciones, pueden ser simultáneas o
sucesivas, pueden estar guiadas por el análisis de riesgos y pueden tender a la construcción del
todo o ser evolutivas según el modelo de desarrollo de software utilizado.
Modelo de desarrollo de software es una representación de alto nivel de las etapas que
ocurren durante el desarrollo y mantenimiento del software.
METODOLOGIAS AGILES.
Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia
experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar:
“Esto es, aunque valoramos los elementos de la derecha, preferimos más los de la izquierda.”
El término ágil no se refiere a la velocidad, sino a la flexibilidad para adaptarse a los cambios.
La rapidez no es el objetivo final sino que, en todo caso, es el efecto positivo por producir
código de alta calidad interna.
Los conceptos planteados en el manifiesto no son una invención ni surgen por generación
espontánea, sino que son el resultado de la búsqueda permanente en la construcción de
software, de la preocupación por resolver los problemas planteados de la experiencia y las
lecciones aprendidas por muchos profesionales y equipos de trabajos, en diferentes lugares y
durante mucho tiempo.
Es un intento por ponerse de acuerdo en un conjunto relativamente limitado de conceptos y
principios, por encima de las opiniones divergentes, lo cual expresa el espíritu constructivo y
de colaboración que animaba a los firmantes.
“No solo los Testers o un equipo de control de calidad se siente responsable de la calidad, no
se piensa en diferentes sectores dentro de un proyecto, solo se piensa en las habilidades de los
recursos para entregar el mejor producto posible. El enfoque de desarrollo ágil es producir alta
calidad de software en un marco de tiempo que maximice su valor. Todo el equipo se involucra
en las pruebas, y éstas impulsan la codificación, ayuda al equipo a entender cómo funciona y
como debería funcionar la aplicación.”
“Describe, de forma simple, una funcionalidad desde la perspectiva de quién desea el nuevo
comportamiento del sistema”.
Consiste en:
“Una historia de usuario es una explicación general e informal de una función de software
escrita desde la perspectiva del usuario final. Su propósito es articular como proporcionará una
función de software valor al cliente.”
Características:
Tanto en las historias de usuario como en los casos de uso, las conversaciones juegan un papel
importante.
Dada esta fórmula: S = F (CO, T, A, CA) en dónde S = El desarrollo de una pieza de software.
El desarrollo de software como una función entre Costo, Tiempo, Alcance y Calidad. Todas las
variables están relacionadas, si se altera una se afectan a las demás. Sin duda, las mejoras para
maniobrar son el tiempo y el alcance.
La calidad es una variable, que a veces queda librada al azar o es la primera que se descuida
cuando se reduce el tiempo o crece el alcance. Es importante resaltar que aunque principio se
pueda lograr una pequeña aceleración, luego pueden surgir efectos no deseados, como tener
que rehacer el trabajo muchas veces lo cual afecta el tiempo, el alcance y hasta el costo.
EL TESTING
En ésta lección se definen términos que utilizaremos durante el curso, se analizan varias
definiciones de testing y se muestran algunas analogías con otras disciplinas.
Llamamos la atención sobre los términos completos y correctos, ya que en nuestra opinión
son indemostrables y su efecto puede ser devastador para formar Testers.
Porque lo que hacemos es preguntarnos siempre qué es lo que está faltando probar, o qué
podría fallar, tratando de ver más allá de los requerimientos y especificaciones.
Como vimos en la unidad anterior, podemos considerar el desarrollo de software como una
ecuación que depende del contexto (costo, tiempo, alcance y calidad, entre otros).
Empírica porque hay que hacer los experimentos, hay que ejecutar el software para ver los
resultados, se experimenta con el ambiente, otros sistemas con los que interactuamos y con el
hardware. Por lo que la investigación se basa en los experimentos y la experiencia que vamos
obteniendo.
Brindar información contribuye a disminuir la incertidumbre, no sólo son bugs lo que se busca.
TESTEAMOS PARA:
1. Detectar incidentes, defectos, errores, oportunidades de mejora.
2. Evaluar la calidad de un software.
3. Ayudar a la Gerencia a tomar decisiones en base a información.
4. Verificar interoperabilidad.
5. Verificar la conformidad con estándares.
6. Minimizar los riesgos.
Podemos definir como indicadores para medir la calidad, la cantidad y severidad de los
defectos detectados, en base a un cubrimiento de las pruebas, previamente establecido.
Ejemplo: Si ejecutamos pruebas con un cubrimiento aceptable y se detecta un error crítico (el
sistema queda sin conexión con la base de datos y se pierden los datos ingresados en los
últimos 2 minutos), podemos decir que el sistema no tiene la calidad suficiente como para ser
usado en producción. Pero si tenemos 20 errores cosméticos (tipos de letra, colores,
resolución de imágenes), podríamos decidir salir a producción a pesar de éstos ya que no
afectan la operativa habitual de los usuarios del sistema.
La tarea del Tester es similar a las series de televisión CSI (Investigación de la escena del
crimen) o ER (Sala de emergencias) .
En CSI es necesario investigar para saber quién es el “asesino” y hay que hacer deducciones a
partir de la información disponible en la “escena del crimen”.
En ER hay que elegir qué análisis y estudios clínicos hacer para tener un correcto diagnóstico
de la situación. Además, en base a los síntomas del paciente hay que decidir cuál atacar
primero, priorizando según los riesgos.
El software tiene cada vez más impacto en las organizaciones, los negocios y la sociedad. Al ser
cada vez más complejos el testing también lo es.
Cuando se detecta una falla en el sistema, aislar el bug es fundamental y en ocasiones hay que
hacerle “seguimiento” por las distintas capas y niveles de abstracción hasta “cazarlo”. Los
entornos de desarrollo integrado (IDE) y los generadores de código facilitan la construcción de
las aplicaciones, aumentando la productividad. Se produce código con menos esfuerzo.
Las características de los sistemas han llevado a que las pruebas se multipliquen y se vuelvan
más complicadas, lo mismo ocurre con la búsqueda de soluciones. La importancia del testing
es cada vez mayor en los proyectos, debido al impacto del software en los negocios.
Siempre existió el conflicto entre el nivel de calidad del software y el plazo para la salida al
mercado. En la actualidad, hay cada vez más empresas proveedoras de software que ofrecen
sus productos y servicios y clientes cada vez más exigentes, por lo cual este conflicto se
intensifica aún más.
La disyuntiva es:
Lo ideal es el balance entre el nivel de calidad del software y el plazo de salida al mercado.
En testing se trata de generar cada vez más métodos y herramientas para superar las
dificultades, como ser, criterios de cobertura y avance en la automatización de las pruebas.
No es un concepto nuevo, por eso se comienza en las etapas más tempranas , desde la
formulación y revisión de los requerimientos, pasando por todas las etapas y actividades
intermedias hasta su pasaje a producción y posterior mantenimiento.
La diferencia es que en las metodologías ágiles es imprescindible trabajar así, si efectivamente
se quiere producir software de calidad. Incluso en las metodologías XP (Extreme Programming)
se profundizan y describen actividades de testing.
El factor humano es fundamental para investigar, innovar y lograr la mejor calidad posible.
Prueba exhaustiva
Es aquella en la que se prueban todas las combinaciones de entradas posibles. Por definición y
cuestión de tiempo siempre son IMPOSIBLES.
Para solucionar esto tenemos que seleccionar un subconjunto de pruebas de otro conjunto
mayor. De modo tal de cubrir las funcionalidades y especificaciones principales.
Las fallas siempre están ocultas, “LA PRUEBA DE UN PROGRAMA SÓLO PUEDE MOSTRAR LA
PRESENCIA DE DEFECTOS, NO SU AUSENCIA”.
“Cualquier método que se use para prevenir o encontrar bugs deja como residuo los más
sutiles, contra los que ese método no es efectivo.”
El pesticida mata un gran porcentaje de los insectos, pero deja un residuo, los más fuertes
sobreviven. Como consecuencia, al año siguiente es preciso un pesticida más potente.
Cuando hacemos testing pensamos pruebas, las ejecutamos, detectamos bugs, se corrigen y
volvemos a ejecutar pruebas para verificar su corrección.
Luego el conjunto de casos pensados ya no detectan bugs, pues los que detectaron en un
principio ya fueron corregidos. Pero aún puede haber bugs en el software que no hayamos
detectado. Tenemos que pensar y ejecutar nuevas pruebas para detectar esos bugs que aún
persisten.
Podemos pensar las pruebas que ejecutamos como un pesticida que va matando bugs.
Tenemos que actualizarlas y agregar nuevas pruebas al conjunto inicial para ir matando el
residuo que queda.
Al hacer buen testing, los errores van a ir cambiando, y tenemos que cambiar los casos de
prueba para mantener la calidad del software.
TIPOS DE TESTING : CRITERIOS DE CLASIFICACIÓN
Sobre un mismo conjunto podemos definir distintos criterios de clasificación y los elementos
pueden reagruparse según cada uno de éstos.
Según el conocimiento del código, se clasifica en caja negra, dónde no se tiene acceso al
código ni su estructura interna. Para la ejecución de las pruebas de caja negra, se suministran
datos de entrada al sistema, se observa la salida obtenida y se compara con la salida esperada.
Ya que sabemos cómo se espera que se comporte el programa.
En las pruebas de caja blanca se piensan y diseñan casos de prueba conociendo el código
fuente del programa, se seleccionan los caminos de éste y el flujo de datos a ejercitar durante
las pruebas. Se denomina testing estructural.
En general es realizado por el desarrollador que escribió el código fuente. Sin embargo, puede
darse el caso en que un equipo de testing deba hacer estas pruebas. Estas pruebas de caja
blanca o transparente están orientadas a identificar defectos en el diseño del código y no a
detectar discrepancias entre los requerimientos y su implementación. En estas pruebas los
programas son vistos en términos de unidades de código que interactúan entre sí.
En cambio en las pruebas de caja gris, se tiene un conocimiento limitado del código. Se
establece un dialogo con el programador o bien se estudia la documentación técnica para
conocer la estructura interna del sistema. Un ejemplo es cuando tenemos acceso a la base de
datos y podemos leer los store procedure y ver cómo es la estructura de la misma, claves
principales, claves foráneas, tablas, índices, consultas, etc.
1. Unitarias
2. Integrales
3. Sistémicas
4. Regresivas
5. De Aceptación
Es importante destacar que el momento, la forma y la frecuencia con que se ejecutan estas
pruebas depende del proceso de desarrollo que se utilice.
Pruebas Unitarias, en éstas pruebas se prueban de forma aisladas las unidades o conjunto de
unidades del sistema. Podemos considerar una unidad como una clase, método, componente
o subsistema. Se intenta detectar discrepancias entre los requerimientos y el comportamiento
del software. Se pone énfasis en verificar la especificación de la interfaz de las unidades.
Pueden ser pruebas manuales o automatizadas, ejecutadas por quién desarrolla el software o
por un tercero, además de ser de caja negra, blanca o gris.
Pruebas Integrales, es el proceso mediante el cual son agregados los componentes para crear
un sistema más grande. Aquí el software y el hardware son combinados para evaluar su
interacción. Uno de los objetivos es identificar los problemas surgidos a partir de la
combinación de componentes. Pueden ser de caja negra, blanca o gris y pueden ser ejecutadas
por distintos actores. En general requieren de la participación de los desarrolladores porque
conocen los detalles de la integración, tablas, servicios, etc.
Pruebas de Sistema, éstas tienen como objetivo evaluar el comportamiento del sistema en su
conjunto, verificando el cumplimiento de los requerimientos explícitos e implícitos. Son
pruebas sobre las pruebas de integración. Se considera el hardware y software definido,
similar al de producción y se tienen en cuenta las interfaces externas, los dispositivos de
hardware y el entorno de ejecución.
Se evalúa:
Pruebas de Aceptación: Son las que evalúan si el sistema puede ser utilizado por el usuario
final para realizar las funciones y tareas para las que fue construido. Ejemplo de pruebas de
aceptación son las “pruebas de humo”, ejecutadas por testers representantes del cliente.
Estas pruebas tienen más que ver con la Validación que con la verificación.
Pueden ser:
Según Michael Bolton las organizaciones consideran las pruebas de aceptación de diversas
maneras. Por ejemplo:
Una ceremonia, en la que no hay testing real, sino más bien es un paso protocolar,
para que se haga efectivo un cobro o cierre de contrato.
Una demostración, dónde no se requiere que aparezcan errores para convencer o
capacitar al auditorio.
Un ejercicio suave, con pruebas simples mediante las cuales se busca salir airoso del
paso.
La búsqueda de un chivo expiatorio, procurando detectar el error que provoque la no
aceptación, esto se da generalmente, cuando hay problemas entre las Empresas y no
se quiere aceptar el producto de antemano.
Pruebas de sondeo, desafiando al software, buscando romperlo y al no suceder esto,
confirmar que éste funciona bien.
Investigación, crítica, imparcial y de apoyo, buscando un software de alta calidad.
Pruebas de Regresión, su objetivo es verificar que no haya ocurrido una regresión en la calidad
del software luego de alguna corrección o modificación. La cual puede ser nueva funcionalidad
o la actualización de uno o más componentes, del software o del hardware.
En cualquier caso, no es suficiente con probar la modificación solamente, sino que es necesario
verificar que no se hayan producido desajustes en otros módulos del programa. Estas pruebas
de regresión implican la re ejecución de algunas o todas las pruebas ejecutadas anteriormente.
Tipos de regresión:
Por ejemplo, si siempre re ejecutamos las pruebas de las funcionalidades más críticas, podrían
quedar funcionalidades sin testear que nunca volveríamos a probar. Lo recomendable es que
dentro de lo posible y si los plazos de tiempo lo permiten, que se re ejecuten todas las
pruebas.
La prueba de errores severos corregidos de forma urgente, constituye una excepción, ya que
es apremiante liberar el producto inmediatamente. Pero lo que no puede suceder es que se
pierdan esos casos de prueba y no sean incorporados a las sucesivas pruebas de regresión del
producto.
Las pruebas para funcionales o no funcionales verifican otros atributos del sistema, haciendo
foco en “cómo” el sistema cumple con las funcionalidades. A pesar de llamarse pruebas no
funcionales el rendimiento y performance también se evalúan como parte del
comportamiento de las funcionalidades del sistema.
Por lo que decidimos llamarle pruebas para funcionales a aquellas que tienen como objetivo
evaluar aspectos relacionados a la rapidez (transacciones por segundo) el tamaño (kB,
kilobytes) y a la fiabilidad (tiempo promedio entre fallas, capacidad de recuperación ante
errores), entre otros aspectos.
Por ejemplo, las pruebas de usabilidad, escalabilidad, rapidez, seguridad, tamaño, portabilidad
(sistemas operativos, navegadores web) se consideran para funcionales.
Según la modalidad de las pruebas se pueden clasificar en manuales y automáticas. Hay tipos
de prueba para los cuales la automatización es especialmente recomendable.
Las pruebas de regresión de un software que sigue desarrollándose, pero tiene un núcleo
estable. Porque permite aumentar la productividad de las pruebas (después de varios ciclos de
regresión) y funciona como una especie de “Seguro contra incendios”.
Las pruebas de performance, carga, estrés, son hoy inimaginables sin una etapa de
automatización de los escenarios a probar, porque también existen herramientas que
ayudan en ésta tarea, y porque sería sumamente costoso y poco eficiente organizar
con personas los simulacros adecuados.
Pero no son las únicas, es importante pensar: ¿qué actividades hacen mejor las computadoras
que las personas?
Los 4 cuadrantes del testing ágil representan los diferentes propósitos y tipos de pruebas de
software que podemos realizar en un entorno de desarrollo ágil. En la parte superior están las
pruebas orientadas al negocio y en la inferior las pruebas orientadas a la tecnología.
Cuadrante 1.
1. Pruebas unitarias.
2. Pruebas de integrales o de componentes.
3. Pruebas automatizadas.
Cuadrante 2.
1. Pruebas funcionales.
2. Ejemplos.
3. Pruebas de Historias de usuario.
4. Prototipos.
5. Pruebas automatizadas y manuales.
Cuadrante 3.
1. Pruebas exploratorias.
2. Escenarios.
3. Pruebas de usabilidad.
4. Pruebas de aceptación.
5. Pruebas manuales.
Cuadrante 4.
1. Pruebas de carga.
2. Pruebas de rendimiento.
3. Pruebas de seguridad.
Uso de herramientas.
Como podemos apreciar coexisten varios criterios de clasificación de las pruebas, todos
aportan a la disciplina del Testing. Lo importante es pensar qué tipo de pruebas es adecuada
para cada contexto y sobre todo, qué pruebas han quedado sin hacer.
EL MODELO V
Podemos tomar la clasificación de las pruebas según las etapas de desarrollo del software y
verlas en la dimensión del tiempo, en el modelo V.
Este modelo muestra que se puede ir trabajando en las etapas de prueba a medida que avance
el proyecto.
El entender y pensar puede darse luego de finalizadas las actividades de: Análisis de
requerimientos, Diseño del sistema y Diseño detallado. Cuando se termina el análisis de
requerimientos se puede empezar a pensar el plan de pruebas de aceptación y diseñar
pruebas. Se podría aún empezar antes de culminar la etapa.
Esta forma de trabajo ayuda a reducir ambigüedades e inconsistencias en cada etapa, que
podrían convertirse en errores. Por lo tanto, si adelantamos las actividades de entender y
pensar estaremos ahorrando re trabajo. Por eso lo llamamos modelo V con filtros.
ESTRATEGIAS DE TESTING
Una estrategia esboza qué planear y como planearlo. Una estrategia exitosa es asimilable a
una guía para el cambio, una base firme para la mejora continua.
Por su naturaleza el testing promueve cambios ya que detecta problemas que hay que
resolver, para que estos cambios se hagan efectivos es necesario que la estrategia de pruebas
fomente la detección y corrección de errores en paralelo e impulse también cambios a nivel de
procesos y gestión del proyecto.
¿Qué sucede si . . . . .
Parece claro que por más que se haya asignado un equipo para testear, si no tenemos
resueltos algunos de éstos y más temas, vamos a obtener resultados bastante pobres.
La estrategia de prueba incluye:
1. Pensar.
2. Proponer.
3. Definir formas de trabajo.
4. Procesos a seguir.
Considerando al testing como parte del proyecto de desarrollo o mantenimiento del software.
Ayuda a las organizaciones a transitar a través del cambio y los objetivos de mejora, brindando
un marco para la toma de decisiones.
Nuestra estrategia de prueba puede contener más o menos de estos temas a considerar, el
listado sólo nos muestra algunos de ellos.
GESTION DE RIESGOS
1. Del producto.
2. Del proyecto.
Del Proyecto es por ejemplo si la infraestructura de pruebas no está lista en tiempo y forma o
si no se detectan incidentes en fase de testing y luego se encuentran en fase de producción.
Se podría confeccionar una lista priorizada de riesgos y luego realizar pruebas que explorasen
cada riesgo.
Podemos usar un enfoque de adentro hacia afuera, preguntándonos, ¿Qué riesgos se asocian a
ésta funcionalidad? O al revés, ¿Qué funcionalidades se asocian a ésta clase de riesgo?
Si bien no existe una receta para definir el criterio de finalización de pruebas. Este dependerá
del contexto del proyecto. Puntos a considerar para definir el criterio de finalización de
pruebas.
Algunos indicadores:
Definir la estructura del equipo de pruebas, conocer sus capacidades y potencial permitirán
elaborar el plan de formación adecuado. Esta capacitación ayudará al equipo a desarrollar
habilidades que le permitan investigar de forma más eficiente los productos bajo prueba.
Tener un equipo de testing, significa mucho más que poner en un mismo lugar físico a varias
personas. La formación del equipo, su integración, organización y forma de trabajo dependerá
de cómo se perciba el testing en la institución y se verán reflejadas en los resultados que se
obtengan.
Otros aspectos.
1. Tipos de prueba.
Se presenta una matriz de cuadrantes testing, como herramienta de ayuda a los testers, que
permite analizar si se han considerado los distintos tipos de prueba necesarios en un proyecto
dado.
Cada uno de los cuadrantes refleja las distintas razones para hacer pruebas, entre las que se
encuentran: detectar errores, disminuir el riesgo, aumentar el nivel de confianza, conocer la
aplicación. En el eje vertical, la matriz se divide en las pruebas que apoyan al equipo y las
pruebas que critican al producto. En el eje horizontal estas pruebas se dividen en pruebas
orientadas al negocio y pruebas orientadas a la tecnología.
La numeración de los cuadrantes no condiciona el orden en que se realizan los distintos tipos
de prueba. Los cuadrantes de la izquierda constituyen las pruebas que apoyan al equipo
mientras se desarrolla el producto. El objetivo de estas pruebas es ayudar a la especificación
de requisitos y en el diseño. Esta concepción de las pruebas, es una gran diferencia de los
proyectos ágiles con respecto a los proyectos tradicionales.
Los cuadrantes del lado derecho representan a las pruebas que critican el producto. Estas
pruebas consisten en revisar el software de manera constructiva, con el objetivo de aprender
cómo mejorarlo. Como resultado de este aprendizaje, se pueden incorporar nuevos requisitos,
pruebas y ejemplos, que ayuden al equipo y guíen al desarrollo. La información que se obtiene
en las pruebas que revisan el producto, debería servir de entrada para el lado izquierdo de la
matriz y así ser utilizada para crear nuevas pruebas y guiar el desarrollo futuro.
Los cuadrantes ayudan a identificar los distintos tipos de pruebas necesarios para guiar el
desarrollo. Las iteraciones cortas del desarrollo ágil brindan a los equipos la oportunidad de
aprender y experimentar con los distintos cuadrantes de testing. Por ejemplo si se detecta
tarde que el diseño no es escalable, entonces en la próxima story o proyecto se deberán
introducir las pruebas de carga de forma más temprana. El objetivo de los cuadrantes como
ayuda es para asegurarse que las pruebas se están haciendo a tiempo.
El cuadrante inferior izquierdo representa el desarrollo guiado por las pruebas, actividad
central del desarrollo ágil.
Las pruebas unitarias ayudan a los desarrolladores a comprender exactamente qué necesita
hacer el código y sirven