Votre modèle de données pour le cycle de vie du développement logiciel
Votre modèle de données pour le cycle de vie du développement logiciel
- Attributs recommandés à collecter
- Activités clés à suivre
- Directives d'extraction pour ServiceNow DevOps
Attributs du cycle de vie du développement logiciel
| Nom | Description | ||
|---|---|---|---|
| Élément de développement DevelopmentItem | L'identifiant unique pour une unité de travail unique, telle qu'une fonctionnalité, un bug ou une tâche, qui progresse à travers le cycle de vie du développement. | ||
| Description L'élément de développement (Development Item) sert d'identifiant de cas principal, représentant une unité de travail distincte suivie. Il relie toutes les activités, de la conception et planification initiales jusqu'au développement, test et déploiement pour cet élément spécifique. Dans l'analyse par process mining, cet attribut est fondamental pour reconstituer le parcours de bout en bout de chaque élément de travail. Il permet la visualisation des flux de processus, le calcul des temps de cycle totaux et l'identification des variantes de processus pour les fonctionnalités individuelles ou les corrections de bugs. Chaque événement du journal doit être associé à un élément de développement pour construire une carte de processus cohérente. Pourquoi c'est important C'est l'identifiant principal qui connecte toutes les activités de développement connexes en une seule instance de processus, permettant d'analyser le cycle de vie complet de chaque élément de travail. Où obtenir Cet identifiant est généralement la clé primaire des tables gérant les stories, les bugs ou les tâches, telles que les tables 'rm_story', 'rm_bug' ou 'task' dans ServiceNow. Exemples STRY0010015BUG0034092TASK0050118 | |||
| Heure de début EventTime | Le timestamp exact indiquant quand une activité ou un événement spécifique s'est produit. | ||
| Description Cet attribut fournit la date et l'heure d'enregistrement de chaque activité du cycle de vie du développement. Il est essentiel pour l'ordonnancement chronologique des événements et pour toutes les analyses basées sur le temps. En process mining, l'heure de début est utilisée pour calculer les durées entre les activités, identifier les temps d'attente et mesurer le temps de cycle global du processus. C'est un composant critique pour les dashboards analysant les performances, tels que l'analyse du temps de cycle de bout en bout du SDLC, et pour le calcul d'indicateurs de performance clés comme le Code Review Lead Time. Pourquoi c'est important Cet horodatage est essentiel pour ordonner correctement les événements et calculer toutes les métriques de performance, y compris les temps de cycle, les durées et les temps d'attente. Où obtenir Généralement trouvé dans les champs d'horodatage générés par le système comme 'sys_updated_on' ou 'sys_created_on' des pistes d'audit ou des tables de tâches. Exemples 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Nom de l'activité ActivityName | Le nom de l'événement spécifique du cycle de vie du développement qui s'est produit, tel que 'Development Started' ou 'Code Review Performed'. | ||
| Description Cet attribut enregistre le nom de chaque jalon ou tâche achevée au sein du cycle de vie du développement logiciel. Ces activités constituent les étapes séquentielles du processus, de la création au déploiement. L'analyse de la séquence et de la fréquence de ces activités est la fonction principale du process mining. Elle permet la construction de la cartographie des processus, aide à identifier les goulots d'étranglement entre les étapes et met en évidence les variations de processus non conformes ou inefficaces. L'ensemble défini d'activités comprend des étapes clés comme la conception, le développement, les tests et le déploiement. Pourquoi c'est important Il définit les étapes de la cartographie des processus, permettant l'analyse des flux, l'identification des goulots d'étranglement et la détection des écarts par rapport au cycle de vie de développement logiciel (SDLC) standard. Où obtenir Ceci est généralement dérivé en mappant les changements de statut, les enregistrements d'événements ou les entrées de piste d'audit à une liste standardisée de noms d'activités. Par exemple, un champ 'state' passant à 'In Progress' pourrait correspondre à 'Development Started'. Exemples Développement démarréCode validéTests AQ terminésDéployé en production | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage indiquant la dernière fois que les données de ce journal d'événements ont été actualisées depuis le système source. | ||
| Description Cet attribut enregistre la dernière date d'extraction ou de mise à jour du dataset depuis ServiceNow DevOps. Il s'applique à l'ensemble du dataset plutôt qu'aux événements individuels. Cet horodatage est vital pour comprendre la fraîcheur de l'analyse. Il informe les utilisateurs de l'actualité des insights de processus et aide à planifier les rafraîchissements de données. L'affichage de cette information sur les dashboards contextualise toutes les métriques et visualisations, garantissant que les décisions sont prises sur la base de données opportunes. Pourquoi c'est important Fournit un contexte crucial sur l'actualité des données, garantissant que les utilisateurs comprennent le degré de mise à jour de l'analyse des processus. Où obtenir Cet horodatage est généré et ajouté pendant le processus d'extraction des données, enregistrant le moment où l'extraction a été exécutée. Exemples 2023-11-15T08:00:00Z | |||
| Système source SourceSystem | Identifie le système à partir duquel les données ont été extraites, qui est ServiceNow DevOps dans ce cas. | ||
| Description Cet attribut spécifie le système d'origine pour les données d'événement. Pour ce processus, il sera toujours 'ServiceNow DevOps'. Bien qu'il puisse sembler statique, l'inclusion explicite du système source est cruciale pour la gouvernance des données et dans les environnements où les données pourraient être fusionnées à partir de plusieurs systèmes, tels que Jira ou Azure DevOps. Elle assure la clarté sur la provenance des données et aide à diagnostiquer les problèmes de qualité ou d'extraction des données. Pourquoi c'est important Assure la traçabilité des données et est essentiel pour maintenir l'intégrité des données, en particulier lors de l'intégration de données provenant de plusieurs outils de développement. Où obtenir Ceci est une valeur statique qui doit être ajoutée pendant le processus d'extraction et de transformation des données. Exemples ServiceNow DevOps | |||
| Développeur assigné AssignedDeveloper | Le nom ou l'ID du développeur ou de l'utilisateur assigné à l'élément de développement au moment de l'activité. | ||
| Description Cet attribut identifie la personne responsable de l'exécution d'une tâche ou activité spécifique. Il est dynamique et peut changer à mesure que l'élément de développement se déplace entre les différentes étapes et équipes. Cet attribut est crucial pour analyser l'allocation des ressources, la charge de travail et les transferts. Il prend directement en charge le tableau de bord 'Developer Workload and Handoffs' et le KPI 'Activity Volume per Developer'. En suivant les changements dans ce champ, il est possible de mesurer les temps de transfert et d'identifier les goulots d'étranglement de collaboration entre les développeurs ou entre les équipes de développement et d'assurance qualité. Pourquoi c'est important Ceci est essentiel pour l'analyse basée sur les ressources, y compris la distribution de la charge de travail, l'efficacité des transferts et l'identification des modèles de performance spécifiques aux équipes. Où obtenir Cette information est généralement stockée dans le champ 'assigned_to' sur les tables liées aux tâches dans ServiceNow. Exemples David MillerAnna WilliamsJames Brown | |||
| Est un retravail IsRework | Un drapeau booléen qui est vrai si l'activité fait partie d'une boucle de retravail, comme un retour au développement après les tests. | ||
| Description Ceci est un attribut dérivé qui identifie les activités se produisant après qu'un processus a bouclé vers une étape antérieure. Par exemple, si une activité 'Development Started' se produit après une activité 'QA Testing Completed' pour le même élément, elle est signalée comme une reprise de travail. Ce flag est essentiel pour quantifier et visualiser les reprises. Il supporte directement le dashboard 'Rework and Rejection Flow Analysis' et est utilisé pour calculer le KPI 'Rework Rate after Testing'. En signalant ces événements, les analystes peuvent facilement filtrer et analyser la fréquence, les causes et l'impact des reprises sur le temps de cycle global. Pourquoi c'est important Ce flag facilite la quantification et l'analyse des reprises, aidant à mesurer la qualité des processus et à identifier les causes profondes des travaux répétés. Où obtenir Cet attribut est calculé au sein de l'outil de process mining en analysant la séquence d'activités pour chaque cas afin de détecter les mouvements rétrogrades dans le flux de processus. Exemples truefaux | |||
| État de l'élément de développement DevelopmentItemState | Le statut ou l'état de l'élément de développement au moment de l'événement, tel que 'Open', 'In Progress' ou 'Closed'. | ||
| Description Cet attribut reflète le statut officiel de l'élément de développement au sein de ServiceNow. Alors que les activités sont des étapes de processus dérivées, l'état représente la phase formelle dans le workflow du système. L'état est souvent la source à partir de laquelle les activités sont dérivées. Il peut être utilisé pour la validation des données et pour créer des vues plus simples et de haut niveau du processus. Par exemple, l'analyse du temps passé dans chaque état peut fournir une vue différente des goulots d'étranglement par rapport à l'analyse du temps entre les activités. Il est également utile pour identifier les éléments bloqués ou résolus. Pourquoi c'est important Fournit le statut système officiel d'un élément de travail, qui est souvent la source pour dériver des activités et peut être utilisé pour la validation et l'analyse de statut de haut niveau. Où obtenir Ceci est un champ standard, généralement nommé 'state' ou 'stage', sur les tables liées aux tâches dans ServiceNow. Exemples En attenteTravail en CoursPrêt pour les testsClôturé complet | |||
| Groupe d'assignation AssignmentGroup | L'équipe ou le groupe responsable de l'élément de développement au moment de l'activité. | ||
| Description Cet attribut identifie l'équipe assignée à un élément de travail, tel que 'Frontend Developers', 'Backend Services' ou 'QA Team'. À mesure qu'un élément de travail progresse, il est souvent transféré entre différents groupes d'affectation. Le suivi du groupe d'affectation est essentiel pour comprendre la collaboration interfonctionnelle et les transferts. Il aide à identifier les retards systémiques qui se produisent lorsque le travail passe d'une équipe à une autre. Cet attribut prend en charge l'analyse des performances au niveau de l'équipe, de la charge de travail et l'identification des équipes qui sont des goulots d'étranglement dans le flux global. Pourquoi c'est important Suit l'équipe responsable du travail, permettant l'analyse de la performance de l'équipe, l'équilibrage de la charge de travail et l'efficacité des transferts entre les équipes. Où obtenir Cette information est stockée dans le champ 'assignment_group', qui est un champ standard sur les tables liées aux tâches dans ServiceNow. Exemples Ingénierie de plateformeÉquipe applications mobilesAssurance QualitéDevOps | |||
| Module/Composant Affecté ModuleComponentAffected | Le module logiciel, l'application ou le composant spécifique auquel l'élément de développement est lié. | ||
| Description Cet attribut catégorise le travail de développement par la partie du système qu'il impacte. Il peut s'agir d'un microservice spécifique, d'un composant d'interface utilisateur ou d'une application backend. Segmenter le processus par module ou composant est crucial pour identifier les goulots d'étranglement localisés. Le dashboard 'Component-Specific Bottleneck Insights' et le KPI 'Avg Stage Duration by Component' s'appuient sur cet attribut pour déterminer si certaines parties du code sont systématiquement associées à des cycles de développement plus longs, à des taux de reprise plus élevés ou à des échecs de déploiement plus fréquents. Cela aide à concentrer les efforts d'amélioration là où ils sont le plus nécessaires. Pourquoi c'est important Permet de segmenter l'analyse par application ou composant, aidant à isoler les goulots d'étranglement ou les problèmes de qualité spécifiques à certaines parties du système. Où obtenir Ceci est souvent un champ personnalisé ou une référence à la base de données de gestion de configuration (CMDB), liant l'élément de travail à un enregistrement 'cmdb_ci'. Consultez la documentation de ServiceNow DevOps. Exemples Service de facturationInterface utilisateur d'authentificationBase de données de reportingAPI Gateway | |||
| Priorité DevelopmentItemPriority | Le niveau de priorité attribué à l'élément de développement, tel que 'High', 'Medium' ou 'Low'. | ||
| Description Cet attribut catégorise les éléments de développement en fonction de leur urgence métier. Les niveaux de priorité aident les équipes à se concentrer sur les tâches les plus critiques et sont souvent utilisés pour gérer les accords de niveau de service (SLA) et les attentes des parties prenantes. En process mining, la priorité est une dimension clé pour l'analyse comparative. Elle permet de filtrer la carte de processus pour voir si les éléments à haute priorité suivent un chemin plus rapide ou différent. Elle est essentielle pour le dashboard et le KPI 'High-Priority Feature Delivery Time', aidant à valider si les éléments critiques sont réellement traités en priorité. Pourquoi c'est important Permet de filtrer et de comparer les processus pour différents niveaux de priorité, aidant à vérifier si les éléments à haute priorité sont traités plus rapidement et plus efficacement. Où obtenir Ceci est un champ standard, souvent nommé 'priority', sur les tables liées aux tâches dans ServiceNow. Exemples 1 - Critique2 - Élevée3 - Modérée4 - Faible | |||
| Temps de cycle d'élément de développement DevelopmentItemCycleTime | Le temps total écoulé entre la création de l'élément de développement et sa clôture finale ou son déploiement. | ||
| Description Cet attribut est une métrique calculée représentant la durée de bout en bout pour un seul élément de développement. Il est calculé en trouvant la différence entre l'horodatage de la toute première activité et de la toute dernière activité pour chaque cas. C'est un indicateur de performance clé pour l'ensemble du processus SDLC, supportant directement le KPI 'Average SDLC Cycle Time'. Il fournit une mesure de haut niveau de la vélocité et de l'efficacité du processus. L'analyse de cette métrique au fil du temps et selon différentes dimensions, comme la priorité ou l'équipe, aide à suivre l'impact des initiatives d'amélioration des processus. Pourquoi c'est important Représente la durée totale de bout en bout d'un élément de travail, une métrique clé pour mesurer l'efficacité et la vélocité globale des processus. Où obtenir Ce n'est pas un champ dans le système source. Il est calculé dans l'outil de process mining en soustrayant le StartTime minimum du StartTime maximum pour chaque CaseId. Exemples 15 jours 4 heures3 jours 12 heures32 jours 8 heures | |||
| Type d'élément de développement DevelopmentItemType | La classification de l'élément de travail, telle que 'Feature', 'Bug', 'Technical Debt' ou 'Task'. | ||
| Description Cet attribut distingue les différents types de travail qui parcourent le processus SDLC. Par exemple, le processus de correction d'un bug critique pourrait être différent et plus rapide que celui de développement d'une nouvelle fonctionnalité. L'analyse du processus basée sur le type d'élément de travail permet une compréhension plus nuancée des performances. Elle aide à répondre à des questions comme : « Les bugs ont-ils un taux de reprise plus élevé que les nouvelles fonctionnalités ? » ou « Notre temps de cycle pour la réduction de la dette technique est-il acceptable ? ». Cette segmentation fournit des insights plus approfondis qu'une vue de processus unique et standardisée. Pourquoi c'est important Distingue les différents types de travail, comme les fonctionnalités et les bugs, qui peuvent avoir des chemins de processus, des priorités et des durées attendues différents. Où obtenir Cela peut être déterminé à partir de la table source de l'enregistrement (par ex., 'rm_story' vs 'rm_bug') ou d'un champ 'type' sur une table de tâches générique. Exemples FonctionnalitéBugTâcheSpike | |||
| Heure de fin EventEndTime | L'horodatage exact indiquant quand une activité a été achevée. Pour les événements instantanés, il est identique à l'heure de début. | ||
| Description Cet attribut fournit la date et l'heure de l'achèvement de chaque activité du cycle de vie du développement. Il est particulièrement utile pour les activités ayant une durée mesurable, telles que 'Code Review Performed' ou 'QA Testing'. En process mining, disposer à la fois d'une heure de début et de fin permet un calcul précis des temps de traitement des activités, les distinguant du temps d'attente entre les activités. Cela aide à déterminer si les retards sont dus à des tâches longues ou à de longues attentes de ressources. Pour les événements considérés comme instantanés, comme 'Build Triggered', l'heure de fin peut être la même que l'heure de début. Pourquoi c'est important Permet le calcul précis du temps de traitement des activités, ce qui aide à différencier le temps passé à travailler du temps passé à attendre. Où obtenir Ceci peut nécessiter une dérivation. Il pourrait s'agir de l'horodatage de l'heure de début de l'activité suivante, ou il pourrait être obtenu à partir d'un champ 'end date' séparé s'il est disponible dans le système source. Exemples 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| ID de commit CommitId | L'identifiant unique du commit de code source associé au travail de développement. | ||
| Description Cet attribut fournit un lien direct entre un élément de développement et la modification de code spécifique dans le dépôt de code source, tel que Git. Il est capturé lorsqu'une activité 'Code Committed' se produit. En process mining, l'ID de commit enrichit l'analyse en connectant les données de processus aux données d'ingénierie. Il permet aux analystes de retracer un déploiement problématique jusqu'au changement de code exact ou de corréler les métriques de complexité du code avec les temps de cycle de développement. Cela offre une couche d'analyse des causes profondes beaucoup plus approfondie et technique. Pourquoi c'est important Relie l'événement de processus à un changement de code spécifique, permettant une analyse plus approfondie des causes profondes en corrélant les métriques de processus avec les détails au niveau du code. Où obtenir Ceci est capturé par les intégrations ServiceNow DevOps avec les systèmes de gestion de code source comme Git ou SVN. Les données résident dans des tables liées à l'élément de développement. Exemples a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| Raison de la reprise ReworkReason | Une classification ou une description de la raison pour laquelle un élément de développement a nécessité un retravail après les tests. | ||
| Description Lorsqu'un élément échoue à l'AQ ou à l'UAT, cet attribut capture la raison de l'échec. Cela pourrait être une catégorie de bug spécifique, une mauvaise compréhension des exigences ou un problème d'environnement. Cette information fournit un contexte critique pour le tableau de bord 'Rework and Rejection Flow Analysis'. Au lieu de simplement savoir qu'une reprise a eu lieu, les analystes peuvent comprendre pourquoi elle s'est produite. Cela permet des améliorations ciblées, telles qu'une meilleure définition des exigences, des tests unitaires améliorés ou des environnements de test plus stables, pour réduire le taux global de reprises. Pourquoi c'est important Fournit des informations qualitatives sur les raisons des reprises de travail, permettant des améliorations ciblées des processus pour augmenter la qualité et réduire les boucles de reprises. Où obtenir Ceci peut être capturé dans un champ 'close_notes' lorsqu'un test échoue, ou dans un champ personnalisé dédié 'rework_reason'. Consultez la documentation de ServiceNow DevOps. Exemples Exigence mal interprétéeBogue de régressionTest de performance échouéProblème UI/UX | |||
| Statut de déploiement DeploymentStatus | Indique le résultat d'une activité de déploiement, typiquement 'Succès' ou 'Échec'. | ||
| Description Cet attribut enregistre le résultat d'un déploiement vers un environnement spécifique. C'est une information cruciale pour comprendre la fiabilité et la stabilité du processus de publication. Cet attribut est essentiel pour le tableau de bord 'Deployment Success and Failure Trends' et le KPI 'Deployment Failure Rate'. En analysant la fréquence et les tendances des échecs de déploiement, les organisations peuvent identifier les problèmes sous-jacents dans leurs tests, leur infrastructure ou leur coordination de publication. Il aide à concentrer les efforts sur l'amélioration de la qualité et de la fiabilité de la livraison logicielle. Pourquoi c'est important Mesure directement le succès des activités de déploiement, ce qui est essentiel pour calculer le taux d'échec de déploiement et analyser la stabilité des publications. Où obtenir Ce statut est généralement enregistré dans les tâches de suivi de déploiement ou les enregistrements d'exécution de pipeline CI/CD intégrés à ServiceNow DevOps. Exemples SuccèsÉchecTerminé avec avertissements | |||
| Version de publication prévue PlannedReleaseVersion | La version ou release logicielle cible dans laquelle l'élément de développement doit être livré. | ||
| Description Cet attribut relie un élément de développement à une publication planifiée spécifique, telle que 'Version 2.3' ou 'Q4 2023 Release'. C'est un élément clé pour la gestion de projet et la planification des publications. Pour le process mining, cet attribut est crucial pour le tableau de bord 'Release Plan Adherence Monitoring'. En comparant les dates d'achèvement réelles aux dates de publication prévues, les équipes peuvent mesurer l'adhérence au calendrier, identifier les éléments risquant de manquer une publication et analyser les causes des retards de publication. Il établit un lien direct entre le processus de développement de bas niveau et les objectifs commerciaux de haut niveau. Pourquoi c'est important Relie le travail de développement à des publications spécifiques, permettant l'analyse du respect des délais et de l'impact des retards de processus sur les échéances de publication. Où obtenir Cette information est généralement stockée dans un champ 'release' ou 'planned_release', faisant souvent référence à une table de gestion des publications dans ServiceNow. Consultez la documentation de ServiceNow DevOps. Exemples v3.4.1Publication T1 2024Lancement du Projet Phoenix | |||
Activités du cycle de vie du développement logiciel
| Activité | Description | ||
|---|---|---|---|
| Déploiement échoué | Indique que la tentative de déploiement de l'élément de développement en production a échoué. Ceci est explicitement capturé par ServiceNow DevOps lorsque le pipeline CI/CD signale un échec. | ||
| Pourquoi c'est important C'est un point d'échec critique. L'analyse de sa fréquence et de ses causes est essentielle pour améliorer la stabilité des publications et réduire le taux d'échec des déploiements. Où obtenir Capturé à partir du 'completion_status' d'un enregistrement d'exécution de pipeline [sn_devops_pipeline_execution]. Un statut 'Échec' à l'heure de fin marque cet événement. Capture Enregistré lorsque le pipeline de déploiement en production signale un échec. Type d'événement explicit | |||
| Déployé en production | Cet événement marque l'achèvement réussi du déploiement vers l'environnement de production. Il est explicitement capturé par ServiceNow DevOps lorsque l'outil CI/CD signale l'achèvement réussi d'un pipeline. | ||
| Pourquoi c'est important C'est le point d'achèvement principal réussi du processus SDLC. Il complète la chaîne de valeur et est essentiel pour calculer le temps de cycle total. Où obtenir Capturé à partir du 'completion_status' d'un enregistrement d'exécution de pipeline [sn_devops_pipeline_execution] ou de son exécution d'étape associée. Un statut 'Succès' à l'heure de fin marque cet événement. Capture Enregistré lorsque le pipeline de déploiement en production se termine avec succès. Type d'événement explicit | |||
| Développement démarré | Cette activité marque le moment où un développeur commence activement à coder ou à implémenter l'élément de développement. Elle est généralement déduite d'un changement de statut de l'élément vers 'In Progress', 'Development' ou 'Coding'. | ||
| Pourquoi c'est important C'est un jalon crucial qui signale le début de la phase de construction à valeur ajoutée. Il est essentiel pour mesurer le temps de développement et les temps de cycle de revue de code. Où obtenir Déduit de l'horodatage de la mise à jour du champ 'State' de l'élément de développement (par ex. Story [rm_story]) vers un statut 'In Progress' ou équivalent. Capture Basé sur l'horodatage d'un changement d'état vers 'In Progress' ou une valeur similaire. Type d'événement inferred | |||
| Élément de développement créé | Cette activité marque la création d'un nouvel élément de développement, tel qu'une story, un bug ou un epic, au sein de ServiceNow. Cet événement est généralement capturé explicitement lorsqu'un nouvel enregistrement est inséré dans la table pertinente, comme la table Story [rm_story]. | ||
| Pourquoi c'est important C'est l'événement de démarrage principal pour le processus SDLC. Il permet de mesurer le temps de cycle de bout en bout et de suivre la prise en compte initiale de la demande. Où obtenir Enregistré dans les tables sys_audit ou sys_history_line lors de la création d'un enregistrement dans une table liée au développement, telle que Story [rm_story], Epic [rm_epic] ou Defect [rm_defect]. L'horodatage de création se trouve généralement sur l'enregistrement lui-même. Capture Capturé à partir de l'horodatage de création de l'enregistrement de l'élément de développement. Type d'événement explicit | |||
| Revue de code effectuée | Cette activité indique l'achèvement d'une revue de code par les pairs, généralement associée à une pull request ou une merge request. Cet événement peut être capturé explicitement via des intégrations DevOps ou déduit des changements de statut sur des enregistrements connexes. | ||
| Pourquoi c'est important C'est une porte de qualité critique. L'analyse de sa durée aide à identifier les goulots d'étranglement dans le processus de revue, une source courante de retards dans le SDLC. Où obtenir Peut être capturé à partir de l'événement 'Fusionné' ou 'Terminé' d'un enregistrement de Pull Request dans l'intégration Git de ServiceNow, ou déduit d'un changement de statut sur l'élément de développement vers 'Revue de code terminée'. Capture Enregistré lorsqu'une Pull Request liée à l'élément de travail est fusionnée. Type d'événement explicit | |||
| Tests AQ terminés | Signifie que l'équipe d'assurance qualité a terminé avec succès ses activités de test pour l'élément de développement. Ceci est généralement déduit lorsque l'état de l'élément passe d'une phase de test à un statut tel que 'Ready for UAT' ou 'Done'. | ||
| Pourquoi c'est important Ce jalon marque l'achèvement d'une porte de qualité majeure. C'est une condition préalable aux étapes ultérieures comme les tests d'acceptation utilisateur ou la préparation de la publication. Où obtenir Déduit de l'horodatage d'un changement d'état d'un statut de test (par ex., 'In QA') vers un statut post-test (par ex., 'Ready for UAT' ou 'Resolved'). Capture Basé sur l'horodatage d'un changement d'état de 'Testing' à un état ultérieur. Type d'événement inferred | |||
| UAT approuvée | Indique que les parties prenantes métier ont formellement approuvé l'élément de développement après les tests d'acceptation utilisateur. Il s'agit d'une étape clé déduite d'un changement de statut, tel que le passage de 'En UAT' à 'Prêt pour la publication' ou 'Approuvé'. | ||
| Pourquoi c'est important C'est l'approbation métier finale avant qu'un élément ne soit autorisé pour le déploiement en production. C'est un point de contrôle critique de qualité et de gouvernance. Où obtenir Déduit d'une transition d'état sur l'enregistrement de l'élément de développement qui signifie la réussite de l'UAT. Ceci est enregistré dans l'historique d'activités de l'élément. Capture Déduit d'un changement d'état de 'UAT' à un état approuvé ou prêt pour la publication. Type d'événement inferred | |||
| Build déclenché | Cet événement signifie le démarrage d'une build de pipeline CI/CD, souvent déclenchée par un commit de code. ServiceNow DevOps l'enregistre comme une exécution de pipeline, le reliant aux éléments de développement d'origine. | ||
| Pourquoi c'est important Cette activité est le pont entre le développement et les tests ou déploiements automatisés. L'analyse du temps entre le commit et le début de la build peut révéler des retards dans le processus CI/CD. Où obtenir Enregistré explicitement dans la table Pipeline Execution [sn_devops_pipeline_execution] lorsqu'une build démarre dans l'outil CI/CD intégré (par ex., Jenkins, Azure DevOps). Capture Capturé à partir de l'heure de début d'un enregistrement dans la table d'exécution de pipeline. Type d'événement explicit | |||
| Code validé | Représente un développeur qui commet du code dans un dépôt de système de contrôle de version lié à l'élément de développement. ServiceNow DevOps capture explicitement ces événements à partir d'outils SCM intégrés comme Git ou GitHub. | ||
| Pourquoi c'est important Le suivi des commits offre une visibilité granulaire sur la progression du développement et la fréquence des activités. Il aide à corréler les changements de code spécifiques à l'élément de développement parent. Où obtenir Capturé comme un événement explicite dans la table ServiceNow DevOps Commits [sn_devops_commit], qui est peuplée par des webhooks du système de gestion de code source intégré. Capture Enregistré lorsqu'un webhook de commit est reçu de l'outil SCM. Type d'événement explicit | |||
| Conception démarrée | Représente la phase où la conception technique ou l'architecture de solution pour l'élément de développement est créée. Ceci est généralement déduit d'un changement de statut ou d'état sur l'enregistrement de l'élément de développement vers une valeur comme 'Design' ou 'Solutioning'. | ||
| Pourquoi c'est important L'analyse de la durée de la phase de conception aide à identifier les goulots d'étranglement dans la traduction des exigences et la planification des solutions avant le début du travail de développement. Où obtenir Déduit des transitions d'état de l'élément de développement (par ex., Story [rm_story]). Recherchez les changements dans le champ 'State' ou un champ 'Stage' personnalisé vers une valeur liée à la conception. Capture Déduit d'un changement de statut vers 'Design' ou un état similaire. Type d'événement inferred | |||
| Déploiement en production démarré | Cette activité marque le début du pipeline de déploiement vers l'environnement de production. ServiceNow DevOps capture cela comme un événement explicite lorsque l'étape de production d'un pipeline CI/CD commence son exécution. | ||
| Pourquoi c'est important Cela marque le début de la phase finale, et souvent la plus critique, du cycle de vie. Le suivi de cette étape aide à analyser les durées de déploiement et à identifier les opportunités d'automatisation. Où obtenir Enregistré explicitement dans la table Stage Execution Run [sn_devops_stage_execution], filtré pour les étapes liées à l'environnement de production. Capture Capturé à partir de l'heure de début d'une étape de déploiement en production dans une exécution de pipeline. Type d'événement explicit | |||
| Élément de développement annulé | Représente la fin d'un élément de développement avant son achèvement. Il s'agit d'un état final alternatif, généralement déduit du fait que l'état de l'élément est défini sur 'Cancelled' ou 'Closed Incomplete'. | ||
| Pourquoi c'est important Le suivi des annulations aide à identifier les efforts gaspillés et à comprendre les raisons des changements de périmètre ou de la repriorisation. Il offre une image plus complète de tous les résultats possibles du processus. Où obtenir Déduit de l'horodatage de la mise à jour du champ 'State' de l'élément de développement vers un statut terminal non complet, tel que 'Cancelled'. Capture Déduit d'un changement d'état vers un état 'Annulé' ou un état terminal équivalent. Type d'événement inferred | |||
| Préparé pour la publication | Cette activité signifie que l'élément de développement a passé toutes les portes de qualité et est intégré à une publication spécifique. Elle peut être déduite lorsque l'élément est associé à un enregistrement de Release ou que son statut passe à 'Ready for Deployment'. | ||
| Pourquoi c'est important Cette étape indique qu'un élément est techniquement et fonctionnellement complet. Le temps passé dans cet état peut représenter le temps d'attente avant une fenêtre de déploiement planifiée. Où obtenir Déduit du changement du champ 'State' vers 'Ready for Release' ou du suivi de l'alimentation ou de la mise à jour du champ 'Release' dans l'enregistrement de l'élément de développement. Capture Déduit d'un changement de statut ou d'une association avec un enregistrement de publication. Type d'événement inferred | |||
| Reprise de travail identifiée | Indique qu'un problème a été trouvé pendant les tests, nécessitant le renvoi de l'élément au développement. Cet événement est déduit en observant un mouvement de retour dans le flux de processus, tel qu'un changement de statut de 'En QA' à 'In Progress'. | ||
| Pourquoi c'est important Le suivi des reprises est essentiel pour comprendre les problèmes de qualité et les inefficacités des processus. Une fréquence élevée de cette activité indique des problèmes de développement ou de clarté des exigences. Où obtenir Déduit de l'analyse de l'historique du champ 'State' dans les tables sys_audit ou sys_history_line. Un changement de statut d'une phase ultérieure (par ex. 'Testing') vers une phase antérieure (par ex. 'In Progress') indique une reprise du travail. Capture Déduit d'une transition de statut inverse, par exemple, 'Testing' -> 'In Progress'. Type d'événement inferred | |||
| Tests AQ démarrés | Marque le début de la phase formelle de tests d'assurance qualité. Cette étape est presque toujours déduite du changement d'état de l'élément de développement vers une valeur telle que 'In QA', 'Testing' ou 'Ready for Test'. | ||
| Pourquoi c'est important Cette activité signale le transfert du développement à l'équipe AQ. Elle permet de mesurer la durée de la phase de test et d'identifier les goulots d'étranglement liés à la capacité de test. Où obtenir Déduit de l'horodatage de la mise à jour du champ 'State' de l'élément de développement (par ex., Story, Defect) vers un statut spécifique à l'AQ. Capture Basé sur l'horodatage d'un changement d'état vers 'Testing' ou équivalent. Type d'événement inferred | |||
| UAT démarrée | Représente le début des tests d'acceptation utilisateur (UAT), où les parties prenantes métier valident la fonctionnalité. Cet événement est capturé en déduisant un changement de statut vers 'UAT', 'In UAT' ou 'User Acceptance Testing'. | ||
| Pourquoi c'est important Cette phase est essentielle pour garantir que la fonctionnalité développée répond aux exigences métier. L'analyse de sa durée peut révéler des problèmes d'engagement des utilisateurs ou des décalages d'exigences. Où obtenir Déduit d'une transition d'état sur l'enregistrement de l'élément de développement. Cela repose sur le modèle d'état du client incluant un statut distinct pour l'UAT. Capture Déduit d'un changement d'état vers un statut 'UAT'. Type d'événement inferred | |||
Guides d'extraction
Étapes
- Comprendre votre modèle d'état : Avant de créer des rapports, documentez les valeurs spécifiques dans le champ d'état de votre élément de développement (par exemple, sur la table Story
[rm_story]ou Defect[rm_defect]) qui correspondent aux activités requises. Par exemple, une valeur d'état 'In Progress' pourrait correspondre à l'activité 'Développement démarré'. - Naviguer vers la création de rapports : Connectez-vous à votre instance ServiceNow. Dans le navigateur de filtres, allez à
Rapports > Afficher / Exécuteret cliquez sur le boutonCréer un rapport. - Créer un rapport pour les changements d'état : Créez le premier rapport pour capturer les activités basées sur le statut. Configurez-le comme suit :
- Nom du rapport :
ProcessMind - Événements de changement d'état - Type de source :
Table - Table :
Audit [sys_audit] - Type :
Liste - Configurer les colonnes : Ajoutez
Clé du document,Créé le,Nom de la table,Nom du champ,Ancienne valeuretNouvelle valeur. - Filtre : Définissez
Nom de la tablecomme l'une de vos tables d'éléments de développement (par exemple,Story), etNom du champcomme votre champ d'état (par exemple,State). Ajoutez un filtre de date sur le champCréé lepour la période souhaitée.
- Nom du rapport :
- Créer un rapport pour la création d'éléments : Créez un nouveau rapport pour l'événement de création initial.
- Nom du rapport :
ProcessMind - Événements de création d'éléments - Type de source :
Table - Table :
Story [rm_story](ou votre table d'éléments de développement principale) - Type :
Liste - Configurer les colonnes : Ajoutez des colonnes pour les attributs requis comme
Numéro,Créé le,Assigné à,Priorité,État, etc. - Filtre : Appliquez un filtre de date sur le champ
Créé le.
- Nom du rapport :
- Créer un rapport pour les commits de code : Créez un rapport pour les événements DevOps explicites liés aux commits.
- Nom du rapport :
ProcessMind - Événements de commit - Type de source :
Table - Table :
Commit [sn_devops_commit] - Type :
Liste - Configurer les colonnes : Ajoutez des colonnes comme
Élément de travail,Heure du commit,Auteur, etc. - Filtre : Appliquez un filtre de date sur le champ
Heure du commit.
- Nom du rapport :
- Créer des rapports pour les builds et les déploiements : Répétez le processus de l'étape précédente pour les tables
Build [sn_devops_build]etDeployment [sn_devops_deployment]. Ces tables contiennent des enregistrements pour les activitésBuild déclenché,Déploiement en production démarré,Déployé en productionetDéploiement échoué. - Exporter tous les rapports : Exécutez chacun des rapports créés individuellement. Pour chaque rapport, cliquez sur l'icône du menu contextuel (trois points ou une flèche vers le bas) et sélectionnez
Exporter > CSVouExporter > Excel. Enregistrez tous les fichiers. - Combiner et transformer les données : Ouvrez les fichiers exportés dans un programme de feuille de calcul ou utilisez un outil de préparation de données. Combinez manuellement les données de tous les fichiers dans une seule feuille. Créez les colonnes de journal d'événements requises (
DevelopmentItem,ActivityName,EventTime, etc.) et mappez les données des colonnes sources. Par exemple, mappez laClé du documentdu rapport d'audit et leNumérodu rapport d'historique à la colonneDevelopmentItem. - Mapper les noms d'activités : Créez la colonne
ActivityNameen traduisant les données sources. Pour le rapport de changement d'état, utilisez votre modèle d'état documenté pour mapper les entréesNouvelle valeuraux noms d'activités (par exemple, mappez l'état 'Testing' à 'Démarrage des tests QA'). Pour les autres rapports, attribuez un nom d'activité fixe pour chaque ligne (par exemple, toutes les lignes de l'exportation de commit deviennent 'Code validé'). - Finaliser et enregistrer : Ajoutez les colonnes
SourceSystemetLastDataUpdateavec des valeurs statiques pour toutes les lignes. Assurez-vous que tous les horodatages sont dans un format cohérent. Enregistrez le fichier combiné final sous forme d'un seul fichier CSV, qui est maintenant prêt à être téléchargé sur ProcessMind.
Configuration
- Tables requises : Les tables principales nécessaires à cette extraction sont
Audit [sys_audit]pour les événements déduits, vos tables d'éléments de développement spécifiques (par exemple,Story [rm_story],Defect [rm_defect]), et les tables principales de ServiceNow DevOps :Commit [sn_devops_commit],Build [sn_devops_build]etDeployment [sn_devops_deployment]. - Filtres clés : Le filtre le plus important est la plage de dates, qui doit être appliquée de manière cohérente sur tous les rapports sur un champ d'horodatage comme
Created on,Commit timeouStart time. Pour le rapportsys_audit, il est essentiel de filtrer sur leNom de la table(par exemple,rm_story) et leNom du champ(par exemple,state) pour limiter les données aux seuls changements d'état pertinents. - Recommandation de plage de dates : Il est recommandé d'extraire des données sur une période de 3 à 6 mois pour garantir un jeu de données représentatif sans causer de problèmes de performance. Pour les systèmes plus importants, envisagez d'extraire les données par lots mensuels.
- Définition du modèle d'état : Vous devez avoir une compréhension claire du modèle d'état de vos éléments de travail. Cela est nécessaire pour mapper correctement les valeurs d'état capturées dans la table
sys_auditaux activités métier correspondantes comme 'Démarrage des tests QA' ou 'UAT Approuvée'. - Prérequis : Les utilisateurs effectuant l'extraction ont besoin du rôle
report_userou de permissions équivalentes pour créer et exécuter des rapports. Ils ont également besoin d'un accès en lecture aux tables DevOps et de développement d'applications mentionnées ci-dessus. Le plugin ServiceNow DevOps doit être installé et activement intégré à vos outils SCM et CI/CD.
a Exemple de requête config
/*
This extraction method uses the ServiceNow report builder UI. The following sections describe the configuration for each report that must be created and exported.
The exported data must then be manually combined and transformed into a single event log file.
*/
---
-- REPORT 1: Item Creation Events
---
Report_Name: ProcessMind - Item Creation Events
Source_Table: rm_story
Report_Type: List
Columns:
- Number (maps to DevelopmentItem)
- sys_created_on (maps to EventTime)
- 'Development Item Created' (create a formula or static column for ActivityName)
- Assigned to (maps to AssignedDeveloper)
- Priority (maps to DevelopmentItemPriority)
- State (maps to DevelopmentItemState)
- cmdb_ci (maps to ModuleComponentAffected)
- Type (maps to DevelopmentItemType)
- Assignment group (maps to AssignmentGroup)
Filters:
- sys_created_on ON Last 6 months
---
-- REPORT 2: Inferred State Change Events
---
Report_Name: ProcessMind - State Change Events
Source_Table: sys_audit
Report_Type: List
Columns:
- documentkey (maps to DevelopmentItem)
- sys_created_on (maps to EventTime)
- newvalue (maps to ActivityName, requires translation)
- user (maps to AssignedDeveloper)
ActivityName_Mapping_Logic (Example):
- WHEN newvalue IS '[Your Design State]' THEN 'Design Started'
- WHEN newvalue IS '[Your In Progress State]' THEN 'Development Started'
- WHEN newvalue IS '[Your QA State]' THEN 'QA Testing Started'
- WHEN oldvalue IS '[Your QA State]' AND newvalue IS '[Your In Progress State]' THEN 'Rework Identified'
- WHEN oldvalue IS '[Your QA State]' AND newvalue IS '[Your UAT State]' THEN 'QA Testing Completed'
- WHEN newvalue IS '[Your UAT State]' THEN 'UAT Started'
- WHEN newvalue IS '[Your UAT Approved State]' THEN 'UAT Approved'
- WHEN newvalue IS '[Your Release Ready State]' THEN 'Prepared For Release'
- WHEN newvalue IS '[Your Cancelled State]' THEN 'Development Item Cancelled'
Filters:
- tablename = 'rm_story'
- fieldname = 'state'
- sys_created_on ON Last 6 months
---
-- REPORT 3: Code Commit Events
---
Report_Name: ProcessMind - Commit Events
Source_Table: sn_devops_commit
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- commit_time (maps to EventTime)
- 'Code Committed' (create a formula or static column for ActivityName)
- author.name (maps to AssignedDeveloper)
Filters:
- commit_time ON Last 6 months
---
-- REPORT 4: Build Events
---
Report_Name: ProcessMind - Build Events
Source_Table: sn_devops_build
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- start_time (maps to EventTime)
- 'Build Triggered' (create a formula or static column for ActivityName)
Filters:
- start_time ON Last 6 months
---
-- REPORT 5: Deployment Events
---
Report_Name: ProcessMind - Deployment Events
Source_Table: sn_devops_deployment
Report_Type: List
Columns:
- work_item.number (maps to DevelopmentItem)
- start_time (maps to EventTime for 'Started' activities)
- end_time (maps to EventTime for 'Completed' or 'Failed' activities)
- state (maps to ActivityName, requires translation)
ActivityName_Mapping_Logic:
- WHEN state IS 'in_progress' THEN 'Deployment to Production Started'
- WHEN state IS 'successful' THEN 'Deployed to Production'
- WHEN state IS 'failed' THEN 'Deployment Failed'
Filters:
- start_time ON Last 6 months
- [Filter for production deployments based on your environment configuration]
---
-- Additional events like 'Code Review Performed' may require a separate report
-- on a table like `sn_devops_pull_request` if available and configured.
--- Étapes
- Prérequis : Assurez-vous d'avoir un accès réseau à votre instance ServiceNow et qu'un compte de service dédié avec des autorisations de lecture vous a été fourni (les rôles
itiletsn_devops.viewersont un bon point de départ). Cet utilisateur aura besoin d'un accès à des tables telles querm_story,sys_auditet le schémasn_devops_*. - Installer le pilote ODBC ServiceNow : Téléchargez le pilote ODBC ServiceNow approprié pour votre système d'exploitation depuis le portail de support ServiceNow. Suivez les instructions d'installation fournies.
- Configurer le DSN : Configurez un nouveau DSN système (Data Source Name) sur la machine où vous exécuterez la requête. Dans l'administrateur de sources de données ODBC, ajoutez le pilote ServiceNow et configurez-le avec l'URL de votre instance (par exemple,
yourinstance.service-now.com), votre nom d'utilisateur et votre mot de passe. - Se connecter avec un client SQL : Utilisez un outil client SQL comme DBeaver, Microsoft SQL Server Management Studio (en utilisant un serveur lié), ou un langage de script comme Python avec une bibliothèque ODBC pour vous connecter à ServiceNow en utilisant le DSN que vous avez configuré.
- Identifier le modèle d'état : Avant d'exécuter la requête, vous devez identifier les valeurs exactes que votre organisation utilise pour le champ
statesur vos tables d'éléments de développement (par exemple,rm_story,rm_defect). La requête fournie utilise des exemples courants comme 'In Progress' ou 'In QA', que vous devrez remplacer par vos valeurs spécifiques. - Personnaliser la requête SQL : Copiez la requête SQL fournie dans votre client. Modifiez les espaces réservés en haut de la requête, y compris la date de début de l'extraction et les valeurs d'état spécifiques qui correspondent à vos activités de cycle de vie de développement.
- Exécuter la requête : Exécutez la requête SQL complète sur la base de données ServiceNow via la connexion ODBC. Cela peut prendre un temps considérable en fonction de la plage de dates et du volume de données.
- Examiner les données : Une fois la requête terminée, effectuez un bref examen de l'ensemble de données retourné. Vérifiez la variété des activités et assurez-vous que les colonnes clés comme
DevelopmentItem,ActivityNameetEventTimesont renseignées comme prévu. - Exporter vers CSV : Exportez l'ensemble du jeu de résultats vers un fichier CSV. Assurez-vous que le fichier est encodé en UTF-8 et que les en-têtes de colonne correspondent aux noms d'attributs requis par ProcessMind, par exemple,
DevelopmentItem,ActivityName,EventTime. - Préparer pour le téléchargement : Assurez-vous que le fichier CSV final ne contient pas de lignes vides à la fin et que le format de date pour
EventTimeetLastDataUpdateest cohérent et pris en charge par ProcessMind (par exemple,AAAA-MM-JJ HH:MM:SS).
Configuration
- Prérequis : Accès à une instance ServiceNow avec le module DevOps activé. Un compte utilisateur dédié avec des permissions de lecture pour les tables requises est nécessaire. Le pilote ODBC ServiceNow doit être installé et configuré sur la machine cliente.
- Configuration du pilote ODBC : La connexion nécessite l'URL de l'instance, un nom d'utilisateur et un mot de passe ou un jeton OAuth. Il est essentiel de tester la connexion DSN avant de tenter d'exécuter des requêtes complexes.
- Filtrage de la plage de dates : La requête fournie inclut un espace réservé
s.sys_created_on >= '2023-01-01'pour limiter la quantité de données extraites. Il est fortement recommandé d'extraire des données pour une période définie, telle que les 6 à 12 derniers mois, afin d'assurer des temps d'exécution de requête gérables. - Personnalisation du modèle d'état : La précision de la requête pour les événements déduits repose entièrement sur le modèle d'état. Vous devez remplacer les valeurs d'état d'espace réservé (par exemple,
[Votre valeur d'état 'En cours'],[Votre valeur d'état 'En QA']) par les valeurs exactes utilisées dans votre configuration ServiceNow. Celles-ci sont sensibles à la casse. - Tables d'éléments de travail : La requête est écrite pour la table Story (
rm_story). Si votre organisation utilise également des Défauts (rm_defect), des Améliorations (rm_enhancement) ou d'autres types de tâches, vous devez les ajouter à l'expression de table commune (CTE) initialeDevItemsen utilisantUNION ALL. - Performance : Les requêtes directes sur une instance ServiceNow de production peuvent avoir un impact sur les performances. Il est recommandé d'exécuter de grandes extractions pendant les heures creuses. Pour les très grands jeux de données, envisagez une stratégie d'extraction incrémentielle basée sur le champ
sys_updated_on.
a Exemple de requête sql
WITH DevItems AS (
-- This CTE selects the base set of development items to analyze.
-- Add other tables like rm_defect or rm_enhancement here using UNION ALL if needed.
SELECT
s.sys_id,
s.number,
s.sys_created_on,
s.sys_updated_on,
s.assigned_to,
s.priority,
s.state,
s.cmdb_ci, -- Module/Component Affected
s.sys_class_name, -- Development Item Type
s.assignment_group,
DATEDIFF(second, s.sys_created_on, s.closed_at) AS cycle_time_seconds
FROM rm_story s
WHERE s.sys_created_on >= '2023-01-01' -- *** Placeholder: Set your desired start date ***
),
StateChanges AS (
-- This CTE unnests the audit trail for state changes, which are used for inferred activities.
SELECT
a.documentkey AS item_sys_id,
a.sys_created_on AS change_time,
a.oldvalue,
a.newvalue,
-- *** Placeholder: Define the numeric order of your states to detect rework. Adjust values and names. ***
CASE a.oldvalue
WHEN '1' THEN 1 -- Open
WHEN '[Your 'Design' State Value]' THEN 2
WHEN '[Your 'In Progress' State Value]' THEN 3
WHEN '[Your 'In QA' State Value]' THEN 4
WHEN '[Your 'In UAT' State Value]' THEN 5
ELSE 0
END AS old_state_order,
CASE a.newvalue
WHEN '1' THEN 1 -- Open
WHEN '[Your 'Design' State Value]' THEN 2
WHEN '[Your 'In Progress' State Value]' THEN 3
WHEN '[Your 'In QA' State Value]' THEN 4
WHEN '[Your 'In UAT' State Value]' THEN 5
ELSE 0
END AS new_state_order
FROM sys_audit a
WHERE a.tablename = 'rm_story' AND a.fieldname = 'state'
)
-- 1. Development Item Created
SELECT
i.number AS DevelopmentItem,
'Development Item Created' AS ActivityName,
i.sys_created_on AS EventTime,
'ServiceNow DevOps' AS SourceSystem,
GETDATE() AS LastDataUpdate,
us.name AS AssignedDeveloper,
i.priority AS DevelopmentItemPriority,
i.state AS DevelopmentItemState,
ci.name AS ModuleComponentAffected,
i.sys_class_name AS DevelopmentItemType,
grp.name AS AssignmentGroup,
i.cycle_time_seconds AS DevelopmentItemCycleTime,
CAST(0 AS BIT) AS IsRework
FROM DevItems i
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id
LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id
LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 2. Design Started
SELECT i.number, 'Design Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Design'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 3. Development Started
SELECT i.number, 'Development Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In Progress'' State Value]' AND sc.old_state_order < 3 -- *** Placeholder: Adjust state value and order ***
UNION ALL
-- 4. Code Committed
SELECT i.number, 'Code Committed', c.committed_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_commit c JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 5. Build Triggered
SELECT i.number, 'Build Triggered', b.start_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_build b JOIN sn_devops_commit_build cb ON b.sys_id = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
UNION ALL
-- 6. Code Review Performed
SELECT i.number, 'Code Review Performed', pr.closed_at, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_pull_request pr JOIN DevItems i ON pr.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE pr.state = 'merged' -- Or 'closed', depending on process
UNION ALL
-- 7. QA Testing Started
SELECT i.number, 'QA Testing Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In QA'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 8. Rework Identified
SELECT i.number, 'Rework Identified', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(1 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.new_state_order < sc.old_state_order AND sc.new_state_order > 1 -- Moved to an earlier state
UNION ALL
-- 9. QA Testing Completed
SELECT i.number, 'QA Testing Completed', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.oldvalue = '[Your ''In QA'' State Value]' AND sc.new_state_order > sc.old_state_order -- *** Placeholder: Adjust state value ***
UNION ALL
-- 10. UAT Started
SELECT i.number, 'UAT Started', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''In UAT'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 11. UAT Approved
SELECT i.number, 'UAT Approved', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.oldvalue = '[Your ''In UAT'' State Value]' AND sc.new_state_order > sc.old_state_order -- *** Placeholder: Adjust state value ***
UNION ALL
-- 12. Prepared For Release
SELECT i.number, 'Prepared For Release', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Ready for Release'' State Value]' -- *** Placeholder: Adjust state value ***
UNION ALL
-- 13. Deployment to Production Started
SELECT i.number, 'Deployment to Production Started', se.start_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' -- *** Placeholder: Adjust stage name ***
UNION ALL
-- 14. Deployed to Production
SELECT i.number, 'Deployed to Production', se.end_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' AND se.result = 'SUCCESS' -- *** Placeholder: Adjust stage name and result value ***
UNION ALL
-- 15. Deployment Failed
SELECT i.number, 'Deployment Failed', se.end_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, i.state, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM sn_devops_step_execution se JOIN sn_devops_artifact_build sab ON se.deployable = sab.sys_id JOIN sn_devops_commit_build cb ON sab.build = cb.build JOIN sn_devops_commit c ON cb.commit = c.sys_id JOIN DevItems i ON c.work_item = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE se.stage_name = 'Production' AND se.result = 'FAILURE' -- *** Placeholder: Adjust stage name and result value ***
UNION ALL
-- 16. Development Item Cancelled
SELECT i.number, 'Development Item Cancelled', sc.change_time, 'ServiceNow DevOps', GETDATE(), us.name, i.priority, sc.newvalue, ci.name, i.sys_class_name, grp.name, i.cycle_time_seconds, CAST(0 AS BIT)
FROM StateChanges sc JOIN DevItems i ON sc.item_sys_id = i.sys_id
LEFT JOIN sys_user us ON i.assigned_to = us.sys_id LEFT JOIN cmdb_ci ci ON i.cmdb_ci = ci.sys_id LEFT JOIN sys_user_group grp ON i.assignment_group = grp.sys_id
WHERE sc.newvalue = '[Your ''Cancelled'' State Value]'; -- *** Placeholder: Adjust state value ***