Il template dei dati per il ciclo di vita dello sviluppo software
Il template dei dati per il ciclo di vita dello sviluppo software
- Attributi consigliati da raccogliere
- Attività principali da monitorare
- Indicazioni per l’estrazione da ServiceNow DevOps
Attributi del ciclo di vita dello sviluppo software
| Nome | Descrizione | ||
|---|---|---|---|
| Elemento di sviluppo DevelopmentItem | Identificativo univoco di una singola unità di lavoro, come una funzionalità, un bug o un’attività, che avanza lungo il ciclo di sviluppo. | ||
| Descrizione L’elemento di sviluppo funge da identificativo principale del caso e rappresenta una specifica unità di lavoro monitorata. Collega tutte le attività relative a quell’elemento, dall’ideazione e pianificazione iniziali fino allo sviluppo, ai test e alla distribuzione. Nell’analisi di Process Mining, questo attributo è fondamentale per ricostruire il percorso completo di ogni elemento di lavoro. Consente di visualizzare i flussi del processo, calcolare i tempi di ciclo complessivi e individuare le varianti del processo per le singole funzionalità o correzioni di bug. Per ricostruire una mappa coerente del processo, ogni evento del log deve essere associato a un elemento di sviluppo. Perché è importante È l’identificativo principale che collega tutte le attività di sviluppo correlate in un’unica istanza del processo, rendendo possibile analizzare l’intero ciclo di vita di ogni elemento di lavoro. Dove reperirli In genere, corrisponde alla chiave primaria delle tabelle che gestiscono storie, bug o attività, come le tabelle 'rm_story', 'rm_bug' o 'task' in ServiceNow. Esempi STRY0010015BUG0034092TASK0050118 | |||
| Nome dell’attività ActivityName | Il nome dello specifico evento del ciclo di sviluppo che si è verificato, ad esempio 'Development Started' o 'Code Review Performed'. | ||
| Descrizione Questo attributo registra il nome di ogni tappa o attività completata nel ciclo di sviluppo del software. Le attività costituiscono le fasi sequenziali del processo, dalla creazione alla distribuzione. Analizzare la sequenza e la frequenza di queste attività è la funzione principale del Process Mining. Consente di costruire la mappa del processo, aiuta a individuare i colli di bottiglia tra le fasi e mette in evidenza le varianti inefficienti o non conformi. L’insieme delle attività definite comprende fasi fondamentali come progettazione, sviluppo, test e distribuzione. Perché è importante Definisce le fasi della mappa del processo e consente di analizzare il flusso, individuare i colli di bottiglia e rilevare le deviazioni dal processo SDLC standard. Dove reperirli In genere, si ricava associando le modifiche di stato, i record degli eventi o le voci del registro di controllo a un elenco standardizzato di nomi di attività. Ad esempio, la modifica del campo 'state' a 'In Progress' può essere associata a 'Development Started'. Esempi Sviluppo avviatoCodice sottopostoTest QA completatiDistribuito in produzione | |||
| Ora di inizio EventTime | La data e l’ora esatte in cui si è verificata una specifica attività o un evento. | ||
| Descrizione Questo attributo indica la data e l’ora in cui è stata registrata ogni attività del ciclo di sviluppo. È essenziale per ordinare cronologicamente gli eventi e per tutte le analisi basate sul tempo. Nel Process Mining, l’ora di inizio serve a calcolare la durata tra le attività, individuare i tempi di attesa e misurare il tempo di ciclo complessivo del processo. È un elemento fondamentale delle Dashboard che analizzano le prestazioni, come l’analisi del tempo di ciclo SDLC dall’inizio alla fine, e per calcolare indicatori chiave come il tempo di attraversamento della revisione del codice. Perché è importante Questa data e ora sono essenziali per ordinare correttamente gli eventi e calcolare tutte le metriche temporali, inclusi i tempi di ciclo, le durate e i tempi di attesa. Dove reperirli In genere, si trova in campi data e ora generati dal sistema, come 'sys_updated_on' o 'sys_created_on', nel registro di controllo o nelle tabelle delle attività. Esempi 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Sistema di origine SourceSystem | Identifica il sistema da cui sono stati estratti i dati, in questo caso ServiceNow DevOps. | ||
| Descrizione Questo attributo specifica il sistema di origine dei dati degli eventi. Per questo processo, il valore sarà sempre 'ServiceNow DevOps'. Anche se può sembrare un dato statico, indicare esplicitamente il sistema di origine è fondamentale per la governance dei dati e negli ambienti in cui possono essere uniti dati provenienti da più sistemi, come Jira o Azure DevOps. Chiarisce la provenienza dei dati e aiuta a diagnosticare problemi di qualità o di estrazione. Perché è importante Garantisce la tracciabilità dei dati ed è essenziale per mantenerne l’integrità, soprattutto quando si integrano dati provenienti da più strumenti di sviluppo. Dove reperirli È un valore statico da aggiungere durante l’estrazione e la trasformazione dei dati. Esempi ServiceNow DevOps | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Data e ora dell’ultimo aggiornamento dei dati dell’Event Log dal sistema di origine. | ||
| Descrizione Questo attributo registra l’ultima estrazione o l’ultimo aggiornamento del dataset da ServiceNow DevOps. Si applica all’intero dataset, non ai singoli eventi. Questa data e ora sono fondamentali per capire quanto siano aggiornati i risultati dell’analisi. Indicano agli utenti quanto siano recenti le informazioni sul processo e aiutano a pianificare gli aggiornamenti dei dati. Mostrarle nelle Dashboard fornisce un contesto per tutte le metriche e le visualizzazioni, affinché le decisioni si basino su dati aggiornati. Perché è importante Fornisce un contesto essenziale sull’aggiornamento dei dati e permette agli utenti di capire quanto sia recente l’analisi del processo. Dove reperirli Questa data e ora vengono generate e aggiunte durante l’estrazione dei dati, registrando il momento in cui è stata eseguita. Esempi 2023-11-15T08:00:00Z | |||
| È una rilavorazione IsRework | Indicatore booleano impostato su vero se l’attività fa parte di un ciclo di rilavorazione, ad esempio quando il lavoro torna allo sviluppo dopo i test. | ||
| Descrizione Questo attributo derivato individua le attività che si verificano dopo che il processo è tornato a una fase precedente. Per esempio, se per lo stesso elemento l’attività 'Sviluppo avviato' si verifica dopo 'Test QA completati', viene segnalata una rilavorazione. Questo indicatore è essenziale per quantificare e visualizzare le rilavorazioni. Supporta direttamente la Dashboard 'Analisi dei flussi di rilavorazione e rifiuto' e viene usato per calcolare il KPI 'Tasso di rilavorazione dopo i test'. Segnalando questi eventi, gli analisti possono filtrare e analizzare facilmente la frequenza, le cause e l’impatto delle rilavorazioni sul tempo di ciclo complessivo. Perché è importante Questo indicatore semplifica la quantificazione e l’analisi delle rilavorazioni, aiutando a misurare la qualità del processo e a individuare le cause profonde del ripetersi del lavoro. Dove reperirli Questo attributo viene calcolato nello strumento di Process Mining analizzando la sequenza delle attività di ciascun caso per individuare i passaggi a ritroso nel flusso del processo. Esempi truefalse | |||
| Gruppo di assegnazione AssignmentGroup | Il team o il gruppo responsabile dell’elemento di sviluppo al momento dell’attività. | ||
| Descrizione Questo attributo identifica il team a cui è assegnato un elemento di lavoro, ad esempio 'Sviluppatori frontend', 'Servizi backend' o 'Team QA'. Man mano che l’elemento avanza, può passare da un gruppo di assegnazione a un altro. Tenere traccia del gruppo di assegnazione è essenziale per comprendere la collaborazione tra funzioni e i passaggi di consegne. Aiuta a individuare i ritardi ricorrenti che si verificano quando il lavoro passa da un team all’altro. L’attributo consente inoltre di analizzare le prestazioni e il carico di lavoro dei team e di capire quali rallentano il flusso complessivo. Perché è importante Indica quale team è responsabile del lavoro e consente di analizzare le prestazioni dei team, bilanciare i carichi di lavoro e valutare l’efficienza dei passaggi di consegne. Dove reperirli Queste informazioni sono registrate nel campo 'assignment_group', un campo standard nelle tabelle di ServiceNow relative alle attività. Esempi Ingegneria della piattaformaTeam app mobileAssicurazione della qualitàDevOps | |||
| Modulo/componente interessato ModuleComponentAffected | Il modulo software, l’applicazione o il componente specifico a cui si riferisce l’elemento di sviluppo. | ||
| Descrizione Questo attributo classifica il lavoro di sviluppo in base alla parte del sistema interessata, che può essere un microservizio specifico, un componente dell’interfaccia utente o un’applicazione di backend. Suddividere il processo per modulo o componente è fondamentale per individuare i colli di bottiglia circoscritti a determinate aree. La Dashboard 'Analisi dei colli di bottiglia per componente' e il KPI 'Durata media della fase per componente' utilizzano questo attributo per identificare le parti del codice associate con maggiore frequenza a cicli di sviluppo più lunghi, più rilavorazioni o più errori di distribuzione. In questo modo è possibile concentrare gli interventi di miglioramento dove servono di più. Perché è importante Consente di suddividere l’analisi per applicazione o componente, così da individuare i colli di bottiglia o i problemi di qualità che riguardano parti specifiche del sistema. Dove reperirli Spesso si tratta di un campo personalizzato o di un riferimento al Configuration Management Database (CMDB), che collega l’elemento di lavoro a un record 'cmdb_ci'. Consultare la documentazione ServiceNow DevOps. Esempi Servizio di fatturazioneInterfaccia utente di autenticazioneDatabase di reportisticaGateway API | |||
| Priorità DevelopmentItemPriority | Il livello di priorità assegnato all’elemento di sviluppo, ad esempio 'High', 'Medium' o 'Low'. | ||
| Descrizione Questo attributo classifica gli elementi di sviluppo in base all’urgenza aziendale. I livelli di priorità aiutano i team a concentrarsi sulle attività più critiche e vengono spesso utilizzati per gestire gli SLA e le aspettative dei referenti. Nel Process Mining, la priorità è una dimensione fondamentale per le analisi comparative. Consente di filtrare la mappa del processo per verificare se gli elementi ad alta priorità seguono un percorso più rapido o diverso. È essenziale per la Dashboard e il KPI 'Tempo di consegna delle funzionalità ad alta priorità' e aiuta a verificare se gli elementi critici vengono davvero gestiti più rapidamente. Perché è importante Consente di filtrare e confrontare i processi in base ai diversi livelli di priorità, verificando se gli elementi ad alta priorità vengono gestiti più rapidamente ed efficacemente. Dove reperirli È un campo standard, spesso denominato 'priority', nelle tabelle di ServiceNow relative alle attività. Esempi 1 - Critico2 - Alta3 - Moderata4 - Bassa | |||
| Stato dell’elemento di sviluppo DevelopmentItemState | Lo stato dell’elemento di sviluppo al momento dell’evento, ad esempio 'Open', 'In Progress' o 'Closed'. | ||
| Descrizione Questo attributo indica lo stato ufficiale dell’elemento di sviluppo in ServiceNow. Le attività rappresentano le fasi del processo ricavate dai dati, mentre lo stato corrisponde alla fase formale registrata nel flusso di lavoro del sistema. Spesso è proprio dallo stato che si ricavano le attività. Può essere usato per convalidare i dati e creare viste del processo più semplici e di alto livello. Per esempio, analizzare il tempo trascorso in ciascuno stato offre una prospettiva diversa sui colli di bottiglia rispetto all’analisi del tempo tra un’attività e l’altra. È utile anche per individuare gli elementi bloccati o già risolti. Perché è importante Indica lo stato ufficiale di un elemento di lavoro nel sistema. Spesso è la fonte da cui si ricavano le attività e può essere usato per la convalida e per analizzare gli stati a livello generale. Dove reperirli È un campo standard, solitamente denominato 'state' o 'stage', nelle tabelle di ServiceNow relative alle attività. Esempi In attesaLavori in corsoPronto per il testChiuso, completato | |||
| Sviluppatore assegnato AssignedDeveloper | Il nome o l’ID dello sviluppatore o dell’utente assegnato all’elemento di sviluppo al momento dell’attività. | ||
| Descrizione Questo attributo identifica la persona responsabile dell’esecuzione di una specifica attività. È dinamico e può cambiare quando l’elemento di sviluppo passa da una fase o da un team all’altro. È fondamentale per analizzare l’allocazione delle risorse, il carico di lavoro e i passaggi di consegne. Supporta direttamente la Dashboard 'Carico di lavoro e passaggi di consegne degli sviluppatori' e il KPI 'Volume di attività per sviluppatore'. Monitorando le modifiche di questo campo, è possibile misurare i tempi dei passaggi di consegne e individuare i colli di bottiglia nella collaborazione tra sviluppatori o tra i team di sviluppo e QA. Perché è importante È essenziale per le analisi basate sulle risorse, tra cui la distribuzione del carico di lavoro, l’efficienza dei passaggi di consegne e l’individuazione di schemi nelle prestazioni dei singoli team. Dove reperirli In genere, queste informazioni sono memorizzate nel campo 'assigned_to' delle tabelle relative alle attività in ServiceNow. Esempi David MillerAnna WilliamsJames Brown | |||
| Tempo di ciclo dell’elemento di sviluppo DevelopmentItemCycleTime | Il tempo totale trascorso dalla creazione dell’elemento di sviluppo fino alla chiusura definitiva o alla distribuzione. | ||
| Descrizione Questo attributo è una metrica calcolata che rappresenta la durata complessiva di un singolo elemento di sviluppo. Si ottiene calcolando, per ogni caso, la differenza tra il timestamp della prima attività e quello dell’ultima. È un indicatore chiave di prestazione per l’intero processo SDLC e contribuisce direttamente al KPI 'Tempo medio di ciclo SDLC'. Fornisce una misura generale della velocità e dell’efficienza del processo. Analizzando questa metrica nel tempo e in base a dimensioni diverse, come la priorità o il team, è possibile monitorare l’impatto delle iniziative di miglioramento. Perché è importante Rappresenta la durata complessiva di un elemento di lavoro, una metrica chiave per misurare l’efficienza e la velocità del processo nel suo insieme. Dove reperirli Non è un campo del sistema di origine. Viene calcolato nello strumento di Process Mining sottraendo il valore minimo di StartTime dal valore massimo di StartTime per ogni CaseId. Esempi 15 giorni e 4 ore3 giorni e 12 ore32 giorni e 8 ore | |||
| Tipo di elemento di sviluppo DevelopmentItemType | La classificazione dell’elemento di lavoro, ad esempio 'Funzionalità', 'Bug', 'Debito tecnico' o 'Task'. | ||
| Descrizione Questo attributo distingue i diversi tipi di lavoro che attraversano il processo SDLC. Per esempio, il processo per correggere un bug critico può essere diverso e più rapido rispetto a quello per sviluppare una nuova funzionalità. Analizzare il processo in base al tipo di elemento di lavoro permette di comprendere meglio le prestazioni e di rispondere a domande come: 'I bug richiedono più rilavorazioni delle nuove funzionalità?' oppure 'Il tempo di ciclo per ridurre il debito tecnico è accettabile?'. Questa suddivisione offre indicazioni più approfondite rispetto a una vista del processo uguale per tutti. Perché è importante Distingue i diversi tipi di lavoro, come le funzionalità e i bug, che possono seguire percorsi di processo, avere priorità e prevedere durate differenti. Dove reperirli Il tipo può essere ricavato dalla tabella di origine del record (ad esempio, 'rm_story' o 'rm_bug') oppure da un campo 'type' in una tabella generica delle attività. Esempi FunzionalitàBugTaskAnalisi esplorativa | |||
| ID commit CommitId | L’identificativo univoco del commit del codice sorgente associato al lavoro di sviluppo. | ||
| Descrizione Questo attributo collega direttamente un elemento di sviluppo alla modifica specifica del codice nel repository, ad esempio Git. Viene registrato quando si verifica l’attività 'Codice sottoposto a commit'. Nel Process Mining, l’ID commit arricchisce l’analisi collegando i dati di processo ai dati di ingegneria. Consente agli analisti di risalire da una distribuzione problematica alla modifica di codice esatta o di correlare le metriche di complessità del codice con i tempi dei cicli di sviluppo. Offre così un livello di analisi delle cause profonde molto più approfondito e tecnico. Perché è importante Collega l’evento di processo a una modifica specifica del codice e consente un’analisi più approfondita delle cause profonde, correlando le metriche di processo con i dettagli del codice. Dove reperirli Queste informazioni vengono acquisite tramite le integrazioni ServiceNow DevOps con sistemi di gestione del codice sorgente come Git o SVN. I dati si trovano in tabelle correlate all’elemento di sviluppo. Esempi a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| Motivo della rilavorazione ReworkReason | Classificazione o descrizione del motivo per cui un elemento di sviluppo ha richiesto una rilavorazione dopo i test. | ||
| Descrizione Quando un elemento non supera i controlli QA o UAT, questo attributo registra il motivo. Può trattarsi di una categoria specifica di bug, di un requisito interpretato in modo errato o di un problema ambientale. Queste informazioni forniscono un contesto essenziale per la Dashboard 'Analisi dei flussi di rilavorazione e rifiuto'. Oltre a sapere che si è verificata una rilavorazione, gli analisti possono capirne il motivo. È quindi possibile intervenire in modo mirato, per esempio definendo meglio i requisiti, potenziando i test unitari o rendendo più stabili gli ambienti di test, così da ridurre il tasso complessivo di rilavorazione. Perché è importante Fornisce indicazioni qualitative sui motivi delle rilavorazioni e consente di migliorare il processo in modo mirato, aumentare la qualità e ridurre i cicli di lavoro ripetuti. Dove reperirli Il motivo può essere registrato nel campo 'close_notes' quando un test non viene superato oppure in un campo personalizzato dedicato, 'rework_reason'. Consultare la documentazione ServiceNow DevOps. Esempi Requisito interpretato in modo erratoBug di regressioneTest delle prestazioni non superatoProblema di interfaccia o esperienza utente | |||
| Ora di fine EventEndTime | La data e l’ora esatte in cui è stata completata un’attività. Per gli eventi istantanei, coincidono con l’ora di inizio. | ||
| Descrizione Questo attributo indica la data e l’ora in cui è stata completata ogni attività del ciclo di sviluppo. È particolarmente utile per le attività di durata misurabile, come 'Code Review Performed' o 'QA Testing'. Nel Process Mining, disporre sia dell’ora di inizio sia di quella di fine consente di calcolare con precisione i tempi di elaborazione delle attività e distinguerli dai tempi di attesa tra un’attività e l’altra. In questo modo è possibile capire se i ritardi dipendono dalla durata delle attività o dall’attesa delle risorse. Per gli eventi istantanei, come 'Build Triggered', l’ora di fine può coincidere con l’ora di inizio. Perché è importante Consente di calcolare con precisione il tempo di elaborazione delle attività e di distinguere il tempo dedicato al lavoro da quello trascorso in attesa. Dove reperirli Potrebbe essere necessario ricavarla. Può corrispondere alla data e all’ora di inizio dell’attività successiva oppure provenire da un campo separato 'end date', se disponibile nel sistema di origine. Esempi 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| Stato della distribuzione DeploymentStatus | Indica l’esito di un’attività di distribuzione, in genere 'Riuscita' o 'Non riuscita'. | ||
| Descrizione Questo attributo registra l’esito di una distribuzione in un ambiente specifico. È un’informazione essenziale per comprendere l’affidabilità e la stabilità del processo di rilascio. È indispensabile per la Dashboard 'Andamento delle distribuzioni riuscite e non riuscite' e per il KPI 'Tasso di distribuzioni non riuscite'. Analizzando la frequenza e l’andamento degli errori di distribuzione, le organizzazioni possono individuare problemi sottostanti nei test, nell’infrastruttura o nel coordinamento dei rilasci. In questo modo possono concentrare gli interventi sul miglioramento della qualità e dell’affidabilità della distribuzione del software. Perché è importante Misura direttamente l’esito delle attività di distribuzione, un dato essenziale per calcolare il tasso di distribuzioni non riuscite e analizzare la stabilità dei rilasci. Dove reperirli Questo stato viene in genere registrato nelle attività di monitoraggio delle distribuzioni o nei record di esecuzione delle pipeline CI/CD integrate con ServiceNow DevOps. Esempi RiuscitaNon riuscitaCompletata con avvisi | |||
| Versione pianificata per il rilascio PlannedReleaseVersion | La versione software o il rilascio di destinazione in cui è prevista la consegna dell’elemento di sviluppo. | ||
| Descrizione Questo attributo collega un elemento di sviluppo a un rilascio pianificato specifico, ad esempio 'Versione 2.3' o 'Rilascio del quarto trimestre 2023'. È un elemento importante per la gestione dei progetti e la pianificazione dei rilasci. Nel Process Mining, questo attributo è fondamentale per la Dashboard 'Monitoraggio del rispetto del piano di rilascio'. Confrontando le date effettive di completamento con quelle pianificate, i team possono misurare il rispetto delle scadenze, individuare gli elementi a rischio di esclusione dal rilascio e analizzare le cause dei ritardi. Collega direttamente il processo di sviluppo operativo agli obiettivi aziendali di alto livello. Perché è importante Collega il lavoro di sviluppo a rilasci specifici e consente di analizzare il rispetto delle scadenze e l’impatto dei ritardi di processo sui tempi di rilascio. Dove reperirli Queste informazioni sono in genere registrate in un campo 'release' o 'planned_release', spesso collegato a una tabella di gestione dei rilasci in ServiceNow. Consultare la documentazione ServiceNow DevOps. Esempi v3.4.1Rilascio del primo trimestre 2024Avvio operativo del progetto Phoenix | |||
Attività del ciclo di vita dello sviluppo software
| Attività | Descrizione | ||
|---|---|---|---|
| Distribuito in produzione | Questo evento segna il completamento con esito positivo della distribuzione nell’ambiente di produzione. ServiceNow DevOps lo registra esplicitamente quando lo strumento CI/CD segnala il completamento con esito positivo della pipeline. | ||
| Perché è importante È il principale evento di conclusione con esito positivo del processo SDLC. Completa il flusso di valore ed è essenziale per calcolare il tempo di ciclo complessivo. Dove reperirli Si ricava dal campo 'completion_status' di un record Pipeline Execution [sn_devops_pipeline_execution] o del relativo Stage Execution Run. L’evento è indicato dallo stato 'Success' all’ora di fine. Acquisizione Viene registrato quando la pipeline di distribuzione in produzione termina con esito positivo. Tipo di evento explicit | |||
| Distribuzione non riuscita | Indica che il tentativo di distribuire in produzione l’elemento di sviluppo non è riuscito. ServiceNow DevOps registra esplicitamente l’evento quando la pipeline CI/CD segnala un errore. | ||
| Perché è importante È un evento di conclusione che segnala un errore critico. Analizzarne la frequenza e le cause è essenziale per migliorare la stabilità dei rilasci e ridurre il tasso di errori di distribuzione. Dove reperirli Si ricava dal campo 'completion_status' di un record Pipeline Execution [sn_devops_pipeline_execution]. L’evento è indicato dallo stato 'Failed' all’ora di fine. Acquisizione Viene registrato quando la pipeline di distribuzione in produzione segnala uno stato di errore. Tipo di evento explicit | |||
| Elemento di sviluppo creato | Questa attività indica la creazione in ServiceNow di un nuovo elemento di sviluppo, ad esempio una storia, un bug o un epic. In genere, l’evento viene registrato esplicitamente quando si inserisce un nuovo record nella tabella pertinente, come Story [rm_story]. | ||
| Perché è importante È il principale evento di inizio del processo SDLC. Consente di misurare il tempo di ciclo complessivo e di monitorare la presa in carico iniziale della richiesta. Dove reperirli Viene registrato nelle tabelle sys_audit o sys_history_line quando si crea un record in una tabella relativa allo sviluppo, come Story [rm_story], Epic [rm_epic] o Defect [rm_defect]. In genere, la data e l’ora di creazione sono riportate direttamente nel record. Acquisizione Si ricava dalla data e dall’ora di creazione del record dell’elemento di sviluppo. Tipo di evento explicit | |||
| Revisione del codice completata | Questa attività indica il completamento della revisione del codice da parte di un collega, in genere associata a una pull request o a una merge request. L’evento può essere registrato esplicitamente tramite le integrazioni DevOps oppure dedotto dalle modifiche di stato dei record correlati. | ||
| Perché è importante È un controllo di qualità fondamentale. Analizzarne la durata aiuta a individuare i colli di bottiglia nella revisione, una causa frequente di ritardi nel processo SDLC. Dove reperirli Può essere registrato tramite l’evento 'Merged' o 'Completed' di un record Pull Request nell’integrazione Git di ServiceNow, oppure dedotto dalla modifica dello stato dell’elemento di sviluppo a 'Code Review Complete'. Acquisizione Viene registrato quando viene unita una Pull Request collegata all’elemento di lavoro. Tipo di evento explicit | |||
| Sviluppo avviato | Questa attività indica il momento in cui uno sviluppatore inizia concretamente a scrivere codice o a implementare l’elemento di sviluppo. In genere, si deduce dalla modifica dello stato dell’elemento a 'In Progress', 'Development' o 'Coding'. | ||
| Perché è importante È una tappa fondamentale, che segna l’inizio della fase di realizzazione che genera valore. È essenziale per misurare il tempo di attraversamento dello sviluppo e i tempi del ciclo di revisione del codice. Dove reperirli Si deduce dalla data e dall’ora in cui il campo 'State' del record dell’elemento di sviluppo, ad esempio Story [rm_story], viene aggiornato a 'In Progress' o a uno stato equivalente. Acquisizione Si basa sulla data e sull’ora di una modifica dello stato a 'In Progress' o a un valore analogo. Tipo di evento inferred | |||
| Test QA completati | Indica che il team di controllo qualità ha completato con esito positivo i test dell’elemento di sviluppo. In genere, si deduce quando l’elemento esce dalla fase di test e passa a uno stato come 'Ready for UAT' o 'Done'. | ||
| Perché è importante Questa tappa segna il superamento di un importante controllo di qualità. È un prerequisito per le fasi successive, come i test di accettazione da parte degli utenti o la preparazione del rilascio. Dove reperirli Si deduce dalla data e dall’ora di una modifica dello stato da un valore relativo ai test, ad esempio 'In QA', a uno successivo, come 'Ready for UAT' o 'Resolved'. Acquisizione Si basa sulla data e sull’ora di una modifica dello stato da 'Testing' a uno stato successivo. Tipo di evento inferred | |||
| UAT approvati | Indica che, dopo i test di accettazione da parte degli utenti, i referenti aziendali hanno approvato formalmente l’elemento di sviluppo. È una tappa fondamentale, dedotta da una modifica dello stato, ad esempio da 'In UAT' a 'Ready for Release' o 'Approved'. | ||
| Perché è importante È l’approvazione aziendale finale prima che un elemento possa essere distribuito in produzione. Costituisce un controllo fondamentale per la qualità e la governance. Dove reperirli Si deduce da una transizione di stato nel record dell’elemento di sviluppo che indica il completamento con esito positivo degli UAT. L’evento viene registrato nella cronologia delle attività dell’elemento. Acquisizione Si deduce da una modifica dello stato da 'UAT' a uno stato di approvazione o di preparazione al rilascio. Tipo di evento inferred | |||
| Build avviata | Questo evento indica l’avvio di una build della pipeline CI/CD, spesso in seguito a un commit del codice. ServiceNow DevOps registra l’esecuzione della pipeline e la collega agli elementi di sviluppo che l’hanno originata. | ||
| Perché è importante Questa attività collega lo sviluppo ai test automatizzati o alla distribuzione. Analizzare il tempo che intercorre tra il commit e l’avvio della build può rivelare ritardi nel processo CI/CD. Dove reperirli Viene registrato esplicitamente nella tabella Pipeline Execution [sn_devops_pipeline_execution] quando si avvia una build nello strumento CI/CD integrato, ad esempio Jenkins o Azure DevOps. Acquisizione Si ricava dalla data e dall’ora di inizio di un record nella tabella Pipeline Execution. Tipo di evento explicit | |||
| Codice sottoposto | Indica che uno sviluppatore ha sottoposto codice a un repository di controllo versione collegato all’elemento di sviluppo. ServiceNow DevOps registra esplicitamente questi eventi provenienti da strumenti SCM integrati, come Git o GitHub. | ||
| Perché è importante Monitorare i commit offre una visibilità dettagliata sull’avanzamento e sulla frequenza delle attività di sviluppo. Aiuta inoltre a collegare specifiche modifiche al codice all’elemento di sviluppo di riferimento. Dove reperirli Viene registrato come evento esplicito nella tabella Commits [sn_devops_commit] di ServiceNow DevOps, popolata tramite webhook dal sistema integrato di gestione del codice sorgente. Acquisizione Viene registrato alla ricezione di un webhook di commit dallo strumento SCM. Tipo di evento explicit | |||
| Distribuzione in produzione avviata | Questa attività segna l’avvio della pipeline di distribuzione nell’ambiente di produzione. ServiceNow DevOps la registra come evento esplicito quando inizia l’esecuzione della fase di produzione di una pipeline CI/CD. | ||
| Perché è importante Segna l’inizio della fase finale del ciclo di vita, spesso la più critica. Monitorarla aiuta ad analizzare la durata delle distribuzioni e a individuare opportunità di automazione. Dove reperirli Viene registrato esplicitamente nella tabella Stage Execution Run [sn_devops_stage_execution], filtrando le fasi relative all’ambiente di produzione. Acquisizione Si ricava dalla data e dall’ora di inizio di una fase di distribuzione in produzione in Pipeline Execution. Tipo di evento explicit | |||
| Elemento di sviluppo annullato | Indica la chiusura di un elemento di sviluppo prima del completamento. È uno stato finale alternativo, dedotto in genere quando lo stato dell’elemento viene impostato su 'Cancelled' o 'Closed Incomplete'. | ||
| Perché è importante Monitorare gli annullamenti aiuta a individuare gli sforzi sprecati e a comprendere le ragioni delle modifiche all’ambito o della ridefinizione delle priorità. Offre un quadro più completo di tutti i possibili esiti del processo. Dove reperirli Si deduce dalla data e dall’ora in cui il campo 'State' del record dell’elemento di sviluppo viene aggiornato a uno stato finale non completato, come 'Cancelled'. Acquisizione Si deduce da una modifica dello stato a 'Cancelled' o a uno stato finale equivalente. Tipo di evento inferred | |||
| Preparato per il rilascio | Questa attività indica che l’elemento di sviluppo ha superato tutti i controlli di qualità ed è stato inserito in uno specifico rilascio. Si può dedurre dall’associazione dell’elemento a un record Release o dalla modifica dello stato a 'Ready for Deployment'. | ||
| Perché è importante Questa fase indica che l’elemento è completo dal punto di vista tecnico e funzionale. Il tempo trascorso in questo stato può corrispondere all’attesa prima della finestra di distribuzione pianificata. Dove reperirli Si deduce dalla modifica del campo 'State' a 'Ready for Release' oppure monitorando quando il campo 'Release' del record dell’elemento di sviluppo viene compilato o aggiornato. Acquisizione Si deduce da una modifica dello stato o dall’associazione a un record Release. Tipo di evento inferred | |||
| Progettazione avviata | Indica la fase in cui viene definita la progettazione tecnica o l’architettura della soluzione per l’elemento di sviluppo. In genere, si deduce dalla modifica di un campo di stato dell’elemento a un valore come 'Design' o 'Solutioning'. | ||
| Perché è importante Analizzare la durata della fase di progettazione aiuta a individuare i colli di bottiglia nella traduzione dei requisiti e nella pianificazione della soluzione, prima dell’inizio dello sviluppo. Dove reperirli Si deduce dalle transizioni di stato del record dell’elemento di sviluppo, ad esempio Story [rm_story]. Si cercano modifiche del campo 'State' o di un campo personalizzato 'Stage' a un valore relativo alla progettazione. Acquisizione Si deduce da una modifica dello stato a 'Design' o a un valore analogo. Tipo di evento inferred | |||
| Rilavorazione individuata | Indica che durante i test è stato rilevato un problema e che l’elemento deve tornare allo sviluppo. L’evento si deduce osservando un passaggio a ritroso nel flusso del processo, ad esempio una modifica dello stato da 'In QA' a 'In Progress'. | ||
| Perché è importante Monitorare le rilavorazioni è essenziale per comprendere i problemi di qualità e le inefficienze del processo. Una frequenza elevata di questa attività segnala possibili problemi nello sviluppo o poca chiarezza dei requisiti. Dove reperirli Si deduce analizzando la cronologia del campo 'State' nelle tabelle sys_audit o sys_history_line. Una modifica da uno stato di fase avanzata, ad esempio 'Testing', a uno precedente, come 'In Progress', indica una rilavorazione. Acquisizione Si deduce da una transizione di stato a ritroso, ad esempio 'Testing' -> 'In Progress'. Tipo di evento inferred | |||
| Test QA avviati | Indica l’inizio della fase formale di test di controllo qualità. Quasi sempre si deduce dalla modifica dello stato dell’elemento di sviluppo a un valore come 'In QA', 'Testing' o 'Ready for Test'. | ||
| Perché è importante Questa attività segna il passaggio del lavoro dal team di sviluppo al team QA. Consente di misurare la durata dei test e di individuare i colli di bottiglia legati alla capacità di test. Dove reperirli Si deduce dalla data e dall’ora in cui il campo 'State' del record dell’elemento di sviluppo, ad esempio Story o Defect, viene aggiornato a uno stato specifico per il QA. Acquisizione Si basa sulla data e sull’ora di una modifica dello stato a 'Testing' o a un valore equivalente. Tipo di evento inferred | |||
| UAT avviati | Indica l’inizio dei test di accettazione da parte degli utenti (UAT), durante i quali i referenti aziendali convalidano le funzionalità. L’evento si deduce da una modifica dello stato a 'UAT', 'In UAT' o 'User Acceptance Testing'. | ||
| Perché è importante Questa fase è fondamentale per verificare che la funzionalità sviluppata soddisfi i requisiti aziendali. Analizzarne la durata può rivelare problemi di partecipazione degli utenti o discrepanze rispetto ai requisiti. Dove reperirli Si deduce da una transizione di stato nel record dell’elemento di sviluppo. Questo richiede che il modello di stato del cliente preveda uno stato specifico per UAT. Acquisizione Si deduce da una modifica dello stato a un valore 'UAT'. Tipo di evento inferred | |||
Guide all’estrazione
Passaggi
- Comprenda il modello degli stati: prima di creare i report, documenti i valori specifici del campo degli stati degli elementi di sviluppo (ad esempio, nella tabella Story
[rm_story]o Defect[rm_defect]) che corrispondono alle attività richieste. Per esempio, il valore di stato 'In Progress' potrebbe corrispondere all’attività 'Development Started'. - Acceda alla creazione dei report: acceda alla Sua istanza ServiceNow. Nel navigatore dei filtri, selezioni
Reports > View / Rune faccia clic sul pulsanteCreate a report. - Crei un report sulle modifiche di stato: crei il primo report per acquisire le attività determinate dallo stato. Lo configuri come segue:
- Nome del report:
ProcessMind - State Change Events - Tipo di origine:
Table - Tabella:
Audit [sys_audit] - Tipo:
List - Configura colonne: aggiunga
Document key,Created on,Table name,Field name,Old valueeNew value. - Filtro: imposti
Table namesu una delle tabelle degli elementi di sviluppo (ad esempio,Story) eField namesul campo dello stato (ad esempio,State). Aggiunga un filtro per intervallo di date al campoCreated on.
- Nome del report:
- Crei un report sulla creazione degli elementi: crei un nuovo report per l’evento di creazione iniziale.
- Nome del report:
ProcessMind - Item Creation Events - Tipo di origine:
Table - Tabella:
Story [rm_story](o la tabella principale degli elementi di sviluppo) - Tipo:
List - Configura colonne: aggiunga colonne per gli attributi richiesti, come
Numero,Created on,Assigned to,Priority,Statee così via. - Filtro: applichi un filtro per intervallo di date al campo
Created on.
- Nome del report:
- Crei un report sui commit del codice: crei un report per gli eventi DevOps espliciti relativi ai commit.
- Nome del report:
ProcessMind - Commit Events - Tipo di origine:
Table - Tabella:
Commit [sn_devops_commit] - Tipo:
List - Configura colonne: aggiunga colonne come
Work item,Commit time,Authore così via. - Filtro: applichi un filtro per intervallo di date al campo
Commit time.
- Nome del report:
- Crei report per build e distribuzioni: ripeta la procedura del passaggio precedente per le tabelle
Build [sn_devops_build]eDeployment [sn_devops_deployment]. Queste tabelle contengono record relativi alle attivitàBuild Triggered,Deployment to Production Started,Deployed to ProductioneDeployment Failed. - Esporti tutti i report: esegua singolarmente ciascun report creato. In ogni report, faccia clic sull’icona del menu contestuale (tre puntini o una freccia verso il basso) e selezioni
Export > CSVoppureExport > Excel. Salvi tutti i file. - Combini e trasformi i dati: apra i file esportati in un foglio di calcolo o utilizzi uno strumento di preparazione dei dati. Combini manualmente i dati di tutti i file in un unico foglio. Crei le colonne richieste per l’Event Log (
DevelopmentItem,ActivityName,EventTimee così via) e associ i dati alle colonne di origine. Per esempio, associDocument keydel report di audit eNumerodel report Story alla colonnaDevelopmentItem. - Associ i nomi delle attività: crei la colonna
ActivityNametraducendo i dati di origine. Per il report sulle modifiche di stato, utilizzi il modello degli stati documentato per associare i valori diNew valueai nomi delle attività (ad esempio, associ lo stato 'Testing' all’attività 'QA Testing Started'). Per gli altri report, assegni a ogni riga un nome di attività fisso (ad esempio, tutte le righe esportate dai commit diventano 'Code Committed'). - Completi e salvi il file: aggiunga le colonne
SourceSystemeLastDataUpdatecon valori statici per tutte le righe. Verifichi che tutti i timestamp seguano lo stesso formato. Salvi il file finale combinato come un unico CSV, pronto per essere caricato in ProcessMind.
Configurazione
- Tabelle necessarie: le tabelle principali per questa estrazione sono
Audit [sys_audit]per gli eventi dedotti, le tabelle specifiche degli elementi di sviluppo (ad esempio,Story [rm_story],Defect [rm_defect]) e le tabelle principali di ServiceNow DevOps:Commit [sn_devops_commit],Build [sn_devops_build]eDeployment [sn_devops_deployment]. - Filtri principali: il filtro più importante riguarda l’intervallo di date, da applicare in modo uniforme a tutti i report su un campo timestamp come
Created on,Commit timeoOra di inizio. Per il reportsys_audit, è fondamentale filtrare perTable name(ad esempio,rm_story) eField name(ad esempio,state), così da includere solo le modifiche di stato pertinenti. - Intervallo di date consigliato: si consiglia di estrarre i dati relativi a un periodo da 3 a 6 mesi, per ottenere un insieme rappresentativo senza causare problemi di prestazioni. Nei sistemi più grandi, valuti l’estrazione dei dati in intervalli mensili.
- Definizione del modello degli stati: è necessario conoscere con chiarezza il modello degli stati degli elementi di lavoro adottato dall’organizzazione. Questa informazione serve per associare correttamente i valori di stato registrati nella tabella
sys_auditalle attività aziendali corrispondenti, come 'QA Testing Started' o 'UAT Approved'. - Prerequisiti: per creare ed eseguire i report, gli utenti che effettuano l’estrazione devono disporre del ruolo
report_usero di autorizzazioni equivalenti. Devono inoltre poter leggere le tabelle DevOps e di sviluppo delle applicazioni indicate sopra. Il plugin ServiceNow DevOps deve essere installato e integrato con gli strumenti SCM e CI/CD.
a Query di esempio 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.
--- Passaggi
- Prerequisiti: verifichi di poter accedere alla rete della Sua istanza ServiceNow e di disporre di un account di servizio dedicato con autorizzazioni di lettura (i ruoli
itilesn_devops.viewersono un buon punto di partenza). L’account deve poter accedere a tabelle comerm_story,sys_audite allo schemasn_devops_*. - Installi il driver ODBC ServiceNow: scarichi dal portale di assistenza ServiceNow il driver ODBC adatto al Suo sistema operativo e segua le istruzioni di installazione.
- Configuri il DSN: crei un nuovo DSN di sistema (Data Source Name) sul computer da cui eseguirà la query. In ODBC Data Source Administrator, aggiunga il driver ServiceNow e configuri l’URL dell’istanza (ad esempio,
yourinstance.service-now.com), il nome utente e la password. - Si connetta con un client SQL: utilizzi un client SQL come DBeaver, Microsoft SQL Server Management Studio (tramite un server collegato) oppure un linguaggio di scripting come Python con una libreria ODBC per connettersi a ServiceNow tramite il DSN configurato.
- Individui il modello degli stati: prima di eseguire la query, individui i valori esatti utilizzati dall’organizzazione nel campo
statedelle tabelle degli elementi di sviluppo (ad esempio,rm_story,rm_defect). La query fornita include esempi comuni come 'In Progress' o 'In QA', che dovrà sostituire con i valori specifici della Sua istanza. - Personalizzi la query SQL: copi la query SQL fornita nel client. Modifichi i segnaposto all’inizio della query, compresa la data iniziale dell’estrazione e i valori di stato specifici corrispondenti alle attività del ciclo di sviluppo.
- Esegua la query: esegua l’intera query SQL sul database ServiceNow tramite la connessione ODBC. A seconda dell’intervallo di date e del volume dei dati, l’operazione potrebbe richiedere molto tempo.
- Riveda i dati: al termine della query, controlli brevemente il dataset restituito. Verifichi che siano presenti attività diverse e che le colonne principali, come
DevelopmentItem,ActivityNameedEventTime, contengano i valori previsti. - Esporti in CSV: esporti l’intero risultato in un file CSV. Verifichi che il file sia codificato in UTF-8 e che le intestazioni delle colonne corrispondano agli attributi richiesti da ProcessMind, ad esempio
DevelopmentItem,ActivityNameedEventTime. - Prepari il caricamento: verifichi che il file CSV finale non contenga righe vuote in fondo e che il formato delle date di
EventTimeeLastDataUpdatesia uniforme e supportato da ProcessMind (ad esempio,YYYY-MM-DD HH:MM:SS).
Configurazione
- Prerequisiti: accesso a un’istanza ServiceNow con il modulo DevOps abilitato. È necessario un account utente dedicato con autorizzazioni di lettura per le tabelle richieste. Il driver ODBC ServiceNow deve essere installato e configurato sul computer client.
- Configurazione del driver ODBC: per la connessione servono l’URL dell’istanza, un nome utente e una password oppure un token OAuth. È fondamentale verificare la connessione DSN prima di eseguire query complesse.
- Filtro per intervallo di date: la query fornita include il segnaposto
s.sys_created_on >= '2023-01-01'per limitare la quantità di dati estratti. Si consiglia vivamente di estrarre i dati per un periodo definito, ad esempio gli ultimi 6-12 mesi, così da mantenere gestibili i tempi di esecuzione delle query. - Personalizzazione del modello degli stati: l’accuratezza degli eventi dedotti dipende interamente dal modello degli stati. Sostituisca i valori segnaposto (ad esempio,
[Your 'In Progress' State Value],[Your 'In QA' State Value]) con i valori esatti configurati in ServiceNow. La distinzione tra maiuscole e minuscole è rilevante. - Tabelle degli elementi di lavoro: la query è predisposta per la tabella Story (
rm_story). Se l’organizzazione utilizza anche Defect (rm_defect), Enhancement (rm_enhancement) o altri tipi di Task, deve aggiungerli all’espressione di tabella comune (CTE) inizialeDevItemsusandoUNION ALL. - Prestazioni: le query dirette su un’istanza ServiceNow di produzione possono incidere sulle prestazioni. Si consiglia di eseguire estrazioni di grandi dimensioni nelle fasce orarie di minore attività. Per dataset molto ampi, valuti una strategia di estrazione incrementale basata sul campo
sys_updated_on.
a Query di esempio 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 *** È pronto per iniziare?
Inizi oggi a trasformare il ciclo di vita dello sviluppo software. Utilizzi questo template dei dati per individuare inefficienze nascoste e promuovere il miglioramento continuo.
Non rimandi: ottimizzi oggi il ciclo di vita dello sviluppo software
Individui le inefficienze per ridurre del 30% o più il tempo di ciclo dello sviluppo software.
Non è richiesta la carta di credito. Inizi oggi a ottimizzare i processi.