Uw Software Development Lifecycle Data Template
Uw Software Development Lifecycle Data Template
- Aanbevolen attributen om vast te leggen
- Belangrijkste activiteiten om te volgen
- `Extraction guidance` voor ServiceNow `DevOps`
Software Development Lifecycle attributes
| Naam | Omschrijving | ||
|---|---|---|---|
| `Development Item` DevelopmentItem | De unieke identifier voor een enkele eenheid van werk, zoals een feature, bug of task, die door de ontwikkelingslifecycle vordert. | ||
| Omschrijving Het Development Item dient als de primaire case identifier, en vertegenwoordigt een afzonderlijke eenheid van werk die wordt gevolgd. Het koppelt alle activiteiten, van initiële conceptie en planning tot ontwikkeling, testen en deployment voor dat specifieke item. In process mining analyse is dit attribute fundamenteel voor het reconstrueren van de end-to-end reis van elk werkitem. Het maakt de visualisatie van procesflows, berekening van totale cyclustijden en identificatie van procesvarianten voor individuele features of bug fixes mogelijk. Elk event in de log moet gekoppeld zijn aan een Development Item om een coherente proceskaart op te bouwen. Het belang Dit is de kernidentifier die alle gerelateerde ontwikkelingsactiviteiten verbindt in één procesinstantie, waardoor het mogelijk wordt de complete lifecycle van elk werkitem te analyseren. Vindplaats Deze identifier is doorgaans de primaire sleutel uit tabellen die stories, bugs of tasks beheren, zoals de 'rm_story', 'rm_bug' of 'task' tabellen in ServiceNow. Voorbeelden STRY0010015BUG0034092TASK0050118 | |||
| Activiteitsnaam ActivityName | De naam van de specifieke ontwikkelingslifecycle event die plaatsvond, zoals 'Development Started' of 'Code Review Performed'. | ||
| Omschrijving Dit attribute registreert de naam van elke mijlpaal of taak die binnen de software development lifecycle is voltooid. Deze activiteiten vormen de sequentiële stappen van het proces, van creatie tot deployment. Het analyseren van de sequentie en frequentie van deze activiteiten is de primaire functie van process mining. Het maakt de constructie van de proceskaart mogelijk, helpt knelpunten tussen stappen te identificeren en belicht niet-compliant of inefficiënte procesvarianten. De gedefinieerde set activiteiten omvat belangrijke fasen zoals design, development, testing en deployment. Het belang Het definieert de stappen in de proceskaart, wat analyse van de processtroom, identificatie van knelpunten en ontdekking van afwijkingen van de standaard SDLC mogelijk maakt. Vindplaats Dit wordt doorgaans afgeleid door statuswijzigingen, event records of audit trail entries te mappen aan een gestandaardiseerde lijst van activiteitsnamen. Bijvoorbeeld, een 'state' veld dat verandert naar 'In Progress' kan mappen aan 'Development Started'. Voorbeelden `Development` Gestart`Code Committed`QA Testing VoltooidGedepolyed naar `Production` | |||
| Starttijd EventTime | De exacte timestamp die aangeeft wanneer een specifieke activiteit of event plaatsvond. | ||
| Omschrijving Dit attribute biedt de datum en tijd waarop elke activiteit in de ontwikkelingslifecycle is vastgelegd. Het is essentieel voor chronologische ordening van events en voor alle tijdgerelateerde analyse. In process mining wordt de starttijd gebruikt om duren tussen activiteiten te berekenen, wachttijden te identificeren en de totale cyclustijd van het proces te meten. Het is een kritiek component voor dashboards die prestaties analyseren, zoals de SDLC End-to-End Cycle Time Analysis, en voor het berekenen van key performance indicators zoals Code Review Lead Time. Het belang Deze timestamp is essentieel voor het correct ordenen van events en het berekenen van alle performance metrics, inclusief cyclustijden, duren en wachttijden. Vindplaats Doorgaans te vinden in systeemgegenereerde timestamp velden zoals 'sys_updated_on' of 'sys_created_on' uit de audit trail of task tabellen. Voorbeelden 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Bronsysteem SourceSystem | Identificeert het systeem waaruit de `data` is geëxtraheerd, wat in dit `case` ServiceNow `DevOps` is. | ||
| Omschrijving Dit attribute specificeert het oorspronkelijke systeem voor de event data. Voor dit proces zal het consistent 'ServiceNow DevOps' zijn. Hoewel het statisch kan lijken, is het expliciet opnemen van het bronsysteem cruciaal voor data governance en in omgevingen waar data mogelijk wordt samengevoegd uit meerdere systemen, zoals Jira of Azure DevOps. Het zorgt voor duidelijkheid over data herkomst en helpt bij het diagnosticeren van data quality of extractieproblemen. Het belang Waarborgt Vindplaats Dit is een statische waarde die moet worden toegevoegd tijdens het data-extractie- en transformatieproces. Voorbeelden ServiceNow DevOps | |||
| Laatste data-update LastDataUpdate | Timestamp die de laatste keer aangeeft dat de data voor deze event log is ververst vanuit het bronsysteem. | ||
| Omschrijving Dit attribute registreert wanneer de dataset voor het laatst is geëxtraheerd of bijgewerkt vanuit ServiceNow DevOps. Het is van toepassing op de gehele dataset in plaats van individuele events. Deze timestamp is van vitaal belang voor het begrijpen van de versheid van de analyse. Het informeert gebruikers hoe actueel de procesinzichten zijn en helpt bij het plannen van data refreshes. Het weergeven van deze informatie op dashboards biedt context aan alle metrics en visualisaties, en zorgt ervoor dat beslissingen worden genomen op basis van tijdige data. Het belang Biedt cruciale context over de actualiteit van de data, zodat gebruikers begrijpen hoe up-to-date de procesanalyse is. Vindplaats Deze timestamp wordt gegenereerd en toegevoegd tijdens het data-extractieproces, en registreert wanneer de extractie is uitgevoerd. Voorbeelden 2023-11-15T08:00:00Z | |||
| `Development Item Cycle Time` DevelopmentItemCycleTime | De totale verstreken tijd vanaf de creatie van het ontwikkelitem tot de uiteindelijke afsluiting of deployment. | ||
| Omschrijving Dit attribute is een berekende metric die de end-to-end duur voor een enkel ontwikkelitem vertegenwoordigt. Het wordt berekend door het verschil te vinden tussen de timestamp van de allereerste activiteit en de allerlaatste activiteit voor elke case. Dit is een primaire key performance indicator voor het gehele SDLC proces, die direct de 'Average SDLC Cycle Time' KPI ondersteunt. Het biedt een high-level maatstaf voor procesvelocity en efficiëntie. Het analyseren van deze metric over tijd en over verschillende dimensies, zoals prioriteit of team, helpt de impact van procesverbeteringsinitiatieven te volgen. Het belang Vertegenwoordigt de totale end-to-end duur voor een werkitem, een belangrijke metric voor het meten van de algehele procesefficiëntie en velocity. Vindplaats Dit is geen veld in het bronsysteem. Het wordt berekend in de process mining tool door de minimale StartTime af te trekken van de maximale StartTime voor elke CaseId. Voorbeelden 15 dagen 4 uur3 dagen 12 uur32 dagen 8 uur | |||
| `Development Item State` DevelopmentItemState | De status of state van het ontwikkelitem op het moment van het event, zoals 'Open', 'In Progress' of 'Closed'. | ||
| Omschrijving Dit attribute weerspiegelt de officiële status van het ontwikkelitem binnen ServiceNow. Hoewel activiteiten afgeleide processtappen zijn, vertegenwoordigt de state de formele fase in de workflow van het systeem. State is vaak de bron waaruit activiteiten worden afgeleid. Het kan worden gebruikt voor data validatie en voor het creëren van eenvoudigere, high-level weergaven van het proces. Het analyseren van de tijd die in elke state wordt doorgebracht, kan bijvoorbeeld een ander beeld geven van knelpunten dan het analyseren van de tijd tussen activiteiten. Het is ook nuttig voor het identificeren van items die vastzitten of zijn opgelost. Het belang Biedt de officiële systeemstatus van een werkitem, die vaak de bron is voor het afleiden van activiteiten en kan worden gebruikt voor validatie en statusanalyse op hoog niveau. Vindplaats Dit is een standaardveld, meestal 'state' of 'stage' genaamd, op taakgerelateerde tabellen in ServiceNow. Voorbeelden PendingWork in ProgressKlaar voor TestAfgerond | |||
| `Development Item Type` DevelopmentItemType | De classificatie van het werkitem, zoals 'Feature', 'Bug', 'Technical Debt' of 'Task'. | ||
| Omschrijving Dit attribute onderscheidt verschillende soorten werk die door het SDLC proces stromen. Zo kan het proces voor het oplossen van een kritieke bug anders en sneller zijn dan het proces voor het ontwikkelen van een nieuwe feature. Het analyseren van het proces op basis van werkitem type maakt een meer genuanceerd begrip van de prestaties mogelijk. Het helpt vragen te beantwoorden zoals: 'Hebben bugs een hoger herwerkpercentage dan nieuwe features?' of 'Is onze cyclustijd voor technische schuldvermindering acceptabel?'. Deze segmentatie biedt diepere inzichten dan een one-size-fits-all procesoverzicht. Het belang Onderscheidt verschillende soorten werk, zoals Vindplaats Dit kan worden bepaald uit de brontabel van het record (bijv. 'rm_story' vs 'rm_bug') of uit een 'type' veld op een generieke task-tabel. Voorbeelden FeatureBugTaskSpike | |||
| Is herstelwerk IsRework | Een `boolean flag` die `true` is als de `activity` deel uitmaakt van een `rework loop`, zoals terugkeren naar `development` na `testing`. | ||
| Omschrijving Dit is een afgeleid attribute dat activiteiten identificeert die plaatsvinden nadat een proces is teruggekeerd naar een eerdere fase. Bijvoorbeeld, als een 'Development Started' activiteit plaatsvindt na een 'QA Testing Completed' activiteit voor hetzelfde item, wordt het gemarkeerd als herwerk. Deze flag is essentieel voor het kwantificeren en visualiseren van herwerk. Het ondersteunt direct het 'Rework and Rejection Flow Analysis' dashboard en wordt gebruikt om de 'Rework Rate after Testing' KPI te berekenen. Door deze events te markeren, kunnen analisten eenvoudig filteren op en de frequentie, oorzaken en impact van herwerk op de totale cyclustijd analyseren. Het belang Deze flag maakt het eenvoudig om herwerk te kwantificeren en te analyseren, en helpt bij het meten van proceskwaliteit en het identificeren van de hoofdoorzaken van herhaald werk. Vindplaats Dit attribute wordt berekend binnen de process mining tool door de sequentie van activiteiten voor elke case te analyseren om backward movements in de procesflow te detecteren. Voorbeelden truefalse | |||
| Module/Component Betrokken ModuleComponentAffected | De specifieke softwaremodule, applicatie of component waartoe het ontwikkelitem behoort. | ||
| Omschrijving Dit attribute categoriseert het ontwikkelwerk op basis van het deel van het systeem dat het beïnvloedt. Dit kan een specifieke microservice, een UI component of een backend applicatie zijn. Het segmenteren van het proces per module of component is cruciaal voor het identificeren van gelokaliseerde knelpunten. Het 'Component-Specific Bottleneck Insights' dashboard en de 'Avg Stage Duration by Component' KPI vertrouwen op dit attribute om vast te stellen of bepaalde delen van de codebase consistent geassocieerd worden met langere ontwikkelcycli, hogere herwerkpercentages of frequentere deployment failures. Dit helpt om verbeteringsinspanningen te richten waar ze het meest nodig zijn. Het belang Maakt Vindplaats Dit is vaak een custom veld of een referentie naar de Configuration Management Database (CMDB), die het werkitem koppelt aan een 'cmdb_ci' record. Raadpleeg de ServiceNow DevOps documentatie. Voorbeelden `Billing Service`User Authenticatie UIRapportagedatabaseAPI Gateway | |||
| Prioriteit DevelopmentItemPriority | Het prioriteitsniveau toegewezen aan het ontwikkelitem, zoals 'High', 'Medium' of 'Low'. | ||
| Omschrijving Dit attribute categoriseert ontwikkelitems op basis van hun zakelijke urgentie. Prioriteitsniveaus helpen teams zich te richten op de meest kritieke taken en worden vaak gebruikt om SLA's en stakeholder-verwachtingen te beheren. In process mining is prioriteit een belangrijke dimensie voor vergelijkende analyse. Het maakt het mogelijk om de proceskaart te filteren om te zien of high-priority items een sneller of ander pad volgen. Het is essentieel voor het 'High-Priority Feature Delivery Time' dashboard en KPI, en helpt te valideren of kritieke items daadwerkelijk worden versneld. Het belang Maakt het Vindplaats Dit is een standaardveld, vaak 'priority' genaamd, op taakgerelateerde tabellen in ServiceNow. Voorbeelden 1 - Kritiek2 - Hoog3 - Moderate4 - Laag | |||
| Toegewezen `Developer` AssignedDeveloper | De naam of ID van de developer of gebruiker die op het moment van de activiteit aan het ontwikkelitem was toegewezen. | ||
| Omschrijving Dit attribute identificeert de persoon die verantwoordelijk is voor het uitvoeren van een specifieke taak of activiteit. Het is dynamisch en kan veranderen naarmate het ontwikkelitem tussen verschillende fasen en teams beweegt. Dit attribute is cruciaal voor het analyseren van resource-allocatie, workload en handoffs. Het ondersteunt direct het 'Developer Workload and Handoffs' dashboard en de 'Activity Volume per Developer' KPI. Door veranderingen in dit veld te volgen, is het mogelijk handoff-tijden te meten en collaboration knelpunten te identificeren tussen developers of tussen development en QA teams. Het belang Dit is essentieel voor resource-gebaseerde analyse, inclusief workload distributie, handoff efficiëntie en het identificeren van teamspecifieke prestatiepatronen. Vindplaats Deze informatie wordt doorgaans opgeslagen in het veld 'assigned_to' op taakgerelateerde tabellen in ServiceNow. Voorbeelden David MillerAnna WilliamsJames Brown | |||
| Toewijzingsgroep AssignmentGroup | Het team of de groep die verantwoordelijk is voor het ontwikkelitem op het moment van de activiteit. | ||
| Omschrijving Dit attribute identificeert het team dat aan een werkitem is toegewezen, zoals 'Frontend Developers', 'Backend Services' of 'QA Team'. Naarmate een werkitem vordert, wordt het vaak overgedragen tussen verschillende assignment groups. Het volgen van de assignment group is essentieel voor het begrijpen van cross-functionele collaboration en handoffs. Het helpt systemische vertragingen te identificeren die optreden wanneer werk van het ene team naar het andere verschuift. Dit attribute ondersteunt de analyse van team-level prestaties, workload en het identificeren welke teams knelpunten zijn in de algehele flow. Het belang Volgt welk team verantwoordelijk is voor het werk, wat analyse van teamprestaties, workload balancing en de efficiëntie van handoffs tussen teams mogelijk maakt. Vindplaats Deze informatie wordt opgeslagen in het veld 'assignment_group', wat een standaardveld is op taakgerelateerde tabellen in ServiceNow. Voorbeelden Platform EngineeringMobiele App TeamKwaliteitsborging`DevOps` | |||
| `Commit ID` CommitId | De unieke identifier van de source code commit die geassocieerd is met het ontwikkelwerk. | ||
| Omschrijving Dit attribute biedt een directe link van een ontwikkelitem naar de specifieke codewijziging in de source code repository, zoals Git. Het wordt vastgelegd wanneer een 'Code Committed' activiteit plaatsvindt. In process mining verrijkt de Commit ID de analyse door procesdata te verbinden met engineering data. Het stelt analisten in staat een problematische deployment terug te leiden naar de exacte codewijziging of code complexity metrics te correleren met ontwikkelingscyclustijden. Dit biedt een veel diepere, meer technische laag van root cause analyse. Het belang Koppelt de procesgebeurtenis aan een specifieke codewijziging, waardoor diepgaandere oorzaakanalyse mogelijk wordt door procesmetrics te correleren met code-niveau details. Vindplaats Dit wordt vastgelegd door ServiceNow DevOps integraties met source code management systemen zoals Git of SVN. De data bevindt zich in gerelateerde tabellen die zijn gekoppeld aan het ontwikkelitem. Voorbeelden a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| `Deployment Status` DeploymentStatus | Geeft de uitkomst aan van een `deployment activity`, typisch 'Success' of 'Failure'. | ||
| Omschrijving Dit attribute registreert het resultaat van een deployment naar een specifieke omgeving. Het is een cruciaal stuk informatie voor het begrijpen van de betrouwbaarheid en stabiliteit van het releaseproces. Dit attribute is essentieel voor het 'Deployment Success and Failure Trends' dashboard en de 'Deployment Failure Rate' KPI. Door de frequentie en trends van deployment failures te analyseren, kunnen organisaties onderliggende problemen in hun testing, infrastructuur of releasecoördinatie identificeren. Het helpt de inspanningen te richten op het verbeteren van de kwaliteit en betrouwbaarheid van softwarelevering. Het belang Meet direct het succes van Vindplaats Deze status wordt doorgaans vastgelegd in deployment tracking tasks of CI/CD pipeline execution records die zijn geïntegreerd met ServiceNow DevOps. Voorbeelden SuccesFailureVoltooid met `warnings` | |||
| Eindtijd EventEndTime | De exacte timestamp die aangeeft wanneer een activiteit is voltooid. Voor instantane events is dit hetzelfde als de Start Time. | ||
| Omschrijving Dit attribute biedt de datum en tijd waarop elke activiteit in de ontwikkelingslifecycle is voltooid. Het is bijzonder nuttig voor activiteiten die een meetbare duur hebben, zoals 'Code Review Performed' of 'QA Testing'. In process mining maakt het hebben van zowel een start- als een eindtijd een precieze berekening van activiteitverwerkingstijden mogelijk, waardoor deze worden onderscheiden van de wachttijd tussen activiteiten. Dit helpt om vast te stellen of vertragingen te wijten zijn aan lange taken of lange wachttijden op resources. Voor events die als instantane worden beschouwd, zoals 'Build Triggered', kan de End Time hetzelfde zijn als de Start Time. Het belang Maakt de precieze berekening van Vindplaats Dit moet mogelijk worden afgeleid. Het kan de timestamp zijn van de starttijd van de volgende activiteit, of het kan afkomstig zijn van een apart 'end date' veld indien beschikbaar in het bronsysteem. Voorbeelden 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| Geplande Release Versie PlannedReleaseVersion | De beoogde softwarerelease of -versie waarin het ontwikkelitem gepland is om te worden geleverd. | ||
| Omschrijving Dit attribute koppelt een ontwikkelitem aan een specifieke, geplande release, zoals 'Versie 2.3' of 'Q4 2023 Release'. Het is een sleutelelement voor projectmanagement en release planning. Voor process mining is dit attribute cruciaal voor het 'Release Plan Adherence Monitoring' dashboard. Door de daadwerkelijke voltooiingsdata te vergelijken met geplande releasedata, kunnen teams de schema-adherentie meten, items identificeren die het risico lopen een release te missen, en de oorzaken van releasevertragingen analyseren. Het biedt een directe link tussen het low-level ontwikkelproces en high-level business doelstellingen. Het belang Verbindt Vindplaats Deze informatie wordt doorgaans opgeslagen in een 'release' of 'planned_release' veld, vaak verwijzend naar een release management tabel in ServiceNow. Raadpleeg de ServiceNow DevOps documentatie. Voorbeelden v3.4.1Q1 2024 ReleaseProject Phoenix Go-Live | |||
| Herwerkingsreden ReworkReason | Een classificatie of beschrijving van waarom een `development item` `rework` vereiste na `testing`. | ||
| Omschrijving Wanneer een item faalt in QA of UAT, legt dit attribute de reden voor de failure vast. Dit kan een specifieke bug categorie zijn, een misverstand over requirements, of een omgevingsprobleem. Deze informatie biedt kritieke context voor het 'Rework and Rejection Flow Analysis' dashboard. In plaats van alleen te weten dat herwerk plaatsvond, kunnen analisten begrijpen waarom het gebeurde. Dit maakt gerichte verbeteringen mogelijk, zoals betere requirements definitie, verbeterde unit testing, of stabielere testomgevingen, om het algehele herwerkpercentage te verminderen. Het belang Biedt kwalitatief inzicht in waarom herwerk plaatsvindt, waardoor gerichte procesverbeteringen mogelijk zijn om de kwaliteit te verhogen en herwerklussen te verminderen. Vindplaats Dit kan worden vastgelegd in een 'close_notes' veld wanneer een test mislukt, of in een speciaal 'rework_reason' custom veld. Raadpleeg de ServiceNow DevOps documentatie. Voorbeelden Requirement Verkeerd GeïnterpreteerdRegressiebugMislukte `Performance Test`UI/UX Probleem | |||
Software Development Lifecycle Activiteiten
| Activiteit | Omschrijving | ||
|---|---|---|---|
| `Code Review` Uitgevoerd | Deze activiteit geeft de voltooiing van een peer code review aan, doorgaans geassocieerd met een pull of merge request. Dit event kan expliciet worden vastgelegd via DevOps integraties of worden afgeleid uit statuswijzigingen op gerelateerde records. | ||
| Het belang Dit is een kritieke quality gate. Het analyseren van de duur ervan helpt knelpunten in het reviewproces te identificeren, wat een veelvoorkomende bron is van vertragingen in de SDLC. Vindplaats Kan worden vastgelegd vanuit de 'Merged' of 'Completed' Vastleggen Vastgelegd wanneer een aan het werkitem gekoppelde Pull Request wordt samengevoegd. Gebeurtenistype explicit | |||
| `Deployment` Mislukt | Geeft aan dat de poging om het `development item` te `deployen` naar `production` mislukte. Dit wordt expliciet vastgelegd door ServiceNow `DevOps` wanneer de `CI/CD pipeline` een `failure` rapporteert. | ||
| Het belang Dit is een kritiek failure end-point. Het analyseren van de frequentie en oorzaken ervan is essentieel voor het verbeteren van de release stabiliteit en het verminderen van de deployment failure rate. Vindplaats Vastgelegd vanuit de 'completion_status' van een Vastleggen Vastgelegd wanneer de productiedeployment pipeline een foutstatus rapporteert. Gebeurtenistype explicit | |||
| `Development Item` Gemaakt | Deze activiteit markeert de creatie van een nieuw ontwikkelitem, zoals een story, bug of epic, binnen ServiceNow. Dit event wordt doorgaans expliciet vastgelegd wanneer een nieuw record wordt ingevoegd in de relevante tabel, zoals de Story [rm_story] tabel. | ||
| Het belang Dit is de primaire start event voor het SDLC proces. Het maakt het mogelijk om de totale end-to-end cyclustijd te meten en de initiële demand intake te volgen. Vindplaats Vastgelegd in de sys_audit of sys_history_line tabellen bij creatie van een record in een ontwikkelingsgerelateerde tabel, zoals Story [rm_story], Epic [rm_epic] of Defect [rm_defect]. De creatie timestamp bevindt zich doorgaans op het record zelf. Vastleggen Vastgelegd vanuit de Gebeurtenistype explicit | |||
| `Development` Gestart | Deze activiteit markeert het punt waarop een developer actief begint met coderen of implementeren van het ontwikkelitem. Het wordt doorgaans afgeleid uit een statuswijziging op het item naar 'In Progress', 'Development' of 'Coding'. | ||
| Het belang Dit is een cruciale mijlpaal die de start van de value-add constructiefase signaleert. Het is essentieel voor het meten van developer lead time en code review cyclustijden. Vindplaats Afgeleid uit de timestamp wanneer het veld 'State' op het ontwikkelitem record (bijv. Story [rm_story]) wordt bijgewerkt naar een 'In Progress' of gelijkwaardige status. Vastleggen Gebaseerd op de Gebeurtenistype inferred | |||
| Gedepolyed naar `Production` | Dit event markeert de succesvolle voltooiing van de deployment naar de productieomgeving. Het wordt expliciet vastgelegd door ServiceNow DevOps wanneer de CI/CD tool een succesvolle pipeline completion rapporteert. | ||
| Het belang Dit is de primaire succes end-point van het SDLC proces. Het voltooit de value stream en is essentieel voor het berekenen van de totale cyclustijd. Vindplaats Vastgelegd vanuit de 'completion_status' van een Vastleggen Vastgelegd wanneer de productiedeployment pipeline succesvol wordt voltooid. Gebeurtenistype explicit | |||
| QA Testing Voltooid | Betekent dat het Quality Assurance team hun testactiviteiten voor het ontwikkelitem succesvol heeft voltooid. Dit wordt doorgaans afgeleid wanneer de status van het item overgaat van een testfase naar een status zoals 'Ready for UAT' of 'Done'. | ||
| Het belang Deze mijlpaal markeert de voltooiing van een belangrijke quality gate. Het is een voorwaarde voor volgende fasen zoals User Acceptance Testing of release voorbereiding. Vindplaats Afgeleid uit de timestamp van een statuswijziging van een teststatus (bijv. 'In QA') naar een post-teststatus (bijv. 'Ready for UAT' of 'Resolved'). Vastleggen Gebaseerd op de Gebeurtenistype inferred | |||
| UAT Goedgekeurd | Geeft aan dat `business stakeholders` het `development item` formeel hebben goedgekeurd na `User Acceptance Testing`. Dit is een belangrijke `milestone` die wordt afgeleid uit een `status change`, zoals het overgaan van 'In UAT' naar 'Ready for Release' of 'Approved'. | ||
| Het belang Dit is de definitieve business approval voordat een item is vrijgegeven voor productie deployment. Het is een kritiek quality en governance checkpoint. Vindplaats Afgeleid uit een Vastleggen Afgeleid uit een Gebeurtenistype inferred | |||
| `Build` Getriggerd | Dit event betekent de start van een CI/CD pipeline build, vaak getriggerd door een code commit. ServiceNow DevOps logt dit als een pipeline executie, en koppelt het terug aan de oorspronkelijke ontwikkelitems. | ||
| Het belang Deze activiteit is de brug tussen development en geautomatiseerd testen of deployment. Het analyseren van de tijd tussen commit en build start kan vertragingen in het CI/CD proces onthullen. Vindplaats Expliciet vastgelegd in de Pipeline Execution [sn_devops_pipeline_execution] tabel wanneer een build start in de geïntegreerde CI/CD tool (bijv. Jenkins, Azure DevOps). Vastleggen Vastgelegd vanuit de starttijd van een Gebeurtenistype explicit | |||
| `Code Committed` | Vertegenwoordigt een developer die code commit naar een versiebeheersysteem repository die is gekoppeld aan het ontwikkelitem. ServiceNow DevOps legt deze events expliciet vast vanuit geïntegreerde SCM tools zoals Git of GitHub. | ||
| Het belang Het volgen van commits biedt gedetailleerd inzicht in de ontwikkelingsvoortgang en activiteitsfrequentie. Het helpt specifieke codewijzigingen te correleren met het bovenliggende ontwikkelitem. Vindplaats Vastgelegd als een expliciete Vastleggen Vastgelegd wanneer een commit webhook wordt ontvangen van de SCM-tool. Gebeurtenistype explicit | |||
| `Deployment` naar `Production` Gestart | Deze activiteit markeert de initiatie van de deployment pipeline naar de productieomgeving. ServiceNow DevOps legt dit vast als een expliciet event wanneer de productiefase van een CI/CD pipeline begint met de executie. | ||
| Het belang Dit markeert de start van de laatste, en vaak meest kritieke, fase van de lifecycle. Het volgen hiervan helpt bij het analyseren van deployment duren en het identificeren van automatiseringsmogelijkheden. Vindplaats Expliciet vastgelegd in de Stage Execution Run [sn_devops_stage_execution] tabel, gefilterd op fasen gerelateerd aan de productieomgeving. Vastleggen Vastgelegd vanuit de starttijd van een Gebeurtenistype explicit | |||
| `Design` Gestart | Vertegenwoordigt de fase waarin het technisch ontwerp of de oplossing architectuur voor het ontwikkelitem wordt gecreëerd. Dit wordt meestal afgeleid uit een status- of state-veld op het ontwikkelitem record dat verandert naar een waarde zoals 'Design' of 'Solutioning'. | ||
| Het belang Het analyseren van de duur van de Vindplaats Afgeleid uit statusovergangen op het ontwikkelitem record (bijv. Story [rm_story]). Zoek naar wijzigingen in het veld 'State' of een aangepast 'Stage' veld naar een ontwerpgerelateerde waarde. Vastleggen Afgeleid uit een Gebeurtenistype inferred | |||
| `Development Item` Geannuleerd | Vertegenwoordigt de beëindiging van een ontwikkelitem vóór voltooiing. Dit is een alternatieve eindstatus, doorgaans afgeleid uit de status van het item dat is ingesteld op 'Cancelled' of 'Closed Incomplete'. | ||
| Het belang Het volgen van annuleringen helpt verspilde inspanningen te identificeren en de redenen voor scopewijzigingen of herprioritering te begrijpen. Het biedt een completer beeld van alle mogelijke procesresultaten. Vindplaats Afgeleid uit de timestamp wanneer het veld 'State' op het ontwikkelitem record wordt bijgewerkt naar een terminale, niet-voltooide status zoals 'Cancelled'. Vastleggen Afgeleid uit een Gebeurtenistype inferred | |||
| Herwerk Geïdentificeerd | Geeft aan dat een `issue` werd gevonden tijdens `testing`, waardoor het `item` moest worden teruggestuurd naar `development`. Deze `event` wordt afgeleid door een terugwaartse beweging in de `process flow` waar te nemen, zoals een `status change` van 'In QA' terug naar 'In Progress'. | ||
| Het belang Het volgen van herwerk is essentieel voor het begrijpen van kwaliteitsproblemen en procesinefficiënties. Een hoge frequentie van deze activiteit wijst op problemen in de ontwikkeling of de duidelijkheid van requirements. Vindplaats Afgeleid uit de analyse van de historie van het veld 'State' in de tabellen sys_audit of sys_history_line. Een wijziging van een latere-fase status (bijv. 'Testing') naar een eerdere (bijv. 'In Progress') duidt op herwerk. Vastleggen Afgeleid uit een terugwaartse Gebeurtenistype inferred | |||
| QA Testing Gestart | Markeert het begin van de formele Quality Assurance testfase. Dit wordt bijna altijd afgeleid uit de statusverandering van het ontwikkelitem naar een waarde zoals 'In QA', 'Testing' of 'Ready for Test'. | ||
| Het belang Deze activiteit signaleert de handoff van development naar het QA team. Het maakt het mogelijk om de duur van de testfase te meten en knelpunten in de testcapaciteit te identificeren. Vindplaats Afgeleid uit de timestamp wanneer het veld 'State' op het ontwikkelitem record (bijv. Story, Defect) wordt bijgewerkt naar een QA-specifieke status. Vastleggen Gebaseerd op de Gebeurtenistype inferred | |||
| UAT Gestart | Vertegenwoordigt de start van User Acceptance Testing, waarbij business stakeholders de functionaliteit valideren. Dit event wordt vastgelegd door een statuswijziging af te leiden naar 'UAT', 'In UAT' of 'User Acceptance Testing'. | ||
| Het belang Deze fase is cruciaal voor het waarborgen dat de ontwikkelde feature voldoet aan de business requirements. Het analyseren van de duur ervan kan problemen met user engagement of requirement mismatches aan het licht brengen. Vindplaats Afgeleid uit een Vastleggen Afgeleid uit een Gebeurtenistype inferred | |||
| Voorbereid voor Release | Deze activiteit betekent dat het ontwikkelitem alle quality gates heeft doorlopen en is verpakt in een specifieke release. Het kan worden afgeleid wanneer het item is gekoppeld aan een Release record of de status verandert naar 'Ready for Deployment'. | ||
| Het belang Deze stap geeft aan dat een item technisch en functioneel compleet is. De tijd die in deze state wordt doorgebracht, kan wachttijd vertegenwoordigen vóór een gepland deployment window. Vindplaats Afgeleid uit de wijziging van het veld 'State' naar 'Ready for Release' of door te volgen wanneer het veld 'Release' op het ontwikkelitem record wordt gevuld of bijgewerkt. Vastleggen Afgeleid uit een Gebeurtenistype inferred | |||
Extractie Guides
Stappen
- Begrijp Uw
State Model: Documenteer, voordat ureportsmaakt, de specifiekevaluesin hetstate fieldvan uwdevelopment item(bijv. op deStory[rm_story]ofDefect[rm_defect]table) die overeenkomen met de vereisteactivities. Eenstate valuevan 'In Progress' kan bijvoorbeeld wordengemaptaan deactivity'Development Started'. - Navigeer naar
ReportCreatie: Log in op uw ServiceNowinstance. Ga in deFilter navigatornaarReports > View / Runen klik op de knopCreate a report. - Maak
ReportvoorState Changes: Maak het eerstereportomstatus-driven activitiesvast te leggen. Configureer het als volgt:- Report Name:
ProcessMind - State Change Events - Source type:
Table - Table:
Audit [sys_audit] - Type:
List - Configure Columns: Voeg
Document key,Created on,Table name,Field name,Old value, enNew valuetoe. - Filter: Stel
Table namein als een van uwdevelopment item tables(bijv.Story), enField nameals uwstate field(bijv.State). Voeg een datumfiltertoe op hetCreated onfieldvoor de gewenste periode.
- Report Name:
- Maak
ReportvoorItem Creation: Maak een nieuwreportvoor de initiëlecreation event.- Report Name:
ProcessMind - Item Creation Events - Source type:
Table - Table:
Story [rm_story](of uw primairedevelopment item table) - Type:
List - Configure Columns: Voeg
columnstoe voor de vereisteattributeszoalsNumber,Created on,Assigned to,Priority,State, etc. - Filter: Pas een datum
filtertoe op hetCreated onfield.
- Report Name:
- Maak
ReportvoorCode Commits: Maak eenreportvoor explicieteDevOps eventsgerelateerd aancommits.- Report Name:
ProcessMind - Commit Events - Source type:
Table - Table:
Commit [sn_devops_commit] - Type:
List - Configure Columns: Voeg
columnstoe zoalsWork item,Commit time,Author, etc. - Filter: Pas een datum
filtertoe op hetCommit timefield.
- Report Name:
- Maak
ReportsvoorBuildsenDeployments: Herhaal hetprocessvan de vorige stap voor deBuild [sn_devops_build]enDeployment [sn_devops_deployment]tables. DezetablesbevattenrecordsvoorBuild Triggered,Deployment to Production Started,Deployed to Production, enDeployment Failedactivities. - Exporteer Alle
Reports: Voer elk van de gemaaktereportsafzonderlijk uit. Klik voor elkreportop het contextmenu-icoon (drie puntjes of een pijl naar beneden) en selecteerExport > CSVofExport > Excel. Sla allefilesop. - Combineer en Transformeer
Data: Open de geëxporteerdefilesin een spreadsheetprogramma of gebruik eendata preparation tool. Combineer dedatavan allefileshandmatig in éénsheet. Creëer de vereisteevent log columns(DevelopmentItem,ActivityName,EventTime, etc.) enmapdedatavan desource columns.Mapbijvoorbeeld deDocument keyvan hetaudit reporten deNumbervan hetstory reportnaar deDevelopmentItem column. Map Activity Names: Creëer deActivityName columndoor desource datate vertalen. Gebruik voor hetstate change reportuw gedocumenteerdestate modelomNew valuevermeldingen temappenaanactivity names(bijv.mapstate'Testing' aan 'QA Testing Started'). Voor de anderereports, wijs een vasteactivity nametoe aan elke rij (bijv. alle rijen van decommit exportworden 'Code Committed').- Afronden en Opslaan: Voeg de
SourceSystemenLastDataUpdate columnstoe met statischevaluesvoor alle rijen. Zorg ervoor dat alletimestampsin een consistentformatzijn. Sla het uiteindelijke gecombineerdefileop als een enkeleCSV, die nu klaar is om te wordenuploadednaarProcessMind.
Configuratie
- Vereiste tabellen: De primaire tabellen die nodig zijn voor deze extractie zijn
Audit [sys_audit]voor afgeleideevents, uw specifiekedevelopment itemtabellen (bijv.Story [rm_story],Defect [rm_defect]), en de kern ServiceNowDevOpstabellen:Commit [sn_devops_commit],Build [sn_devops_build], enDeployment [sn_devops_deployment]. - Belangrijkste filters: Het belangrijkste
filteris het datumbereik, dat consistent moet worden toegepast op allereportsop eentimestamp fieldzoalsCreated on,Commit time, ofStart time. Voor hetsys_audit reportis het cruciaal om tefilterenop deTable name(bijv.rm_story) enField name(bijv.state) om dedatate beperken tot alleen relevantestate changes. - Aanbevolen datumbereik: Het wordt aanbevolen om
datate extraheren voor een periode van 3 tot 6 maanden om een representatievedatasette garanderen zonderperformanceproblemen te veroorzaken. Voor grotere systemen kunt u overwegen omdatain maandelijkse batches te extraheren. - Definitie State Model: U moet een duidelijk begrip hebben van het
work item state modelvan uw organisatie. Dit is nodig om destate valuesdie zijn vastgelegd in desys_audittabel correct temappennaar de overeenkomstige zakelijkeactivitieszoals 'QA Testing Started' of 'UAT Approved'. - Voorwaarden: Gebruikers die de extractie uitvoeren, hebben de
report_userroleof gelijkwaardigepermissionsnodig omreportste maken en uit te voeren. Zij hebben ook leesrechten nodig voor deDevOpsenapplication developmenttabellen die hierboven zijn genoemd. De ServiceNowDevOps pluginmoet geïnstalleerd en actief geïntegreerd zijn met uw SCM en CI/CDtools.
a Voorbeeldquery 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.
--- Stappen
- Vereisten: Zorg ervoor dat u netwerktoegang heeft tot uw ServiceNow
instanceen dat u een specifiekservice accountheeft gekregen met leesrechten (deitilensn_devops.viewerroleszijn een goed startpunt). Deze gebruiker heeft toegang nodig tottableszoalsrm_story,sys_audit, en hetsn_devops_* schema. - Installeer ServiceNow ODBC Driver: Download de juiste ServiceNow
ODBC drivervoor uw besturingssysteem via het ServiceNowsupport portal. Volg de verstrekte installatie-instructies. - Configureer DSN: Stel een nieuwe
System DSN(Data Source Name) in op de machine waar u dequerygaat uitvoeren. Voeg in deODBC Data Source Administratorde ServiceNowdrivertoe en configureer deze met uwinstance URL(bijv.yourinstance.service-now.com), gebruikersnaam enpassword. - Verbinden met een SQL Client: Gebruik een
SQL client toolzoalsDBeaver,Microsoft SQL Server Management Studio(met behulp van eenlinked server), of eenscripting languagezoalsPythonmet eenODBC libraryom verbinding te maken met ServiceNow met behulp van de geconfigureerde DSN. - Identificeer State Model: Voordat u de
queryuitvoert, moet u de exactevaluesidentificeren die uw organisatie gebruikt voor hetstate fieldop uwdevelopment item tables(bijv.rm_story,rm_defect). De geleverdequerygebruikt veelvoorkomende voorbeelden zoals 'In Progress' of 'In QA', die u moet vervangen door uw specifiekevalues. - Pas de SQL Query aan: Kopieer de geleverde
SQL querynaar uwclient. Pas deplaceholdersbovenaan dequeryaan, inclusief de startdatum voor deextractieen de specifiekestate valuesdie overeenkomen met uwdevelopment lifecycle activities. - Voer de Query uit: Voer de volledige
SQL queryuit op de ServiceNowdatabasevia deODBC connection. Dit kan een aanzienlijke hoeveelheid tijd in beslag nemen, afhankelijk van het datumbereik en hetdatavolume. - Bekijk de Data: Zodra de
queryis voltooid, voert u een kortereviewuit van de geretourneerdedataset. Controleer op een verscheidenheid aanactivitiesen zorg ervoor dat belangrijkecolumnszoalsDevelopmentItem,ActivityNameenEventTimenaar verwachting zijn gevuld. - Exporteer naar CSV: Exporteer de gehele
result setnaar eenCSV file. Zorg ervoor dat hetfileUTF-8 gecodeerd is en dat decolumn headersovereenkomen met deattribute namesdie doorProcessMindworden vereist, bijvoorbeeldDevelopmentItem,ActivityName,EventTime. - Voorbereiden voor Upload: Zorg ervoor dat het uiteindelijke
CSV filegeen lege rijen aan het einde bevat en dat hetdate formatvoorEventTimeenLastDataUpdateconsistent is en wordt ondersteund doorProcessMind(bijv.YYYY-MM-DD HH:MM:SS).
Configuratie
- Vereisten: Toegang tot een ServiceNow-instantie met de
DevOps-module ingeschakeld. Een specifiek gebruikersaccount met leesrechten voor de vereiste tabellen is noodzakelijk. De ServiceNowODBC drivermoet op declient machinezijn geïnstalleerd en geconfigureerd. - ODBC Driver Configuration: De verbinding vereist de
instance URL, een gebruikersnaam en eenpasswordofOAuth token. Het is cruciaal om de DSN-verbinding te testen voordat u probeert complexequeriesuit te voeren. - Datumbereik Filtering: De meegeleverde
querybevat eenplaceholders.sys_created_on >= '2023-01-01'om de hoeveelheid geëxtraheerdedatate beperken. Het wordt sterk aanbevolen omdatate extraheren voor een gedefinieerde periode, zoals de laatste 6 tot 12 maanden, om beheersbarequery execution timeste garanderen. - State Model Customization: De nauwkeurigheid van de
queryvoor afgeleideeventsis volledig afhankelijk van hetstate model. U moetplaceholder state values(bijv.[Your 'In Progress' State Value],[Your 'In QA' State Value]) vervangen door de exactevaluesdie in uw ServiceNow-configuratie worden gebruikt. Deze zijncase sensitive. - Work Item Tabellen: De
queryis geschreven voor deStorytabel (rm_story). Als uw organisatie ookDefects(rm_defect),Enhancements(rm_enhancement) of anderetask typesgebruikt, moet u deze toevoegen aan de initiëleDevItemsCommon Table Expression (CTE)metUNION ALL. - Prestaties: Directe
queriesop een productie ServiceNow-instantie kunnen deperformancebeïnvloeden. Het wordt aanbevolen om groteextractiesbuiten de piekuren uit te voeren. Voor zeer grotedatasetskunt u overwegen een incrementeleextractiestrategie te gebruiken op basis van hetsys_updated_onfield.
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 ***