Visualiza la calidad del software con JIRA, Sheets y Looker

Visualiza la calidad del software con JIRA, Sheets y Looker

Sara Jiménez Carbajal, Expert Quality Engineer

Sara Jiménez Carbajal

Expert Quality Engineer

19 de marzo de 2025

Introducción

En el mundo del desarrollo de software, la calidad es un factor crítico. Para medir y mejorar la calidad, se utilizan métricas como el DDE (Eficacia de la detección de defectos), DRE (Eficacia de la eliminación de defectos) y DAA (Edad Media del defecto).

En este artículo, veremos cómo medir estas métricas extrayendo datos desde JIRA Cloud, los analizaremos con Google Sheets y por último, los visualizaremos dinámicamente en Looker Studio para comprender su evolución a lo largo del tiempo.

Paso 1: Crear una hoja de cálculo de Google

Google Sheets nos permite organizar, analizar y transformar datos. Por ello, el primer paso para configurar nuestro sistema de almacenamiento de métricas será crear una hoja de cálculo con varias pestañas. En estas pestañas almacenaremos el listado de incidencias detectadas por entorno. En este caso, tendremos tres pestañas:

  • BUGs_Preprod: incidencias de preproducción

  • BUGs_US: incidencias durante la fase de desarrollo

  • BUGs_Prod: incidencias de producción

Una vez tengamos estas pestañas creadas, añadiremos otra más, DataStudio. En esta nueva pestaña almacenaremos las métricas calculadas a partir de los datos de las otras pestañas, las cuales posteriormente serán visualizadas en Looker Studio.

Paso 2: Recopilar datos de JIRA Cloud

Usamos JIRA Cloud como herramienta para el seguimiento de proyectos y problemas y en ella se almacenan una gran cantidad de datos valiosos relacionados con el ciclo de vida de los defectos. Tenemos varias opciones para acceder a esta información, exportar datos a CSV, utilizar la API de JIRA, extensión de JIRA cloud for sheets,... nosotros nos centraremos en esta última.

Para usar la extensión de JIRA cloud for sheets tenemos que asegurarnos de:

1- Tener la extensión disponible en nuestro entorno de Google Sheet, para ello vamos a Extensiones ⇒ JIRA Cloud for sheets ⇒ Open…

Image1-Jiracloudforsheets.webp

2- Es necesario que dicha extensión esté conectada a JIRA Cloud, con el que vamos a trabajar.

Image2-Jiracloudforsheets.webp

Una vez tengamos esto listo, procederemos a extraer los datos que nos resulten interesantes mediante consultas JQL (Jira Query Language) que es la forma más potente y flexible de buscar en Jira.

Para ello, nos iremos a una de las pestañas que hemos creado anteriormente, por ejemplo BUGs_Preprod, y abriremos la extensión. En la extensión nos aparecerán 3 pestañas:

  • Issues: será dónde indiquemos la consulta JQL para la obtención de los datos que queremos.

  • Fields: indicaremos qué campos/columnas queremos tener en nuestro listado.

  • Schedule: cada cuánto tiempo queremos se ejecute la obtención de issues.

Imagetriple-Jiracloudforsheets4.webp

Después de configurar estas pestañas, pulsaremos sobre el botón Get issues now que aparece en la parte inferior de la extensión, se empezarán a extraer los datos de JIRA Cloud y se almacenarán en las diferentes pestañas (esta operación hay que repetirla en cada una de las pestañas) con la información correspondiente en función de la consulta JQL.

Paso 3: Calcular métricas en Google Sheets

Ahora comenzaremos a trabajar en la pestaña de DataStudio que creamos anteriormente.

Image4-Jiracloudforsheets.png

