Compartir vía


Informe de ejemplo de paquete acumulativo de requisitos

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

El informe acumulativo de seguimiento de requisitos se basa en el informe seguimiento de requisitos y muestra cómo agregar métricas para un resumen de un solo nivel. Por ejemplo, si va a realizar el seguimiento de los requisitos con casos de usuario, puede agregar datos para características mediante las consultas proporcionadas en este artículo.

Un ejemplo se muestra en la imagen siguiente.

Captura de pantalla del informe de resumen de historias de Power BI.

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.

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 y IterationSK. Para obtener más información, consulte Definición de consultas básicas mediante OData Analytics.

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.

Consulta del porcentaje de finalización de horas para los requisitos

Nota:

Cambie en WorkItemType función del proceso que esté usando. La plantilla de Scrum admite feature y la plantilla Basic admite Epic como tipo de elemento de trabajo acumulativo, respectivamente.

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 WorkItemType eq 'Feature'
)
&$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(iif(TestSuite/RequirementWorkItem/Parent ne null, TestSuite/RequirementWorkItem/Parent/WorkItemId, 0) as ParentWorkItemId, 
	iif(TestSuite/RequirementWorkItem/Parent ne null, TestSuite/RequirementWorkItem/Parent/Title, 'Unparented') as ParentWorkItemTitle
	)/groupby(
	    (ParentWorkItemId, ParentWorkItemTitle), 
	    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

Nota:

Cambie en WorkItemType función del proceso que esté usando. La plantilla de Scrum admite feature y la plantilla Basic admite Epic como tipo de elemento de trabajo acumulativo, respectivamente.

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 WorkItemType eq 'Feature'
    )
&$expand=Descendants(
    $apply=filter(
        WorkItemType eq 'Bug'
    )
    /groupby(
        (State),
        aggregate($count as Count)
    )
)
&$select=WorkItemId,Title", null, [Implementation="2.0"]),
    #"Expanded Descendants" = Table.ExpandTableColumn(Source, "Descendants", {"State", "Count"}, {"Descendants.State", "Descendants.Count"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Descendants", each [Descendants.Count] <> null and [Descendants.Count] <> ""),
    #"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Descendants.State]), "Descendants.State", "Descendants.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} and WorkItemType eq 'Feature' )'

Devuelve datos solo para las características de la iteración y el área especificados.

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)))

Devuelve datos solo para los elementos de requisitos de trabajo pendiente seleccionados en la iteración y el área especificados.

&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )

Expanda los elementos secundarios de Características y devuelva los datos trabajo completados y Trabajo restante para los elementos de trabajo.

&$expand=Descendants( $apply=filter( WorkItemType eq 'Bug' ) /groupby( (State), aggregate($count as Count) )

Expanda los elementos secundarios de Características y filtre por error, agrupe los datos devueltos por Estado y sol el recuento total de elementos secundarios.

/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 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)

Al agregar, sumar los valores de los puntos de prueba en función de su resultado de ejecución más reciente de Pasados, Erróneos, Bloqueados, NotApplicable y Ninguno. Además, suma los valores de los puntos de prueba cuyo resultado más reciente no es igual a Ninguno para obtener el total RunCount.

/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

  1. En la pestaña Modelado, elija Administrar relaciones y vincule los tres resultados de la consulta por WorkItemId columna.
  2. En Visualizaciones, elija Tabla.
  3. Agregue las columnas que le interesan de las tres consultas de Power BI.
  4. Seleccione Suma como agregación para columnas de adición como pruebas superadas, etc.

    Power BI selecciona Suma como agregación.

En este caso, los escenarios de autenticación son una característica primaria de dos casos de usuario.

Captura de pantalla del informe de resumen de casos de ejemplo de Power BI.