Warstwa inteligencji oprogramowania pomiędzy Twoim kodem

Inteligencja oprogramowania: brakująca warstwa między kodem a decyzjami

Każda duża organizacja działa na oprogramowaniu, którego nie do końca rozumie. Instytucja finansowa, która przetwarza transakcje w tym samym jądrze COBOL od czterdziestu lat. Producent, którego system planowania produkcji gromadził logikę z piętnastu wersji i trzech pokoleń programistów. Firma ubezpieczeniowa, której system zarządzania polisami zawiera reguły biznesowe, które nie istnieją nigdzie poza zachowaniem samego kodu. Te organizacje nie są ignorantami, ich zespoły są wykwalifikowane i doświadczone. Jednak oprogramowanie przerosło możliwości jakiejkolwiek jednostki, a dokumentacja przestała nadążać za kodem na długo, zanim ktokolwiek to zauważył.

Inteligencja oprogramowania to dyscyplina i technologia, która wypełnia tę lukę. To zdolność do systematycznej analizy systemów oprogramowania, ich struktury, zależności, zachowania, jakości i ryzyka, a następnie przekształcania tej analizy w praktyczną wiedzę, z której mogą korzystać zespoły inżynierskie, architekci i decydenci biznesowi. Podczas gdy tradycyjne narzędzia programistyczne podpowiadają, co kod robi podczas działania, inteligencja oprogramowania informuje, co kod zawiera, jak jest zorganizowany, co z czym się łączy i co ulegnie awarii po wprowadzeniu zmian. To różnica między obsługą systemu a jego zrozumieniem.

Przeszukaj każdą posiadaną przez siebie strukturę danych

SMART TS XL mapuje wszystkie relacje danych, dzięki czemu Twój zespół może wykryć nieprawidłowości w jakości zanim dotrą one do użytkowników.

Ucz się więcej

Czym jest inteligencja oprogramowania?

Inteligencja oprogramowania to systematyczna analiza systemów oprogramowania w celu uzyskania informacji strukturalnych, behawioralnych i jakościowych, które wspomagają podejmowanie decyzji inżynieryjnych, zarządzanie ryzykiem i planowanie strategiczne. Łączy ona statyczną analizę kodu, mapowanie zależności, analizę wpływu i wizualizację, aby uczynić wewnętrzną strukturę systemu oprogramowania czytelną dla zespołów, narzędzi i procesów organizacyjnych, które zależą od dokładnej wiedzy o zawartości systemu.

Termin ten ma różne znaczenia w różnych kontekstach. W narzędziach Business Intelligence „inteligencja oprogramowania” czasami odnosi się do analizy sposobu, w jaki produkty oprogramowania są wykorzystywane przez klientów, wskaźników adopcji funkcji, przepływów użytkowników i wskaźników błędów. W kontekście sztucznej inteligencji i uczenia maszynowego „inteligentne oprogramowanie” odnosi się do systemów, które autonomicznie dostosowują swoje zachowanie. W kontekście informatyki korporacyjnej i inżynierii oprogramowania, o którym mowa w tym artykule, inteligencja oprogramowania odnosi się w szczególności do możliwości analitycznych, które zapewniają zespołom programistycznym dogłębne, zautomatyzowane zrozumienie ich baz kodu, programów, zależności, przepływów danych, logiki biznesowej i krajobrazu ryzyka związanego ze zmianami.

Inteligencja oprogramowania kontra inteligencja biznesowa

Business Intelligence analizuje dane biznesowe, transakcje, klientów, przychody i operacje, aby uzyskać wgląd w działalność firmy. Software Intelligence analizuje kod oprogramowania, programy, moduły, zależności, schematy i przepływy pracy, aby uzyskać wgląd w zawartość i zachowanie systemu oprogramowania.

WymiaryWywiad GospodarczyInteligencja oprogramowania
Co analizujeDane biznesowe (transakcje, zdarzenia, metryki)Struktura oprogramowania (kod, zależności, schematy)
Wyjście podstawowePanele, raporty, wskaźniki KPIMapy zależności, analizy wpływu, metryki kodu
Kto tego używaAnalitycy biznesowi, kadra zarządzającaInżynierowie oprogramowania, architekci, zarządzanie IT
Odpowiedź na kluczowe pytanieCo robi firma?Co zawiera oprogramowanie i jak się je podłącza?
Kiedy działaNa bieżąco z danymi biznesowymiNa podstawie kodu źródłowego, na żądanie lub w sposób ciągły
Wartość przedsiębiorstwaWidoczność operacyjnaZarządzanie ryzykiem inżynieryjnym i kontrola zmian