En ella, tendremos las siguientes columnas:

  • Mes: una fila por cada uno de los meses del año.

  • Fecha inicial: una fila con el primer día del mes con el formato dd/mm/yyyy

  • Fecha final: una fila con último día del mes con el formato dd/mm/yyyy

  • Defectos encontrados antes de Prod: se contarán los defectos encontrados antes de producción entre la fecha inicial y final (ambos inclusive). 

  • Defectos encontrados en Prod: se contarán los defectos encontrados en producción entre la fecha inicial y final (ambos inclusive). 

  • Total de defectos: es la suma de todos los defectos encontrados entre la fecha inicial y final.

  • DDE (Eficacia de la detección de defectos): es el número de defectos encontrados antes de producción dividido por el total de defectos identificados entre fecha inicial y final.

  • Defectos solucionados: es la suma de los defectos creados y solucionados entre las fecha inicial y final y cuyo estado en JIRA es finalizado.

  • DRE (Eficacia de la eliminación de defectos): es el número de defectos creados y resueltos entre la fecha inicial y final dividido por el total de defectos identificados entre fecha inicial y final.

  • DAA (Edad Media del defecto) - Pre: es la edad de todos los defectos de preproducción (fecha de resolución menos fecha de creación) dividido entre el total de defectos identificados.

  • DAA (Edad Media del defecto) - Prod: es la edad de todos los defectos de producción (fecha de resolución menos fecha de creación) dividido entre el total de defectos identificados.

  • DAA (Edad Media del defecto) - US: es la edad de todos los defectos de US (fecha de resolución menos fecha de creación) dividido entre el total de defectos identificados.

Aquí encontrarás una plantilla que incluye las fórmulas que detallaremos a continuación. Además, proporcionamos el script de Apps Script necesario para el cálculo de una de estas fórmulas.

Defectos encontrados antes de Producción

\=COUNTIFS(BUGs\_Preprod!$D$2:$D;">="&B5;BUGs\_Preprod!$D$2:$D;"<"&B6)+COUNTIFS(BUGs\_US!$D$2:$D;">="&B5;BUGs\_US!$D$2:$D;"<"&B6)

dónde:

  • BUGs_Preprod!$D$2:$D ⇒ es la columna donde aparece la fecha de creación del defecto de la pestaña BUGs_Preprod

  • BUGs_US!$D$2:$D ⇒ es la columna donde aparece la fecha de creación del defecto de la pestaña BUGs_US

  • &B5 ⇒ es la fecha inicial

  • &B6 ⇒ es la fecha final

Defectos encontrados en Producción


\=COUNTIFS(BUGs\_Prod!$D$2:$D;">="&B5;BUGs\_Prod!$D$2:$D;"<"&B6)

dónde:

  • BUGs_Prod!$D$2:$D ⇒ es la columna donde aparece la fecha de creación del defecto de la pestaña BUGs_Prod

  • &B5 ⇒ es la fecha inicial

  • &B6 ⇒ es la fecha final

Total de defectos


\=IF(AND(D5\="";E5\="");"";D5+E5)

dónde:

  • D5 ⇒ son los defectos encontrados antes de producción

  • E5 ⇒ son los defectos encontrados en producción

DDE


\=IF(F5\="";"";IF(F5\=0;1;IF(D5/F5\>1;1;D5/F5)))

dónde:

  • F5 ⇒ es el total de defectos encontrados

  • D5 ⇒ son los defectos encontrados antes de producción

Defectos solucionados


\=COUNTIFS(BUGs\_Preprod!$D$2:$D;">="&B5;BUGs\_Preprod!$D$2:$D;"<"&B6;BUGs\_Preprod!$E$2:$E;">="&B5;BUGs\_Preprod!$E$2:$E;"<"&B6;BUGs\_Preprod!$C$2:$C;"Finalizada")+COUNTIFS(BUGs\_US!$D$2:$D;">="&B5;BUGs\_US!$D$2:$D;"<"&B6;BUGs\_US!$E$2:$E;">="&B5;BUGs\_US!$E$2:$E;"<"&B6;BUGs\_US!$C$2:$C;"Finalizada")+COUNTIFS(BUGs\_Prod!$D$2:$D;">="&B5;BUGs\_Prod!$D$2:$D;"<"&B6;BUGs\_Prod!$E$2:$E;">="&B5;BUGs\_Prod!$E$2:$E;"<"&B6;BUGs\_Prod!$C$2:$C;"Finalizada")

