Menu

  1. Blog
  2. Software House
  3. Audyt techniczny systemu informatycznego - co sprawdzić przed dalszym rozwojem lub przejęciem aplikacji?
26 września 2026

Audyt techniczny systemu informatycznego - co sprawdzić przed dalszym rozwojem lub przejęciem aplikacji?

W treści wpisu znajdziesz:

  1. Co to jest audyt techniczny systemu informatycznego?
  2. Audyt techniczny a audyt kodu źródłowego – czy to to samo?
  3. Audyt techniczny to nie audyt SEO, UX ani audyt sklepu internetowego
  4. Audyt techniczny a analiza przedwdrożeniowa
  5. Kiedy warto przeprowadzić audyt techniczny systemu?
  6. Jakich odpowiedzi powinien dostarczyć dobry audyt techniczny?
  7. Co powinien obejmować audyt techniczny systemu informatycznego?
  8. Audyt techniczny nie powinien prowadzić do niepotrzebnego komplikowania systemu
  9. Dlaczego automatyczny audyt kodu nie wystarczy?
  10. Czy AI może wykonać audyt techniczny systemu?
  11. Jak powiązać problemy techniczne z biznesem?
  12. Mapa decyzji po audycie: teraz, następnie, obserwować, pozostawić
  13. Audyt przed przejęciem projektu po innym wykonawcy
  14. Co szczególnie sprawdzić przed przejęciem systemu?
  15. Audyt przed dużą rozbudową systemu
  16. Audyt techniczny przed refaktoryzacją
  17. Audyt przed modernizacją starszego systemu (legacy system)
  18. Czy audyt techniczny może wykazać, że nic dużego nie trzeba robić?
  19. Jak powinien wyglądać proces audytu technicznego?
  20. Co powinien zawierać raport z audytu technicznego?
  21. Czego nie powinien zawierać dobry raport?
  22. Czy audyt musi obejmować cały system?
  23. Czy można wykonać audyt bez dostępu do kodu?
  24. Czy audyt powinien wykonywać przyszły software house?
  25. Audyt techniczny systemu WordPress lub WooCommerce
  26. Audyt techniczny dedykowanego systemu informatycznego
  27. Audyt systemu B2B
  28. Jak Webtom.pl podchodzi do audytu technicznego istniejących systemów?
  29. Audyt techniczny powinien kończyć się decyzją, nie raportem
  30. FAQ – audyt techniczny systemu informatycznego

System działa, ale firma planuje jego dużą rozbudowę. Dotychczasowy wykonawca ma zostać zastąpiony innym software house’em. Rozwój systemu zajmuje coraz więcej czasu. Aktualizacja technologii jest odkładana od kilku lat. Nikt nie potrafi jednoznacznie powiedzieć, które elementy aplikacji można bezpiecznie zmieniać.

W takich sytuacjach problemem często nie jest brak kolejnego pomysłu na rozwój systemu. Problemem jest brak wiedzy o jego rzeczywistym stanie technicznym.

Właśnie temu służy audyt techniczny systemu informatycznego.

Nie powinien być jedynie automatycznym skanem kodu ani listą kilkuset uwag dotyczących standardów programistycznych. Jego zadaniem jest ustalenie, czy istniejący system można bezpiecznie utrzymywać i dalej rozwijać, gdzie znajdują się największe ryzyka oraz które problemy rzeczywiście wymagają działania.

W zależności od projektu audyt może obejmować kod źródłowy, architekturę, technologie, bazę danych, integracje, bezpieczeństwo, testy, infrastrukturę, proces wdrażania zmian, monitoring i dokumentację.

Najważniejszy jest jednak rezultat.

Po audycie firma powinna wiedzieć:

  • co w systemie działa prawidłowo,
  • gdzie znajdują się istotne ryzyka,
  • które problemy utrudniają dalszy rozwój systemu,
  • co wymaga natychmiastowej reakcji,
  • co warto poprawić później,
  • czego nie trzeba obecnie zmieniać,
  • oraz czy obecny system jest dobrą podstawą do dalszych inwestycji.

W tym artykule przeczytasz:

  • czym jest audyt techniczny systemu informatycznego,
  • czym różni się od audytu kodu źródłowego,
  • czym różni się od audytu bezpieczeństwa, UX, SEO i analizy przedwdrożeniowej,
  • kiedy warto wykonać audyt techniczny aplikacji,
  • jakie obszary systemu powinny zostać sprawdzone,
  • jak oceniać architekturę i jakość kodu,
  • dlaczego sam automatyczny skaner kodu nie wystarczy,
  • jak analizować technologie, zależności i dług technologiczny,
  • co sprawdzić w bazie danych, integracjach i API,
  • jak ocenić testy, proces wdrażania zmian, infrastrukturę i monitoring,
  • jak przeprowadzić audyt przed przejęciem projektu po innym wykonawcy,
  • jak powinien wyglądać raport z audytu,
  • jak priorytetyzować wykryte problemy,
  • oraz kiedy wyniki audytu powinny prowadzić do refaktoryzacji, modernizacji lub przebudowy systemu.

Co to jest audyt techniczny systemu informatycznego?

Audyt techniczny systemu informatycznego to uporządkowana analiza istniejącego oprogramowania, której celem jest ocena jego stanu technicznego, ryzyka oraz możliwości dalszego utrzymania i rozwoju.

W zależności od projektu przedmiotem analizy może być:

  • dedykowana aplikacja webowa,
  • platforma B2B,
  • system SaaS,
  • portal klienta,
  • panel partnera,
  • e-commerce,
  • WordPress lub WooCommerce,
  • system połączony z ERP lub CRM,
  • zestaw współpracujących ze sobą aplikacji i usług.

Audyt powinien patrzeć na system szerzej niż tylko poprzez kod. Dobrze napisany kod może bowiem działać na źle zarządzanej infrastrukturze. Nowoczesna infrastruktura może obsługiwać aplikację opartą na trudnej do rozwijania architekturze. System może mieć wysokie pokrycie testami, ale korzystać z krytycznej, niewspieranej zależności. Może też być poprawny technologicznie, a mimo to posiadać proces wdrażania zmian, który potrafi przeprowadzić tylko jeden developer.

Dlatego audyt techniczny systemu powinien obejmować cały kontekst potrzebny do jego bezpiecznego rozwoju, a nie wyłącznie wybrane pliki źródłowe.

Audyt techniczny a audyt kodu źródłowego – czy to to samo?

