Datatemplate voor de softwareontwikkelingscyclus
Datatemplate voor de softwareontwikkelingscyclus
- Aanbevolen attributen om te verzamelen
- Belangrijke activiteiten om bij te houden
- Uitleg over data-extractie uit ServiceNow DevOps
Attributen van de softwareontwikkelingscyclus
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteitsnaam ActivityName | De naam van de specifieke gebeurtenis in de ontwikkelcyclus, zoals 'Ontwikkeling gestart' of 'Codebeoordeling uitgevoerd'. | ||
| Beschrijving Dit attribuut bevat de naam van elke mijlpaal of task die tijdens de softwareontwikkelingscyclus is afgerond. Deze activiteiten vormen de opeenvolgende processtappen, van aanmaak tot implementatie. Process mining analyseert vooral de volgorde en frequentie van deze activiteiten. Daarmee bouw je de proceskaart op, spoor je bottlenecks tussen stappen op en herken je afwijkingen van de regels of inefficiënte procesvarianten. De activiteiten omvatten belangrijke fasen zoals ontwerp, ontwikkeling, testen en implementatie. Waarom dit belangrijk is Dit attribuut bepaalt de stappen op de proceskaart. Zo kun je de processtroom analyseren, bottlenecks opsporen en afwijkingen van de standaard-SDLC herkennen. Waar vind je dit? Dit wordt meestal bepaald door statuswijzigingen, gebeurtenisrecords of auditspoorvermeldingen te koppelen aan een gestandaardiseerde lijst met activiteitsnamen. Een wijziging van het veld 'state' naar 'In Progress' kan bijvoorbeeld worden gekoppeld aan 'Ontwikkeling gestart'. Voorbeelden Ontwikkeling gestartCode vastgelegdQA-testen afgerondGeïmplementeerd in productie | |||
| Ontwikkelitem DevelopmentItem | De unieke identificatiecode van één werkeenheid, zoals een functie, bug of task, die de ontwikkelcyclus doorloopt. | ||
| Beschrijving Het ontwikkelitem is de belangrijkste case-ID en staat voor een afzonderlijke werkeenheid die wordt gevolgd. Het verbindt alle activiteiten voor dat item, van de eerste uitwerking en planning tot en met ontwikkeling, testen en implementatie. Bij process mining is dit attribuut essentieel om het volledige traject van elk werkitem te reconstrueren. Je kunt processtromen visualiseren, de totale doorlooptijden berekenen en varianten herkennen voor afzonderlijke functies of bugfixes. Elk event in het log moet aan een ontwikkelitem zijn gekoppeld om een samenhangende proceskaart op te bouwen. Waarom dit belangrijk is Deze hoofdidentificatiecode verbindt alle gerelateerde ontwikkelactiviteiten tot één procesinstantie. Zo kun je de volledige levenscyclus van elk werkitem analyseren. Waar vind je dit? Deze identificatiecode is meestal de primaire sleutel uit tabellen voor stories, bugs of tasks, zoals de tabellen 'rm_story', 'rm_bug' of 'task' in ServiceNow. Voorbeelden STRY0010015BUG0034092TASK0050118 | |||
| Starttijd EventTime | De exacte timestamp waarop een specifieke activiteit of gebeurtenis plaatsvond. | ||
| Beschrijving Dit attribuut bevat de datum en tijd waarop elke activiteit in de ontwikkelcyclus is geregistreerd. Het is essentieel om gebeurtenissen chronologisch te ordenen en tijdsanalyses uit te voeren. Bij process mining gebruik je de starttijd om de duur tussen activiteiten te berekenen, wachttijden te herkennen en de totale doorlooptijd van het proces te meten. Dit is een belangrijk onderdeel van dashboards voor prestatieanalyse, zoals de analyse van de totale SDLC-doorlooptijd, en voor KPI’s zoals de doorlooptijd van codebeoordelingen. Waarom dit belangrijk is Deze timestamp is essentieel om gebeurtenissen in de juiste volgorde te zetten en alle prestatiemetrieken te berekenen, waaronder doorlooptijden, duur en wachttijden. Waar vind je dit? Meestal te vinden in door het systeem gegenereerde timestampvelden zoals 'sys_updated_on' of 'sys_created_on' in de tabellen voor het auditspoor of tasks. Voorbeelden 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Bronsysteem SourceSystem | Geeft aan uit welk systeem de data is gehaald. In dit geval is dat ServiceNow DevOps. | ||
| Beschrijving Dit attribuut geeft aan uit welk systeem de gebeurtenisdata afkomstig is. Voor dit proces is dat altijd 'ServiceNow DevOps'. Het bronsysteem lijkt misschien een vast gegeven, maar expliciete vermelding is belangrijk voor datagovernance en omgevingen waarin data uit meerdere systemen wordt samengevoegd, zoals Jira of Azure DevOps. Zo blijft duidelijk waar de data vandaan komt en kun je problemen met de datakwaliteit of extractie opsporen. Waarom dit belangrijk is Zorgt ervoor dat data traceerbaar blijft en helpt de data-integriteit te bewaken, vooral wanneer data uit meerdere ontwikkeltools wordt gecombineerd. Waar vind je dit? Dit is een vaste waarde die tijdens de data-extractie en -transformatie moet worden toegevoegd. Voorbeelden ServiceNow DevOps | |||
| Laatste data-update LastDataUpdate | Timestamp die aangeeft wanneer de data in dit event log voor het laatst vanuit het bronsysteem is vernieuwd. | ||
| Beschrijving Dit attribuut registreert wanneer de dataset voor het laatst uit ServiceNow DevOps is gehaald of bijgewerkt. Het geldt voor de hele dataset, niet voor afzonderlijke gebeurtenissen. Deze timestamp laat zien hoe actueel de analyse is. Gebruikers zien hoe recent de procesinzichten zijn en kunnen data-updates plannen. Door deze informatie op dashboards te tonen, krijgen alle metrieken en visualisaties de juiste context en zijn beslissingen gebaseerd op actuele data. Waarom dit belangrijk is Geeft belangrijke context over de actualiteit van de data, zodat gebruikers weten hoe recent de procesanalyse is. Waar vind je dit? Deze timestamp wordt tijdens de data-extractie aangemaakt en toegevoegd. Hij registreert wanneer de extractie is uitgevoerd. Voorbeelden 2023-11-15T08:00:00Z | |||
| Betrokken module/component ModuleComponentAffected | De specifieke softwaremodule, applicatie of component waarop het ontwikkelitem betrekking heeft. | ||
| Beschrijving Dit attribuut deelt ontwikkelwerk in op basis van het deel van het systeem waarop het van invloed is. Dat kan bijvoorbeeld een specifieke microservice, een UI-component of een backendapplicatie zijn. Door het proces per module of component te analyseren, kun je lokale bottlenecks opsporen. Het dashboard 'Inzicht in bottlenecks per component' en de KPI 'Gemiddelde fasetijd per component' gebruiken dit attribuut om te bepalen of bepaalde onderdelen van de codebase steeds samengaan met langere ontwikkelcycli, meer herstelwerk of vaker mislukte implementaties. Zo kun je verbeteringen richten op de plekken waar ze het meest nodig zijn. Waarom dit belangrijk is Maakt het mogelijk om analyses uit te splitsen naar applicatie of component, zodat bottlenecks en kwaliteitsproblemen in specifieke onderdelen van het systeem zichtbaar worden. Waar vind je dit? Dit is vaak een aangepast veld of een verwijzing naar de Configuration Management Database (CMDB), die het werkitem koppelt aan een 'cmdb_ci'-record. Raadpleeg de ServiceNow DevOps-documentatie. Voorbeelden FactureringsserviceUI voor gebruikersauthenticatieRapportagedatabaseAPI-gateway | |||
| Doorlooptijd ontwikkelitem DevelopmentItemCycleTime | De totale tijd vanaf het aanmaken van het ontwikkelitem tot de definitieve afsluiting of implementatie. | ||
| Beschrijving Dit attribuut is een berekende maatstaf voor de totale doorlooptijd van één ontwikkelitem. De berekening is het verschil tussen de timestamp van de eerste activiteit en die van de laatste activiteit voor elke case. Dit is een belangrijke prestatiemaatstaf voor het hele SDLC-proces en vormt de basis voor de KPI 'Gemiddelde SDLC-doorlooptijd'. De maatstaf geeft op hoofdlijnen aan hoe snel en efficiënt het proces verloopt. Door deze over tijd en per kenmerk, zoals prioriteit of team, te analyseren, kun je volgen wat het effect is van verbeterinitiatieven. Waarom dit belangrijk is Geeft de totale doorlooptijd van een werkitem weer. Dit is een belangrijke maatstaf voor de efficiëntie en snelheid van het proces als geheel. Waar vind je dit? Dit is geen veld in het bronsysteem. De process mining-tool berekent deze waarde door voor elke Case-ID de minimale StartTime af te trekken van de maximale StartTime. Voorbeelden 15 dagen 4 uur3 dagen 12 uur32 dagen 8 uur | |||
| Is herstelwerk IsRework | Een booleaanse vlag die waar is als de activiteit deel uitmaakt van een herstelronde, bijvoorbeeld wanneer werk na het testen teruggaat naar ontwikkeling. | ||
| Beschrijving Dit afgeleide attribuut markeert activiteiten die plaatsvinden nadat het proces is teruggegaan naar een eerdere fase. Als bijvoorbeeld voor hetzelfde item de activiteit 'Ontwikkeling gestart' plaatsvindt na 'QA-test afgerond', wordt deze als herstelwerk gemarkeerd. Met deze vlag kun je herstelwerk meten en zichtbaar maken. De vlag ondersteunt het dashboard 'Analyse van herstelwerk en afwijzingen' en wordt gebruikt om de KPI 'Percentage herstelwerk na testen' te berekenen. Analisten kunnen deze gebeurtenissen filteren en de frequentie, oorzaken en invloed van herstelwerk op de totale doorlooptijd onderzoeken. Waarom dit belangrijk is Met deze vlag kun je herstelwerk eenvoudig meten en analyseren. Zo kun je de proceskwaliteit beoordelen en de oorzaken van herhaald werk opsporen. Waar vind je dit? Dit attribuut wordt berekend in de process mining-tool. De tool analyseert de volgorde van activiteiten per case om terugstappen in het proces te herkennen. Voorbeelden truefalse | |||
| Prioriteit DevelopmentItemPriority | Het prioriteitsniveau van het ontwikkelitem, bijvoorbeeld 'Hoog', 'Gemiddeld' of 'Laag'. | ||
| Beschrijving Dit attribuut deelt ontwikkelitems in op basis van de urgentie voor de bedrijfsvoering. Met prioriteitsniveaus kunnen teams zich richten op de belangrijkste taken. Ze worden vaak gebruikt om SLA's en verwachtingen van belanghebbenden te beheren. Bij process mining is prioriteit een belangrijke dimensie voor vergelijkende analyses. Je kunt de proceskaart filteren om te zien of items met hoge prioriteit een snellere of andere route volgen. Dit is essentieel voor het dashboard en de KPI 'Doorlooptijd van levering van functies met hoge prioriteit'. Zo controleer je of belangrijke items daadwerkelijk sneller worden afgehandeld. Waarom dit belangrijk is Hiermee kun je processen voor verschillende prioriteitsniveaus filteren en vergelijken. Zo controleer je of items met hoge prioriteit sneller en efficiënter worden verwerkt. Waar vind je dit? Dit is een standaardveld, vaak met de naam 'priority', in taakgerelateerde tabellen in ServiceNow. Voorbeelden 1 - Kritiek2 - Hoog3 - Gemiddeld4 - Laag | |||
| Status van ontwikkelitem DevelopmentItemState | De status van het ontwikkelitem op het moment van de gebeurtenis, bijvoorbeeld 'Open', 'In behandeling' of 'Gesloten'. | ||
| Beschrijving Dit attribuut geeft de officiële status van het ontwikkelitem in ServiceNow weer. Activiteiten zijn afgeleide processtappen, terwijl de status de formele fase in de workflow van het systeem aangeeft. De status is vaak de bron waaruit activiteiten worden afgeleid. Je kunt deze gebruiken om data te valideren en om eenvoudigere procesoverzichten op hoofdlijnen te maken. Zo geeft een analyse van de tijd in elke status een ander beeld van bottlenecks dan een analyse van de tijd tussen activiteiten. De status helpt ook om items te vinden die stilliggen of zijn opgelost. Waarom dit belangrijk is Geeft de officiële systeemstatus van een werkitem weer. Deze status is vaak de bron voor het afleiden van activiteiten en kan worden gebruikt voor validatie en statusanalyses op hoofdlijnen. Waar vind je dit? Dit is een standaardveld, meestal met de naam 'state' of 'stage', in taakgerelateerde tabellen in ServiceNow. Voorbeelden In behandelingWerk in uitvoeringKlaar voor testVolledig gesloten | |||
| Toegewezen ontwikkelaar AssignedDeveloper | De naam of ID van de ontwikkelaar of gebruiker die op het moment van de activiteit aan het ontwikkelitem is toegewezen. | ||
| Beschrijving Dit attribuut geeft aan wie verantwoordelijk is voor een specifieke task of activiteit. De waarde kan veranderen wanneer het ontwikkelitem naar een andere fase of een ander team gaat. Dit attribuut is belangrijk voor analyses van de inzet van bronnen, de werkverdeling en overdrachten. Het ondersteunt rechtstreeks het dashboard 'Werkbelasting en overdrachten van ontwikkelaars' en de KPI 'Activiteitsvolume per ontwikkelaar'. Door wijzigingen in dit veld bij te houden, kun je overdrachtstijden meten en bottlenecks in de samenwerking tussen ontwikkelaars of tussen ontwikkeling en QA opsporen. Waarom dit belangrijk is Dit is nodig voor analyses op basis van bronnen, zoals de verdeling van de werkbelasting, de efficiëntie van overdrachten en prestatiepatronen per team. Waar vind je dit? Deze informatie staat meestal in het veld 'assigned_to' van taskgerelateerde tabellen in ServiceNow. Voorbeelden David MillerAnna WilliamsJames Brown | |||
| Toewijzingsgroep AssignmentGroup | Het team of de groep die op het moment van de activiteit verantwoordelijk is voor het ontwikkelitem. | ||
| Beschrijving Dit attribuut geeft aan aan welk team een werkitem is toegewezen, bijvoorbeeld 'Frontendontwikkelaars', 'Backendservices' of 'QA-team'. Tijdens het proces gaat een werkitem vaak van de ene toewijzingsgroep naar de andere. Door de toewijzingsgroep bij te houden, krijg je zicht op samenwerking tussen teams en overdrachten. Zo kun je structurele vertragingen opsporen die ontstaan wanneer werk van het ene team naar het andere gaat. Met dit attribuut analyseer je ook de prestaties en werkdruk per team en zie je welke teams bottlenecks vormen in de totale processtroom. Waarom dit belangrijk is Houdt bij welk team verantwoordelijk is voor het werk. Zo kun je teamprestaties, de verdeling van de werkdruk en de efficiëntie van overdrachten tussen teams analyseren. Waar vind je dit? Deze informatie staat in het veld 'assignment_group', een standaardveld in taakgerelateerde tabellen in ServiceNow. Voorbeelden PlatformengineeringMobiele-appteamKwaliteitsborgingDevOps | |||
| Type ontwikkelitem DevelopmentItemType | De classificatie van het werkitem, bijvoorbeeld 'Functie', 'Bug', 'Technische schuld' of 'Taak'. | ||
| Beschrijving Dit attribuut maakt onderscheid tussen de verschillende soorten werk in het SDLC-proces. Het proces voor het oplossen van een kritieke bug kan bijvoorbeeld anders en sneller verlopen dan het proces voor het ontwikkelen van een nieuwe functie. Door het proces per type werkitem te analyseren, krijg je een genuanceerder beeld van de prestaties. Zo kun je vragen beantwoorden als: 'Vraagt het oplossen van bugs vaker om herstelwerk dan het ontwikkelen van nieuwe functies?' of 'Is de doorlooptijd voor het terugdringen van technische schuld acceptabel?'. Deze uitsplitsing geeft meer inzicht dan één procesoverzicht voor alle soorten werk. Waarom dit belangrijk is Maakt onderscheid tussen verschillende soorten werk, zoals functies en bugs, die elk een ander procesverloop, andere prioriteiten en een andere verwachte doorlooptijd kunnen hebben. Waar vind je dit? Je kunt dit bepalen aan de hand van de brontabel van het record (bijvoorbeeld 'rm_story' of 'rm_bug') of met een veld 'type' in een generieke taakentabel. Voorbeelden FunctieBugTaakOnderzoekstaak | |||
| Commit-ID CommitId | De unieke identificatiecode van de codecommit die bij het ontwikkelwerk hoort. | ||
| Beschrijving Dit attribuut koppelt een ontwikkelitem rechtstreeks aan de specifieke codewijziging in de broncoderepository, bijvoorbeeld Git. Het wordt vastgelegd wanneer de activiteit 'Code gecommit' plaatsvindt. Bij process mining verrijkt de Commit-ID de analyse door procesdata te koppelen aan engineeringdata. Analisten kunnen een problematische implementatie terugleiden naar de exacte codewijziging of statistieken over codecomplexiteit vergelijken met ontwikkeldoorlooptijden. Zo kunnen ze de oorzaken op een veel technischer niveau analyseren. Waarom dit belangrijk is Koppelt de procesgebeurtenis aan een specifieke codewijziging. Zo kun je de procesmaatstaven vergelijken met details op codeniveau en de oorzaken verder onderzoeken. Waar vind je dit? Dit wordt vastgelegd via ServiceNow DevOps-integraties met broncodebeheersystemen zoals Git of SVN. De data staat in gerelateerde tabellen die aan het ontwikkelitem zijn gekoppeld. Voorbeelden a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| Eindtijd EventEndTime | De exacte timestamp waarop een activiteit is afgerond. Bij gebeurtenissen zonder duur is deze gelijk aan de starttijd. | ||
| Beschrijving Dit attribuut bevat de datum en tijd waarop elke activiteit in de ontwikkelcyclus is afgerond. Het is vooral nuttig voor activiteiten met een meetbare duur, zoals 'Codebeoordeling uitgevoerd' of 'QA-testen'. Met zowel een start- als eindtijd kun je bij process mining de verwerkingstijd van activiteiten nauwkeurig berekenen en onderscheiden van de wachttijd tussen activiteiten. Zo zie je of vertraging ontstaat door lange taken of doordat er lang op bronnen wordt gewacht. Bij gebeurtenissen zonder duur, zoals 'Build gestart', kan de eindtijd gelijk zijn aan de starttijd. Waarom dit belangrijk is Maakt het mogelijk om de verwerkingstijd van activiteiten nauwkeurig te berekenen. Zo zie je het verschil tussen werktijd en wachttijd. Waar vind je dit? Mogelijk moet deze waarde worden afgeleid. Je kunt de starttijd van de volgende activiteit gebruiken, of een apart veld voor de einddatum als dat in het bronsysteem beschikbaar is. Voorbeelden 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| Geplande releaseversie PlannedReleaseVersion | De softwareversie of release waarin het ontwikkelitem naar verwachting wordt opgeleverd. | ||
| Beschrijving Dit attribuut koppelt een ontwikkelitem aan een geplande release, zoals 'Versie 2.3' of 'Release Q4 2023'. Het speelt een belangrijke rol bij projectbeheer en releaseplanning. Bij process mining is dit attribuut belangrijk voor het dashboard 'Bewaking van de naleving van het releaseplan'. Door de werkelijke voltooiingsdatums te vergelijken met de geplande releasedatums, kunnen teams zien of de planning wordt gehaald, items opsporen die een release mogelijk niet halen en de oorzaken van vertragingen analyseren. Zo wordt het ontwikkelproces op detailniveau gekoppeld aan bedrijfsdoelen op hoofdlijnen. Waarom dit belangrijk is Koppelt ontwikkelwerk aan specifieke releases. Zo kun je analyseren of de planning wordt gehaald en wat procesvertragingen betekenen voor de releasetijdlijn. Waar vind je dit? Deze informatie staat meestal in een veld 'release' of 'planned_release', vaak met een verwijzing naar een releasemanagementtabel in ServiceNow. Raadpleeg de ServiceNow DevOps-documentatie. Voorbeelden v3.4.1Release Q1 2024Livegang van Project Phoenix | |||
| Implementatiestatus DeploymentStatus | Geeft het resultaat van een implementatieactiviteit aan, meestal 'Geslaagd' of 'Mislukt'. | ||
| Beschrijving Dit attribuut registreert het resultaat van een implementatie in een specifieke omgeving. Deze informatie is belangrijk om de betrouwbaarheid en stabiliteit van het releaseproces te begrijpen. Dit attribuut is nodig voor het dashboard 'Trends in geslaagde en mislukte implementaties' en de KPI 'Percentage mislukte implementaties'. Door de frequentie en trends van mislukte implementaties te analyseren, kunnen organisaties onderliggende problemen opsporen in tests, infrastructuur of releasecoördinatie. Zo kunnen ze werken aan betere kwaliteit en betrouwbaarheid van softwareopleveringen. Waarom dit belangrijk is Meet rechtstreeks of implementatieactiviteiten slagen. Deze maatstaf is nodig om het percentage mislukte implementaties te berekenen en de stabiliteit van releases te analyseren. Waar vind je dit? Deze status wordt meestal vastgelegd in taken voor het bijhouden van implementaties of in uitvoeringsrecords van CI/CD-pipelines die zijn geïntegreerd met ServiceNow DevOps. Voorbeelden GeslaagdMisluktVoltooid met waarschuwingen | |||
| Reden voor herstelwerk ReworkReason | Een classificatie of beschrijving van de reden waarom een ontwikkelitem na het testen moest worden aangepast. | ||
| Beschrijving Als een item niet slaagt voor QA of UAT, legt dit attribuut de reden vast. Het kan gaan om een specifieke bugcategorie, een verkeerd begrepen vereiste of een probleem met de testomgeving. Deze informatie geeft context aan het dashboard 'Analyse van herstelwerk en afwijzingen'. Analisten zien niet alleen dát er herstelwerk nodig was, maar ook waarom. Zo kunnen ze gerichte verbeteringen doorvoeren, zoals vereisten duidelijker vastleggen, unit tests verbeteren of testomgevingen stabieler maken. Dat helpt om herstelwerk terug te dringen. Waarom dit belangrijk is Geeft inzicht in de redenen voor herstelwerk. Zo kun je gericht verbeteringen doorvoeren om de kwaliteit te verhogen en herhaalde herstelrondes te beperken. Waar vind je dit? Dit kan worden vastgelegd in het veld 'close_notes' wanneer een test mislukt, of in een apart aangepast veld 'rework_reason'. Raadpleeg de ServiceNow DevOps-documentatie. Voorbeelden Vereiste verkeerd begrepenRegressiebugPrestatietest misluktUI/UX-probleem | |||
Activiteiten in de softwareontwikkelingscyclus
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Codebeoordeling uitgevoerd | Deze activiteit geeft aan dat een collega de code heeft beoordeeld, meestal in het kader van een pull- of merge request. De gebeurtenis kan expliciet worden vastgelegd via DevOps-integraties of worden afgeleid uit statuswijzigingen op gerelateerde records. | ||
| Waarom dit belangrijk is Dit is een belangrijk kwaliteitsmoment. Door de duur ervan te analyseren, zie je waar bottlenecks ontstaan in het beoordelingsproces, een veelvoorkomende oorzaak van vertraging in de SDLC. Waar vind je dit? Kan worden vastgelegd via de gebeurtenis 'Merged' of 'Completed' van een Pull Request-record in de Git-integratie van ServiceNow. Je kunt de gebeurtenis ook afleiden uit een statuswijziging van het ontwikkelitem naar 'Code Review Complete'. Vastleggen Wordt geregistreerd wanneer een Pull Request die aan het werkitem is gekoppeld, wordt samengevoegd. Gebeurtenistype explicit | |||
| Geïmplementeerd in productie | Deze gebeurtenis markeert de succesvolle afronding van de implementatie naar de productieomgeving. ServiceNow DevOps legt dit expliciet vast wanneer de CI/CD-tool meldt dat de pipeline succesvol is afgerond. | ||
| Waarom dit belangrijk is Dit is het belangrijkste eindpunt voor een geslaagd SDLC-proces. Hiermee is de waardestroom afgerond en kun je de totale doorlooptijd berekenen. Waar vind je dit? Afgeleid uit de 'completion_status' van een Pipeline Execution [sn_devops_pipeline_execution]-record of de bijbehorende Stage Execution Run. De status 'Success' op het eindtijdstip markeert deze gebeurtenis. Vastleggen Wordt geregistreerd wanneer de implementatiepipeline naar productie succesvol is afgerond. Gebeurtenistype explicit | |||
| Implementatie mislukt | Geeft aan dat de poging om het ontwikkelitem naar productie te implementeren is mislukt. ServiceNow DevOps legt dit expliciet vast wanneer de CI/CD-pipeline een fout meldt. | ||
| Waarom dit belangrijk is Dit is een belangrijk eindpunt bij een mislukking. Door de frequentie en oorzaken te analyseren, kun je releases stabieler maken en het aantal mislukte implementaties terugdringen. Waar vind je dit? Afgeleid uit de 'completion_status' van een Pipeline Execution [sn_devops_pipeline_execution]-record. De status 'Failed' op het eindtijdstip markeert deze gebeurtenis. Vastleggen Wordt geregistreerd wanneer de implementatiepipeline naar productie een foutstatus meldt. Gebeurtenistype explicit | |||
| Ontwikkeling gestart | Deze activiteit markeert het moment waarop een ontwikkelaar begint met coderen of het implementeren van het ontwikkelitem. Dit wordt meestal afgeleid uit een statuswijziging naar 'In Progress', 'Development' of 'Coding'. | ||
| Waarom dit belangrijk is Dit is een belangrijk moment: de fase waarin waarde wordt toegevoegd, begint. Het is essentieel om de doorlooptijd van ontwikkelaars en de doorlooptijd van codebeoordelingen te meten. Waar vind je dit? Afgeleid uit de timestamp waarop het veld 'State' op het record van het ontwikkelitem, bijvoorbeeld Story [rm_story], wordt bijgewerkt naar 'In Progress' of een vergelijkbare status. Vastleggen Gebaseerd op de timestamp van een statuswijziging naar 'In Progress' of een vergelijkbare waarde. Gebeurtenistype inferred | |||
| Ontwikkelitem aangemaakt | Deze activiteit markeert het aanmaken van een nieuw ontwikkelitem in ServiceNow, zoals een story, bug of epic. Dit wordt doorgaans expliciet vastgelegd wanneer een nieuw record wordt toegevoegd aan de relevante tabel, zoals de Story [rm_story]-tabel. | ||
| Waarom dit belangrijk is Dit is de belangrijkste startgebeurtenis van het SDLC-proces. Hiermee meet je de totale doorlooptijd van begin tot eind en volg je de eerste instroom van werk. Waar vind je dit? Wordt vastgelegd in de tabellen sys_audit of sys_history_line wanneer een record wordt aangemaakt in een tabel voor ontwikkelwerk, zoals Story [rm_story], Epic [rm_epic] of Defect [rm_defect]. De aanmaaktimestamp staat doorgaans op het record zelf. Vastleggen Afgeleid van de aanmaaktimestamp van het record van het ontwikkelitem. Gebeurtenistype explicit | |||
| QA-testen afgerond | Geeft aan dat het QA-team de tests voor het ontwikkelitem heeft afgerond. Dit wordt meestal afgeleid wanneer de status van het item verandert van een testfase naar bijvoorbeeld 'Ready for UAT' of 'Done'. | ||
| Waarom dit belangrijk is Dit moment markeert het einde van een belangrijke kwaliteitscontrole. Het is een voorwaarde voor volgende fasen, zoals User Acceptance Testing of de voorbereiding van een release. Waar vind je dit? Afgeleid uit de timestamp van een statuswijziging van een teststatus, zoals 'In QA', naar een status na het testen, zoals 'Ready for UAT' of 'Resolved'. Vastleggen Gebaseerd op de timestamp van een statuswijziging van 'Testing' naar een volgende status. Gebeurtenistype inferred | |||
| UAT goedgekeurd | Geeft aan dat zakelijke belanghebbenden het ontwikkelitem na User Acceptance Testing formeel hebben goedgekeurd. Dit belangrijke moment wordt afgeleid uit een statuswijziging, bijvoorbeeld van 'In UAT' naar 'Ready for Release' of 'Approved'. | ||
| Waarom dit belangrijk is Dit is de laatste zakelijke goedkeuring voordat een item klaar is voor implementatie in productie. Het is een belangrijk controlepunt voor kwaliteit en governance. Waar vind je dit? Afgeleid uit een statusovergang op het record van het ontwikkelitem die aangeeft dat UAT succesvol is afgerond. Dit wordt vastgelegd in de activiteitengeschiedenis van het item. Vastleggen Afgeleid uit een statuswijziging van 'UAT' naar een goedgekeurde status of een status waarin het item klaar is voor release. Gebeurtenistype inferred | |||
| Build gestart | Deze gebeurtenis markeert de start van een CI/CD-pipelinebuild, vaak na een codecommit. ServiceNow DevOps registreert dit als een pipeline-uitvoering en koppelt die aan de ontwikkelitems waaruit de build is voortgekomen. | ||
| Waarom dit belangrijk is Deze activiteit vormt de verbinding tussen ontwikkeling en geautomatiseerd testen of implementeren. Door de tijd tussen een commit en de start van de build te analyseren, kun je vertragingen in het CI/CD-proces opsporen. Waar vind je dit? Wordt expliciet vastgelegd in de Pipeline Execution [sn_devops_pipeline_execution]-tabel wanneer een build start in de geïntegreerde CI/CD-tool, zoals Jenkins of Azure DevOps. Vastleggen Afgeleid van de starttijd van een record in de Pipeline Execution-tabel. Gebeurtenistype explicit | |||
| Code vastgelegd | Geeft aan dat een ontwikkelaar code heeft vastgelegd in een versiebeheersysteem dat aan het ontwikkelitem is gekoppeld. ServiceNow DevOps legt deze gebeurtenissen expliciet vast vanuit geïntegreerde SCM-tools zoals Git of GitHub. | ||
| Waarom dit belangrijk is Door commits bij te houden, krijg je gedetailleerd zicht op de voortgang en frequentie van ontwikkelactiviteiten. Zo kun je specifieke codewijzigingen koppelen aan het bovenliggende ontwikkelitem. Waar vind je dit? Wordt als expliciete gebeurtenis vastgelegd in de ServiceNow DevOps Commits [sn_devops_commit]-tabel. Deze wordt gevuld met webhooks van het geïntegreerde broncodebeheersysteem. Vastleggen Wordt geregistreerd wanneer de SCM-tool een commit-webhook verstuurt. Gebeurtenistype explicit | |||
| Herstelwerk vastgesteld | Geeft aan dat tijdens het testen een probleem is gevonden, waardoor het item terug moet naar ontwikkeling. Dit wordt afgeleid uit een achterwaartse stap in het proces, zoals een statuswijziging van 'In QA' terug naar 'In Progress'. | ||
| Waarom dit belangrijk is Herstelwerk bijhouden is essentieel om kwaliteitsproblemen en inefficiënties in het proces te begrijpen. Als deze activiteit vaak voorkomt, kan dat wijzen op problemen in de ontwikkeling of onduidelijke eisen. Waar vind je dit? Afgeleid uit de geschiedenis van het veld 'State' in de tabellen sys_audit of sys_history_line. Een wijziging van een latere status, zoals 'Testing', naar een eerdere status, zoals 'In Progress', duidt op herstelwerk. Vastleggen Afgeleid uit een achterwaartse statusovergang, bijvoorbeeld 'Testing' -> 'In Progress'. Gebeurtenistype inferred | |||
| Implementatie naar productie gestart | Deze activiteit markeert de start van de implementatiepipeline naar de productieomgeving. ServiceNow DevOps legt dit expliciet vast wanneer de productiefase van een CI/CD-pipeline wordt uitgevoerd. | ||
| Waarom dit belangrijk is Dit markeert het begin van de laatste en vaak belangrijkste fase van de levenscyclus. Door deze fase bij te houden, kun je de implementatieduur analyseren en mogelijkheden voor automatisering opsporen. Waar vind je dit? Wordt expliciet geregistreerd in de Stage Execution Run [sn_devops_stage_execution]-tabel, gefilterd op fasen voor de productieomgeving. Vastleggen Afgeleid van de starttijd van een productiefase in een Pipeline Execution. Gebeurtenistype explicit | |||
| Klaargemaakt voor release | Deze activiteit geeft aan dat het ontwikkelitem alle kwaliteitscontroles heeft doorstaan en deel uitmaakt van een specifieke release. Dit kan worden afgeleid wanneer het item aan een Release-record wordt gekoppeld of de status verandert naar 'Ready for Deployment'. | ||
| Waarom dit belangrijk is Deze stap geeft aan dat een item technisch en functioneel klaar is. De tijd in deze status kan bestaan uit wachttijd tot een gepland implementatiemoment. Waar vind je dit? Afgeleid uit een wijziging van het veld 'State' naar 'Ready for Release', of uit het moment waarop het veld 'Release' op het record van het ontwikkelitem wordt ingevuld of bijgewerkt. Vastleggen Afgeleid uit een statuswijziging of een koppeling met een Release-record. Gebeurtenistype inferred | |||
| Ontwerp gestart | Geeft de fase aan waarin het technisch ontwerp of de oplossingsarchitectuur voor het ontwikkelitem wordt gemaakt. Dit wordt meestal afgeleid uit een status- of stateveld op het record van het ontwikkelitem dat verandert in bijvoorbeeld 'Design' of 'Solutioning'. | ||
| Waarom dit belangrijk is Door de duur van de ontwerpfase te analyseren, zie je waar bottlenecks ontstaan bij het vertalen van eisen naar oplossingen en bij de planning, voordat het ontwikkelwerk begint. Waar vind je dit? Afgeleid uit statusovergangen op het record van het ontwikkelitem, bijvoorbeeld Story [rm_story]. Kijk of het veld 'State' of een aangepast veld 'Stage' verandert in een ontwerpgerelateerde waarde. Vastleggen Afgeleid uit een statuswijziging naar 'Design' of een vergelijkbare status. Gebeurtenistype inferred | |||
| Ontwikkelitem geannuleerd | Geeft aan dat een ontwikkelitem is beëindigd voordat het is afgerond. Dit is een alternatieve eindstatus, die meestal wordt afgeleid uit de status van het item: 'Cancelled' of 'Closed Incomplete'. | ||
| Waarom dit belangrijk is Door annuleringen bij te houden, kun je verspilde inspanningen herkennen en begrijpen waarom de scope verandert of prioriteiten worden aangepast. Zo krijg je een vollediger beeld van alle mogelijke procesuitkomsten. Waar vind je dit? Afgeleid uit de timestamp waarop het veld 'State' op het record van het ontwikkelitem wordt bijgewerkt naar een eindstatus die niet op afronding duidt, zoals 'Cancelled'. Vastleggen Afgeleid uit een statuswijziging naar 'Cancelled' of een vergelijkbare eindstatus. Gebeurtenistype inferred | |||
| QA-testen gestart | Markeert het begin van de formele kwaliteitsborgingstestfase. Dit wordt vrijwel altijd afgeleid uit een statuswijziging van het ontwikkelitem naar bijvoorbeeld 'In QA', 'Testing' of 'Ready for Test'. | ||
| Waarom dit belangrijk is Deze activiteit markeert de overdracht van ontwikkeling naar het QA-team. Zo kun je de duur van de testfase meten en bottlenecks in de testcapaciteit opsporen. Waar vind je dit? Afgeleid uit de timestamp waarop het veld 'State' op het record van het ontwikkelitem, bijvoorbeeld Story of Defect, wordt bijgewerkt naar een QA-status. Vastleggen Gebaseerd op de timestamp van een statuswijziging naar 'Testing' of een vergelijkbare status. Gebeurtenistype inferred | |||
| UAT gestart | Markeert de start van User Acceptance Testing, waarbij zakelijke belanghebbenden de functionaliteit controleren. Deze gebeurtenis wordt afgeleid uit een statuswijziging naar 'UAT', 'In UAT' of 'User Acceptance Testing'. | ||
| Waarom dit belangrijk is Deze fase is belangrijk om te controleren of de ontwikkelde functie aan de bedrijfsvereisten voldoet. Door de duur ervan te analyseren, kun je problemen met de betrokkenheid van gebruikers of verschillen tussen de eisen en de oplossing opsporen. Waar vind je dit? Afgeleid uit een statusovergang op het record van het ontwikkelitem. Hiervoor moet het statusmodel van de klant een aparte UAT-status bevatten. Vastleggen Afgeleid uit een statuswijziging naar 'UAT'. Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
- Breng het statusmodel in kaart: Leg voordat je rapporten maakt vast welke waarden in het statusveld van je ontwikkelitem overeenkomen met de vereiste activiteiten. Dit kan bijvoorbeeld het statusveld zijn in de tabel
Story [rm_story]ofDefect [rm_defect]. Een statuswaarde als 'In Progress' kan bijvoorbeeld overeenkomen met de activiteit 'Development Started'. - Ga naar rapporten maken: Meld je aan bij je ServiceNow-instantie. Ga in de filternavigator naar
Reports > View / Runen klik op de knopCreate a report. - Maak een rapport voor statuswijzigingen: Maak eerst een rapport voor activiteiten die uit statuswijzigingen worden afgeleid. Stel het als volgt in:
- Rapportnaam:
ProcessMind - State Change Events - Brontype:
Table - Tabel:
Audit [sys_audit] - Type:
List - Kolommen instellen: Voeg
Document key,Created on,Table name,Field name,Old valueenNew valuetoe. - Filter: Stel
Table namein op een van de tabellen met ontwikkelitems, bijvoorbeeldStory, enField nameop het statusveld, bijvoorbeeldState. Voeg een datumfilter toe op het veldCreated onvoor de gewenste periode.
- Rapportnaam:
- Maak een rapport voor het aanmaken van items: Maak een nieuw rapport voor de eerste aanmaakgebeurtenis.
- Rapportnaam:
ProcessMind - Item Creation Events - Brontype:
Table - Tabel:
Story [rm_story](of de belangrijkste tabel met ontwikkelitems) - Type:
List - Kolommen instellen: Voeg kolommen toe voor de vereiste attributen, zoals
Getal,Created on,Assigned to,Priority,Stateenzovoort. - Filter: Pas een datumfilter toe op het veld
Created on.
- Rapportnaam:
- Maak een rapport voor codecommits: Maak een rapport voor expliciete DevOps-gebeurtenissen rond commits.
- Rapportnaam:
ProcessMind - Commit Events - Brontype:
Table - Tabel:
Commit [sn_devops_commit] - Type:
List - Kolommen instellen: Voeg kolommen toe zoals
Work item,Commit time,Authorenzovoort. - Filter: Pas een datumfilter toe op het veld
Commit time.
- Rapportnaam:
- Maak rapporten voor builds en implementaties: Herhaal de vorige stap voor de tabellen
Build [sn_devops_build]enDeployment [sn_devops_deployment]. Deze tabellen bevatten records voor de activiteitenBuild Triggered,Deployment to Production Started,Deployed to ProductionenDeployment Failed. - Exporteer alle rapporten: Voer elk rapport afzonderlijk uit. Klik bij elk rapport op het contextmenu (drie puntjes of een pijl omlaag) en kies
Export > CSVofExport > Excel. Sla alle bestanden op. - Combineer en bewerk de data: Open de geëxporteerde bestanden in een spreadsheetprogramma of gebruik een tool voor datavoorbereiding. Combineer de data uit alle bestanden handmatig in één werkblad. Maak de vereiste kolommen voor het event log (
DevelopmentItem,ActivityName,EventTimeenzovoort) en koppel de data aan de bronkolommen. Koppel bijvoorbeeldDocument keyuit het auditrapport enGetaluit het storyrapport aan de kolomDevelopmentItem. - Koppel activiteitnamen: Maak de kolom
ActivityNamedoor de brondata om te zetten. Gebruik voor het rapport met statuswijzigingen het vastgelegde statusmodel om waarden inNew valueaan activiteitnamen te koppelen. Koppel bijvoorbeeld de status 'Testing' aan 'QA Testing Started'. Wijs voor de andere rapporten een vaste activiteitnaam toe aan elke rij, bijvoorbeeld 'Code Committed' aan alle rijen uit de commit-export. - Rond af en sla op: Voeg de kolommen
SourceSystemenLastDataUpdatetoe en vul voor alle rijen vaste waarden in. Gebruik voor alle timestamps hetzelfde formaat. Sla het gecombineerde bestand op als één CSV-bestand. Dat kun je nu uploaden naar ProcessMind.
Configuratie
- Vereiste tabellen: Voor deze extractie heb je vooral
Audit [sys_audit]nodig voor afgeleide gebeurtenissen, de tabellen voor je ontwikkelitems, zoalsStory [rm_story]enDefect [rm_defect], en de belangrijkste ServiceNow DevOps-tabellen:Commit [sn_devops_commit],Build [sn_devops_build]enDeployment [sn_devops_deployment]. - Belangrijke filters: Het belangrijkste filter is de datumperiode. Pas die in alle rapporten op dezelfde manier toe op een timestampveld, zoals
Created on,Commit timeofStarttijd. Filter voor het rapport opsys_auditook opTable name(bijvoorbeeldrm_story) enField name(bijvoorbeeldstate), zodat alleen relevante statuswijzigingen worden meegenomen. - Aanbevolen datumperiode: Haal data op over een periode van 3 tot 6 maanden. Zo krijg je een representatieve dataset zonder de prestaties te belasten. Haal data voor grotere systemen eventueel per maand op.
- Statusmodel vastleggen: Zorg dat je het statusmodel voor werkitems in je organisatie goed kent. Dat is nodig om de statuswaarden in de tabel
sys_auditcorrect te koppelen aan bedrijfsactiviteiten zoals 'QA Testing Started' of 'UAT Approved'. - Vereisten vooraf: Gebruikers die de extractie uitvoeren, hebben de rol
report_userof vergelijkbare rechten nodig om rapporten te maken en uit te voeren. Ook hebben ze leestoegang nodig tot de hierboven genoemde DevOps- en applicatieontwikkelingstabellen. De ServiceNow DevOps-plugin moet zijn geïnstalleerd en actief zijn gekoppeld aan je SCM- en CI/CD-tools.
a Voorbeeldquery sql
/*
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.
--- Stappen
- Vereisten vooraf: Zorg dat je netwerktoegang hebt tot je ServiceNow-instantie en dat je een speciaal serviceaccount met leesrechten hebt gekregen. De rollen
itilensn_devops.viewerzijn een goed uitgangspunt. Dit account heeft toegang nodig tot tabellen zoalsrm_story,sys_auditen het schemasn_devops_*. - Installeer de ServiceNow ODBC-driver: Download de juiste ServiceNow ODBC-driver voor je besturingssysteem via het ServiceNow-supportportaal. Volg de meegeleverde installatie-instructies.
- Configureer de DSN: Stel een nieuwe System DSN (Data Source Name) in op de computer waarop je de query uitvoert. Voeg in ODBC Data Source Administrator de ServiceNow-driver toe en vul de URL van je instantie in, bijvoorbeeld
yourinstance.service-now.com, plus je gebruikersnaam en wachtwoord. - Maak verbinding met een SQL-client: Gebruik een SQL-client zoals DBeaver of Microsoft SQL Server Management Studio (met een linked server). Je kunt ook een scripttaal zoals Python met een ODBC-bibliotheek gebruiken om via de ingestelde DSN verbinding te maken met ServiceNow.
- Bepaal het statusmodel: Bepaal voordat je de query uitvoert welke exacte waarden je organisatie gebruikt voor het veld
statein de tabellen met ontwikkelitems, zoalsrm_storyenrm_defect. De query bevat gangbare voorbeelden zoals 'In Progress' en 'In QA'. Vervang deze door de waarden die je zelf gebruikt. - Pas de SQL-query aan: Kopieer de meegeleverde SQL-query naar je client. Pas de tijdelijke waarden bovenaan de query aan, waaronder de startdatum voor de extractie en de statuswaarden die bij de activiteiten in de softwareontwikkelingscyclus horen.
- Voer de query uit: Voer de volledige SQL-query via de ODBC-verbinding uit op de ServiceNow-database. Afhankelijk van het datumbereik en de hoeveelheid data kan dit behoorlijk wat tijd kosten.
- Controleer de data: Controleer de opgehaalde dataset kort nadat de query is uitgevoerd. Bekijk verschillende activiteiten en controleer of belangrijke kolommen zoals
DevelopmentItem,ActivityNameenEventTimenaar verwachting zijn gevuld. - Exporteer naar CSV: Exporteer alle resultaten naar een CSV-bestand. Gebruik UTF-8-codering en controleer of de kolomkoppen overeenkomen met de attribuutnamen die ProcessMind nodig heeft, zoals
DevelopmentItem,ActivityNameenEventTime. - Maak het bestand klaar om te uploaden: Controleer of het uiteindelijke CSV-bestand geen lege rijen aan het einde bevat en of de datumnotatie voor
EventTimeenLastDataUpdateconsistent is en door ProcessMind wordt ondersteund, bijvoorbeeldYYYY-MM-DD HH:MM:SS.
Configuratie
- Vereisten vooraf: Toegang tot een ServiceNow-instantie met de DevOps-module ingeschakeld. Je hebt een speciaal gebruikersaccount nodig met leesrechten voor de vereiste tabellen. De ServiceNow ODBC-driver moet op de clientcomputer zijn geïnstalleerd en geconfigureerd.
- Configuratie van de ODBC-driver: Voor de verbinding heb je de URL van de instantie, een gebruikersnaam en een wachtwoord of OAuth-token nodig. Test de DSN-verbinding voordat je complexe queries uitvoert.
- Filteren op datumbereik: De meegeleverde query bevat de tijdelijke waarde
s.sys_created_on >= '2023-01-01'om de hoeveelheid opgehaalde data te beperken. Haal bij voorkeur data op over een afgebakende periode, bijvoorbeeld de afgelopen 6 tot 12 maanden. Zo blijft de uitvoeringstijd van de query beheersbaar. - Aanpassen van het statusmodel: De juistheid van afgeleide gebeurtenissen hangt volledig af van het statusmodel. Vervang de tijdelijke statuswaarden, zoals
[Your 'In Progress' State Value]en[Your 'In QA' State Value], door de exacte waarden uit je ServiceNow-configuratie. Deze waarden zijn hoofdlettergevoelig. - Tabellen met werkitems: De query is geschreven voor de Story-tabel (
rm_story). Gebruikt je organisatie ook Defects (rm_defect), Enhancements (rm_enhancement) of andere taaktypen, voeg deze dan metUNION ALLtoe aan de eerste Common Table Expression (CTE),DevItems. - Prestaties: Rechtstreekse queries op een productie-instantie van ServiceNow kunnen de prestaties beïnvloeden. Voer grote extracties bij voorkeur uit buiten piekuren. Overweeg voor zeer grote datasets een incrementele extractie op basis van het veld
sys_updated_on.
a Voorbeeldquery 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 *** Klaar om aan de slag te gaan?
Begin vandaag met het verbeteren van de softwareontwikkelingscyclus. Gebruik deze datatemplate om verborgen inefficiënties op te sporen en continu te verbeteren.
Wacht niet langer: verbeter vandaag de softwareontwikkelingscyclus
Spoor inefficiënties op en verkort de SDLC-doorlooptijd met 30% of meer.
Geen creditcard nodig. Begin vandaag met verbeteren.