dónde: 

  • BUGs_Preprod!$D$2:$D ⇒corresponde a la columna que contiene la fecha de creación del defecto de la pestaña BUGs_Preprod

  • BUGs_Preprod!$E$2:$E ⇒ corresponde a la columna que contiene la fecha de resolución del defecto de la pestaña BUGs_Preprod

  • BUGs_Preprod!$C$2:$C ⇒ corresponde a la columna donde aparece el estado del defecto de la pestaña BUGs_Preprod

  • BUGs_US!$D$2:$D ⇒ corresponde a la columna que contiene la fecha de creación del defecto de la pestaña BUGs_US

  • BUGs_US!$E$2:$E ⇒ corresponde a la columna que contiene la fecha de resolución del defecto de la pestaña BUGs_US

  • BUGs_US!$C$2:$C ⇒ corresponde a la columna que contiene el estado del defecto de la pestaña BUGs_US

  • BUGs_Prod!$D$2:$D ⇒ corresponde a la columna que contiene la fecha de creación del defecto de la pestaña BUGs_Prod

  • BUGs_Prod!$E$2:$E ⇒ corresponde a la columna que contiene la fecha de resolución del defecto de la pestaña BUGs_Prod

  • BUGs_Prod!$C$2:$C ⇒ corresponde a la columna que contiene el estado del defecto de la pestaña BUGs_Prod

  • &B5 ⇒ es la fecha inicial

  • &B6 ⇒ es la fecha final

DRE


\=IF(F5\="";"";IF(F5\=0;1;IF(H5/F5\>1;1;H5/F5)))

dónde:

  • F5 ⇒ es el total de defectos encontrados 

  • H5 ⇒ son los defectos solucionados

DAA

Para calcular esta métrica vamos a usar una función de Google App Script por cada una de las pestañas (BUGs_Preprod, BUGs_Prod, BUGs_US). Los pasos a seguir serían:

1-Ir a ExtensionesApp Scripts y esto nos abre una nueva ventana en el navegador.

Image5-Jiracloudforsheets.webp

2- En ella pulsaremos sobre el botón + ⇒ Apps Script

Image6-Jiracloudforsheets.webp

3- Se creará un nuevo archivo al que tendremos que dar un nombre, por ejemplo Código.gs

4- En este archivo pegaremos la siguiente función 3 veces, cambiando el nombre de la función (getDAA_Prod y getDAA_US) y la pestaña sobre la que queramos trabajar (BUGs_Prod y BUGs_US)

function getDAA\_Preprod(end\_date) {  
  var sheet = SpreadsheetApp.getActive().getSheetByName('BUGs\_Preprod');  
  var lastRow = sheet.getLastRow();  
  var rangeCreatedDate = sheet.getRange(2, 4, lastRow).getValues();  
  var rangeResolutionDate = sheet.getRange(2, 5, lastRow).getValues();  
  
  var ageOfAllDefects = 0;  
  var totalNumberOfDefects = 0;  
  for (var row in rangeCreatedDate) {  
var resolutionTime = new Date(rangeResolutionDate\[row\]);  
if (resolutionTime < end\_date) {  
  var createdTime = new Date(rangeCreatedDate\[row\]);  
  
  //Age of a defect = Resolution Date - Creation Date  
  var diff = resolutionTime.getTime() - createdTime.getTime();  
  var ageOfDefectInDays = Math.round(diff / (1000 \* 60 \* 60 \* 24));  
  Logger.log('createdTime: %s, resolutionTime: %s, ageOfDefectInDays: %s', createdTime, resolutionTime, ageOfDefectInDays);  
  ageOfAllDefects += ageOfDefectInDays;  
  Logger.log('ageOfAllDefects: %s days', ageOfAllDefects);  
  totalNumberOfDefects++;  
  Logger.log('totalNumberOfDefects: %s', totalNumberOfDefects);  
}  
  }  
  
  if (totalNumberOfDefects == 0){  
return 0;  
  }  
  
  var result = ageOfAllDefects / totalNumberOfDefects;  
  return result;  
}