Nie. Audyt kodu źródłowego jest jednym z możliwych elementów szerszego audytu technicznego. Podczas analizy kodu można sprawdzać między innymi:

  • strukturę,
  • czytelność,
  • powtarzalność,
  • złożoność,
  • sposób podziału odpowiedzialności,
  • testowalność,
  • obsługę błędów,
  • jakość implementacji,
  • potencjalne problemy bezpieczeństwa,
  • zgodność z przyjętymi standardami.

To ważna część analizy. Nie odpowiada jednak na wszystkie pytania.

Kod sam w sobie nie pokaże pełnego obrazu dotyczącego:

  • konfiguracji produkcji,
  • procesu wdrażania zmian,
  • sposobu wykonywania i przechowywania kopii zapasowych,
  • rzeczywistego obciążenia systemu,
  • procedur reagowania na awarie,
  • własności kont i dostępów,
  • dokumentacji,
  • sposobu współpracy z ERP,
  • historii problemów produkcyjnych.

Dlatego audyt kodu źródłowego i audyt techniczny systemu informatycznego nie powinny być traktowane jako pojęcia zamienne. Pierwszy analizuje przede wszystkim kod.

Drugi odpowiada na szersze pytanie: w jakim stanie znajduje się rozwiązanie, które firma ma dalej utrzymywać i rozwijać?

Audyt techniczny to nie audyt SEO, UX ani audyt sklepu internetowego

Słowo „audyt” obejmuje bardzo różne usługi. Warto więc rozróżnić ich cele.

Audyt UX

Koncentruje się na użytkowniku.

Analizuje między innymi:

  • użyteczność,
  • architekturę informacji,
  • nawigację,
  • ścieżki użytkownika,
  • formularze,
  • interakcje,
  • bariery w realizacji celu.

Audyt SEO

Ocenia przede wszystkim czynniki wpływające na widoczność witryny w wyszukiwarkach. Może obejmować strukturę strony, indeksację, metadane, linkowanie, możliwość prawidłowego odczytywania strony przez roboty wyszukiwarek, wydajność czy problemy techniczne związane z SEO.

Audyt e-commerce

Może łączyć UX, wydajność, SEO, analitykę i analizę procesu zakupowego.

Jego głównym pytaniem jest zwykle: co ogranicza skuteczność sklepu i jego sprzedaż? Jeżeli to właśnie sprzedaż, UX, wydajność i proces zakupowy są przedmiotem analizy, osobno opisaliśmy, na czym polega audyt sklepu internetowego.

Audyt bezpieczeństwa

Koncentruje się na podatnościach, powierzchni ataku i zabezpieczeniach systemu.

Audyt techniczny systemu

Pyta natomiast: czy techniczne fundamenty istniejącego rozwiązania pozwalają bezpiecznie je utrzymywać, zmieniać i rozwijać?

Zakresy mogą się częściowo przecinać. Nie należy jednak zastępować jednego audytu drugim.

Audyt techniczny a analiza przedwdrożeniowa

To kolejne ważne rozróżnienie. Analiza przedwdrożeniowa wykonywana jest przede wszystkim po to, aby dobrze przygotować plan realizacji nowego rozwiązania lub istotnego nowego zakresu.

Odpowiada na pytania takie jak:

  • czego potrzebuje biznes,
  • jakie procesy ma obsługiwać rozwiązanie,
  • kto będzie z niego korzystał,
  • jakie funkcje są potrzebne,
  • jakie integracje należy przewidzieć,
  • jak podzielić projekt na etapy.

Audyt techniczny zaczyna natomiast od czegoś, co już istnieje.

Nie pytamy: Co powinniśmy zbudować?

Najpierw pytamy: Co właściwie mamy?

I dopiero później: Czy możemy na tym bezpiecznie budować dalej?

To sprawia, że audyt techniczny jest szczególnie istotny przed rozwojem starszego systemu, zmianą wykonawcy, większą modernizacją albo inwestycją w kolejną fazę projektu.

Audyt techniczny systemu informatycznego - co sprawdzic przed dalszym rozwojem lub przejeciem aplikacji?
Audyt techniczny systemu informatycznego - co sprawdzic przed dalszym rozwojem lub przejeciem aplikacji?

Kiedy warto przeprowadzić audyt techniczny systemu?

Nie każdy projekt wymaga rozbudowanego audytu. Są jednak sytuacje, w których poznanie stanu technicznego systemu przed podjęciem kolejnej decyzji może znacząco ograniczyć ryzyko.

Przed przejęciem projektu po innym wykonawcy

Nowy zespół nie zna jeszcze historii systemu, jego niejawnych zależności ani problemów pojawiających się podczas codziennego utrzymania. Audyt pozwala ograniczyć tę niewiedzę przed przejęciem odpowiedzialności za dalszy rozwój aplikacji.

Sam proces zmiany wykonawcy opisujemy szerzej w poradniku Przejęcie projektu IT po innym wykonawcy – jak bezpiecznie zmienić software house.

Przed dużą rozbudową systemu

Jeżeli firma planuje istotną inwestycję w kolejną wersję produktu, warto najpierw sprawdzić, czy obecna architektura, technologie i kluczowe moduły są odpowiednią podstawą dla nowych funkcjonalności.

Gdy rozwój systemu wyraźnie zwalnia

Jeżeli podobne zmiany wymagają coraz więcej pracy, przyczyną może być rosnąca złożoność, niewłaściwa architektura albo dług technologiczny.

Audyt pomaga ustalić, gdzie rzeczywiście znajduje się źródło rosnącego kosztu developmentu.

Przed modernizacją technologii

Duża aktualizacja frameworka, środowiska uruchomieniowego, bazy danych lub infrastruktury może wpływać na wiele elementów rozwiązania. Audyt pozwala zidentyfikować zależności i ryzyka przed rozpoczęciem zmian.

Gdy system jest krytyczny dla biznesu

Jeżeli aplikacja wpływa bezpośrednio na sprzedaż, produkcję, obsługę klientów lub inne istotne procesy firmy, znajomość jej technicznych słabości ma szczególne znaczenie.

Przed decyzją o napisaniu systemu od nowa

Jeżeli rozważane jest zastąpienie istniejącej aplikacji nowym rozwiązaniem, najpierw warto ustalić, które problemy rzeczywiście wynikają z jej fundamentów, a które można rozwiązać bez pełnego rewrite’u.

Po kilku latach intensywnego rozwoju

