Plantilla de Datos para el Ciclo de Vida de Desarrollo de Software
Plantilla de Datos para el Ciclo de Vida de Desarrollo de Software
- Atributos recomendados para recopilar
- Actividades clave para el seguimiento
- Guía de extracción para ServiceNow DevOps
Atributos del Ciclo de Vida de Desarrollo de Software
| Nombre | Descripción | ||
|---|---|---|---|
| Elemento de Desarrollo DevelopmentItem | El identificador único para una sola unidad de trabajo, como una característica, un error o una tarea, que avanza a través del ciclo de vida de desarrollo. | ||
| Descripción El Elemento de Desarrollo sirve como el identificador de caso principal, representando una unidad de trabajo distinta que se está rastreando. Vincula todas las actividades, desde la concepción inicial y la planificación hasta el desarrollo, las pruebas y el despliegue para ese elemento específico. En el análisis de Process Mining, este atributo es fundamental para reconstruir el recorrido completo de cada elemento de trabajo. Permite la visualización de flujos de proceso, el cálculo de los tiempos de ciclo totales y la identificación de variantes de proceso para características individuales o correcciones de errores. Cada evento en el registro debe estar asociado con un Elemento de Desarrollo para construir un mapa de proceso coherente. Por qué es importante Este es el identificador central que conecta todas las actividades de desarrollo relacionadas en una única instancia de proceso, haciendo posible analizar el ciclo de vida completo de cada elemento de trabajo. Dónde obtener Este identificador es típicamente la clave primaria de las tablas que gestionan stories, bugs o tareas, como las tablas 'rm_story', 'rm_bug' o 'task' en ServiceNow. Ejemplos STRY0010015BUG0034092TASK0050118 | |||
| Hora de Inicio EventTime | La marca de tiempo exacta que indica cuándo ocurrió una actividad o evento específico. | ||
| Descripción Este atributo proporciona la fecha y hora en que se registró cada actividad en el ciclo de vida de desarrollo. Es esencial para el orden cronológico de los eventos y para todo análisis basado en el tiempo. En el Process Mining, la hora de inicio se utiliza para calcular las duraciones entre actividades, identificar los tiempos de espera y medir el tiempo de ciclo general del proceso. Es un componente crítico para los dashboards que analizan el rendimiento, como el 'SDLC End-to-End Cycle Time Analysis', y para calcular indicadores clave de rendimiento como el 'Code Review Lead Time'. Por qué es importante Esta marca de tiempo es esencial para ordenar los eventos correctamente y calcular todas las métricas de rendimiento, incluyendo tiempos de ciclo, duraciones y tiempos de espera. Dónde obtener Normalmente se encuentra en campos de marca de tiempo generados por el sistema como 'sys_updated_on' o 'sys_created_on' de la pista de auditoría o tablas de tareas. Ejemplos 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Nombre de la Actividad ActivityName | El nombre del evento específico del ciclo de vida de desarrollo que ocurrió, como 'Development Started' o 'Code Review Performed'. | ||
| Descripción Este atributo registra el nombre de cada hito o tarea completada dentro del ciclo de vida de desarrollo de software. Estas actividades forman los pasos secuenciales del proceso, desde la creación hasta el despliegue. Analizar la secuencia y frecuencia de estas actividades es la función principal del Process Mining. Permite la construcción del mapa de proceso, ayuda a identificar cuellos de botella entre pasos y destaca variaciones de proceso no conformes o ineficientes. El conjunto definido de actividades incluye etapas clave como diseño, desarrollo, pruebas y despliegue. Por qué es importante Define los pasos en el mapa de procesos, permitiendo el análisis del flujo del proceso, la identificación de cuellos de botella y el descubrimiento de desviaciones del SDLC estándar. Dónde obtener Esto se deriva típicamente mapeando cambios de estado, registros de eventos o entradas de auditoría a una lista estandarizada de nombres de actividad. Por ejemplo, un campo 'state' cambiando a 'In Progress' podría mapearse a 'Development Started'. Ejemplos Desarrollo IniciadoCódigo CommiteadoPruebas de QA CompletadasDesplegado a Producción | |||
| Source System SourceSystem | Identifica el sistema del cual se extrajeron los datos, que en este caso es ServiceNow DevOps. | ||
| Descripción Este atributo especifica el sistema de origen para los datos de eventos. Para este proceso, será consistentemente 'ServiceNow DevOps'. Aunque pueda parecer estático, incluir explícitamente el sistema de origen es crucial para la gobernanza de datos y en entornos donde los datos podrían fusionarse de múltiples sistemas, como Jira o Azure DevOps. Garantiza claridad sobre la procedencia de los datos y ayuda a diagnosticar problemas de calidad o extracción de datos. Por qué es importante Garantiza la trazabilidad de los datos y es esencial para mantener la integridad de los datos, especialmente al integrar datos de múltiples herramientas de desarrollo. Dónde obtener Este es un valor estático que debe agregarse durante el proceso de extracción y transformación de Ejemplos ServiceNow DevOps | |||
| Última actualización de datos LastDataUpdate | Marca de tiempo que indica la última vez que se actualizaron los datos para este registro de eventos desde el sistema de origen. | ||
| Descripción Este atributo registra cuándo se extrajo o actualizó por última vez el conjunto de datos de ServiceNow DevOps. Se aplica a todo el conjunto de datos en lugar de a eventos individuales. Esta marca de tiempo es vital para comprender la actualidad del análisis. Informa a los usuarios sobre cuán actuales son las percepciones del proceso y ayuda a programar las actualizaciones de datos. Mostrar esta información en los dashboards proporciona contexto a todas las métricas y visualizaciones, asegurando que las decisiones se to tomen basándose en datos oportunos. Por qué es importante Proporciona un contexto crucial sobre la puntualidad de los datos, asegurando que los usuarios comprendan cuán actualizada está el análisis del proceso. Dónde obtener Esta marca de tiempo se genera y añade durante el proceso de extracción de datos, registrando cuándo se ejecutó la extracción. Ejemplos 2023-11-15T08:00:00Z | |||
| ¿Es Retrabajo? IsRework | Un indicador booleano que es verdadero si la actividad es parte de un ciclo de retrabajo, como volver al desarrollo después de las pruebas. | ||
| Descripción Este es un atributo derivado que identifica actividades que ocurren después de que un proceso ha regresado a una etapa anterior. Por ejemplo, si una actividad de 'Development Started' ocurre después de una actividad de 'QA Testing Completed' para el mismo elemento, se marca como retrabajo. Esta bandera es esencial para cuantificar y visualizar el retrabajo. Apoya directamente el dashboard 'Rework and Rejection Flow Analysis' y se utiliza para calcular el KPI 'Rework Rate after Testing'. Al marcar estos eventos, los analistas pueden filtrar y analizar fácilmente la frecuencia, las causas y el impacto del retrabajo en el tiempo de ciclo general. Por qué es importante Esta bandera facilita cuantificar y analizar el retrabajo, ayudando a medir la calidad del proceso e identificar las causas raíz del trabajo repetido. Dónde obtener Este atributo se calcula dentro de la herramienta de Process Mining analizando la secuencia de actividades para cada caso para detectar movimientos hacia atrás en el flujo del proceso. Ejemplos truefalse | |||
| Desarrollador Asignado AssignedDeveloper | El nombre o ID del desarrollador o usuario asignado al elemento de desarrollo en el momento de la actividad. | ||
| Descripción Este atributo identifica al individuo responsable de ejecutar una tarea o actividad específica. Es dinámico y puede cambiar a medida que el elemento de desarrollo se mueve entre diferentes etapas y equipos. Este atributo es crítico para analizar la asignación de recursos, la carga de trabajo y los traspasos. Apoya directamente el dashboard 'Developer Workload and Handoffs' y el KPI 'Activity Volume per Developer'. Al rastrear los cambios en este campo, es posible medir los tiempos de traspaso e identificar cuellos de botella de colaboración entre desarrolladores o entre equipos de desarrollo y QA. Por qué es importante Esto es esencial para el análisis basado en recursos, incluyendo la distribución de la carga de trabajo, la eficiencia de los traspasos y la identificación de patrones de rendimiento específicos del equipo. Dónde obtener Esta información se almacena típicamente en el campo 'assigned_to' en las tablas relacionadas con tareas en ServiceNow. Ejemplos David MillerAnna WilliamsJames Brown | |||
| Estado del Elemento de Desarrollo DevelopmentItemState | El estado o 'state' del elemento de desarrollo en el momento del evento, como 'Open', 'In Progress' o 'Closed'. | ||
| Descripción Este atributo refleja el estado oficial del elemento de desarrollo dentro de ServiceNow. Si bien las actividades son pasos de proceso derivados, el 'state' representa la etapa formal en el flujo de trabajo del sistema. El 'state' es a menudo la fuente de la que se derivan las actividades. Puede utilizarse para la validación de datos y para crear vistas más simples y de alto nivel del proceso. Por ejemplo, analizar el tiempo dedicado a cada 'state' puede proporcionar una visión diferente de los cuellos de botella en comparación con el análisis del tiempo entre actividades. También es útil para identificar elementos que están estancados o se han resuelto. Por qué es importante Proporciona el estado oficial del sistema de un elemento de trabajo, que a menudo es la fuente para derivar actividades y puede usarse para validación y análisis de estado de alto nivel. Dónde obtener Este es un campo estándar, generalmente llamado 'state' o 'stage', en las tablas relacionadas con tareas en ServiceNow. Ejemplos PendienteTrabajo en CursoListo para PruebasCerrado Completo | |||
| Grupo de asignación AssignmentGroup | El equipo o grupo responsable del elemento de desarrollo en el momento de la actividad. | ||
| Descripción Este atributo identifica al equipo asignado a un elemento de trabajo, como 'Frontend Developers', 'Backend Services' o 'QA Team'. A medida que un elemento de trabajo progresa, a menudo se traspasa entre diferentes grupos de asignación. El seguimiento del grupo de asignación es esencial para comprender la colaboración interfuncional y los traspasos. Ayuda a identificar retrasos sistémicos que ocurren cuando el trabajo se mueve de un equipo a otro. Este atributo respalda el análisis del rendimiento a nivel de equipo, la carga de trabajo y la identificación de qué equipos son cuellos de botella en el flujo general. Por qué es importante Rastrea qué equipo es responsable del trabajo, permitiendo el análisis del rendimiento del equipo, el equilibrio de la carga de trabajo y la eficiencia de los traspasos entre equipos. Dónde obtener Esta información se almacena en el campo 'assignment_group', que es un campo estándar en las tablas relacionadas con tareas en ServiceNow. Ejemplos Ingeniería de PlataformaEquipo de Aplicaciones MóvilesGarantía de CalidadDevOps | |||
| Módulo/Componente Afectado ModuleComponentAffected | El módulo de software, aplicación o componente específico al que se relaciona el elemento de desarrollo. | ||
| Descripción Este atributo categoriza el trabajo de desarrollo por la parte del sistema que impacta. Esto podría ser un microservicio específico, un componente de UI o una aplicación de backend. Segmentar el proceso por módulo o componente es crucial para identificar cuellos de botella localizados. El dashboard 'Component-Specific Bottleneck Insights' y el KPI 'Avg Stage Duration by Component' dependen de este atributo para determinar si ciertas partes del código base están consistentemente asociadas con ciclos de desarrollo más largos, tasas de retrabajo más altas o fallos de despliegue más frecuentes. Esto ayuda a enfocar los esfuerzos de mejora donde más se necesitan. Por qué es importante Permite segmentar el análisis por aplicación o componente, lo que ayuda a aislar cuellos de botella o problemas de calidad específicos de ciertas partes del sistema. Dónde obtener Este es a menudo un campo personalizado o una referencia a la Base de Datos de Gestión de Configuración (CMDB), que vincula el elemento de trabajo a un registro 'cmdb_ci'. Consulte la documentación de ServiceNow DevOps. Ejemplos Billing ServiceInterfaz de Usuario de Autenticación de UsuarioBase de Datos de InformesAPI Gateway | |||
| Prioridad DevelopmentItemPriority | El nivel de prioridad asignado al elemento de desarrollo, como 'High', 'Medium' o 'Low'. | ||
| Descripción Este atributo categoriza los elementos de desarrollo en función de su urgencia de negocio. Los niveles de prioridad ayudan a los equipos a centrarse en las tareas más críticas y a menudo se utilizan para gestionar los SLAs y las expectativas de los stakeholders. En el Process Mining, la prioridad es una dimensión clave para el análisis comparativo. Permite filtrar el mapa de proceso para ver si los elementos de alta prioridad siguen un camino más rápido o diferente. Es esencial para el dashboard y KPI de 'High-Priority Feature Delivery Time', ayudando a validar si los elementos críticos están siendo realmente agilizados. Por qué es importante Permite filtrar y comparar procesos para diferentes niveles de prioridad, ayudando a verificar si los elementos de alta prioridad se procesan de manera más rápida y eficiente. Dónde obtener Este es un campo estándar, a menudo llamado 'priority', en las tablas relacionadas con tareas en ServiceNow. Ejemplos 1 - Crítico2 - Alta3 - Moderada4 - Baja | |||
| Tiempo de Ciclo del Elemento de Desarrollo DevelopmentItemCycleTime | El tiempo total transcurrido desde la creación del elemento de desarrollo hasta su cierre final o despliegue. | ||
| Descripción Este atributo es una métrica calculada que representa la duración de extremo a extremo de un solo elemento de desarrollo. Se calcula encontrando la diferencia entre la marca de tiempo de la primera actividad y la última actividad para cada caso. Este es un indicador clave de rendimiento principal para todo el proceso SDLC, apoyando directamente el KPI 'Average SDLC Cycle Time'. Proporciona una medida de alto nivel de la velocidad y eficiencia del proceso. Analizar esta métrica a lo largo del tiempo y a través de diferentes dimensiones, como la prioridad o el equipo, ayuda a rastrear el impacto de las iniciativas de mejora de procesos. Por qué es importante Representa la duración total de extremo a extremo de un elemento de trabajo, una métrica clave para medir la eficiencia y velocidad general del proceso. Dónde obtener Este no es un campo en el sistema de origen. Se calcula en la herramienta de Process Mining restando el StartTime mínimo del StartTime máximo para cada CaseId. Ejemplos 15 days 4 hours3 días 12 horas32 días 8 horas | |||
| Tipo de Elemento de Desarrollo DevelopmentItemType | La clasificación del elemento de trabajo, como 'Feature', 'Bug', 'Technical Debt' o 'Task'. | ||
| Descripción Este atributo distingue entre diferentes tipos de trabajo que fluyen a través del proceso SDLC. Por ejemplo, el proceso para corregir un 'bug' crítico podría ser diferente y más rápido que el proceso para desarrollar una nueva característica. Analizar el proceso basado en el tipo de elemento de trabajo permite una comprensión más matizada del rendimiento. Ayuda a responder preguntas como: '¿Los bugs tienen una tasa de retrabajo más alta que las nuevas características?' o '¿Es aceptable nuestro tiempo de ciclo para la reducción de la deuda técnica?'. Esta segmentación proporciona percepciones más profundas que una vista de proceso única para todos. Por qué es importante Distingue entre diferentes tipos de trabajo, como funcionalidades y errores, que pueden tener diferentes rutas de proceso, prioridades y duraciones esperadas. Dónde obtener Esto se puede determinar a partir de la tabla de origen del registro (ej., 'rm_story' vs 'rm_bug') o de un campo 'type' en una tabla de tareas genérica. Ejemplos Funcionalidad`Bug`TaskSpike | |||
| Estado del Despliegue DeploymentStatus | Indica el resultado de una actividad de despliegue, típicamente 'Éxito' o 'Fallo'. | ||
| Descripción Este atributo registra el resultado de un despliegue a un entorno específico. Es una pieza de información crítica para comprender la fiabilidad y estabilidad del proceso de lanzamiento. Este atributo es esencial para el dashboard 'Deployment Success and Failure Trends' y el KPI 'Deployment Failure Rate'. Al analizar la frecuencia y las tendencias de los fallos de despliegue, las organizaciones pueden identificar problemas subyacentes en sus pruebas, infraestructura o coordinación de lanzamientos. Ayuda a enfocar los esfuerzos en mejorar la calidad y fiabilidad de la entrega de software. Por qué es importante Mide directamente el éxito de las actividades de despliegue, lo cual es crítico para calcular la tasa de fallo de despliegue y analizar la estabilidad del lanzamiento. Dónde obtener Este estado se registra típicamente en tareas de seguimiento de despliegue o registros de ejecución de pipeline de CI/CD integrados con ServiceNow DevOps. Ejemplos ÉxitoFalloCompletado con advertencias | |||
| Hora de Finalización EventEndTime | La marca de tiempo exacta que indica cuándo se completó una actividad. Para eventos instantáneos, esta es la misma que la hora de inicio. | ||
| Descripción Este atributo proporciona la fecha y hora en que se completó cada actividad en el ciclo de vida de desarrollo. Es particularmente útil para actividades que tienen una duración medible, como 'Code Review Performed' o 'QA Testing'. En el Process Mining, tener tanto un tiempo de inicio como un tiempo de finalización permite un cálculo preciso de los tiempos de procesamiento de la actividad, distinguiéndolos del tiempo de espera entre actividades. Esto ayuda a determinar si los retrasos se deben a tareas largas o a largas esperas de recursos. Para eventos que se consideran instantáneos, como 'Build Triggered', el End Time puede ser el mismo que el Start Time. Por qué es importante Permite el cálculo preciso del tiempo de procesamiento de la actividad, lo que ayuda a diferenciar entre el tiempo dedicado a trabajar y el tiempo dedicado a esperar. Dónde obtener Esto podría necesitar ser derivado. Podría ser la marca de tiempo de la hora de inicio de la siguiente actividad, o podría obtenerse de un campo de 'end date' separado si está disponible en el sistema de origen. Ejemplos 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| ID de Commit CommitId | El identificador único del commit de código fuente asociado con el trabajo de desarrollo. | ||
| Descripción Este atributo proporciona un vínculo directo desde un elemento de desarrollo al cambio de código específico en el repositorio de código fuente, como Git. Se captura cuando ocurre una actividad de 'Code Committed'. En el Process Mining, el Commit ID enriquece el análisis al conectar los datos del proceso con los datos de ingeniería. Permite a los analistas rastrear un despliegue problemático hasta el cambio de código exacto o correlacionar las métricas de complejidad del código con los tiempos del ciclo de desarrollo. Esto proporciona una capa de análisis de causa raíz mucho más profunda y técnica. Por qué es importante Vincula el evento del proceso a un cambio de código específico, permitiendo un análisis de causa raíz más profundo al correlacionar métricas de proceso con detalles a nivel de código. Dónde obtener Esto es capturado por las integraciones de ServiceNow DevOps con sistemas de gestión de código fuente como Git o SVN. Los datos residen en tablas relacionadas vinculadas al elemento de desarrollo. Ejemplos a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| Motivo de Retrabajo ReworkReason | Una clasificación o descripción de por qué un elemento de desarrollo requirió retrabajo después de las pruebas. | ||
| Descripción Cuando un elemento falla en QA o UAT, este atributo captura la razón del fallo. Esto podría ser una categoría de 'bug' específica, un malentendido de los requisitos o un problema ambiental. Esta información proporciona un contexto crítico para el dashboard 'Rework and Rejection Flow Analysis'. En lugar de solo saber que ocurrió el retrabajo, los analistas pueden entender por qué ocurrió. Esto permite mejoras dirigidas, como una mejor definición de requisitos, pruebas unitarias mejoradas o entornos de prueba más estables, para reducir la tasa general de retrabajo. Por qué es importante Proporciona una visión cualitativa de por qué ocurre el retrabajo, permitiendo mejoras de proceso dirigidas para aumentar la calidad y reducir los bucles de retrabajo. Dónde obtener Esto puede capturarse en un campo 'close_notes' cuando una prueba falla, o en un campo personalizado dedicado 'rework_reason'. Consulte la documentación de ServiceNow DevOps. Ejemplos Requisito Mal InterpretadoBug de RegresiónPrueba de Rendimiento FallidaProblema de UI/UX | |||
| Versión de Lanzamiento Planificada PlannedReleaseVersion | La versión o lanzamiento de software objetivo en la que se planea entregar el elemento de desarrollo. | ||
| Descripción Este atributo vincula un elemento de desarrollo a un lanzamiento planificado específico, como 'Version 2.3' o 'Q4 2023 Release'. Es un elemento clave para la gestión de proyectos y la planificación de lanzamientos. Para el Process Mining, este atributo es crucial para el dashboard 'Release Plan Adherence Monitoring'. Al comparar las fechas de finalización reales con las fechas de lanzamiento planificadas, los equipos pueden medir el cumplimiento del cronograma, identificar elementos en riesgo de no alcanzar un lanzamiento y analizar las causas de los retrasos en los lanzamientos. Proporciona un vínculo directo entre el proceso de desarrollo de bajo nivel y los objetivos de negocio de alto nivel. Por qué es importante Conecta el trabajo de desarrollo con versiones específicas, lo que permite analizar la adhesión al cronograma y el impacto de los retrasos del proceso en los plazos de lanzamiento. Dónde obtener Esta información se almacena típicamente en un campo 'release' o 'planned_release', a menudo haciendo referencia a una tabla de gestión de lanzamientos en ServiceNow. Consulte la documentación de ServiceNow DevOps. Ejemplos v3.4.1Lanzamiento Q1 2024Salida en Vivo del Proyecto Phoenix | |||
Actividades del Ciclo de Vida de Desarrollo de Software
| Actividad | Descripción | ||
|---|---|---|---|
| Desarrollo Iniciado | Esta actividad marca el punto en el que un desarrollador comienza activamente a codificar o implementar el elemento de desarrollo. Se infiere típicamente por un cambio de estado en el elemento a 'In Progress', 'Development' o 'Coding'. | ||
| Por qué es importante Este es un hito crucial que señala el inicio de la fase de construcción de valor añadido. Es esencial para medir el tiempo de entrega del desarrollador y los tiempos del ciclo de revisión de código. Dónde obtener Se infiere de la marca de tiempo cuando el campo 'State' en el registro del elemento de desarrollo (ej., Story [ Capturar Basado en el timestamp de un cambio de estado a 'En Progreso' o un valor similar. Tipo de evento inferred | |||
| Desplegado a Producción | Este evento marca la finalización exitosa del despliegue al entorno de producción. Es capturado explícitamente por ServiceNow DevOps cuando la herramienta CI/CD reporta una finalización exitosa de la pipeline. | ||
| Por qué es importante Este es el punto final de éxito principal del proceso SDLC. Completa la cadena de valor y es esencial para calcular el tiempo de ciclo total. Dónde obtener Capturado del 'completion_status' de un registro de Pipeline Execution [sn_devops_pipeline_execution] o de su Stage Execution Run asociado. Un estado 'Success' al final del tiempo marca este evento. Capturar Registrado cuando la pipeline de despliegue a producción se completa con éxito. Tipo de evento explicit | |||
| Despliegue Fallido | Indica que el intento de desplegar el elemento de desarrollo a producción no tuvo éxito. Esto es capturado explícitamente por ServiceNow DevOps cuando la pipeline de CI/CD informa un fallo. | ||
| Por qué es importante Este es un punto final de fallo crítico. Analizar su frecuencia y causas es clave para mejorar la estabilidad de los lanzamientos y reducir la tasa de fallos de despliegue. Dónde obtener Capturado del 'completion_status' de un registro de Pipeline Execution [sn_devops_pipeline_execution]. Un estado 'Failed' al final del tiempo marca este evento. Capturar Registrado cuando la pipeline de despliegue a producción reporta un estado de fallo. Tipo de evento explicit | |||
| Elemento de Desarrollo Creado | Esta actividad marca la creación de un nuevo elemento de desarrollo, como un story, bug o epic, dentro de ServiceNow. Este evento se captura típicamente de forma explícita cuando se inserta un nuevo registro en la tabla relevante, como la tabla Story [`rm_story`]. | ||
| Por qué es importante Este es el evento de inicio principal para el proceso SDLC. Permite la medición del tiempo de ciclo total de extremo a extremo y rastrea la entrada de demanda inicial. Dónde obtener Registrado en las tablas Capturar Capturado del timestamp de creación del registro del elemento de desarrollo. Tipo de evento explicit | |||
| Pruebas de QA Completadas | Significa que el equipo de Quality Assurance ha completado con éxito sus actividades de prueba para el elemento de desarrollo. Esto se infiere típicamente cuando el estado del elemento transiciona de una fase de prueba a un estado como 'Ready for UAT' o 'Done'. | ||
| Por qué es importante Este hito marca la finalización de una puerta de calidad importante. Es un requisito previo para etapas posteriores como las Pruebas de Aceptación de Usuario o la preparación del lanzamiento. Dónde obtener Se infiere de la marca de tiempo de un cambio de estado de un estado de prueba (ej., 'In QA') a un estado post-prueba (ej., 'Ready for UAT' o 'Resolved'). Capturar Basado en el timestamp de un cambio de estado de 'Testing' a un estado posterior. Tipo de evento inferred | |||
| Revisión de Código Realizada | Esta actividad indica la finalización de una revisión de código por pares, típicamente asociada con una pull request o merge request. Este evento puede capturarse explícitamente a través de integraciones de DevOps o inferirse de cambios de estado en registros relacionados. | ||
| Por qué es importante Esta es una puerta de calidad crítica. Analizar su duración ayuda a identificar cuellos de botella en el proceso de revisión, que es una fuente común de retrasos en el SDLC. Dónde obtener Puede ser capturado del evento 'Fusionado' o 'Completado' de un registro de Pull Request en la integración Git de ServiceNow, o inferido de un cambio de estado en el elemento de desarrollo a 'Revisión de Código Completa'. Capturar Registrado cuando se fusiona una Pull Request vinculada al elemento de trabajo. Tipo de evento explicit | |||
| UAT Aprobado | Indica que los stakeholders de negocio han aprobado formalmente el elemento de desarrollo después de las Pruebas de Aceptación de Usuario. Este es un hito clave inferido de un cambio de estado, como pasar de 'En UAT' a 'Listo para Lanzamiento' o 'Aprobado'. | ||
| Por qué es importante Esta es la aprobación final del negocio antes de que un elemento sea autorizado para el despliegue a producción. Es un punto de control crítico de calidad y gobernanza. Dónde obtener Inferido de una transición de estado en el registro del elemento de desarrollo que significa la finalización exitosa de UAT. Esto se registra en el historial de actividad del elemento. Capturar Inferido de un cambio de estado de 'UAT' a un estado aprobado o listo para el lanzamiento. Tipo de evento inferred | |||
| Código Commiteado | Representa a un desarrollador que realiza un commit de código a un repositorio de sistema de control de versiones vinculado al elemento de desarrollo. ServiceNow DevOps captura explícitamente estos eventos de herramientas SCM integradas como Git o GitHub. | ||
| Por qué es importante El seguimiento de los commits proporciona visibilidad granular del progreso del desarrollo y la frecuencia de la actividad. Ayuda a correlacionar cambios de código específicos con el elemento de desarrollo principal. Dónde obtener Capturado como un evento explícito en la tabla ServiceNow DevOps Commits [sn_devops_commit], que es poblada por webhooks del sistema de gestión de código fuente integrado. Capturar Registrado cuando se recibe un webhook de commit de la herramienta SCM. Tipo de evento explicit | |||
| Compilación Desencadenada | Este evento significa el inicio de una compilación de pipeline de CI/CD, a menudo activada por un commit de código. ServiceNow DevOps lo registra como una ejecución de pipeline, vinculándolo de nuevo a los elementos de desarrollo de origen. | ||
| Por qué es importante Esta actividad es el puente entre el desarrollo y las pruebas automatizadas o el despliegue. Analizar el tiempo entre el commit y el inicio de la compilación puede revelar retrasos en el proceso de CI/CD. Dónde obtener Registrado explícitamente en la tabla Pipeline Execution [ Capturar Capturado de la hora de inicio de un registro en la tabla Pipeline Execution. Tipo de evento explicit | |||
| Despliegue a Producción Iniciado | Esta actividad marca el inicio de la pipeline de despliegue al entorno de producción. ServiceNow DevOps la captura como un evento explícito cuando la etapa de producción de una pipeline de CI/CD comienza su ejecución. | ||
| Por qué es importante Esto marca el inicio de la fase final, y a menudo más crítica, del ciclo de vida. Rastrear esto ayuda a analizar las duraciones de despliegue e identificar oportunidades de automatización. Dónde obtener Registrado explícitamente en la tabla Stage Execution Run [ Capturar Capturado de la hora de inicio de una etapa de despliegue a producción en una Pipeline Execution. Tipo de evento explicit | |||
| Diseño Iniciado | Representa la fase en la que se crea el diseño técnico o la arquitectura de solución para el elemento de desarrollo. Esto se infiere generalmente de un cambio en un campo de estado o 'State' en el registro del elemento de desarrollo a un valor como 'Design' o 'Solutioning'. | ||
| Por qué es importante Analizar la duración de la fase de diseño ayuda a identificar cuellos de botella en la traducción de requisitos y la planificación de soluciones antes de que comience el trabajo de desarrollo. Dónde obtener Se infiere de las transiciones de estado en el registro del elemento de desarrollo (ej., Story [ Capturar Inferido de un cambio de estado a 'Diseño' o un estado similar. Tipo de evento inferred | |||
| Elemento de Desarrollo Cancelado | Representa la terminación de un elemento de desarrollo antes de su finalización. Este es un estado final alternativo, típicamente inferido de que el estado del elemento se establece en 'Cancelled' o 'Closed Incomplete'. | ||
| Por qué es importante El seguimiento de las cancelaciones ayuda a identificar el esfuerzo desperdiciado y a comprender las razones de los cambios de alcance o la repriorización. Proporciona una imagen más completa de todos los posibles resultados del proceso. Dónde obtener Se infiere de la marca de tiempo cuando el campo 'State' en el registro del elemento de desarrollo se actualiza a un estado terminal, no completado, como 'Cancelled'. Capturar Inferido de un cambio de estado a un estado 'Cancelado' o terminal equivalente. Tipo de evento inferred | |||
| Preparado Para Lanzamiento | Esta actividad significa que el elemento de desarrollo ha pasado todas las puertas de calidad y está empaquetado en un lanzamiento específico. Se puede inferir cuando el elemento se asocia con un registro de 'Release' o su estado cambia a 'Ready for Deployment'. | ||
| Por qué es importante Este paso indica que un elemento está técnica y funcionalmente completo. El tiempo dedicado en este estado puede representar tiempo de cola antes de una ventana de despliegue programada. Dónde obtener Se infiere del campo 'State' cambiando a 'Ready for Release' o al rastrear cuándo se llena o actualiza el campo 'Release' en el registro del elemento de desarrollo. Capturar Inferido de un cambio de estado o asociación con un registro de Versión. Tipo de evento inferred | |||
| Pruebas de QA Iniciadas | Marca el inicio de la fase formal de pruebas de Quality Assurance. Esto casi siempre se infiere del cambio de estado del elemento de desarrollo a un valor como 'In QA', 'Testing' o 'Ready for Test'. | ||
| Por qué es importante Esta actividad señala el traspaso del desarrollo al equipo de QA. Permite medir la duración de la fase de pruebas e identificar cuellos de botella en la capacidad de pruebas. Dónde obtener Se infiere de la marca de tiempo cuando el campo 'State' en el registro del elemento de desarrollo (ej., Story, Defect) se actualiza a un estado específico de QA. Capturar Basado en el timestamp de un cambio de estado a 'Testing' o equivalente. Tipo de evento inferred | |||
| Retrabajo Identificado | Indica que se encontró un problema durante las pruebas, lo que requiere que el elemento sea devuelto a desarrollo. Este evento se infiere al observar un movimiento hacia atrás en el flujo del proceso, como un cambio de estado de 'En QA' de vuelta a 'En Progreso'. | ||
| Por qué es importante El seguimiento del retrabajo es esencial para comprender los problemas de calidad y las ineficiencias del proceso. Una alta frecuencia de esta actividad apunta a problemas en el desarrollo o la claridad de los requisitos. Dónde obtener Se infiere del análisis del historial del campo 'State' en las tablas Capturar Inferido de una transición de estado hacia atrás, por ejemplo, 'Testing' -> 'En Progreso'. Tipo de evento inferred | |||
| UAT Iniciado | Representa el inicio de las Pruebas de Aceptación de Usuario, donde los stakeholders de negocio validan la funcionalidad. Este evento se captura infiriendo un cambio de estado a 'UAT', 'In UAT' o 'User Acceptance Testing'. | ||
| Por qué es importante Esta fase es crítica para asegurar que la característica desarrollada cumple con los requisitos del negocio. Analizar su duración puede revelar problemas con la participación del usuario o desajustes de requisitos. Dónde obtener Inferido de una transición de estado en el registro del elemento de desarrollo. Esto se basa en que el modelo de estados del cliente incluye un estado distinto para UAT. Capturar Inferido de un cambio de estado a un estado de 'UAT'. Tipo de evento inferred | |||
Guías de Extracción
Pasos
- Comprenda su modelo de estados: Antes de crear informes, documente los valores específicos en el campo de estado de su elemento de desarrollo (por ejemplo, en la tabla Story
[rm_story]o Defect[rm_defect]) que corresponden a las actividades requeridas. Por ejemplo, un valor de estado 'In Progress' podría mapearse a la actividad 'Desarrollo Iniciado'. - Navegar a la creación de informes: Inicie sesión en su instancia de ServiceNow. En el navegador de filtros, vaya a
Reports > View / Runy haga clic en el botónCreate a report. - Crear informe para cambios de estado: Cree el primer informe para capturar actividades basadas en el estado. Configúrelo de la siguiente manera:
- Nombre del informe:
ProcessMind - Eventos de Cambio de Estado - Tipo de origen:
Table - Tabla:
Audit [sys_audit] - Tipo:
List - Configurar columnas: Agregue
Document key,Created on,Table name,Field name,Old valueyNew value. - Filtro: Establezca
Table namepara que sea una de sus tablas de elementos de desarrollo (por ejemplo,Story), yField namepara que sea su campo de estado (por ejemplo,State). Agregue un filtro de fecha en el campoCreated onpara el período de tiempo deseado.
- Nombre del informe:
- Crear informe para la creación de elementos: Cree un nuevo informe para el evento de creación inicial.
- Nombre del informe:
ProcessMind - Eventos de Creación de Elementos - Tipo de origen:
Table - Tabla:
Story [rm_story](o su tabla principal de elementos de desarrollo) - Tipo:
List - Configurar columnas: Agregue columnas para los atributos requeridos como
Number,Created on,Assigned to,Priority,State, etc. - Filtro: Aplique un filtro de fecha en el campo
Created on.
- Nombre del informe:
- Crear informe para confirmaciones de código: Cree un informe para eventos DevOps explícitos relacionados con las confirmaciones.
- Nombre del informe:
ProcessMind - Eventos de Commit - Tipo de origen:
Table - Tabla:
Commit [sn_devops_commit] - Tipo:
List - Configurar columnas: Agregue columnas como
Work item,Commit time,Author, etc. - Filtro: Aplique un filtro de fecha en el campo
Commit time.
- Nombre del informe:
- Crear informes para compilaciones y despliegues: Repita el proceso del paso anterior para las tablas
Build [sn_devops_build]yDeployment [sn_devops_deployment]. Estas tablas contienen registros para las actividadesBuild Triggered,Deployment to Production Started,Deployed to ProductionyDeployment Failed. - Exportar todos los informes: Ejecute cada uno de los informes creados individualmente. Para cada informe, haga clic en el icono del menú contextual (tres puntos o una flecha hacia abajo) y seleccione
Exportar > CSVoExportar > Excel. Guarde todos los archivos. - Combinar y transformar datos: Abra los archivos exportados en un programa de hoja de cálculo o utilice una herramienta de preparación de datos. Combine manualmente los datos de todos los archivos en una sola hoja. Cree las columnas de registro de eventos requeridas (
DevelopmentItem,ActivityName,EventTime, etc.) y mapee los datos de las columnas de origen. Por ejemplo, mapee laDocument keydel informe de auditoría y elNumberdel informe de historia a la columnaDevelopmentItem. - Mapear nombres de actividad: Cree la columna
ActivityNametraduciendo los datos de origen. Para el informe de cambio de estado, utilice su modelo de estado documentado para mapear las entradas deNew valuea nombres de actividad (por ejemplo, mapee el estado 'Testing' a 'QA Testing Started'). Para los otros informes, asigne un nombre de actividad fijo para cada fila (por ejemplo, todas las filas de la exportación de commits se convierten en 'Código Commiteado'). - Finalizar y guardar: Agregue las columnas
SourceSystemyLastDataUpdatecon valores estáticos para todas las filas. Asegúrese de que todos los timestamps estén en un formato consistente. Guarde el archivo combinado final como un único CSV, que ahora está listo para ser cargado en ProcessMind.
Configuración
- Tablas requeridas: Las tablas principales necesarias para esta extracción son
Audit [sys_audit]para eventos inferidos, sus tablas específicas de elementos de desarrollo (por ejemplo,Story [rm_story],Defect [rm_defect]), y las tablas centrales de ServiceNow DevOps:Commit [sn_devops_commit],Build [sn_devops_build], yDeployment [sn_devops_deployment]. - Filtros clave: El filtro más importante es el rango de fechas, que debe aplicarse de forma consistente en todos los informes en un campo de timestamp como
Created on,Commit timeoStart time. Para el informesys_audit, es fundamental filtrar porTable name(por ejemplo,rm_story) yField name(por ejemplo,state) para limitar los datos solo a los cambios de estado relevantes. - Recomendación de rango de fechas: Se recomienda extraer datos por un período de 3 a 6 meses para asegurar un conjunto de datos representativo sin causar problemas de rendimiento. Para sistemas más grandes, considere extraer datos en lotes mensuales.
- Definición del modelo de estados: Usted debe tener una comprensión clara del modelo de estados de elementos de trabajo de su organización. Esto es necesario para mapear correctamente los valores de estado capturados en la tabla
sys_audita las actividades de negocio correspondientes, como 'Inicio de pruebas de QA' o 'UAT Aprobado'. - Requisitos previos: Los usuarios que realizan la extracción necesitan el rol
report_usero permisos equivalentes para crear y ejecutar informes. También necesitan acceso de lectura a las tablas de DevOps y de desarrollo de aplicaciones mencionadas anteriormente. El plugin ServiceNow DevOps debe estar instalado e integrado activamente con sus herramientas SCM y CI/CD.
a Consulta de ejemplo 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.
--- Pasos
- Requisitos previos: Asegúrese de tener acceso a la red de su instancia de ServiceNow y de que se le haya proporcionado una cuenta de servicio dedicada con permisos de lectura (los roles
itilysn_devops.viewerson un buen punto de partida). Este usuario necesitará acceso a tablas comorm_story,sys_audity el esquemasn_devops_*. - Instalar el controlador ODBC de ServiceNow: Descargue el controlador ODBC de ServiceNow apropiado para su sistema operativo desde el portal de soporte de ServiceNow. Siga las instrucciones de instalación proporcionadas.
- Configurar DSN: Configure un nuevo DSN (Nombre de origen de datos) de sistema en la máquina donde ejecutará la consulta. En el Administrador de origen de datos ODBC, agregue el controlador de ServiceNow y configúrelo con la URL de su instancia (por ejemplo,
yourinstance.service-now.com), nombre de usuario y contraseña. - Conectarse con un cliente SQL: Utilice una herramienta cliente SQL como DBeaver, Microsoft SQL Server Management Studio (usando un servidor vinculado) o un lenguaje de scripting como Python con una librería ODBC para conectarse a ServiceNow usando el DSN que configuró.
- Identificar el modelo de estados: Antes de ejecutar la consulta, debe identificar los valores exactos que su organización utiliza para el campo
stateen sus tablas de elementos de desarrollo (por ejemplo,rm_story,rm_defect). La consulta proporcionada utiliza ejemplos comunes como 'En progreso' o 'En QA', que deberá reemplazar con sus valores específicos. - Personalizar la consulta SQL: Copie la consulta SQL proporcionada en su cliente. Modifique los marcadores de posición en la parte superior de la consulta, incluyendo la fecha de inicio para la extracción y los valores de estado específicos que corresponden a las actividades de su ciclo de vida de desarrollo.
- Ejecutar la consulta: Ejecute la consulta SQL completa en la base de datos de ServiceNow a través de la conexión ODBC. Esto puede tomar una cantidad significativa de tiempo dependiendo del rango de fechas y el volumen de datos.
- Revisar los datos: Una vez que la consulta se complete, realice una breve revisión del conjunto de datos devuelto. Verifique una variedad de actividades y asegúrese de que las columnas clave como
DevelopmentItem,ActivityNameyEventTimeestén pobladas como se espera. - Exportar a CSV: Exporte todo el conjunto de resultados a un archivo CSV. Asegúrese de que el archivo esté codificado en UTF-8 y de que los encabezados de las columnas coincidan con los nombres de los atributos requeridos por ProcessMind, por ejemplo,
DevelopmentItem,ActivityName,EventTime. - Preparar para la carga: Asegúrese de que el archivo CSV final no contenga filas vacías al final y de que el formato de fecha para
EventTimeyLastDataUpdatesea consistente y compatible con ProcessMind (por ejemplo,YYYY-MM-DD HH:MM:SS).
Configuración
- Requisitos previos: Acceso a una instancia de ServiceNow con el módulo DevOps habilitado. Es necesaria una cuenta de usuario dedicada con permisos de lectura para las tablas requeridas. El controlador ODBC de ServiceNow debe estar instalado y configurado en la máquina cliente.
- Configuración del controlador ODBC: La conexión requiere la URL de la instancia, un nombre de usuario y una contraseña o token OAuth. Es fundamental probar la conexión DSN antes de intentar ejecutar consultas complejas.
- Filtrado por rango de fechas: La consulta proporcionada incluye un marcador de posición
s.sys_created_on >= '2023-01-01'para limitar la cantidad de datos extraídos. Se recomienda encarecidamente extraer datos para un período definido, como los últimos 6 a 12 meses, para garantizar tiempos de ejecución de consulta manejables. - Personalización del modelo de estados: La precisión de la consulta para eventos inferidos depende totalmente del modelo de estados. Debe reemplazar los valores de estado de los marcadores de posición (por ejemplo,
[Your 'In Progress' State Value],[Your 'In QA' State Value]) con los valores exactos utilizados en su configuración de ServiceNow. Estos distinguen entre mayúsculas y minúsculas. - Tablas de elementos de trabajo: La consulta está escrita para la tabla Story (
rm_story). Si su organización también utiliza Defects (rm_defect), Enhancements (rm_enhancement) u otros tipos de tareas, debe agregarlos a la expresión de tabla común (CTE)DevItemsinicial utilizandoUNION ALL. - Rendimiento: Las consultas directas a una instancia de ServiceNow de producción pueden afectar el rendimiento. Se recomienda realizar grandes extracciones durante las horas de menor actividad. Para conjuntos de datos muy grandes, considere una estrategia de extracción incremental basada en el campo
sys_updated_on.
a Consulta de ejemplo 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 ***