En la columna donde queramos tener el cálculo del DAA pondremos la siguiente fórmula  (cambiando el nombre en función de la columna) que invoca a las funciones definidas anteriormente.


\=getDAA\_Preprod(B6)

dónde:

  • B6 ⇒ es la fecha final

Paso 4: Visualizar los datos en Looker Studio

Looker Studio (anteriormente Google Data Studio) es una plataforma de visualización de datos que te permite crear paneles interactivos y gráficos informativos. 

Para visualizar las métricas de calidad calculadas anteriormente seguiremos los siguientes pasos.

Conectar Looker Studio a Google Sheets:

Iremos a Looker Studio y pulsaremos en Informe vacío

Image7-Jiracloudforsheets.webp

Esta acción nos abrirá una pantalla cómo la siguiente donde elegir la fuente de datos desde dónde queremos importar nuestros datos.

Image8-Jiracloudforsheets.webp

Seleccionamos la opción Hojas de cálculo de Google y se abrirá una nueva ventana. En ella, se nos solicitará autorizar a Looker Studio para acceder a nuestras hojas de cálculo de Google. Este paso es necesario para establecer la conexión entre ambas plataformas y permitir que Looker Studio pueda leer y utilizar los datos de nuestras hojas de cálculo.

Image9-Jiracloudforsheets.webp

Una vez completada la autorización, se mostrará una lista de las hojas de cálculo de Google a las que tienes acceso. Selecciona la hoja que te interesa y la pestaña que contiene los datos que deseas importar, en este caso, la pestaña DataStudio. Finalmente, haz clic en el botón Añadir ubicado en la parte inferior derecha.

Con esto, tendremos ya nuestros datos de la pestaña DataStudio añadidos en Looker Studio para poder crear gráficos con ellos.

Crear gráficos

En función de la métrica que vayamos a visualizar, usaremos un tipo de gráfico u otro. En nuestro caso usaremos:

  • Gráfico combinado ⇒ tanto para DDE como DRE

  • Gráfico de líneas ⇒ DAA

Para crear un gráfico, haz clic en Añadir un gráfico y selecciona el tipo de gráfico que prefieras.

JiraCludforsheetsgiftgrficos.gif

DDE

Para el gráfico del DDE tendremos que hacer la siguiente configuración después de haber seleccionado el gráfico.

JiraCludforsheetsgiftgrficos2.gif

Para visualizar los datos según nuestras preferencias en las diferentes series, le aplicaremos los siguientes estilos:

JiraCludforsheetsgiftgrficos3.gif

Una vez configurado todo lo anterior, el gráfico que visualizaremos será como el siguiente:

Image10-Jiracloudforsheets.webp

DRE

Para el gráfico del DRE tendremos que hacer la misma configuración y establecer los mismos estilos que para la métrica DDE cambiando sólamente las 3 métricas de entrada que en este caso serían:

  • DRE

  • Defectos solucionados

  • Total de defectos

Una vez configurado todo, el gráfico que visualizaremos será como el siguiente:

Image11-Jiracloudforsheetsbis.webp

DAA

Una vez seleccionado el gráfico para el DAA, procederemos con la siguiente configuración:

JiraCludforsheetsgiftgrficos4.gif

Le daremos los siguientes estilos para visualizar los datos como queremos.

JiraCludforsheetsgiftgrficos5.gif

Una vez configurado todo, el gráfico que visualizaremos será como el siguiente:

Image12-Jiracloudforsheets.webp

Paso 5: Analizar la evolución de las métricas de calidad