System może nadal działać poprawnie, ale przez lata mogły narosnąć zależności, nieaktualne komponenty, obejścia i problemy dokumentacyjne. Audyt pozwala ocenić ich rzeczywisty wpływ przed kolejnym etapem rozwoju.

Jakich odpowiedzi powinien dostarczyć dobry audyt techniczny?

Dobra analiza nie powinna kończyć się stwierdzeniem: Automatyczne narzędzia wykryły w kodzie 247 problemów i ostrzeżeń. To może być informacja pomocnicza.

Dla osoby zarządzającej systemem ważniejsze są pytania:

  • Czy możemy bezpiecznie dalej rozwijać ten system?
  • Co dzisiaj stanowi największe ryzyko?
  • Czy istnieją elementy wymagające natychmiastowej reakcji?
  • Co realnie spowalnia rozwój systemu?
  • Czy technologia jest nadal utrzymywalna?
  • Jak ryzykowne są kolejne aktualizacje?
  • Czy można wymienić tylko problematyczny moduł?
  • Czy potrzebna jest większa modernizacja?
  • Czy system można bezpiecznie przejąć po poprzednim wykonawcy?
  • Jakich kompetencji będzie wymagało dalsze utrzymanie?
  • Co można pozostawić bez zmian?

Audyt techniczny powinien wspierać decyzję, a nie produkować problemy do raportu.

Co powinien obejmować audyt techniczny systemu informatycznego?

Zakres zawsze powinien być dopasowany do projektu. W rozbudowanych systemach warto jednak przeanalizować co najmniej kilka podstawowych warstw.

1. Architektura systemu

Architektura decyduje o tym, jak poszczególne elementy aplikacji współpracują ze sobą.

Podczas audytu warto ustalić między innymi:

  • jakie są główne komponenty systemu,
  • jakie odpowiedzialności posiadają poszczególne moduły,
  • które elementy są mocno ze sobą powiązane,
  • gdzie znajdują się kluczowe zależności,
  • jak przepływają dane,
  • które komponenty można rozwijać niezależnie,
  • gdzie występują pojedyncze punkty awarii.

Nie istnieje jedna architektura właściwa dla wszystkich systemów. Monolit nie jest automatycznie problemem.

Mikroserwisy nie są automatycznie oznaką dojrzałości.

Najważniejsze pytanie brzmi: czy obecna architektura odpowiada skali, potrzebom i przewidywanemu kierunkowi rozwoju systemu?

2. Kod źródłowy i jego utrzymywalność

Analiza kodu nie powinna sprowadzać się do stylistyki. Znacznie ważniejsze jest to, czy kolejny software developer może sprawnie zrozumieć system i bezpiecznie wprowadzać w nim zmiany.

Warto sprawdzić między innymi:

  • czy kod posiada czytelną strukturę,
  • czy poszczególne elementy mają jasno określoną odpowiedzialność,
  • czy występują duplikacje,
  • czy logika biznesowa nie jest nadmiernie rozproszona,
  • jak obsługiwane są błędy,
  • czy istnieją fragmenty szczególnie trudne do zmiany,
  • czy projekt posiada spójne standardy,
  • czy krytyczne funkcje są możliwe do testowania.

Narzędzia statycznej analizy mogą pomóc znaleźć część problemów, ale nie zastępują analizy uwzględniającej logikę i kontekst aplikacji. Automatyczne skanery dobrze wykrywają określone klasy błędów i nieprawidłowości, ale mogą nie wychwycić problemów wynikających ze sposobu przepływu danych, zależności pomiędzy modułami czy specyficznej logiki biznesowej.

3. Technologie, frameworki i zależności systemu

System nie istnieje w próżni.

Korzysta z:

  • języków programowania,
  • frameworków, czyli technologicznych podstaw wykorzystywanych do budowy aplikacji,
  • bibliotek,
  • pakietów,
  • komponentów,
  • systemów bazodanowych,
  • serwerów,
  • usług zewnętrznych.

Podczas audytu trzeba sprawdzić:

  • jakie wersje są używane,
  • czy są nadal wspierane,
  • czy można je bezpiecznie aktualizować,
  • czy występują zależności porzucone przez autorów,
  • czy projekt zależy od bardzo starych komponentów,
  • jakie są zależności pomiędzy kolejnymi aktualizacjami.

Nie chodzi o wymianę każdej biblioteki tylko dlatego, że istnieje nowsza wersja. Problem pojawia się wtedy, gdy zależność wpływa na bezpieczeństwo, możliwość dalszych aktualizacji lub zdolność do rozwijania systemu. OWASP wskazuje podatne i nieaktualne komponenty jako istotny obszar ryzyka aplikacji, dlatego zarządzanie zależnościami powinno być elementem technicznej oceny istniejącego rozwiązania.

4. Dług technologiczny

Audyt jest bardzo dobrym momentem do zidentyfikowania długu technologicznego. Nie chodzi jednak o stworzenie możliwie długiej listy niedoskonałości.

Trzeba ustalić przede wszystkim:

  • gdzie dług występuje,
  • jak często dany obszar jest modyfikowany,
  • jaki wpływ ma na kolejne zmiany,
  • czy zwiększa ryzyko awarii,
  • czy blokuje nowe funkcjonalności,
  • ile może kosztować jego dalsze pozostawienie.

Fragment kodu, który nie jest idealny, ale działa stabilnie i od lat nie wymaga zmian, może mieć znacznie niższy priorytet niż mniej spektakularny problem w module rozwijanym każdego tygodnia. Dlatego audyt długu technologicznego powinien być powiązany z rzeczywistym sposobem rozwoju systemu.

5. Baza danych i model danych

W wielu systemach to właśnie dane są najtrudniejszym elementem późniejszej modernizacji.

Audyt może obejmować:

  • strukturę bazy,
  • relacje,
  • indeksy,
  • sposób wykonywania zapytań,
  • integralność danych,
  • duplikację informacji,
  • sposób wykonywania migracji,
  • wielkość i tempo przyrostu danych.

Warto również ustalić, czy model danych nadal odpowiada procesom biznesowym. System rozwijany przez osiem lat może przechowywać informacje w sposób wynikający z decyzji podjętych dla zupełnie innej skali działalności.

6. Integracje i API

Integracje należą do obszarów, które przy audycie łatwo pominąć, jeżeli analiza skupia się wyłącznie na repozytorium.

Tymczasem system może zależeć od:

  • ERP,
  • CRM,
  • WMS,
  • operatora płatności,
  • przewoźników,
  • zewnętrznych platform sprzedażowych,
  • systemów księgowych,
  • usług mailingowych,
  • systemów partnerskich,
  • zewnętrznych API.

Warto ustalić:

  • co jest integrowane,
  • w jakim kierunku przepływają dane,
  • który system jest źródłem prawdy,
  • jak obsługiwane są błędy,
  • czy system automatycznie ponawia nieudane operacje,
  • czy ponowienie tej samej operacji nie powoduje duplikacji danych lub wykonania tej samej czynności kilka razy,
  • gdzie znajdują się logi,
  • co dzieje się w przypadku niedostępności zewnętrznej usługi,
  • jak monitorowana jest synchronizacja.

Działająca integracja niekoniecznie jest integracją odporną na awarie. Audyt powinien sprawdzić również scenariusze, w których coś przestaje działać.

7. Bezpieczeństwo aplikacji

Audyt techniczny nie musi zastępować pełnego audytu bezpieczeństwa czy testów penetracyjnych.

Powinien jednak zidentyfikować oczywiste ryzyka mogące wpływać na dalsze utrzymanie projektu.

W zależności od zakresu może to obejmować między innymi:

  • sposób uwierzytelniania,
  • autoryzację,
  • zarządzanie kluczami, tokenami i innymi danymi uwierzytelniającymi,
  • uprawnienia,
  • przestarzałe komponenty,
  • dostęp do danych,
  • konfigurację środowiska,
  • obsługę danych wejściowych,
  • logowanie zdarzeń,
  • ekspozycję usług.

Bezpieczeństwa nie warto analizować wyłącznie poprzez skaner. OWASP podkreśla znaczenie manualnego przeglądu kodu oraz analizy logiki aplikacji, a NIST SSDF traktuje przegląd, analizę i testowanie kodu jako element bezpiecznego procesu wytwarzania oprogramowania.

Jeżeli istnieje podejrzenie konkretnych podatności lub system przetwarza szczególnie wrażliwe dane, potrzebny może być dodatkowy audyt bezpieczeństwa lub test penetracyjny (pentest).

8. Testy i możliwość bezpiecznego wprowadzania zmian

Testy mają ogromne znaczenie przy systemie, który ma być dalej rozwijany.

Podczas audytu warto sprawdzić:

  • czy istnieją testy jednostkowe,
  • czy są testy integracyjne,
  • czy krytyczne procesy są objęte testami od początku do końca (end-to-end),
  • czy testy są rzeczywiście uruchamiane,
  • czy przechodzą,
  • czy są automatycznie uruchamiane w procesie przygotowania i wdrażania zmian,
  • czy odzwierciedlają aktualne zachowanie systemu.

Sama liczba testów nie jest najważniejsza.

Dużo ważniejsze jest pytanie: czy przed zmianą krytycznego modułu zespół ma mechanizm pozwalający zweryfikować, że nie zepsuł innej części systemu?

9. Infrastruktura i środowiska

System może być dobrze napisany, a mimo to jego utrzymanie będzie ryzykowne z powodu infrastruktury.

Audyt powinien odpowiedzieć między innymi na pytania:

  • gdzie działa produkcja,
  • czy istnieje oddzielne środowisko testowe (staging),
  • jak wygląda środowisko do prac programistycznych,
  • czy konfiguracja jest powtarzalna,
  • jak zarządzane są zmienne środowiskowe,
  • gdzie znajdują się dane,
  • jakie usługi zewnętrzne są krytyczne.

Szczególnie ważne jest ustalenie, czy konfiguracja środowisk jest powtarzalna i czy nowy zespół byłby w stanie uruchomić aplikację bez wiedzy dostępnej wyłącznie u jednej osoby.

10. CI/CD i proces wdrażania zmian

W bardziej rozbudowanych systemach proces budowania, testowania i wdrażania kolejnych wersji może być częściowo lub całkowicie zautomatyzowany, często w ramach mechanizmów określanych jako CI/CD. Sposób wdrażania kolejnych zmian jest często jednym z najbardziej niedocenianych elementów audytu.

Warto ustalić:

  • jak kod trafia na produkcję,
  • kto może wdrożyć nową wersję na środowisko produkcyjne,
  • czy proces jest automatyczny,
  • jakie testy są wykonywane wcześniej,
  • jak zarządzane są migracje bazy danych,
  • czy w razie problemów można szybko wycofać wdrożoną wersję,
  • czy wdrożenia są dokumentowane,
  • czy znana jest aktualna wersja produkcyjna.

Jeżeli wdrożenie zmian polega na ręcznym kopiowaniu wybranych plików przez osobę, która „wie, które trzeba przesłać”, problemem systemu nie jest tylko kod. Problemem jest proces.

11. Monitoring, logi i wykrywanie problemów

System może działać nieprawidłowo przez kilka godzin, zanim ktokolwiek to zauważy.

Dlatego audyt powinien zweryfikować:

  • jakie błędy są logowane,
  • gdzie znajdują się logi,
  • czy występuje monitoring dostępności,
  • czy monitorowane są kluczowe usługi,
  • czy istnieją alerty,
  • kto je otrzymuje,
  • czy można prześledzić problem pomiędzy współpracującymi usługami.

W rozbudowanych systemach samo pytanie „czy serwer odpowiada?” może być niewystarczające. Aplikacja może działać, podczas gdy synchronizacja zamówień z ERP nie działa od kilku godzin.

12. Backup i możliwość odtworzenia systemu

Kopia zapasowa istnieje? To jeszcze nie jest najważniejsze pytanie.

Ważniejsze są:

  • co dokładnie obejmują kopie zapasowe,
  • jak często,
  • gdzie przechowywane są kopie,
  • jak długo są przechowywane,
  • kto ma do nich dostęp,
  • czy proces jest monitorowany,
  • czy ktoś próbował odtworzyć system z kopii.

Kopia zapasowa, której nigdy nie próbowano wykorzystać do odtworzenia systemu, daje znacznie mniejszą pewność niż regularnie weryfikowany proces odtwarzania.

13. Dokumentacja i wiedza o systemie

Brak dokumentacji nie oznacza automatycznie złego projektu.

Znacząco zwiększa jednak zależność od osób, które znają system.

