Informe de ejemplo de seguimiento de requisitos
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Puede realizar un seguimiento de la calidad de los elementos de trabajo que pertenecen a la categoría Requisitos con el informe de seguimiento de requisitos. La categoría Requisitos incluye elementos de trabajo como Casos de usuario (Agile), Elementos de trabajo pendientes de producto (Scrum), Problemas (Básico) y Requisitos (CMMI). Para obtener más información sobre las categorías de elementos de trabajo, consulte Seguimiento de casos de usuario, problemas, errores y otros elementos de trabajo.
En la imagen siguiente se muestra un ejemplo de un informe de seguimiento de requisitos.
Este informe muestra la siguiente información para cada requisito que enumera:
- Porcentaje de trabajo completado: barra de progreso que muestra el porcentaje de trabajo completado en función del paquete acumulativo de horas completadas para todas las tareas vinculadas al requisito.
- Pruebas superadas: número de casos de prueba ejecutados que se pasan en función de la ejecución de pruebas más reciente.
- Pruebas con errores: el número de casos de prueba que se ejecutan en función de la ejecución de pruebas más reciente.
- Ejecutar pruebas: número de ejecuciones de pruebas que se ejecutan.
- Errores activos: el número de errores vinculados en un estado Activo.
- Errores cerrados: el número de errores vinculados en un estado Cerrado, Listo o Completado.
Nota:
El seguimiento de requisitos solo se admite para casos de prueba vinculados a través de un conjunto de pruebas basado en requisitos. La asociación entre un elemento de trabajo de requisito (User Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI) o Issue (Basic) y la ejecución de pruebas manuales solo se forma cuando el caso de prueba está vinculado a través de un conjunto de pruebas basado en requisitos.
Preguntas a las respuestas del informe
Los informes de seguimiento de requisitos son útiles para responder a los siguientes tipos de preguntas.
Progreso del trabajo
- ¿La cantidad de trabajo que queda por cada requisito se corresponde con sus expectativas?
- ¿Los requisitos de clasificación superior se implementan primero?
- ¿Cuántas pruebas se definen para cada requisito? ¿Cuántas pruebas se pasan?
- ¿Qué requisitos se implementan sin casos de prueba definidos para ellos?
Progreso de la calidad
- ¿Cuántos casos de prueba se han ejecutado para cada requisito y cuántos han superado?
- ¿Cuántos errores activos tiene cada requisito?
- ¿Se detectan errores para los requisitos que se están probando?
- ¿Se están resolviendo errores o están activos?
Evaluación de riesgos
- ¿Qué requisitos están en riesgo?
- ¿Qué requisitos no son lo suficientemente estables para la versión?
- ¿Qué requisitos podemos enviar hoy?
Importante
La integración y el acceso de Power BI a la fuente OData del servicio Analytics están disponibles con carácter general para Azure DevOps Services y Azure DevOps Server 2020 y versiones posteriores. Las consultas de ejemplo proporcionadas en este artículo solo son válidas en Azure DevOps Server 2020 y versiones posteriores, y dependen de la versión v3.0-preview o posterior. Le recomendamos que use estas consultas y nos proporcione sus comentarios.
Requisitos previos
- Access: sea miembro de un proyecto con al menos acceso básico .
- Permisos: de forma predeterminada, los miembros del proyecto tienen permiso para consultar Analytics y crear vistas.
- Para obtener más información sobre otros requisitos previos relacionados con las actividades de habilitación de servicios y características y seguimiento de datos generales, consulte Permisos y requisitos previos para acceder a Analytics.
Nota:
En este artículo se da por supuesto que lee Información general de los informes de ejemplo mediante consultas de OData y tiene conocimientos básicos de Power BI.
Para que el informe genere datos útiles, debe haber realizado las siguientes tareas:
- Ha definido los elementos de trabajo de requisitos y los ha asignado a las rutas de acceso de área e iteración de interés. Para obtener información sobre cómo definir rutas de acceso de área e iteración, vea Definir rutas de acceso de área y Definir rutas de acceso de iteración.
- Para obtener el porcentaje de finalización de horas, debe rellenar los campos Trabajo completo y Trabajo restante de tareas o errores vinculados a los requisitos con el tipo de vínculo Secundario .
- Para obtener el estado de ejecución de los casos de prueba, habrá creado conjuntos de pruebas basados en requisitos en planes de prueba correspondientes a esos requisitos. Las pruebas insertadas que agregue a través del panel cumplen este requisito previo, pero los requisitos que se vinculan a las pruebas no lo hacen. Para obtener más información, consulte Creación de planes de prueba y conjuntos de pruebas.
- Para obtener el estado de los errores, habrá creado y vinculado errores a los requisitos con el tipo de vínculo Secundario .
Consultas de ejemplo
Para generar el informe, debe agregar tres consultas de Power BI a Power BI Desktop y vincularlas. Cada consulta ejecuta el conjunto de WorkItems
entidades o TestPoints
.
Nota:
Los fragmentos de código de consulta de Power BI proporcionados en las secciones siguientes incluyen las transformaciones de datos necesarias para expandir columnas y cambiar el tipo de datos.
Nota:
Para determinar las propiedades disponibles con fines de filtro o informe, consulte Referencia de metadatos para Azure Boards. Puede filtrar las consultas o devolver propiedades mediante cualquiera de los Property
valores de un EntityType
valor o NavigationPropertyBinding Path
disponible con .EntitySet
Cada EntitySet
uno corresponde a un objeto EntityType
. Para obtener más información sobre el tipo de datos de cada valor, revise los metadatos proporcionados para el correspondiente EntityType
.
Rutas de acceso de área de consulta e iteración
Para limitar el ámbito del informe a una ruta de acceso de área e iteración determinada, puede filtrar la consulta mediante AreaSK e IteraciónSK. Para obtener más información, consulte Definición de consultas básicas mediante OData Analytics.
Consulta del porcentaje de finalización de horas para los requisitos
Nota:
La consulta siguiente funciona para el proceso de Agile, ya que define Remaining Work
y Completed Work
campos en elementos de trabajo.
Copie y pegue la siguiente consulta de Power BI directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Información general sobre informes de ejemplo mediante consultas de OData.
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?
$filter=(
IterationSK eq {iterationSK}
and AreaSK eq {areaSK}
and Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and Processes/all(p:p/IsBugType eq false)
)
&$expand=Descendants(
$apply=filter(
CompletedWork ne null
or RemainingWork ne null
)
/aggregate(
iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork,
iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
)/compute(
(SumCompletedWork add SumRemainingWork) as TotalWork,
SumCompletedWork as SumCompleted
)/compute(
iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork
)
)&$select=WorkItemId, Title", null, [Implementation="2.0"]),
#"Expanded Descendants" = Table.ExpandTableColumn(Source, "Descendants", {"SumCompletedWork", "SumRemainingWork", "TotalWork", "SumCompleted", "PercCompletedWork"}, {"Descendants.SumCompletedWork", "Descendants.SumRemainingWork", "Descendants.TotalWork", "Descendants.SumCompleted", "Descendants.PercCompletedWork"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Descendants",{{"Descendants.SumCompletedWork", type number}, {"Descendants.SumRemainingWork", type number}, {"Descendants.TotalWork", type number}, {"Descendants.SumCompleted", type number}, {"Descendants.PercCompletedWork", type number}})
in
#"Changed Type"
Consulta del estado de ejecución de pruebas de los requisitos
Nota:
Para determinar las propiedades disponibles con fines de filtro o informe, consulte Referencia de metadatos para Test Plans Analytics. Puede filtrar las consultas o devolver propiedades mediante cualquiera de los Property
valores de un EntityType
valor o NavigationPropertyBinding Path
disponible con .EntitySet
Cada EntitySet
uno corresponde a un objeto EntityType
. Para obtener más información sobre el tipo de datos de cada valor, revise los metadatos proporcionados para el correspondiente EntityType
.
Copie y pegue la siguiente consulta de Power BI directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Información general sobre informes de ejemplo mediante consultas de OData.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/TestPoints?
$apply=filter(
(TestSuite/RequirementWorkItem/IterationSK eq {iterationSK}
and TestSuite/RequirementWorkItem/AreaSK eq {areaSK}
and TestSuite/RequirementWorkItem/Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and TestSuite/RequirementWorkItem/Processes/all(p:p/IsBugType eq false)
)
)
/compute(TestSuite/RequirementWorkItem/WorkItemId as WorkItemId, TestSuite/RequirementWorkItem/Title as WorkItemTitle)
/groupby(
(WorkItemId, WorkItemTitle),
aggregate(
$count as TotalCount,
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as PassedCount,
cast(LastResultOutcome eq 'Failed', Edm.Int32) with sum as FailedCount,
cast(LastResultOutcome eq 'Blocked', Edm.Int32) with sum as BlockedCount,
cast(LastResultOutcome eq 'NotApplicable', Edm.Int32) with sum as NotApplicableCount,
cast(LastResultOutcome eq 'None', Edm.Int32) with sum as NotRunCount,
cast(LastResultOutcome ne 'None', Edm.Int32) with sum as RunCount)
)", null, [Implementation="2.0"]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"TotalCount", type number}, {"PassedCount", type number}, {"FailedCount", type number}, {"BlockedCount",type number}, {"NotApplicableCount", type number}, {"NotRunCount", type number}, {"RunCount", type number}})
in
#"Changed Type"
Nota:
La TestSuite/RequirementWorkItem/...
entrada indica que el elemento de trabajo debe estar vinculado al conjunto de pruebas a través de un conjunto de pruebas basado en requisitos, tal como se describe en los requisitos previos.
Consulta del estado de los errores vinculados a los requisitos
Copie y pegue la siguiente consulta de Power BI directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Información general sobre informes de ejemplo mediante consultas de OData.
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?
$filter=(
IterationSK eq {iterationSK}
and AreaSK eq {areaSK}
and Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and Processes/all(p:p/IsBugType eq false)
)
&$expand=Links(
$apply=filter(
(LinkTypeName eq 'Child' or LinkTypeName eq 'Related')
and TargetWorkItem/WorkItemType eq 'Bug'
)
/groupby(
(TargetWorkItem/State),
aggregate($count as Count)
)
)&$select=WorkItemId,Title", null, [Implementation="2.0"]),
#"Expanded Links" = Table.ExpandTableColumn(Source, "Links", {"TargetWorkItem", "Count"}, {"Links.TargetWorkItem", "Links.Count"}),
#"Expanded Links.TargetWorkItem" = Table.ExpandRecordColumn(#"Expanded Links", "Links.TargetWorkItem", {"State"}, {"Links.TargetWorkItem.State"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Links.TargetWorkItem", each [Links.Count] <> null and [Links.Count] <> ""),
#"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Links.TargetWorkItem.State]), "Links.TargetWorkItem.State", "Links.Count", List.Sum),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Active", type number}, {"Closed", type number}})
in
#"Changed Type"
Cadenas de sustitución y desglose de consultas
Sustituya las cadenas siguientes por sus valores. No incluya corchetes {} con la sustitución. Por ejemplo, si el nombre de la organización es "Fabrikam", reemplace por {organization}
Fabrikam
, no {Fabrikam}
por .
{organization}
- El nombre de la organización{project}
: el nombre del proyecto.{iterationSK}
- Guid asociado a la ruta de acceso de iteración de interés. Para buscar el GUID, consulte [.. /extend-analytics/wit-analytics.md#iterationsk](Devolver iteraciónSK para una ruta de iteración específica){areaSK}
- El GUID asociado a la ruta de acceso de área de interés. Para buscar el GUID, consulte [.. /extend-analytics/wit-analytics.md#areask](Return the AreaSK for a specific Area Path).
Desglose de consultas
En la tabla siguiente se describe cada parte de la consulta.
Elemento de consulta
Descripción
$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK}
)`
Devuelve datos solo para los elementos de trabajo de iteración, área y trabajo pendiente seleccionados.
Processes/any(p:p/BacklogType eq 'RequirementBacklog')
Filtre los elementos de trabajo de tal manera que deban estar en la categoría "requisitos" para al menos un proceso asociado a ellos.
Processes/all(p:p/IsBugType eq false)
Omita los elementos de trabajo de tipo de error al obtener los requisitos. En la plantilla De proceso básico, los elementos de trabajo issue también son de tipo de error, por lo que para el proceso básico, quite esta cláusula de la consulta.
filter( (TestSuite/RequirementWorkItem/IterationSK eq {iterationSK} and TestSuite/RequirementWorkItem/AreaSK eq {areaSK} and TestSuite/RequirementWorkItem/Processes/any(p:p/BacklogType eq 'RequirementBacklog') and TestSuite/RequirementWorkItem/Processes/all(p:p/IsBugType eq false) ) )
Devolver datos solo para los requisitos seleccionados en función de la iteración y el área.
/aggregate($count as TotalCount,
Agregue datos en los puntos de prueba filtrados con recuento como TotalCount
.
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed
Al agregar puntos de prueba de conversión de tipos que tienen el resultado de ejecución más reciente "Pasado" a 1 y sumarlos como métrica "Passed
".
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Devuelve datos completados de trabajo y trabajo restante para elementos de trabajo secundarios de elementos primarios filtrados.
/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
Agregar datos de trabajo completado y trabajo restante en los elementos de trabajo filtrados.
)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted
Calcule el paquete acumulativo total de trabajo completado y trabajo restante.
)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )
Calcule el porcentaje de wor completado.
Creación del informe de tabla
Para crear el informe, realice los pasos siguientes:
- En la pestaña Modelado, elija Administrar relaciones y vincule los tres resultados de la consulta por
WorkItemId
columna. - En Visualizaciones, elija Tabla.
- Agregue las columnas que le interesan de las tres consultas de Power BI.
- Seleccione Suma como agregación para columnas de adición como pruebas superadas, etc.
El informe debe tener un aspecto similar al de la imagen siguiente.
Artículos relacionados
- Exploración de informes de ejemplo mediante consultas de OData
- Construcción de consultas de OData para Analytics
- Conexión a Power BI mediante consultas de OData
- Consulte los metadatos de Azure Boards Analytics.
- Acceso a informes de ejemplo y índice de referencia rápida
- Agregar una segmentación de equipo a un informe existente