Inteligencja oprogramowania kontra inteligentne oprogramowanie

Te dwa terminy są często mylone, ponieważ mają podobne słownictwo. Inteligencja oprogramowania to zdolność zastosowana do istniejącego oprogramowania: zdolność do analizowania i rozumienia tego, co już istnieje. Inteligentne oprogramowanie to cecha nowego oprogramowania: systemów, które wykorzystują sztuczną inteligencję, uczenie maszynowe lub silniki reguł do adaptacyjnego podejmowania decyzji.

Platforma inteligencji programowej, taka jak SMART TS XL Analizuje oprogramowanie korporacyjne, w tym starsze programy COBOL, nowoczesne usługi Java i wszystko pomiędzy, aby wygenerować wiedzę strukturalną o tych systemach. Nie czyni tych systemów inteligentnymi w rozumieniu sztucznej inteligencji. Sprawia, że ​​stają się czytelne: widoczne, podatne na zapytania i bezpieczne do zmiany.

Komponenty platformy inteligencji oprogramowania

Kompleksowa platforma analizy oprogramowania oferuje możliwości w pięciu wymiarach analitycznych. Łącznie wymiary te zapewniają zespołom przedsiębiorstw kompleksowy wgląd w posiadane oprogramowanie, którego nie jest w stanie zapewnić ani dokumentacja, ani wiedza programistów, ani tradycyjny monitoring.

Statyczna analiza kodu

Statyczna analiza kodu bada kod źródłowy bez jego uruchamiania, identyfikując problemy z jakością, luki w zabezpieczeniach, błędy w kodzie i wzorce strukturalne. W przeciwieństwie do analizy dynamicznej, która wymaga działającego systemu, analiza statyczna działa na samym kodzie źródłowym, co oznacza, że ​​może analizować kod działający na komputerach mainframe, kod w językach bez nowoczesnych narzędzi uruchomieniowych oraz kod w wielu językach jednocześnie.

W kontekście inteligencji oprogramowania statyczna analiza kodu generuje trzy typy wyników: metryki jakości kodu (złożoność, duplikacja, wskaźnik łatwości utrzymania), ustalenia dotyczące bezpieczeństwa (wzorce podatności, niebezpieczne praktyki kodowania, ujawnione dane uwierzytelniające) oraz dane strukturalne (definicje funkcji, deklaracje zmiennych, granice modułów), które są przekazywane do warstw mapowania zależności i analizy wpływu.

Mapowanie zależności

Mapowanie zależności śledzi relacje między każdym komponentem systemu oprogramowania: które programy wywołują które inne, które moduły importują które biblioteki, które funkcje uzyskują dostęp do których tabel bazy danych, które zbiory danych przepływają z których programów do których użytkowników. Mapa zależności to strukturalny model systemu, graf, który pozwala odpowiedzieć na pytanie: „jeśli zmienię to, co jeszcze ulegnie zmianie?”.

W dużych systemach korporacyjnych, szczególnie tych obejmujących wiele języków i platform, mapowanie zależności musi obsługiwać relacje wykraczające poza granice językowe: program COBOL zapisuje dane do tabeli DB2, z której usługa Java odczytuje dane, a potok Pythona je transformuje. Żadne narzędzie do analizy zależności w jednym języku nie jest w stanie dostrzec tego wielojęzykowego łańcucha; pełne pokrycie zapewnia jedynie platforma, która rozumie wszystkie języki i może połączyć ich modele w ujednolicony graf.

Analiza wpływu

Analiza wpływu wykorzystuje mapę zależności, aby odpowiedzieć na konkretne pytanie dotyczące proponowanej zmiany: które komponenty zostaną nią objęte? Zaczynając od zmienionego komponentu i przechodząc przez graf zależności, analiza wpływu enumeruje każdy moduł, funkcję, program i zbiór danych, które zależą od zmienionego elementu, bezpośrednio lub pośrednio. Wyliczony zakres wpływu staje się planem testów, klasyfikacją ryzyka zmiany oraz podstawą dowodową do doradczego przeglądu zmian.

Bez analizy wpływu, zakres zmiany jest szacowany przez programistę, który ją wprowadził. W przypadku analizy wpływu, zakres jest określany na podstawie rzeczywistej struktury kodu. W dużych systemach te dwa oszacowania znacznie się różnią, a różnica polega na tym, skąd pochodzą incydenty produkcyjne.

Wyszukiwanie korporacyjne w całym kodzie