Audyt powinien sprawdzić:

  • czy istnieje dokumentacja techniczna,
  • czy opisane są integracje,
  • czy wiadomo, jak uruchomić projekt,
  • czy opisano środowiska,
  • czy istnieją diagramy architektury,
  • czy wiadomo, dlaczego podjęto kluczowe decyzje,
  • gdzie znajduje się lista problemów technicznych i zaplanowanych prac.

Szczególnie niebezpieczna jest sytuacja, w której istnieją procesy, które: „zna tylko Marek”.

Wtedy firma posiada nie tylko ryzyko technologiczne, ale również organizacyjne.

14. Dostępy i własność techniczna

Audyt może ujawnić problem, który nie znajduje się ani w kodzie, ani w architekturze.

Firma może nie kontrolować:

  • repozytorium,
  • domeny,
  • DNS,
  • hostingu,
  • konta usług chmurowych,
  • licencji,
  • certyfikatów,
  • zewnętrznych usług,
  • systemu CI/CD,
  • kont administracyjnych.

To szczególnie ważne przed zmianą wykonawcy. Właściciel projektu powinien wiedzieć, jakie zasoby istnieją, kto jest ich właścicielem i kto ma do nich dostęp.

15. Wydajność i skalowalność

Wydajność należy analizować w kontekście realnych wymagań.

System obsługujący 200 użytkowników dziennie nie musi być projektowany tak samo jak platforma generująca tysiące operacji na minutę.

Audyt może obejmować:

  • czasy odpowiedzi,
  • kosztowne zapytania,
  • wykorzystanie pamięci podręcznej (cache),
  • obciążenie bazy,
  • kolejki,
  • procesy wykonywane synchronicznie,
  • wąskie gardła,
  • zachowanie przy zwiększonym obciążeniu.

Najważniejsze pytanie nie brzmi: Czy system jest nieskończenie skalowalny?

Tylko: Czy jest wystarczająco skalowalny dla przewidywanego rozwoju biznesu?

Planujesz większą rozbudowę lub przejęcie istniejącego systemu?

Zanim rozpoczniesz kolejny etap rozwoju systemu, warto sprawdzić, czy obecna architektura, kod, integracje i infrastruktura są dobrą podstawą dalszych inwestycji.

Porozmawiajmy o analizie technicznej systemu. Porozmawiajmy o analizie technicznej systemu.

Audyt techniczny nie powinien prowadzić do niepotrzebnego komplikowania systemu

To bardzo ważne. Audytor zawsze może znaleźć coś, co dałoby się zaprojektować „lepiej”.

Można:

  • rozbić monolit,
  • zmienić framework,
  • przepisać moduł,
  • wprowadzić dodatkową warstwę abstrakcji,
  • przebudować deployment,
  • wymienić bazę danych.

Ale fakt, że coś można zmienić, nie oznacza jeszcze, że warto.

Audyt powinien brać pod uwagę:

  • znaczenie danego obszaru,
  • częstotliwość zmian,
  • rzeczywiste ryzyko,
  • skalę projektu,
  • koszt naprawy,
  • wpływ na biznes.

Celem nie jest stworzenie technologicznie idealnego systemu. Celem jest system, który można odpowiedzialnie utrzymywać i rozwijać.

W branży określa się to często jako overengineering – projektowanie rozwiązania znacznie bardziej skomplikowanego, niż wymaga tego rzeczywisty problem.

Dlaczego automatyczny audyt kodu nie wystarczy?

Narzędzia są bardzo przydatne. Mogą analizować między innymi:

  • złożoność,
  • duplikacje,
  • potencjalne błędy,
  • podatności,
  • zależności,
  • pokrycie testami,
  • niektóre naruszenia standardów.

Nie rozumieją jednak całego kontekstu biznesowego. Program może wskazać skomplikowaną metodę. Nie powie natomiast, czy odpowiada ona za proces używany raz w roku, czy za mechanizm wyceny realizujący 40% przychodów firmy. Może wskazać przestarzałą bibliotekę. Nie zawsze odpowie, jakie konsekwencje dla działalności firmy będzie miała jej wymiana.

Dlatego automatyczna analiza powinna być źródłem danych dla audytora, a nie samym audytem. OWASP wskazuje wprost na rolę ręcznej analizy kodu w wykrywaniu problemów związanych z logiką aplikacji i przepływem danych, których narzędzia automatyczne mogą nie wykryć.

Czy AI może wykonać audyt techniczny systemu?

AI może bardzo dobrze wspierać analizę.

Może pomóc w:

  • poznawaniu dużej bazy kodu,
  • identyfikowaniu zależności,
  • streszczaniu modułów,
  • wyszukiwaniu powtarzających się wzorców,
  • analizowaniu dokumentacji,
  • tworzeniu map zależności,
  • przygotowywaniu wstępnych hipotez.

Nie rozwiązuje jednak podstawowego problemu audytu.

Ktoś nadal musi zdecydować:

  • które znalezisko jest rzeczywistym problemem,
  • jaki jest jego wpływ,
  • czy warto je naprawiać,
  • w jakiej kolejności,
  • jakie ryzyko wiąże się ze zmianą.

Audyt techniczny wymaga więc nie tylko analizy, ale również oceny. To dwie różne rzeczy.

Jak powiązać problemy techniczne z biznesem?

Tutaj znajduje się najważniejsza różnica pomiędzy użytecznym audytem a raportem, który później trafia do szuflady.

Każdy istotny problem warto ocenić w trzech wymiarach.

1. Ryzyko techniczne

Co może się wydarzyć?

Na przykład:

  • awaria,
  • utrata danych,
  • problem bezpieczeństwa,
  • brak możliwości aktualizacji,
  • regresja,
  • niedostępność integracji.

2. Wpływ biznesowy

Co oznacza to dla firmy?

Przykładowo:

  • zatrzymanie sprzedaży,
  • brak dostępu użytkowników,
  • opóźnienie realizacji zamówień,
  • zwiększenie kosztu dalszego rozwoju systemu,
  • niemożność uruchomienia nowej usługi,
  • problemy operacyjne.

3. Koszt dalszego odkładania

Czy problem będzie droższy za rok? Niektóre problemy praktycznie się nie zmieniają. Inne narastają.

Przykładowo aktualizacja biblioteki może być dzisiaj stosunkowo prosta, ale za kilka kolejnych wersji wymagać wieloetapowej migracji.

Dopiero połączenie tych trzech wymiarów pozwala sensownie ustalać priorytety.

Mapa decyzji po audycie: teraz, następnie, obserwować, pozostawić

