Le suivi de la qualité du code par équipe

YounitedTech
Dec 21, 2018 · 8 min read

Mesurer la qualité du code — la qualimétrie

Le résumé de l’analyse de code d’une application par SonarQube

Le contexte de Younited Credit

Permettre à chaque équipe de suivre la qualité de ses applications

Création d’un utilisateur SonarQube dédié au reporting

Création d’un rapport Power BI alimenté par la web API de SonarQube

Création de la source de données

Créer une fonction retournant l’historique des mesures d’une application

let history = (projectKey, metrics, monthsAgo) =>letDateTimeFrom=Date.AddMonths(DateTime.Date(DateTime.LocalNow()), -monthsAgo),Source = Json.Document(Web.Contents("https://<URL de votre service SonarQube>/api",[RelativePath="measures/search_history",Query=[component=projectKey,metrics=Text.Combine(metrics, ","),from=Date.ToText(DateTimeFrom, "yyyy-MM-ddT00:00:00+0100")]])),measures = Source[measures],#"Converti en table" = Table.FromList(measures, Splitter.SplitByNothing(), null, null, ExtraValues.Error),#"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"metric", "history"}, {"Column1.metric", "Column1.history"}),#"Column1.history développé" = Table.ExpandListColumn(#"Column1 développé", "Column1.history"),#"Column1.history développé1" = Table.ExpandRecordColumn(#"Column1.history développé", "Column1.history", {"date", "value"}, {"Column1.history.date", "Column1.history.value"})in#"Column1.history développé1"in history
Exemple de récupération de mesures de qualité d’une application

Créer une requête retournant l’historique des mesures de toutes les applications

letSource = Json.Document(Web.Contents("https://<URL de votre service SonarQube>/api",[RelativePath="projects/index"])),#"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),#"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"id", "k", "nm", "sc", "qu"}, {"Column1.id", "Column1.k", "Column1.nm", "Column1.sc", "Column1.qu"}),#"Fonction personnalisée appelée" = Table.AddColumn(#"Column1 développé", "project-measures-history", each #"project-measures-history"([Column1.k], metrics, monthsAgo)),#"project-measures-history développé" = Table.ExpandTableColumn(#"Fonction personnalisée appelée", "project-measures-history", {"Column1.metric", "Column1.history.date", "Column1.history.value"}, {"project-measures-history.Column1.metric", "project-measures-history.Column1.history.date", "project-measures-history.Column1.history.value"}),#"Colonnes supprimées" = Table.RemoveColumns(#"project-measures-history développé",{"Column1.id", "Column1.nm", "Column1.sc", "Column1.qu"}),#"Colonnes renommées" = Table.RenameColumns(#"Colonnes supprimées",{{"Column1.k", "Project"}, {"project-measures-history.Column1.history.date", "Timestamp"}, {"project-measures-history.Column1.metric", "Metric"}, {"project-measures-history.Column1.history.value", "Value"}}),#"Type modifié" = Table.TransformColumnTypes(#"Colonnes renommées",{{"Timestamp", type datetimezone}, {"Value", type number}}),#"Colonne dynamique" = Table.Pivot(#"Type modifié", List.Distinct(#"Type modifié"[Metric]), "Metric", "Value", List.Sum),#"Colonne en double" = Table.DuplicateColumn(#"Colonne dynamique", "Timestamp", "Timestamp - Copie"),#"Colonnes renommées1" = Table.RenameColumns(#"Colonne en double",{{"Timestamp - Copie", "date"}}),#"Colonne en double1" = Table.DuplicateColumn(#"Colonnes renommées1", "Timestamp", "Timestamp - Copie"),#"Colonnes renommées2" = Table.RenameColumns(#"Colonne en double1",{{"Timestamp - Copie", "time"}}),#"Heure extraite" = Table.TransformColumns(#"Colonnes renommées2",{{"time", DateTime.Time}}),#"Date extraite" = Table.TransformColumns(#"Heure extraite",{{"date", DateTime.Date}})in#"Date extraite"

Visualisation des mesures

Pour conclure


Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade