Szablon danych cyklu życia oprogramowania
Szablon danych cyklu życia oprogramowania
- Zalecane atrybuty do zebrania
- Najważniejsze działania do śledzenia
- Wskazówki dotyczące wyodrębniania danych z ServiceNow DevOps
Atrybuty cyklu życia oprogramowania
| Nazwa | Opis | ||
|---|---|---|---|
| Czas rozpoczęcia EventTime | Dokładny znacznik czasu wskazujący, kiedy wystąpiło dane działanie lub zdarzenie. | ||
| Opis Ten atrybut zawiera datę i godzinę zarejestrowania każdego działania w cyklu wytwarzania oprogramowania. Jest niezbędny do uporządkowania zdarzeń chronologicznie i przeprowadzenia analiz opartych na czasie. W process mining czas rozpoczęcia służy do obliczania odstępów między działaniami, wykrywania czasu oczekiwania i mierzenia całkowitego czasu realizacji procesu. Jest ważnym elementem dashboardów analizujących wyniki, takich jak analiza całkowitego czasu realizacji SDLC, oraz obliczania KPI, na przykład czasu realizacji przeglądu kodu. Dlaczego to ważne Ten znacznik czasu jest niezbędny do prawidłowego uporządkowania zdarzeń i obliczania wszystkich miar wydajności, w tym czasu realizacji, czasu trwania i czasu oczekiwania. Skąd pobrać Zwykle znajduje się w generowanych przez system polach znaczników czasu, takich jak „sys_updated_on” lub „sys_created_on”, w ścieżce audytu albo tabelach zadań. Przykłady 2023-10-26T10:00:00Z2023-10-27T14:35:10Z2023-11-01T09:15:00Z | |||
| Element prac rozwojowych DevelopmentItem | Unikalny identyfikator pojedynczej jednostki pracy, takiej jak funkcja, błąd lub zadanie, która przechodzi przez cykl wytwarzania oprogramowania. | ||
| Opis Element prac rozwojowych pełni funkcję głównego identyfikatora case i reprezentuje odrębną jednostkę pracy podlegającą śledzeniu. Łączy wszystkie działania dotyczące danego elementu, od wstępnego pomysłu i planowania po programowanie, testy i wdrożenie. W analizie process mining ten atrybut jest podstawą do odtworzenia pełnego przebiegu każdego elementu pracy. Umożliwia wizualizację przepływów procesu, obliczanie całkowitego czasu realizacji i wykrywanie wariantów procesu dla poszczególnych funkcji lub poprawek błędów. Każde zdarzenie w dzienniku musi być powiązane z elementem prac rozwojowych, aby można było utworzyć spójną mapę procesu. Dlaczego to ważne To podstawowy identyfikator, który łączy wszystkie powiązane działania programistyczne w jedną instancję procesu. Dzięki temu można analizować pełny cykl życia każdego elementu pracy. Skąd pobrać Zwykle jest to klucz główny z tabel zarządzających historyjkami, błędami lub zadaniami, takich jak tabele „rm_story”, „rm_bug” lub „task” w ServiceNow. Przykłady STRY0010015BUG0034092TASK0050118 | |||
| Nazwa działania ActivityName | Nazwa konkretnego zdarzenia w cyklu wytwarzania oprogramowania, na przykład „Rozpoczęcie programowania” lub „Przegląd kodu”. | ||
| Opis Ten atrybut zapisuje nazwę każdego etapu lub zadania wykonanego w cyklu wytwarzania oprogramowania. Działania te tworzą kolejne kroki procesu, od utworzenia elementu po wdrożenie. Analiza kolejności i częstotliwości działań to główne zastosowanie process mining. Umożliwia utworzenie mapy procesu, pomaga wykrywać wąskie gardła między etapami i wskazuje odstępstwa od procedur lub nieefektywne warianty procesu. Zdefiniowany zestaw działań obejmuje między innymi projektowanie, programowanie, testowanie i wdrażanie. Dlaczego to ważne Określa kroki na mapie procesu, umożliwiając analizę jego przebiegu, wykrywanie wąskich gardeł i identyfikowanie odstępstw od standardowego SDLC. Skąd pobrać Zwykle ustala się ją przez przypisanie zmian statusu, rekordów zdarzeń lub wpisów w ścieżce audytu do standardowej listy nazw działań. Na przykład zmianę pola „state” na „In Progress” można przypisać do działania „Rozpoczęcie programowania”. Przykłady Rozpoczęcie programowaniaZatwierdzenie koduZakończenie testów QAWdrożenie na produkcję | |||
| Data ostatniej aktualizacji danych LastDataUpdate | Znacznik czasu wskazujący, kiedy ostatnio odświeżono dane w tym dzienniku zdarzeń z systemu źródłowego. | ||
| Opis Ten atrybut zapisuje datę ostatniego pobrania lub aktualizacji zbioru danych z ServiceNow DevOps. Dotyczy całego zbioru, a nie pojedynczych zdarzeń. Znacznik czasu pozwala ocenić aktualność analizy. Informuje użytkowników, jak aktualne są wnioski dotyczące procesu, i pomaga zaplanować odświeżanie danych. Wyświetlenie tej informacji na dashboardach zapewnia kontekst dla wszystkich miar i wizualizacji, dzięki czemu decyzje można podejmować na podstawie aktualnych danych. Dlaczego to ważne Informuje o aktualności danych, dzięki czemu użytkownicy wiedzą, jak aktualna jest analiza procesu. Skąd pobrać Ten znacznik czasu jest generowany i dodawany podczas pobierania danych. Zapisuje moment wykonania tej operacji. Przykłady 2023-11-15T08:00:00Z | |||
| System źródłowy SourceSystem | Określa system, z którego pobrano dane. W tym przypadku jest to ServiceNow DevOps. | ||
| Opis Ten atrybut wskazuje system źródłowy danych o zdarzeniach. W tym procesie jego wartością będzie zawsze „ServiceNow DevOps”. Choć może się wydawać, że jest to stała wartość, jawne wskazanie systemu źródłowego ma znaczenie dla nadzoru nad danymi i środowisk, w których łączy się dane z wielu systemów, takich jak Jira lub Azure DevOps. Pozwala ustalić pochodzenie danych i ułatwia diagnozowanie problemów z ich jakością lub pobieraniem. Dlaczego to ważne Zapewnia możliwość śledzenia pochodzenia danych i pomaga zachować ich integralność, zwłaszcza podczas łączenia danych z wielu narzędzi programistycznych. Skąd pobrać To stała wartość, którą należy dodać podczas pobierania i przekształcania danych. Przykłady ServiceNow DevOps | |||
| Czas cyklu elementu rozwojowego DevelopmentItemCycleTime | Łączny czas od utworzenia elementu rozwojowego do jego ostatecznego zamknięcia lub wdrożenia. | ||
| Opis To obliczana miara całkowitego czasu realizacji pojedynczego elementu rozwojowego. Wyznacza się ją, obliczając różnicę między znacznikiem czasu pierwszego i ostatniego działania dla każdego case. Jest to podstawowy KPI dla całego procesu SDLC i bezpośrednio wspiera KPI „Średni czas cyklu SDLC”. Pokazuje ogólne tempo i sprawność procesu. Analiza tej miary w czasie i według różnych wymiarów, takich jak priorytet lub zespół, pozwala śledzić wpływ działań usprawniających proces. Dlaczego to ważne Pokazuje całkowity czas realizacji elementu pracy. To ważna miara ogólnej sprawności i tempa procesu. Skąd pobrać To nie jest pole w systemie źródłowym. W narzędziu process mining oblicza się tę wartość dla każdego CaseId, odejmując minimalną wartość StartTime od maksymalnej wartości StartTime. Przykłady 15 dni 4 godziny3 dni 12 godzin32 dni 8 godzin | |||
| Czy wymaga poprawek IsRework | Wartość logiczna wskazująca, czy działanie jest częścią pętli poprawek, na przykład gdy po testach praca wraca do etapu rozwoju. | ||
| Opis To atrybut pochodny, który wskazuje działania wykonane po powrocie procesu do wcześniejszego etapu. Na przykład działanie „Rozpoczęcie prac rozwojowych” zostanie oznaczone jako poprawka, jeśli dla tego samego elementu nastąpiło po działaniu „Zakończenie testów QA”. Ta flaga ułatwia mierzenie i wizualizację poprawek. Bezpośrednio wspiera dashboard „Analiza przepływu poprawek i odrzuceń” i służy do obliczania KPI „Odsetek poprawek po testach”. Analitycy mogą filtrować oznaczone zdarzenia i sprawdzać częstotliwość, przyczyny oraz wpływ poprawek na całkowity czas cyklu. Dlaczego to ważne Flaga ułatwia mierzenie i analizę poprawek, ocenę jakości procesu oraz wykrywanie przyczyn powtarzania pracy. Skąd pobrać Atrybut jest obliczany w narzędziu process mining na podstawie sekwencji działań dla każdego case. Pozwala wykryć cofnięcia do wcześniejszych etapów przepływu procesu. Przykłady truefalse | |||
| Dotknięty moduł lub komponent ModuleComponentAffected | Moduł oprogramowania, aplikacja lub komponent, którego dotyczy element rozwojowy. | ||
| Opis Ten atrybut przypisuje prace rozwojowe do części systemu, której dotyczą. Może to być konkretna mikrousługa, komponent interfejsu użytkownika lub aplikacja backendowa. Podział procesu według modułu lub komponentu pomaga wykrywać lokalne wąskie gardła. Dashboard „Analiza wąskich gardeł według komponentu” i KPI „Średni czas trwania etapu według komponentu” korzystają z tego atrybutu, aby wskazać, czy określone części bazy kodu regularnie wiążą się z dłuższymi cyklami rozwoju, większą liczbą poprawek lub częstszymi niepowodzeniami wdrożeń. Dzięki temu można skupić działania usprawniające tam, gdzie są najbardziej potrzebne. Dlaczego to ważne Pozwala podzielić analizę według aplikacji lub komponentu, co ułatwia wykrywanie wąskich gardeł i problemów z jakością dotyczących konkretnych części systemu. Skąd pobrać Często jest to pole niestandardowe lub odwołanie do Configuration Management Database (CMDB), które łączy element pracy z rekordem „cmdb_ci”. Więcej informacji można znaleźć w dokumentacji ServiceNow DevOps. Przykłady Usługa rozliczeniowaInterfejs użytkownika do uwierzytelnianiaBaza danych raportowaniaBrama API | |||
| Grupa przypisania AssignmentGroup | Zespół lub grupa odpowiedzialna za element rozwojowy w chwili wykonania działania. | ||
| Opis Ten atrybut wskazuje zespół, któremu przypisano element pracy, na przykład „Programiści frontend”, „Usługi backendowe” lub „Zespół QA”. W miarę postępu prac element często przechodzi między różnymi grupami przypisania. Śledzenie grup przypisania pomaga zrozumieć współpracę między zespołami i przekazywanie pracy. Ułatwia wykrywanie opóźnień systemowych pojawiających się przy przekazywaniu zadań z jednego zespołu do drugiego. Atrybut ten pozwala analizować wyniki i obciążenie zespołów oraz wskazywać te, które tworzą wąskie gardła w całym przepływie pracy. Dlaczego to ważne Wskazuje zespół odpowiedzialny za pracę, co pozwala analizować wyniki i obciążenie zespołów, równoważyć pracę oraz oceniać sprawność przekazywania zadań między zespołami. Skąd pobrać Informacja jest zapisana w polu „assignment_group”, które standardowo występuje w tabelach związanych z zadaniami w ServiceNow. Przykłady Inżynieria platformyZespół aplikacji mobilnejZapewnianie jakościDevOps | |||
| Priorytet DevelopmentItemPriority | Poziom priorytetu przypisany do elementu prac rozwojowych, na przykład „High”, „Medium” lub „Low”. | ||
| Opis Ten atrybut klasyfikuje elementy prac rozwojowych według pilności biznesowej. Poziomy priorytetu pomagają zespołom skupić się na najważniejszych zadaniach i często służą do zarządzania SLA oraz oczekiwaniami interesariuszy. W process mining priorytet jest ważnym wymiarem analizy porównawczej. Pozwala filtrować mapę procesu i sprawdzać, czy elementy o wysokim priorytecie przebiegają szybciej lub inną ścieżką. Jest niezbędny dla dashboardu i KPI „Czas dostarczenia funkcji o wysokim priorytecie”, które pomagają sprawdzić, czy najważniejsze elementy rzeczywiście są realizowane szybciej. Dlaczego to ważne Umożliwia filtrowanie i porównywanie procesów według poziomu priorytetu, co pomaga sprawdzić, czy elementy o wysokim priorytecie są realizowane szybciej i sprawniej. Skąd pobrać To standardowe pole w tabelach zadań w ServiceNow, często nazywane „priority”. Przykłady 1 - Krytyczny2 - Wysoki3 - Umiarkowany4 - Niski | |||
| Przypisany programista AssignedDeveloper | Imię i nazwisko lub identyfikator programisty albo użytkownika przypisanego do elementu prac rozwojowych w chwili wykonania działania. | ||
| Opis Ten atrybut wskazuje osobę odpowiedzialną za wykonanie konkretnego zadania lub działania. Jego wartość może się zmieniać, gdy element prac rozwojowych przechodzi między etapami i zespołami. Atrybut ten ma znaczenie przy analizie przydziału zasobów, obciążenia pracą i przekazywania zadań. Zasila dashboard „Obciążenie programistów i przekazywanie zadań” oraz KPI „Liczba działań na programistę”. Śledzenie zmian tego pola pozwala mierzyć czas przekazywania zadań i wykrywać problemy we współpracy między programistami oraz między zespołami programistycznymi i QA. Dlaczego to ważne Jest niezbędny do analiz dotyczących zasobów, w tym rozkładu obciążenia pracą, sprawności przekazywania zadań i wykrywania wzorców wyników charakterystycznych dla poszczególnych zespołów. Skąd pobrać Informacja ta jest zwykle przechowywana w polu „assigned_to” w tabelach zadań w ServiceNow. Przykłady David MillerAnna WilliamsJames Brown | |||
| Stan elementu rozwojowego DevelopmentItemState | Status lub stan elementu rozwojowego w chwili zdarzenia, na przykład „Otwarty”, „W toku” lub „Zamknięty”. | ||
| Opis Ten atrybut określa oficjalny status elementu rozwojowego w ServiceNow. Działania są wyznaczanymi krokami procesu, natomiast stan wskazuje formalny etap zapisany w workflow systemu. Stan często służy do wyznaczania działań. Można go wykorzystać do walidacji danych i tworzenia prostszych, ogólnych widoków procesu. Analiza czasu spędzonego w poszczególnych stanach pozwala spojrzeć na wąskie gardła z innej perspektywy niż analiza czasu między działaniami. Ułatwia też wykrywanie elementów, które utknęły w procesie lub zostały rozwiązane. Dlaczego to ważne Podaje oficjalny status elementu pracy w systemie. Często na jego podstawie wyznacza się działania, a także weryfikuje dane i analizuje status na wysokim poziomie. Skąd pobrać To standardowe pole w tabelach związanych z zadaniami w ServiceNow, zwykle o nazwie „state” lub „stage”. Przykłady OczekujeW trakcie realizacjiGotowe do testówZamknięte, zrealizowane | |||
| Typ elementu rozwojowego DevelopmentItemType | Klasyfikacja elementu pracy, na przykład „Funkcja”, „Błąd”, „Dług techniczny” lub „Zadanie”. | ||
| Opis Ten atrybut rozróżnia rodzaje pracy realizowanej w procesie SDLC. Na przykład naprawa krytycznego błędu może przebiegać inaczej i szybciej niż opracowanie nowej funkcji. Analiza procesu według typu elementu pracy pozwala lepiej zrozumieć jego wyniki. Ułatwia odpowiedź na pytania takie jak: „Czy błędy częściej wymagają poprawek niż nowe funkcje?” albo „Czy czas redukcji długu technicznego jest akceptowalny?”. Taki podział daje dokładniejszy obraz niż analiza procesu traktująca wszystkie prace jednakowo. Dlaczego to ważne Rozróżnia rodzaje pracy, takie jak funkcje i błędy, które mogą przebiegać różnymi ścieżkami procesu, mieć inne priorytety i przewidywany czas realizacji. Skąd pobrać Typ można ustalić na podstawie tabeli źródłowej rekordu (np. „rm_story” lub „rm_bug”) albo pola „type” w ogólnej tabeli zadań. Przykłady FunkcjaBłądZadanieSpike | |||
| Czas zakończenia EventEndTime | Dokładny znacznik czasu wskazujący, kiedy zakończono działanie. W przypadku zdarzeń chwilowych jest taki sam jak czas rozpoczęcia. | ||
| Opis Ten atrybut zawiera datę i godzinę zakończenia każdego działania w cyklu wytwarzania oprogramowania. Jest szczególnie przydatny w przypadku działań o mierzalnym czasie trwania, takich jak „Przegląd kodu” lub „Testy QA”. W process mining dostępność czasu rozpoczęcia i zakończenia pozwala dokładnie obliczyć czas realizacji działania i odróżnić go od czasu oczekiwania między działaniami. Dzięki temu można ustalić, czy opóźnienia wynikają z długotrwałych zadań, czy z oczekiwania na zasoby. W przypadku zdarzeń chwilowych, takich jak „Uruchomienie kompilacji”, czas zakończenia może być taki sam jak czas rozpoczęcia. Dlaczego to ważne Umożliwia dokładne obliczenie czasu realizacji działania i odróżnienie czasu pracy od czasu oczekiwania. Skąd pobrać Może być konieczne wyliczenie tej wartości. Można ją ustalić na podstawie czasu rozpoczęcia kolejnego działania albo pobrać z osobnego pola „end date”, jeśli jest dostępne w systemie źródłowym. Przykłady 2023-10-26T18:05:00Z2023-10-28T11:20:15Z2023-11-02T10:00:00Z | |||
| Identyfikator commita CommitId | Unikalny identyfikator commita kodu źródłowego powiązanego z pracami rozwojowymi. | ||
| Opis Ten atrybut bezpośrednio łączy element rozwojowy z konkretną zmianą kodu w repozytorium, na przykład Git. Jest zapisywany przy działaniu „Zatwierdzenie kodu”. W process mining identyfikator commita wzbogaca analizę, łącząc dane o procesie z danymi inżynieryjnymi. Analitycy mogą prześledzić problematyczne wdrożenie do konkretnej zmiany kodu albo zestawić miary złożoności kodu z czasem cyklu rozwoju. Pozwala to przeprowadzić dokładniejszą analizę przyczyn źródłowych na poziomie technicznym. Dlaczego to ważne Łączy zdarzenie procesu z konkretną zmianą kodu, umożliwiając dokładniejszą analizę przyczyn źródłowych przez zestawienie miar procesu ze szczegółami kodu. Skąd pobrać Dane są pobierane przez integracje ServiceNow DevOps z systemami zarządzania kodem źródłowym, takimi jak Git lub SVN. Znajdują się w powiązanych tabelach połączonych z elementem rozwojowym. Przykłady a1b2c3d4e5f6f0e9d8c7b6a59a8b7c6d5e4f | |||
| Planowana wersja wydania PlannedReleaseVersion | Docelowe wydanie lub wersja oprogramowania, w ramach których planuje się dostarczyć element rozwojowy. | ||
| Opis Ten atrybut łączy element rozwojowy z konkretnym planowanym wydaniem, na przykład „Wersja 2.3” lub „Wydanie z IV kwartału 2023 r.”. Jest wykorzystywany w zarządzaniu projektami i planowaniu wydań. W process mining atrybut ten jest niezbędny do działania dashboardu „Monitorowanie realizacji planu wydań”. Porównując rzeczywiste daty zakończenia z planowanymi datami wydań, zespoły mogą mierzyć zgodność z harmonogramem, wykrywać elementy zagrożone opóźnieniem i analizować przyczyny opóźnień wydań. Atrybut łączy szczegółowe dane o procesie rozwoju z celami biznesowymi. Dlaczego to ważne Łączy prace rozwojowe z konkretnymi wydaniami, umożliwiając analizę zgodności z harmonogramem i wpływu opóźnień procesu na terminy wydań. Skąd pobrać Informacja jest zwykle zapisana w polu „release” lub „planned_release”, które często odwołuje się do tabeli zarządzania wydaniami w ServiceNow. Więcej informacji można znaleźć w dokumentacji ServiceNow DevOps. Przykłady v3.4.1Wydanie z I kwartału 2024 r.Uruchomienie projektu Phoenix | |||
| Przyczyna poprawek ReworkReason | Klasyfikacja lub opis przyczyny, dla której element rozwojowy wymagał poprawek po testach. | ||
| Opis Gdy element nie przejdzie QA lub UAT, ten atrybut zapisuje przyczynę niepowodzenia. Może nią być określona kategoria błędu, błędna interpretacja wymagań lub problem ze środowiskiem. Informacja ta dostarcza kontekstu potrzebnego do analizy w dashboardzie „Analiza przepływu poprawek i odrzuceń”. Zamiast ograniczać się do stwierdzenia, że wykonano poprawki, analitycy mogą ustalić, dlaczego były potrzebne. Ułatwia to wdrażanie ukierunkowanych usprawnień, takich jak dokładniejsze definiowanie wymagań, lepsze testy jednostkowe lub stabilniejsze środowiska testowe, aby ograniczyć liczbę poprawek. Dlaczego to ważne Wyjaśnia, dlaczego potrzebne są poprawki, co pozwala ukierunkować usprawnienia procesu, podnieść jakość i ograniczyć powtarzanie pracy. Skąd pobrać Informacja może być zapisana w polu „close_notes” po nieudanym teście lub w dedykowanym polu niestandardowym „rework_reason”. Więcej informacji można znaleźć w dokumentacji ServiceNow DevOps. Przykłady Błędna interpretacja wymaganiaBłąd regresjiNieudany test wydajnościProblem z UI/UX | |||
| Status wdrożenia DeploymentStatus | Wynik działania wdrożeniowego, zwykle „Powodzenie” lub „Niepowodzenie”. | ||
| Opis Ten atrybut zapisuje wynik wdrożenia w konkretnym środowisku. Pomaga ocenić niezawodność i stabilność procesu wydawania oprogramowania. Atrybut ten jest niezbędny do działania dashboardu „Trendy powodzeń i niepowodzeń wdrożeń” oraz KPI „Odsetek nieudanych wdrożeń”. Analiza częstotliwości i trendów nieudanych wdrożeń pozwala organizacjom wykrywać problemy związane z testowaniem, infrastrukturą lub koordynacją wydań. Dzięki temu można skupić działania na poprawie jakości i niezawodności dostarczania oprogramowania. Dlaczego to ważne Bezpośrednio mierzy powodzenie działań wdrożeniowych. Jest niezbędny do obliczenia odsetka nieudanych wdrożeń i analizy stabilności wydań. Skąd pobrać Status jest zwykle zapisywany w zadaniach śledzących wdrożenia lub w rekordach wykonań potoków CI/CD zintegrowanych z ServiceNow DevOps. Przykłady PowodzenieNiepowodzenieZakończono z ostrzeżeniami | |||
Działania w cyklu życia oprogramowania
| Działanie | Opis | ||
|---|---|---|---|
| Nieudane wdrożenie | Oznacza niepowodzenie próby wdrożenia elementu prac rozwojowych na produkcję. ServiceNow DevOps rejestruje je bezpośrednio, gdy potok CI/CD zgłasza błąd. | ||
| Dlaczego to ważne To zdarzenie oznacza niepowodzenie procesu. Analiza jego częstotliwości i przyczyn pomaga zwiększyć stabilność wydań i ograniczyć liczbę nieudanych wdrożeń. Skąd pobrać Na podstawie pola „completion_status” rekordu Pipeline Execution [sn_devops_pipeline_execution]. Zdarzenie oznacza status „Failed” zarejestrowany w chwili zakończenia. Rejestrowanie Rejestrowane, gdy potok wdrożeniowy na produkcję zgłasza błąd. Typ zdarzenia explicit | |||
| Przegląd kodu | To działanie oznacza zakończenie przeglądu kodu przez innego członka zespołu, zwykle w ramach pull requestu lub merge requestu. Zdarzenie można zarejestrować bezpośrednio za pomocą integracji DevOps albo rozpoznać na podstawie zmian statusu powiązanych rekordów. | ||
| Dlaczego to ważne To ważny punkt kontroli jakości. Analiza czasu jego trwania pomaga wykryć wąskie gardła w procesie przeglądu, które często opóźniają SDLC. Skąd pobrać Zdarzenie można zarejestrować na podstawie statusu „Merged” lub „Completed” rekordu Pull Request w integracji Git z ServiceNow albo rozpoznać po zmianie statusu elementu prac rozwojowych na „Code Review Complete”. Rejestrowanie Rejestrowane po scaleniu Pull Request powiązanego z elementem pracy. Typ zdarzenia explicit | |||
| Rozpoczęcie programowania | To działanie oznacza moment, w którym programista rozpoczyna kodowanie lub wdrażanie elementu prac rozwojowych. Zwykle można je rozpoznać po zmianie statusu elementu na „In Progress”, „Development” lub „Coding”. | ||
| Dlaczego to ważne To ważny etap, który oznacza początek prac nad rozwiązaniem przynoszącym wartość. Jest niezbędny do pomiaru czasu realizacji prac programistycznych i cyklu przeglądu kodu. Skąd pobrać Na podstawie znacznika czasu zmiany pola „State” w rekordzie elementu prac rozwojowych, na przykład Story [rm_story], na „In Progress” lub równoważny status. Rejestrowanie Na podstawie znacznika czasu zmiany stanu na „In Progress” lub podobną wartość. Typ zdarzenia inferred | |||
| Utworzenie elementu prac rozwojowych | To działanie oznacza utworzenie w ServiceNow nowego elementu prac rozwojowych, na przykład historyjki, błędu lub epiku. Zdarzenie jest zwykle rejestrowane w chwili dodania nowego rekordu do odpowiedniej tabeli, takiej jak Story [rm_story]. | ||
| Dlaczego to ważne To główne zdarzenie rozpoczynające proces SDLC. Umożliwia pomiar całkowitego czasu realizacji od początku do końca oraz śledzenie początkowego napływu zgłoszeń. Skąd pobrać Zdarzenie jest rejestrowane w tabeli sys_audit lub sys_history_line po utworzeniu rekordu w tabeli związanej z pracami rozwojowymi, takiej jak Story [rm_story], Epic [rm_epic] lub Defect [rm_defect]. Znacznik czasu utworzenia znajduje się zwykle w samym rekordzie. Rejestrowanie Na podstawie znacznika czasu utworzenia rekordu elementu prac rozwojowych. Typ zdarzenia explicit | |||
| Wdrożenie na produkcję | To zdarzenie oznacza pomyślne zakończenie wdrożenia w środowisku produkcyjnym. ServiceNow DevOps rejestruje je bezpośrednio, gdy narzędzie CI/CD zgłasza pomyślne zakończenie potoku. | ||
| Dlaczego to ważne To główne zdarzenie oznaczające pomyślne zakończenie procesu SDLC. Zamyka strumień wartości i jest niezbędne do obliczenia całkowitego czasu realizacji. Skąd pobrać Na podstawie pola „completion_status” rekordu Pipeline Execution [sn_devops_pipeline_execution] lub powiązanego rekordu Stage Execution Run. Zdarzenie oznacza status „Success” zarejestrowany w chwili zakończenia. Rejestrowanie Rejestrowane po pomyślnym zakończeniu potoku wdrożeniowego na produkcję. Typ zdarzenia explicit | |||
| Zakończenie testów QA | Oznacza pomyślne zakończenie testów elementu prac rozwojowych przez zespół zapewnienia jakości. Zwykle można je rozpoznać, gdy stan elementu zmienia się z testowego na „Ready for UAT” lub „Done”. | ||
| Dlaczego to ważne Ten etap oznacza zakończenie ważnego punktu kontroli jakości. Jest warunkiem przejścia do kolejnych etapów, takich jak testy akceptacyjne użytkowników lub przygotowanie wydania. Skąd pobrać Na podstawie znacznika czasu zmiany stanu z testowego, na przykład „In QA”, na status po testach, na przykład „Ready for UAT” lub „Resolved”. Rejestrowanie Na podstawie znacznika czasu zmiany stanu z „Testing” na kolejny status. Typ zdarzenia inferred | |||
| Zatwierdzenie UAT | Oznacza formalne zatwierdzenie elementu prac rozwojowych przez przedstawicieli biznesu po testach akceptacyjnych użytkowników. Ten ważny etap można rozpoznać po zmianie statusu, na przykład z „In UAT” na „Ready for Release” lub „Approved”. | ||
| Dlaczego to ważne To ostatnia akceptacja biznesowa przed dopuszczeniem elementu do wdrożenia na produkcję. Jest to ważny punkt kontroli jakości i nadzoru. Skąd pobrać Na podstawie zmiany stanu rekordu elementu prac rozwojowych oznaczającej pomyślne zakończenie UAT. Zdarzenie jest zapisywane w historii aktywności elementu. Rejestrowanie Na podstawie zmiany stanu z „UAT” na status zatwierdzenia lub gotowości do wydania. Typ zdarzenia inferred | |||
| Anulowanie elementu prac rozwojowych | Oznacza zakończenie prac nad elementem przed ich ukończeniem. To alternatywny stan końcowy, zwykle rozpoznawany po zmianie stanu elementu na „Cancelled” lub „Closed Incomplete”. | ||
| Dlaczego to ważne Śledzenie anulowanych prac pomaga wykrywać zmarnowany wysiłek i rozumieć przyczyny zmian zakresu lub priorytetów. Daje pełniejszy obraz możliwych wyników procesu. Skąd pobrać Na podstawie znacznika czasu zmiany pola „State” w rekordzie elementu prac rozwojowych na końcowy status oznaczający nieukończenie, na przykład „Cancelled”. Rejestrowanie Na podstawie zmiany stanu na „Cancelled” lub równoważny status końcowy. Typ zdarzenia inferred | |||
| Przygotowanie do wydania | To działanie oznacza, że element prac rozwojowych przeszedł wszystkie punkty kontroli jakości i został przypisany do konkretnego wydania. Można je rozpoznać po powiązaniu elementu z rekordem Release lub zmianie jego statusu na „Ready for Deployment”. | ||
| Dlaczego to ważne Ten etap oznacza, że element jest gotowy pod względem technicznym i funkcjonalnym. Czas spędzony w tym stanie może wskazywać na oczekiwanie na zaplanowane okno wdrożeniowe. Skąd pobrać Na podstawie zmiany pola „State” na „Ready for Release” albo śledzenia momentu uzupełnienia lub aktualizacji pola „Release” w rekordzie elementu prac rozwojowych. Rejestrowanie Na podstawie zmiany statusu lub powiązania z rekordem Release. Typ zdarzenia inferred | |||
| Rozpoczęcie projektowania | Oznacza etap, na którym powstaje projekt techniczny lub architektura rozwiązania dla danego elementu prac rozwojowych. Zwykle można go rozpoznać po zmianie pola statusu lub stanu w rekordzie na wartość taką jak „Design” lub „Solutioning”. | ||
| Dlaczego to ważne Analiza czasu trwania etapu projektowania pomaga wykryć wąskie gardła w przekładaniu wymagań na rozwiązania i planowaniu prac, zanim rozpocznie się programowanie. Skąd pobrać Można je rozpoznać na podstawie zmian stanu rekordu elementu prac rozwojowych, na przykład Story [rm_story]. Należy sprawdzić, czy pole „State” lub niestandardowe pole „Stage” zmienia wartość na związaną z projektowaniem. Rejestrowanie Na podstawie zmiany statusu na „Design” lub podobny stan. Typ zdarzenia inferred | |||
| Rozpoczęcie testów QA | Oznacza początek formalnego etapu testów zapewnienia jakości. Zwykle można go rozpoznać po zmianie stanu elementu prac rozwojowych na wartość taką jak „In QA”, „Testing” lub „Ready for Test”. | ||
| Dlaczego to ważne To działanie oznacza przekazanie pracy z zespołu programistycznego do zespołu QA. Umożliwia pomiar czasu trwania testów i wykrywanie wąskich gardeł związanych z dostępnymi zasobami testowymi. Skąd pobrać Na podstawie znacznika czasu zmiany pola „State” w rekordzie elementu prac rozwojowych, na przykład Story lub Defect, na status związany z QA. Rejestrowanie Na podstawie znacznika czasu zmiany stanu na „Testing” lub równoważny status. Typ zdarzenia inferred | |||
| Rozpoczęcie UAT | Oznacza rozpoczęcie testów akceptacyjnych użytkowników, podczas których przedstawiciele biznesu sprawdzają działanie rozwiązania. Zdarzenie można rozpoznać po zmianie statusu na „UAT”, „In UAT” lub „User Acceptance Testing”. | ||
| Dlaczego to ważne Ten etap ma zasadnicze znaczenie dla sprawdzenia, czy opracowana funkcja spełnia wymagania biznesowe. Analiza czasu jego trwania może ujawnić problemy z zaangażowaniem użytkowników lub rozbieżności między rozwiązaniem a wymaganiami. Skąd pobrać Na podstawie zmiany stanu rekordu elementu prac rozwojowych. Wymaga to, aby model stanów klienta zawierał osobny status UAT. Rejestrowanie Na podstawie zmiany stanu na status „UAT”. Typ zdarzenia inferred | |||
| Rozpoczęcie wdrożenia na produkcję | To działanie oznacza rozpoczęcie potoku wdrożeniowego w środowisku produkcyjnym. ServiceNow DevOps rejestruje je bezpośrednio w chwili rozpoczęcia wykonywania etapu produkcyjnego potoku CI/CD. | ||
| Dlaczego to ważne Oznacza początek ostatniego, często najważniejszego etapu cyklu. Śledzenie tego zdarzenia pomaga analizować czas wdrożenia i wykrywać możliwości automatyzacji. Skąd pobrać Rejestrowane bezpośrednio w tabeli Stage Execution Run [sn_devops_stage_execution] po odfiltrowaniu etapów związanych ze środowiskiem produkcyjnym. Rejestrowanie Na podstawie czasu rozpoczęcia etapu wdrożenia na produkcję w rekordzie Pipeline Execution. Typ zdarzenia explicit | |||
| Uruchomienie kompilacji | To zdarzenie oznacza rozpoczęcie kompilacji w potoku CI/CD, często po zatwierdzeniu kodu. ServiceNow DevOps rejestruje je jako wykonanie potoku i łączy z elementami prac rozwojowych, które je zainicjowały. | ||
| Dlaczego to ważne To działanie łączy programowanie z automatycznymi testami lub wdrożeniem. Analiza czasu między zatwierdzeniem kodu a rozpoczęciem kompilacji może ujawnić opóźnienia w procesie CI/CD. Skąd pobrać Zdarzenie jest rejestrowane bezpośrednio w tabeli Pipeline Execution [sn_devops_pipeline_execution], gdy zintegrowane narzędzie CI/CD, na przykład Jenkins lub Azure DevOps, rozpoczyna kompilację. Rejestrowanie Na podstawie czasu rozpoczęcia rekordu w tabeli Pipeline Execution. Typ zdarzenia explicit | |||
| Wykrycie potrzeby poprawek | Oznacza wykrycie problemu podczas testów, który wymaga przekazania elementu z powrotem do zespołu programistycznego. Zdarzenie można rozpoznać po cofnięciu się w procesie, na przykład po zmianie statusu z „In QA” na „In Progress”. | ||
| Dlaczego to ważne Śledzenie poprawek jest niezbędne do zrozumienia problemów z jakością i nieefektywności procesu. Częste występowanie tego działania wskazuje na problemy w programowaniu lub niejasne wymagania. Skąd pobrać Na podstawie analizy historii pola „State” w tabeli sys_audit lub sys_history_line. Zmiana statusu z późniejszego etapu, na przykład „Testing”, na wcześniejszy, na przykład „In Progress”, oznacza konieczność wprowadzenia poprawek. Rejestrowanie Na podstawie cofnięcia statusu, na przykład „Testing” -> „In Progress”. Typ zdarzenia inferred | |||
| Zatwierdzenie kodu | Oznacza zatwierdzenie przez programistę kodu w repozytorium systemu kontroli wersji powiązanym z elementem prac rozwojowych. ServiceNow DevOps rejestruje te zdarzenia bezpośrednio zintegrowane z nim narzędzia SCM, takie jak Git lub GitHub. | ||
| Dlaczego to ważne Śledzenie zatwierdzeń kodu zapewnia szczegółowy obraz postępów prac i częstotliwości działań. Pomaga powiązać konkretne zmiany w kodzie z nadrzędnym elementem prac rozwojowych. Skąd pobrać Zdarzenie jest rejestrowane bezpośrednio w tabeli Commits [sn_devops_commit] w ServiceNow DevOps, zasilanej przez webhooki ze zintegrowanego systemu zarządzania kodem źródłowym. Rejestrowanie Rejestrowane po otrzymaniu webhooka o zatwierdzeniu kodu z narzędzia SCM. Typ zdarzenia explicit | |||
Instrukcje wyodrębniania danych
Kroki
- Poznaj model stanów: Zanim utworzą Państwo raporty, należy udokumentować wartości w polu stanu elementu programistycznego (np. w tabeli Story
[rm_story]lub Defect[rm_defect]), które odpowiadają wymaganym działaniom. Przykładowo stan „In Progress” może odpowiadać działaniu „Rozpoczęcie programowania”. - Przejdź do tworzenia raportu: Zaloguj się do instancji ServiceNow. W nawigatorze filtrów przejdź do
Reports > View / Runi kliknij przyciskCreate a report. - Utwórz raport zmian stanów: Utwórz pierwszy raport, aby rejestrować działania wynikające ze zmian statusu. Skonfiguruj go następująco:
- Nazwa raportu:
ProcessMind - State Change Events - Typ źródła:
Table - Tabela:
Audit [sys_audit] - Typ:
List - Konfiguracja kolumn: Dodaj
Document key,Created on,Table name,Field name,Old valueiNew value. - Filtr: Ustaw
Table namena jedną z tabel elementów programistycznych (np.Story), aField namena pole stanu (np.State). Dodaj filtr daty dla polaCreated on, aby wybrać wymagany okres.
- Nazwa raportu:
- Utwórz raport utworzenia elementu: Utwórz nowy raport rejestrujący początkowe utworzenie elementu.
- Nazwa raportu:
ProcessMind - Item Creation Events - Typ źródła:
Table - Tabela:
Story [rm_story](lub główna tabela elementów programistycznych) - Typ:
List - Konfiguracja kolumn: Dodaj kolumny wymaganych atrybutów, takich jak
Number,Created on,Assigned to,Priority,Stateitp. - Filtr: Zastosuj filtr daty dla pola
Created on.
- Nazwa raportu:
- Utwórz raport zatwierdzeń kodu: Przygotuj raport dotyczący zdarzeń DevOps związanych z zatwierdzeniami kodu.
- Nazwa raportu:
ProcessMind - Commit Events - Typ źródła:
Table - Tabela:
Commit [sn_devops_commit] - Typ:
List - Konfiguracja kolumn: Dodaj kolumny, takie jak
Work item,Commit time,Authoritp. - Filtr: Zastosuj filtr daty dla pola
Commit time.
- Nazwa raportu:
- Utwórz raporty kompilacji i wdrożeń: Powtórz poprzedni krok dla tabel
Build [sn_devops_build]iDeployment [sn_devops_deployment]. Zawierają one rekordy działańBuild Triggered,Deployment to Production Started,Deployed to ProductioniDeployment Failed. - Wyeksportuj wszystkie raporty: Uruchom każdy utworzony raport osobno. W każdym kliknij ikonę menu kontekstowego (trzy kropki lub strzałkę w dół) i wybierz
Export > CSValboExport > Excel. Zapisz wszystkie pliki. - Połącz i przekształć dane: Otwórz wyeksportowane pliki w arkuszu kalkulacyjnym lub użyj narzędzia do przygotowania danych. Ręcznie połącz dane ze wszystkich plików w jednym arkuszu. Utwórz wymagane kolumny dziennika zdarzeń (
DevelopmentItem,ActivityName,EventTimeitp.) i przyporządkuj do nich dane z kolumn źródłowych. Na przykład wartościDocument keyz raportu audytowego iNumberz raportu Story można przypisać do kolumnyDevelopmentItem. - Przypisz nazwy działań: Utwórz kolumnę
ActivityName, przekształcając dane źródłowe. W raporcie zmian stanów użyj udokumentowanego modelu stanów, aby przypisać wartościNew valuedo nazw działań (np. stan „Testing” przypisz do „Rozpoczęcie testów QA”). W pozostałych raportach przypisz stałą nazwę działania do każdego wiersza (np. wszystkim wierszom z eksportu zatwierdzeń kodu przypisz „Zatwierdzenie kodu”). - Zakończ i zapisz: Dodaj kolumny
SourceSystemiLastDataUpdateze stałymi wartościami dla wszystkich wierszy. Ujednolić format znaczników czasu. Zapisz połączony plik jako jeden plik CSV. Będzie gotowy do przesłania do ProcessMind.
Konfiguracja
- Wymagane tabele: Do wyodrębnienia danych potrzebne są przede wszystkim
Audit [sys_audit]dla zdarzeń wywnioskowanych, odpowiednie tabele elementów programistycznych (np.Story [rm_story],Defect [rm_defect]) oraz podstawowe tabele ServiceNow DevOps:Commit [sn_devops_commit],Build [sn_devops_build]iDeployment [sn_devops_deployment]. - Najważniejsze filtry: Najważniejszy jest zakres dat. Należy stosować go spójnie we wszystkich raportach, korzystając z pola znacznika czasu, takiego jak
Created on,Commit timelubStart time. W raporciesys_audittrzeba filtrować wedługTable name(np.rm_story) iField name(np.state), aby uwzględnić tylko istotne zmiany stanów. - Zalecany zakres dat: Warto wyodrębnić dane z okresu od 3 do 6 miesięcy. Pozwoli to uzyskać reprezentatywny zbiór bez nadmiernego obciążania systemu. W przypadku większych systemów można pobierać dane partiami, miesiąc po miesiącu.
- Definicja modelu stanów: Należy dobrze znać model stanów elementów pracy w organizacji. Jest to konieczne, aby poprawnie przypisać wartości z tabeli
sys_auditdo odpowiednich działań biznesowych, takich jak „Rozpoczęcie testów QA” lub „Zatwierdzenie UAT”. - Wymagania wstępne: Osoby wykonujące ekstrakcję potrzebują roli
report_userlub równoważnych uprawnień do tworzenia i uruchamiania raportów. Muszą też mieć dostęp do odczytu wymienionych wyżej tabel DevOps i tworzenia aplikacji. Wtyczka ServiceNow DevOps musi być zainstalowana i zintegrowana z używanymi narzędziami SCM i CI/CD.
Przykładowe zapytanie 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.
--- Kroki
- Wymagania wstępne: Należy zapewnić dostęp sieciowy do instancji ServiceNow oraz uzyskać dedykowane konto serwisowe z uprawnieniami do odczytu (dobrym punktem wyjścia są role
itilisn_devops.viewer). Konto powinno mieć dostęp do tabel takich jakrm_story,sys_auditi schematusn_devops_*. - Zainstaluj sterownik ODBC ServiceNow: Pobierz odpowiedni sterownik ODBC ServiceNow dla używanego systemu operacyjnego z portalu pomocy technicznej ServiceNow. Zainstaluj go zgodnie z instrukcjami.
- Skonfiguruj DSN: Utwórz nowy systemowy DSN (Data Source Name) na komputerze, na którym będą uruchamiane zapytania. W Administratorze źródeł danych ODBC dodaj sterownik ServiceNow i skonfiguruj go, podając adres URL instancji (np.
yourinstance.service-now.com), nazwę użytkownika i hasło. - Połącz się za pomocą klienta SQL: Użyj klienta SQL, takiego jak DBeaver lub Microsoft SQL Server Management Studio (za pośrednictwem serwera połączonego), albo języka skryptowego, np. Python z biblioteką ODBC, aby połączyć się z ServiceNow przy użyciu skonfigurowanego DSN.
- Ustal model stanów: Przed uruchomieniem zapytania należy ustalić dokładne wartości używane w polu
statetabel elementów programistycznych (np.rm_story,rm_defect). W zapytaniu podano typowe przykłady, takie jak „In Progress” i „In QA”. Należy zastąpić je wartościami używanymi w danej organizacji. - Dostosuj zapytanie SQL: Skopiuj podane zapytanie SQL do klienta. Zmień wartości zastępcze na początku zapytania, w tym datę początkową ekstrakcji oraz wartości stanów odpowiadające działaniom w cyklu życia oprogramowania.
- Uruchom zapytanie: Wykonaj całe zapytanie SQL w bazie ServiceNow za pośrednictwem połączenia ODBC. W zależności od zakresu dat i ilości danych może to potrwać dłużej.
- Sprawdź dane: Po zakończeniu zapytania sprawdź pobrany zbiór. Upewnij się, że zawiera różne działania, a kolumny
DevelopmentItem,ActivityNameiEventTimesą wypełnione zgodnie z oczekiwaniami. - Wyeksportuj do CSV: Wyeksportuj cały wynik do pliku CSV. Zapisz go w kodowaniu UTF-8 i sprawdź, czy nagłówki kolumn odpowiadają nazwom atrybutów wymaganym przez ProcessMind, np.
DevelopmentItem,ActivityName,EventTime. - Przygotuj plik do przesłania: Upewnij się, że na końcu pliku CSV nie ma pustych wierszy, a format dat w polach
EventTimeiLastDataUpdatejest spójny i obsługiwany przez ProcessMind (np.YYYY-MM-DD HH:MM:SS).
Konfiguracja
- Wymagania wstępne: Dostęp do instancji ServiceNow z włączonym modułem DevOps. Potrzebne jest dedykowane konto użytkownika z uprawnieniami do odczytu wymaganych tabel. Na komputerze klienckim musi być zainstalowany i skonfigurowany sterownik ODBC ServiceNow.
- Konfiguracja sterownika ODBC: Do połączenia potrzebne są adres URL instancji, nazwa użytkownika oraz hasło lub token OAuth. Przed uruchomieniem złożonych zapytań należy sprawdzić połączenie DSN.
- Filtrowanie według zakresu dat: W zapytaniu znajduje się wartość zastępcza
s.sys_created_on >= '2023-01-01', która ogranicza ilość pobieranych danych. Zaleca się wyodrębnianie danych z określonego okresu, np. ostatnich 6–12 miesięcy, aby czas wykonywania zapytań był możliwy do zaakceptowania. - Dostosowanie modelu stanów: Dokładność zdarzeń wywnioskowanych na podstawie zapytania zależy od modelu stanów. Należy zastąpić przykładowe wartości (np.
[Your 'In Progress' State Value],[Your 'In QA' State Value]) dokładnymi wartościami skonfigurowanymi w ServiceNow. Wielkość liter ma znaczenie. - Tabele elementów pracy: Zapytanie przygotowano dla tabeli Story (
rm_story). Jeśli organizacja korzysta również z Defects (rm_defect), Enhancements (rm_enhancement) lub innych typów zadań, należy dodać je do początkowego wyrażenia Common Table Expression (CTE)DevItemsza pomocąUNION ALL. - Wydajność: Bezpośrednie zapytania do produkcyjnej instancji ServiceNow mogą wpływać na jej wydajność. Duże ekstrakcje warto uruchamiać poza godzinami szczytu. W przypadku bardzo dużych zbiorów należy rozważyć ekstrakcję przyrostową na podstawie pola
sys_updated_on.
Przykładowe zapytanie 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 *** Gotowi do rozpoczęcia?
Zacznij usprawniać cykl życia oprogramowania już dziś. Skorzystaj z tego szablonu danych, aby wykryć ukryte nieefektywności i stale doskonalić proces.
Nie zwlekaj, usprawnij cykl życia oprogramowania już dziś
Wskaż nieefektywności, aby skrócić cykl SDLC o 30% lub więcej.
Karta kredytowa nie jest wymagana. Zacznij optymalizować już dziś.