Zamiast kończyć raport klasyfikacją:

  • 137 błędów wysokiego poziomu
  • 264 średnie
  • 638 niskich

bardziej praktyczne może być podzielenie rekomendacji na cztery grupy.

Zrobić teraz

Problemy wpływające na:

  • bezpieczeństwo,
  • integralność danych,
  • stabilność,
  • możliwość wykonywania wdrożeń,
  • kluczowe procesy biznesowe.

Zaplanować jako następne

Problemy, które nie wymagają działania dzisiaj, ale wyraźnie podnoszą koszt kolejnych zmian.

Obserwować

Elementy, które mogą stać się problemem wraz ze zmianą skali lub rozwojem systemu.

Pozostawić

Problemy techniczne, których koszt rozwiązania jest obecnie nieproporcjonalny do korzyści.

Ta ostatnia grupa jest równie ważna jak pierwsza. Dobry audyt powinien potrafić powiedzieć również: tego teraz nie warto ruszać.

Audyt przed przejęciem projektu po innym wykonawcy

To jeden z najważniejszych przypadków wykorzystania audytu technicznego. Nowy zespół przejmuje bowiem nie tylko kod, ale również istniejące zależności, ograniczenia i ryzyka techniczne projektu.

System może posiadać:

  • nieopisane integracje,
  • problemy produkcyjne,
  • niewspierane zależności,
  • brak testów,
  • ręczne wdrażanie zmian,
  • niekompletne lub niesprawdzone kopie zapasowe,
  • zależność od pojedynczego developera,
  • fragmenty kodu, których nikt od dawna nie modyfikował.

Dlatego przed przejęciem trzeba zmniejszyć poziom niewiedzy. Audyt nie musi oznaczać kilkutygodniowej analizy wszystkiego.

Zakres powinien odpowiadać pytaniu: co musimy wiedzieć, żeby odpowiedzialnie przejąć ten konkretny system?

Jeżeli po audycie potrzebny jest zespół odpowiedzialny za przejęcie, modernizację i dalszy rozwój istniejącego rozwiązania, zobacz Firma programistyczna.

Audyt przed przejeciem projektu po innym wykonawcy
Audyt przed przejeciem projektu po innym wykonawcy

Co szczególnie sprawdzić przed przejęciem systemu?

Przy przejmowaniu projektu priorytetem powinny być:

Możliwość uruchomienia projektu

Czy nowy zespół potrafi uruchomić system na podstawie otrzymanych materiałów?

Zgodność kodu z produkcją

Czy repozytorium rzeczywiście zawiera wersję działającą obecnie na serwerze?

Dostępy

Czy firma kontroluje wszystkie krytyczne usługi?

Wdrażanie zmian

Czy wiadomo, jak bezpiecznie wdrożyć pierwszą zmianę?

Kopie zapasowe

Czy w przypadku problemu można odtworzyć system?

Integracje

Czy wiadomo, od jakich zewnętrznych systemów zależy aplikacja?

Krytyczne ryzyka

Czy istnieje coś, co wymaga działania przed rozpoczęciem regularnego rozwoju systemu?

Dopiero później można przejść do szczegółowego porządkowania kodu.

Audyt przed dużą rozbudową systemu

Drugi ważny scenariusz występuje wtedy, gdy obecny wykonawca pozostaje, ale firma planuje istotną inwestycję.

Przykładowo:

  • uruchomienie nowego rynku,
  • dodanie modelu B2B,
  • nowy portal klienta,
  • przebudowa procesu zamówień,
  • integracja ERP,
  • wejście na znacznie większą skalę,
  • nowy moduł ofertowania,
  • rozbudowa platformy SaaS.

W takiej sytuacji audyt powinien odpowiedzieć: czy nowe funkcjonalności powinny powstawać na obecnym fundamencie?

Czasem odpowiedź będzie brzmiała: tak, system jest w dobrym stanie – rozwijamy dalej.

Czasem: tak, ale najpierw warto uporządkować dwa konkretne moduły.

A czasem: obecna architektura będzie bardzo kosztownym fundamentem dla planowanego zakresu i warto ją wcześniej zmodernizować.

Każda z tych odpowiedzi jest wartościowa.

Audyt techniczny przed refaktoryzacją

Refaktoryzacji nie powinno się rozpoczynać od przypadkowego fragmentu kodu.

Największą wartość daje zwykle uporządkowanie tych obszarów, które:

  • często się zmieniają,
  • posiadają wiele zależności,
  • powodują regresje,
  • blokują nowe funkcjonalności,
  • są krytyczne biznesowo.

Audyt pomaga ustalić, gdzie refaktoryzacja kodu może przynieść największą wartość i rzeczywiście ograniczyć koszt dalszego rozwoju systemu. Nie chodzi o to, aby poprawić jak najwięcej kodu. Chodzi o to, aby usunąć problemy, które generują największy koszt dalszego rozwoju.

Audyt przed modernizacją starszego systemu (legacy system)

W przypadku starszych systemów audyt ma jeszcze jedno zadanie: oddzielić wiek technologii od rzeczywistego problemu.

Stary framework nie oznacza automatycznie, że aplikację trzeba przepisać. Podobnie nowoczesny framework nie gwarantuje dobrej architektury.

Trzeba sprawdzić:

  • czy technologia jest wspierana,
  • czy można ją aktualizować,
  • jak wygląda dostępność kompetencji,
  • czy architektura odpowiada biznesowi,
  • które elementy ograniczają dalszy rozwój.

Dopiero potem można wybierać pomiędzy:

  • pozostawieniem obecnego systemu,
  • refaktoryzacją,
  • aktualizacją technologii,
  • wymianą pojedynczego modułu,
  • stopniową modernizacją,
  • przeniesieniem rozwiązania na nową platformę technologiczną,
  • napisaniem systemu od nowa.

Czy audyt techniczny może wykazać, że nic dużego nie trzeba robić?

Tak. I taki rezultat może być bardzo wartościowy. Firma planuje dużą inwestycję i obawia się, że system jest „za stary”.

Audyt może wykazać, że:

  • architektura jest nadal odpowiednia,
  • krytyczne zależności są wspierane,
  • kod jest możliwy do utrzymania,
  • testy zabezpieczają najważniejsze procesy,
  • infrastruktura jest poprawna.

Wtedy rekomendacją może być: rozwijamy system dalej, a niewielkie problemy porządkujemy w ramach bieżącego utrzymania i wsparcia technicznego.

