Code coverage per le richieste pull

Azure DevOps Services

Il code coverage è una metrica di qualità importante e consente di misurare la percentuale del codice del progetto da testare. Per garantire che la qualità del progetto migliori nel tempo (o almeno non regredisca), è necessario testare correttamente il nuovo codice nel sistema. Quando gli sviluppatori generano richieste pull, sapere se le modifiche sono coperte dai test consente di collegare eventuali fori di test prima che le modifiche vengano unite nel ramo di destinazione. I proprietari del repository possono anche voler impostare criteri per impedire l'unione di modifiche non test di grandi dimensioni.

Copertura completa, copertura delle differenze

La copertura completa è quando la copertura viene misurata per l'intera codebase di un progetto. Tuttavia, nel contesto delle richieste pull, gli sviluppatori sono incentrati sulle modifiche apportate e vogliono sapere se le righe specifiche di codice aggiunte o modificate vengono trattate. Questo tipo di copertura è diff coverage.

Prerequisiti

Per ottenere le metriche di copertura per una richiesta pull, configurare prima di tutto una pipeline che convalida le richieste pull. In questa pipeline configurare lo strumento di test usato per raccogliere le metriche di code coverage. I risultati della copertura devono quindi essere pubblicati nel server per la creazione di report.

Per altre informazioni sulla raccolta e la pubblicazione di risultati di code coverage per il linguaggio preferito, vedere la sezione Ecosistemi . Ad esempio, raccogliere e pubblicare code coverage per le app .NET Core.

Nota

Sebbene sia possibile raccogliere e pubblicare risultati di code coverage per molti linguaggi diversi usando Azure Pipelines, la funzionalità code coverage per le richieste pull descritta in questo documento è attualmente disponibile solo per i progetti .NET e .NET Core usando il formato dei risultati di code coverage di Visual Studio (estensione di file coverage). Il supporto per altri linguaggi e formati di copertura verrà aggiunto nelle attività cardine future.

Stato di copertura, dettagli e indicatori

Dopo aver configurato una pipeline che raccoglie e pubblica il code coverage, pubblica uno stato di code coverage quando viene generata una richiesta pull. Per impostazione predefinita, il server verifica la presenza del 70% delle righe modificate coperte dai test. La destinazione della soglia di copertura delle differenze può essere modificata in un valore di propria scelta. Per altre informazioni, vedere la sezione relativa alla configurazione delle impostazioni di seguito.

Screenshot che mostra il controllo dello stato di copertura.

Il controllo dello stato valuta il valore di copertura delle differenze per tutti i file di codice nella richiesta pull. Se si desidera visualizzare il valore % diff coverage per ognuno dei file, è possibile attivare i dettagli come indicato nella sezione di configurazione. Attivare i dettagli dei post come commento nella richiesta pull.

Screenshot che mostra i commenti di dettaglio della copertura.

Nella visualizzazione dei file modificati di una richiesta pull, anche le righe modificate vengono annotate con indicatori di copertura per indicare se tali righe sono coperte.

Screenshot che mostra gli indicatori di copertura.

Nota

Sebbene sia possibile compilare codice da un'ampia gamma di sistemi di controllo della versione supportati da Azure Pipelines, la funzionalità code coverage per le richieste pull descritte in questo documento è attualmente disponibile solo per Azure Repos.

Configurazione delle impostazioni di copertura

Se si desidera modificare le impostazioni predefinite dell'esperienza di code coverage per le richieste pull, è necessario includere un file YAML di configurazione denominato azurepipelines-coverage.yml nella radice del repository. Impostare i valori desiderati in questo file e verrà usato automaticamente alla successiva esecuzione della pipeline.

Le impostazioni che possono essere modificate sono:

Impostazione Descrizione Predefinito Valori consentiti
status Indica se il controllo dello stato del code coverage deve essere inserito nelle richieste pull.
Se si disattiva questa opzione, i controlli di copertura e le annotazioni di copertura non verranno visualizzate nella visualizzazione dei file modificati.
in on, off
target Il valore soglia di destinazione per la copertura delle differenze deve essere soddisfatto affinché venga pubblicato uno stato di copertura con esito positivo. 70% Numero % desiderato
comments Indica se un commento contenente i dettagli di copertura per ogni file di codice deve essere pubblicato nella richiesta pull spento on, off

Configurazione di esempio:

coverage:
  status:           # Code coverage status will be posted to pull requests based on targets defined below.
    comments: on    # Off by default. When on, details about coverage for each file changed will be posted as a pull request comment. 
    diff:           # Diff coverage is code coverage only for the lines changed in a pull request.
      target: 60%   # Set this to a desired percentage. Default is 70 percent

Altri esempi con i dettagli sono disponibili nel repository di esempi YAML di code coverage.

Nota

Gli indicatori di copertura si illuminano nella visualizzazione dei file modificati indipendentemente dal fatto che i dettagli del commento della richiesta pull siano attivati.

Suggerimento

Le impostazioni di copertura YAML sono diverse da una pipeline YAML. Ciò è dovuto al fatto che le impostazioni di copertura si applicano al repository e verranno usate indipendentemente dalla pipeline che compila il codice. Questa separazione significa anche che se si usano le pipeline di compilazione basate sulla finestra di progettazione classica, si otterrà il controllo dello stato del code coverage per le richieste pull.

Proteggere un ramo usando un criterio di code coverage

Il controllo dello stato del code coverage per le richieste pull è solo un suggerimento per gli sviluppatori e non impedisce l'unione delle richieste pull con bassa code coverage nel ramo di destinazione. Se si gestisce un repository in cui si vuole impedire agli sviluppatori di unire le modifiche che non soddisfano una soglia di copertura, è necessario configurare un criterio di ramo usando il controllo dello stato di copertura.

Suggerimento

Lo stato di code coverage inviato da una pipeline segue la convenzione {name-of-your-pipeline/codecoverage}di denominazione .

Nota

I criteri di ramo in Azure Repos (anche i criteri facoltativi) impediscono il completamento automatico delle richieste pull in caso di esito negativo. Questo comportamento non è specifico dei criteri di code coverage.

A partire da settembre 2023, i criteri di code coverage non verranno sottoposti a override in Non riuscito se la compilazione non riesce. Questa funzionalità verrà abilitata per tutti i clienti.

Domande frequenti

Quali strumenti di copertura e formati di risultati possono essere usati per convalidare il code coverage nelle richieste pull?

Il code coverage per la funzionalità delle richieste pull è attualmente disponibile solo per i formati di code coverage (con estensione coverage) di Visual Studio. Questa operazione può essere usata se si pubblica il code coverage usando l'attività Test di Visual Studio, il verbo di test dell'attività dotnet core e l'opzione TRX dell'attività pubblica risultati test. Il supporto per altri strumenti di copertura e formati di risultati verrà aggiunto nelle attività cardine future.

Se vengono attivate più pipeline quando viene generata una richiesta pull, la copertura verrà unita tra le pipeline?

Se vengono attivate più pipeline quando viene generata una richiesta pull, il code coverage non verrà unito. La funzionalità è attualmente progettata per una singola pipeline che raccoglie e pubblica il code coverage per le richieste pull. Se è necessaria la possibilità di unire i dati di coverage tra le pipeline, inviare una richiesta di funzionalità nella community degli sviluppatori.

Guida e supporto