Przeszukiwanie korporacyjne w kontekście inteligencji oprogramowania oznacza możliwość znalezienia dowolnego elementu systemu oprogramowania, dowolnej funkcji, dowolnej zmiennej, dowolnej definicji pola, dowolnego polecenia SQL, dowolnej nazwy programu w całej bazie kodu w ciągu kilku sekund, niezależnie od języka, w którym został napisany. Podczas gdy ogólne przeszukiwanie IDE obejmuje jeden projekt w jednym języku, przeszukiwanie kodu korporacyjnego obejmuje cały system we wszystkich językach jednocześnie.

Wyszukiwanie korporacyjne zmienia sposób pracy z dużymi, nieznanymi bazami kodu. Programista dołączający do zespołu, który obsługuje 200 programów COBOL, 50 strumieni zadań JCL i warstwę usług Java, może znaleźć to, czego potrzebuje, w zapytaniu wyszukiwania, zamiast poświęcać wiele dni na ręczne czytanie kodu. Architekt planujący zmianę schematu bazy danych może znaleźć każde polecenie SQL odwołujące się do konkretnej kolumny we wszystkich programach w ciągu kilku sekund, zamiast korzystać z międzyrepozytoryjnego wyszukiwania grep, które może pomijać dynamicznie konstruowane zapytania.

Wizualizacja kodu

Wizualizacja kodu przekształca dane strukturalne generowane przez analizę statyczną i mapowanie zależności w diagramy, które wizualnie przedstawiają architekturę systemu, relacje zależności i strukturę złożoności. Diagramy, których ręczne utrzymanie zajęłoby tygodnie, są generowane automatycznie z kodu, co zapewnia ich aktualność w miarę rozwoju systemu.

Wizualizacja służy różnym odbiorcom na różne sposoby: programiści używają grafów wywołań i diagramów przepływu danych, aby zrozumieć nieznany kod; architekci korzystają z diagramów komponentów i map zależności, aby planować zmiany strukturalne; interesariusze biznesowi korzystają z uproszczonych schematów blokowych, aby zrozumieć zakres systemu podczas planowania lub przeglądu zgodności; a zespoły operacyjne używają diagramów sekwencji, aby śledzić przepływy żądań podczas diagnozowania problemów z wydajnością.

Inteligencja oprogramowania w praktyce: przypadki użycia w przedsiębiorstwach

Modernizacja systemów legacy

Najbardziej wymagającym zastosowaniem inteligencji oprogramowania jest modernizacja starszych systemów, czyli migracja aplikacji COBOL, PL/I lub RPG ze środowisk mainframe do nowoczesnych architektur chmurowych. Podstawowym wyzwaniem nie jest technologia migracji, lecz luka w wiedzy. Starsze systemy gromadzą dekady nieudokumentowanych zmian, niejawne zależności tworzone za pomocą współdzielonych danych, a nie jawnych interfejsów, oraz logikę biznesową, która istnieje jedynie w działaniu kodu.

Inteligencja oprogramowania systematycznie wypełnia tę lukę przed rozpoczęciem jakichkolwiek prac migracyjnych. Inwentaryzacja programu identyfikuje każdy komponent w zakresie. Mapa zależności ujawnia, jak są one ze sobą powiązane. Analiza wpływu pokazuje, na co wpłynie każda proponowana zmiana. Ekstrakcja logiki biznesowej dokumentuje faktyczne działanie każdego programu, dostarczając specyfikacji, zgodnie z którą migrowany system musi zostać zweryfikowany. Bez tej strukturalnej podstawy, migracje odkrywają swoje najkosztowniejsze niespodzianki na etapie testowania lub produkcji, a nie planowania.

Zarządzanie zmianą i ocena ryzyka

W każdym dużym środowisku programistycznym, zarządzanie zmianą wymaga znajomości zakresu proponowanych zmian przed ich autoryzacją. Inteligencja oprogramowania dostarcza strukturalnych dowodów, których rady doradcze ds. zmian potrzebują, aby podejmować decyzje autoryzacyjne w oparciu o rzeczywistą strukturę systemu, a nie szacunki deweloperów.

Przed zatwierdzeniem zmiany, analiza wpływu identyfikuje każdy zależny komponent wymagający walidacji. Metryki złożoności wskazują, czy zmieniony komponent jest prosty, czy obarczony wysokim ryzykiem. Wizualizacja zależności pokazuje, jak zmieniony komponent łączy się z resztą systemu. Razem tworzą one opartą na dowodach ocenę wpływu zmiany, która zastępuje nieformalną rozmowę „co Twoim zdaniem to zepsuje?”.

Należyta staranność techniczna