Audyt nie powinien być narzędziem służącym do uzasadnienia sprzedaży nowego systemu. Powinien pomóc podjąć właściwą decyzję.

Jak powinien wyglądać proces audytu technicznego?

Proces będzie zależał od zakresu, ale najczęściej warto przejść kilka etapów.

Etap 1 – określenie celu audytu

Najpierw ustalamy: dlaczego wykonujemy audyt?

Inaczej analizuje się system przed:

  • przejęciem,
  • modernizacją,
  • dużą rozbudową,
  • wejściem inwestora,
  • zmianą infrastruktury,
  • poprawą stabilności.

Bez jasno określonego celu łatwo analizować rzeczy, które nie mają znaczenia dla decyzji.

Etap 2 – zebranie materiałów

Potrzebne mogą być:

  • repozytoria,
  • dokumentacja,
  • dostęp do środowisk,
  • lista zadań, planowanych zmian i znanych problemów,
  • informacje o incydentach,
  • logi,
  • lista integracji,
  • diagramy,
  • dane o obciążeniu.

Nie zawsze wszystko będzie dostępne. Braki same w sobie są informacją o projekcie.

Etap 3 – poznanie architektury i systemu

Zanim zacznie się szczegółową ocenę kodu, trzeba zrozumieć:

  • co system robi,
  • dla kogo,
  • które procesy są krytyczne,
  • jak przepływają dane,
  • od czego system zależy.

Etap 4 – analiza techniczna

Zakres może obejmować kod, architekturę, bazę danych, zależności, infrastrukturę, testy i pozostałe elementy opisane wcześniej.

Etap 5 – rozmowa z zespołem

Kod nie odpowie na każde pytanie.

Rozmowa z developerami może wyjaśnić:

  • dlaczego podjęto określoną decyzję,
  • które problemy są znane,
  • które rozwiązania są tymczasowe,
  • czego najbardziej obawia się zespół,
  • gdzie wprowadzanie kolejnych zmian pochłania najwięcej czasu i kosztów.

Etap 6 – ocena i priorytetyzacja

Wykryte problemy trzeba połączyć z ich wpływem na system oraz biznes.

Etap 7 – rekomendacje i plan dalszych działań

Raport powinien kończyć się odpowiedzią: co robimy dalej?

Jak powinien wygladac proces audytu technicznego?
Jak powinien wygladac proces audytu technicznego?

Co powinien zawierać raport z audytu technicznego?

Nie ma jednego obowiązkowego szablonu. Przy większym systemie dobrym rozwiązaniem jest jednak podział na kilka poziomów informacji.

Podsumowanie dla osób decyzyjnych

Krótka odpowiedź dla osób decyzyjnych:

  • jaki jest ogólny stan systemu,
  • jakie są największe ryzyka,
  • czy można go dalej rozwijać,
  • co powinno wydarzyć się w pierwszej kolejności.

Opis stanu obecnego

Najważniejsze informacje o:

  • architekturze,
  • technologiach,
  • integracjach,
  • infrastrukturze.

Znalezione problemy

Każdy istotny problem powinien mieć:

  • opis,
  • wpływ,
  • poziom ryzyka,
  • rekomendację.

Priorytety

Co:

  • teraz,
  • następnie,
  • później,
  • pozostawiamy.

Plan dalszych działań

Jeżeli ma to sens, rekomendacje warto pogrupować w etapy.

Czego nie powinien zawierać dobry raport?

Przede wszystkim nie powinien być listą problemów bez kontekstu.

Informacja: „klasa ma 900 linii”

sama w sobie niewiele mówi osobie odpowiedzialnej za budżet systemu.

Znacznie bardziej przydatne jest: „moduł odpowiada za kluczowy proces zamówień, jest zmieniany przy większości nowych funkcjonalności i posiada wiele niejawnych zależności, dlatego każda modyfikacja wymaga szerokich testów regresyjnych”.

Pierwsze zdanie opisuje kod. Drugie opisuje problem.

Czy audyt musi obejmować cały system?

Nie. W dużych rozwiązaniach pełny audyt wszystkiego może być nieproporcjonalnie kosztowny.

Można wykonać audyt ograniczony do:

  • konkretnego modułu,
  • architektury,
  • integracji,
  • części serwerowej systemu (backendu),
  • infrastruktury,
  • procesu wdrażania zmian,
  • obszaru powodującego najwięcej problemów.

Można również rozpocząć od szybszej analizy wysokiego poziomu i dopiero na jej podstawie rozszerzyć zakres. Najważniejsze jest dopasowanie pracy do decyzji, którą trzeba podjąć.

Czy można wykonać audyt bez dostępu do kodu?

Można przeanalizować wybrane obszary:

  • infrastrukturę,
  • działanie aplikacji,
  • wydajność,
  • API,
  • konfigurację,
  • procesy.

Nie będzie to jednak pełny audyt techniczny systemu. Bez kodu trudno odpowiedzialnie ocenić między innymi jego utrzymywalność, część problemów architektonicznych czy sposób implementacji logiki biznesowej.

Czy audyt powinien wykonywać przyszły software house?

Może. Ma to praktyczną zaletę: zespół wykonujący analizę zdobywa wiedzę potrzebną później podczas dalszego rozwoju systemu.

Trzeba jednak zachować jedną ważną zasadę. Audyt nie może automatycznie prowadzić do wniosku: „wszystko trzeba przepisać i najlepiej, żebyśmy zrobili to my”.

Rekomendacje powinny wynikać z rzeczywistego stanu projektu. Dobry software house powinien być w stanie wskazać również elementy, których nie warto zmieniać.

Audyt techniczny systemu WordPress lub WooCommerce

W przypadku WordPressa i WooCommerce zakres będzie częściowo inny niż przy dedykowanej aplikacji.

Warto sprawdzić między innymi:

  • motyw,
  • własne wtyczki,
  • modyfikacje zewnętrznych wtyczek,
  • wersje PHP i WordPress,
  • zależności,
  • integracje,
  • automatyczne zadania cykliczne (CRON),
  • bazę danych,
  • wydajność części serwerowej systemu,
  • hosting,
  • środowisko testowe (staging),
  • proces aktualizacji,
  • kopie zapasowe,
  • bezpieczeństwo administracji.