Al visualizar las métricas DDE, DRE y DAA en Looker Studio, podemos identificar tendencias y patrones a lo largo del tiempo. Esto nos permite:

  • Evaluar la efectividad de las estrategias de mejora de la calidad: Si estás implementando cambios en tus procesos de desarrollo, puedes realizar un seguimiento de su impacto en las métricas de calidad.

  • Identificar áreas problemáticas: Si ciertas métricas muestran una tendencia negativa, puedes investigar las causas subyacentes y tomar medidas correctivas.

  • Comparar el rendimiento de diferentes equipos o proyectos: Puedes utilizar las métricas de calidad para comparar el rendimiento de diferentes equipos o proyectos y identificar las mejores prácticas.

¿Cómo podemos analizar el valor de la métrica DDE?

  • Un valor alto del DDE nos indica que un porcentaje significativo de los defectos presentes en el software se han identificado durante las pruebas, lo que sugiere un proceso de detección de defectos más eficaz.

  • Un valor bajo de DDE nos puede indicar que un gran número de defectos no se han detectado durante las pruebas, lo que pone de manifiesto posibles deficiencias en el enfoque de las mismas.

¿Cómo podemos analizar el valor de la métrica DRE?

  • Un valor alto del DRE nos indica una alta eficacia en la detección y corrección de defectos, lo que significa que la mayoría de los defectos se han identificado y resuelto durante la fase específica.

  • Un valor bajo del DRE nos puede indicar ineficacia en el proceso de detección de defectos o la necesidad de mejorar los métodos de prueba y corrección de defectos.

¿Cómo podemos analizar el valor de la métrica DAA?

  • Un valor alto del DAA nos puede indicar que los defectos no se han solucionado con la velocidad adecuada y que hay que detectar qué es lo que ha ocurrido para que esto pase.

  • Un valor bajo del DAA nos indica que la capacidad del equipo de desarrollo para corregir los defectos es bastante rápida.

Conclusión

En este artículo se presenta una metodología ágil para calcular métricas clave de calidad, como DDEDRE y DAA, que proporcionan información valiosa para optimizar los procesos de calidad en proyectos. Utilizando herramientas como JIRA CloudGoogle Sheets y Looker Studio, es posible centralizar estos datos y automatizar su obtención (exceptuando las configuraciones iniciales). Esto permite a todos los miembros del equipo, ya sean de desarrollo, negocio o calidad, tener visibilidad clara y en tiempo real sobre el estado de la calidad del proyecto.

Sara Jiménez Carbajal, Expert Quality Engineer

Sara Jiménez Carbajal

Expert Quality Engineer

Sara Jiménez Carbajal es experta de QE en Sngular buscando las mejores soluciones de calidad para nuestros clientes y en constante aprendizaje de nuevas tecnologías, poniendo el foco en automatizaciones y metodologías ágiles. Dedica su tiempo libre a diferentes hobbies, entre los principales se encuentran practicar deporte, viajar y construir legos.


Nuestras últimas novedades

¿Te interesa saber cómo nos adaptamos constantemente a la nueva frontera digital?

Roles y responsabilidades Scrum: un paso hacia la transparencia y el compromiso
Roles y responsabilidades Scrum: un paso hacia la transparencia y el compromiso

Insight

23 de enero de 2025

Roles y responsabilidades Scrum: un paso hacia la transparencia y el compromiso

Contract Testing con Pact - La guía definitiva
Contract Testing con Pact - La guía definitiva

Tech Insight

19 de diciembre de 2024

Contract Testing con Pact - La guía definitiva

Agilidad, complejidad y método empírico
Agilidad, complejidad y método empírico

Insight

18 de diciembre de 2024

Agilidad, complejidad y método empírico

Tecnologías rompedoras hoy, que redibujarán el mapa de la innovación en 2025
Tecnologías rompedoras hoy, que redibujarán el mapa de la innovación en 2025

Insight

10 de diciembre de 2024

Tecnologías rompedoras hoy, que redibujarán el mapa de la innovación en 2025