Kiedy organizacje oceniają systemy oprogramowania pod kątem przejęcia, partnerstwa lub audytu zgodności, techniczna analiza due diligence wymaga obiektywnej oceny bazy kodu: jej jakości, łatwości utrzymania, poziomu bezpieczeństwa, długu technicznego i złożoności. Platformy analizy oprogramowania automatyzują tę ocenę na dużą skalę, generując w ciągu kilku godzin analizę strukturalną, której ręczny przegląd zająłby tygodnie.

Techniczna analiza due diligence z wykorzystaniem analizy oprogramowania obejmuje: rozkład metryk jakości kodu w bazie kodu, gęstość i wagę luk w zabezpieczeniach, wskaźnik zadłużenia technicznego i szacunki kosztów napraw, kondycję zależności, w tym przestarzałe lub porzucone biblioteki, metryki sprzężenia i spójności architektonicznej oraz odsetek martwego kodu. Metryki te przekładają się bezpośrednio na klasyfikacje ryzyka i szacunki kosztów napraw, które wpływają na decyzje biznesowe.

Wdrażanie programistów i transfer wiedzy

Każda organizacja zarządzająca dużymi systemami oprogramowania stoi przed ciągłym wyzwaniem transferu wiedzy: doświadczeni programiści przechodzą na emeryturę lub odchodzą, a nowi programiści muszą rozumieć systemy, które nie zostały zaprojektowane z myślą o zrozumieniu przez osoby, które nie były z nimi od początku. Platformy oparte na inteligencji oprogramowania zapewniają dokumentację strukturalną i funkcje wyszukiwania, które ułatwiają ten transfer.

Nowy programista pracujący nad nieznanym programem COBOL może skorzystać z wyszukiwarki korporacyjnej, aby znaleźć wszystkie miejsca, w których używane jest dane pole, użyć mapy zależności, aby zrozumieć, które programy wchodzą w interakcję z programem, który modyfikuje, oraz użyć wizualizacji, aby zobaczyć miejsce programu w szerszej architekturze systemu – a wszystko to bez konieczności kontaktu z kolegą, który posiada tę wiedzę. Jak opisano w kontekście transferu wiedzy COBOL SME , wiedza ukryta posiadana przez odchodzących programistów jest często najważniejszym i najmniej udokumentowanym zasobem w systemie.

Ciągłe monitorowanie jakości

Ciągłe stosowanie inteligencji oprogramowania, a nie tylko na żądanie przed konkretną zmianą, umożliwia proaktywne zarządzanie jakością: śledzenie zmian wskaźników jakości w czasie, wykrywanie sytuacji, w których złożoność rośnie szybciej, niż zespół jest w stanie sobie z nią poradzić, identyfikowanie plików, które gromadzą nieproporcjonalnie wysokie ryzyko zmiany, oraz powiadamianie o nowych lukach w zabezpieczeniach kodu, zanim trafi on do produkcji.

W procesach CI/CD ciągła inteligencja oprogramowania zapewnia bramki jakości, które wymuszają standardy strukturalne w momencie rozwoju: nowa funkcja przekraczająca próg złożoności cyklomatycznej kończy się niepowodzeniem kompilacji; nowe wyniki analizy statycznej o krytycznym poziomie istotności blokują scalanie; zmiana wprowadzająca zależność cykliczną w architekturze uruchamia przegląd. Przenosi to egzekwowanie jakości z audytów po wydaniu na informacje zwrotne w trakcie rozwoju, zmniejszając koszty rozwiązywania problemów jakościowych poprzez ich wykrywanie w momencie, gdy ich naprawa jest najtańsza.

Inteligencja oprogramowania dla różnych odbiorców

Wartość inteligencji oprogramowania nie jest jednakowa dla wszystkich ról, różne grupy odbiorców czerpią różne rodzaje wartości z tej samej, podstawowej analizy strukturalnej.

RolaPierwsze użycieKluczowe wyjście
Deweloperzy oprogramowaniaZrozumienie nieznanego kodu, śledzenie zależnościWykresy wywołań, odwołania krzyżowe, wyszukiwanie kodu
Architektów oprogramowaniaPlanowanie zmian, ocena ryzyka strukturalnegoMapy zależności, analizy wpływu, mapy cieplne złożoności
Zarząd branży informatycznejAutoryzacja zmian, nadzór nad ryzykiemRaporty dotyczące zakresu oddziaływania, metryki jakości, wskaźniki zadłużenia technicznego
Zespoły bezpieczeństwaOcena podatności, zgodnośćWyniki analizy statycznej bezpieczeństwa, dane dotyczące podatności na zależności
Analitycy biznesowiZrozumienie zakresu systemu, dowody zgodnościUproszczone diagramy, dokumentacja przepływu procesów
Fuzje i przejęcia oraz należyta starannośćOcena jakości bazy koduWskaźniki jakości, wskaźniki zadłużenia, raporty klasyfikacji ryzyka