W sklepie WooCommerce dochodzą procesy krytyczne biznesowo:

  • koszyk,
  • proces składania zamówienia,
  • płatności,
  • zamówienia,
  • magazyn,
  • ERP,
  • dokumenty,
  • wysyłka.

To jednak nadal audyt techniczny systemu, a nie audyt konwersji sklepu. Nie analizujemy tutaj, czy CTA ma odpowiedni kolor albo karta produktu optymalnie prowadzi użytkownika do zakupu.

Pytamy: czy techniczne fundamenty sklepu pozwalają bezpiecznie go utrzymywać i rozwijać?

Audyt techniczny dedykowanego systemu informatycznego

W przypadku systemów dedykowanych szczególnego znaczenia nabiera logika biznesowa.

Takie rozwiązanie mogło powstawać przez wiele lat i zawierać reguły dotyczące:

  • klientów,
  • ofert,
  • zamówień,
  • produkcji,
  • dokumentów,
  • uprawnień,
  • rozliczeń,
  • integracji.

Nie wszystkie nietypowe fragmenty kodu są błędami. Niektóre odwzorowują bardzo nietypowy proces przedsiębiorstwa. Dlatego audyt dedykowanego systemu wymaga zarówno wiedzy technicznej, jak i zrozumienia sposobu działania biznesu.

Audyt techniczny dedykowanego systemu informatycznego
Audyt techniczny dedykowanego systemu informatycznego

Audyt systemu B2B

Systemy B2B bardzo często są silnie połączone z pozostałą infrastrukturą przedsiębiorstwa.

Mogą korzystać z:

  • ERP,
  • CRM,
  • WMS,
  • indywidualnych cenników,
  • limitów klientów,
  • stanów magazynowych,
  • dokumentów,
  • danych handlowców.

Audyt powinien wtedy analizować nie tylko samą aplikację, ale cały przepływ procesu pomiędzy systemami. Problem widoczny w B2B może mieć źródło po stronie ERP. Albo odwrotnie.

Jak Webtom.pl podchodzi do audytu technicznego istniejących systemów?

W przypadku istniejącego projektu pierwszym celem jest zrozumienie jego stanu oraz problemu, który firma chce rozwiązać. Zakres analizy powinien wynikać z celu.

Inaczej podchodzimy do systemu, który ma zostać przejęty po innym wykonawcy, inaczej do aplikacji przed dużą rozbudową, a jeszcze inaczej do projektu wymagającego modernizacji technologicznej.

Jako software house patrzymy nie tylko na kod. W zależności od projektu analizie mogą podlegać:

  • architektura,
  • technologie,
  • zależności,
  • kod źródłowy,
  • dane,
  • integracje,
  • infrastruktura,
  • proces wdrażania zmian,
  • testy,
  • dokumentacja,
  • proces utrzymania.

Efektem powinna być przede wszystkim podstawa do podjęcia decyzji. Nie lista rzeczy, które technicznie można poprawić.

Audyt techniczny powinien kończyć się decyzją, nie raportem

Największą wartością audytu nie jest liczba znalezionych problemów. Jest nią zmniejszenie niepewności.

Przed analizą firma może nie wiedzieć:

  • czy system nadaje się do dalszego rozwoju,
  • ile ryzyka wiąże się z jego przejęciem,
  • dlaczego rozwój systemu staje się coraz wolniejszy,
  • czy trzeba modernizować architekturę,
  • czy potrzebne jest napisanie systemu od nowa.

Po audycie odpowiedzi powinny być znacznie bardziej konkretne. Nie każdy problem trzeba usuwać. Nie każdą starą technologię trzeba wymieniać. Nie każdy system z długiem technologicznym trzeba przepisywać.

Ale nie powinno się również inwestować dużego budżetu w kolejną fazę systemu bez wiedzy, czy jego fundamenty są na nią przygotowane. Dobry audyt techniczny pozwala więc odpowiedzieć na jedno najważniejsze pytanie: co powinniśmy zrobić z tym systemem dalej?

Nie wiesz, czy obecny system jest dobrą podstawą dalszego rozwoju?

Zanim zdecydujesz się na kolejną dużą inwestycję, zmianę wykonawcy albo przebudowę aplikacji, warto najpierw poznać jej rzeczywisty stan techniczny. Możemy przeanalizować istniejący system i wskazać obszary, które wymagają działania, te które warto zaplanować na później oraz elementy, których obecnie nie ma potrzeby zmieniać.

Porozmawiaj o audycie technicznym. Porozmawiaj o audycie technicznym.

FAQ – audyt techniczny systemu informatycznego

Co to jest audyt techniczny systemu informatycznego?

To analiza stanu istniejącej aplikacji obejmująca zależnie od potrzeb architekturę, kod, technologie, dane, integracje, testy, infrastrukturę, monitoring i proces wdrażania zmian.

Czym różni się audyt techniczny od audytu kodu źródłowego?

Kiedy warto wykonać audyt techniczny aplikacji?

Czy audyt techniczny jest tym samym co audyt bezpieczeństwa?

Czy audyt warto wykonać przed zmianą software house?

Czy audyt może wykazać dług technologiczny?

Czy audyt oznacza, że system trzeba później przebudować?

Czy można wykonać audyt bez dokumentacji?

Jak długo trwa audyt techniczny?

Co powinno być wynikiem audytu?

Ten wpis stworzył

Sławomir Woźniak
New Business | PL

Ekspert od wycen dedykowanych rozwiązań i zarządzania projektami. Posiada ogromne doświadczenie w tworzeniu ofert idealnie dopasowanych do potrzeb i oczekiwań klientów, specjalista łączący pasję do nowych wyzwań z analitycznym podejściem do każdego szczegółu projektu.

Sławomir Woźniak - Webtom.pl
Sławomir Woźniak | Webtom.pl

Share:

Facebook ikona
Facebook ikona
Linkedin ikona
Linkedin ikona
  • okno-pol logo okno-pol logo
  • piubello logo
    piubello logo
  • kabat logo
    kabat logo
  • komandor logo
    komandor logo
  • nbs logo
    nbs logo
  • josera logo
    josera logo
  • m-box24 logo
    m-box24 logo
  • edu bears logo
    edu bears logo
  • tapiso logo
    tapiso logo
  • farmutil hs logo
    farmutil hs logo
  • hjort knudsen logo
    hjort knudsen logo
  • sawex chemicals logo
    sawex chemicals logo
  • pik logo
    pik logo
  • gepa logisitcs logo
    gepa logisitcs logo
  • horpol logo
    horpol logo