W jaki sposób SMART TS XL Dostarcza inteligencję oprogramowania

SMART TS XL to platforma Software Intelligence® firmy IN-COM, stworzona specjalnie dla przedsiębiorstw, które obsługują systemy oprogramowania obejmujące wiele języków, platform i generacji technologii. Podczas gdy większość narzędzi do analizy oprogramowania działa w ramach jednego języka, SMART TS XL buduje ujednolicony model inteligencji obejmujący jednocześnie COBOL, JCL, Java, Python, .NET, RPG, PL/I, SQL i inne.

Funkcja statycznej analizy kodu dostarcza metryk jakości, ustaleń dotyczących bezpieczeństwa oraz danych strukturalnych dla każdego komponentu w środowisku. Mapowanie zależności aplikacji tworzy międzyjęzykowy graf zależności, który pokazuje, jak każdy komponent jest połączony z pozostałymi. Funkcja analizy wpływu umożliwia tworzenie zapytań do tego grafu: na podstawie każdej proponowanej zmiany można wyliczyć pełny zestaw komponentów, których to dotyczy. Funkcja rozszerzenia JCL rozwiązuje problem języka sterowania zadaniami mainframe, w tym symbolicznego podstawiania parametrów w skatalogowanych procedurach, aby pokazać rzeczywiste programy i zestawy danych zaangażowane w każde zadanie wsadowe. Funkcja wyszukiwania korporacyjnego sprawia, że ​​ujednolicony model jest łatwy do znalezienia: można przeszukać dowolny element oprogramowania we wszystkich językach w ciągu kilku sekund. Funkcja wizualizacji kodu przekształca model zależności w nawigowalne diagramy, które komunikują strukturę systemu dowolnej grupie odbiorców.

Platforma została zaprojektowana dla środowisk, w których zasoby oprogramowania rozrosły się do skali i złożoności przekraczającej możliwości zrozumienia przez każdego użytkownika, a gdzie systematyczna, zautomatyzowana i zawsze aktualna analiza strukturalna ma największą wartość. Dla organizacji planujących modernizację starszego oprogramowania, zarządzających zmianami w złożonych systemach, przeprowadzających techniczną analizę due diligence lub budujących infrastrukturę wiedzy programistów, która umożliwia szybkie i niezawodne projektowanie, SMART TS XL zapewnia warstwę inteligencji oprogramowania, która to umożliwia.

Dlaczego inteligencja oprogramowania jest niezbędna dla IT przedsiębiorstw

Ilość oprogramowania działającego w przedsiębiorstwach wzrosła do takiej skali, że nieformalne podejście do zarządzania nim, dokumentacji, wiedzy programistów i ręcznego przeglądu kodu jest strukturalnie niewystarczające. Dokumentacja jest zawsze niekompletna i zazwyczaj nieaktualna. Wiedza programistów jest rozproszona, niespójna i ustępuje osobom, które ją posiadają. Ręczny przegląd kodu jest zbyt powolny i zbyt zależny od dotychczasowej znajomości systemu przez recenzenta.

Inteligencja oprogramowania to systematyczna odpowiedź na tę strukturalną nieadekwatność. Nie zastępuje ona wiedzy programistów, lecz ją rozszerza i utrwala, udostępniając ją każdemu członkowi zespołu, a nie skupiając jej w poszczególnych osobach. Nie zastępuje dokumentacji, lecz generuje dokumentację strukturalną bezpośrednio z kodu, zapewniając jej aktualność w miarę jego rozwoju. Nie zastępuje również przeglądu kodu, lecz zapewnia zautomatyzowaną analizę, która dostarcza recenzentom kontekst strukturalny niezbędny do precyzyjnej oceny zmian.

Organizacje inwestujące w infrastrukturę inteligencji oprogramowania zyskują na wartości: każda zmiana jest wprowadzana w oparciu o dokładny model strukturalny, a nie szacunki i założenia. Każda migracja jest planowana z pełną wiedzą, a nie odkrywana fragmentarycznie. Każdy nowy programista wdraża się w oparciu o łatwą w nawigacji i wyszukiwaniu reprezentację systemu, a nie o wiedzę gromadzoną latami. Jakość decyzji inżynieryjnych poprawia się, ponieważ poprawiają się informacje, na których te decyzje się opierają. To właśnie jest wartość propozycji inteligencji oprogramowania i dlatego organizacje posiadające złożone zasoby oprogramowania traktują ją jako infrastrukturę, a nie jako narzędzie.