Jak analizować bardzo skomplikowany kod?

0

Witajcie,

Jestem juniorem i trafiłem w pracy na monolit o bardzo skomplikowanym kodzie z długiem technologicznym i wieloma zależnościami. Jak najskuteczniej robić zadania w takim labiryncie? Jak najlepiej analizować ten kod?

Macie jakieś skuteczne podejścia/strategie?

8
  1. Uruchamiasz apkę w IDE w trybie debugu.
  2. Stawiasz breakpointa na kontrolerze (przeważnie punkt wejściowy).
  3. Jak to jakiś serwis to strzelasz do localhosta jakimś postmanem.
  4. Wpada Ci breakpoint.
  5. Śledzisz przez jakie klasy musi przejść aplikacja aby wykonać jakieś zadanie / te które zleciłeś w req postmanowym.

W przeciwnym wypadku poszukaj testów i tam odpal jakiś test integracyjny + postawienie breakpointa w kodzie i śledzenie jak wygląda flow aplikacji i przez które miejsca w kodzie "lata" dana funkcjonalność.

0

O, podebne się pod pytanie jeśli mogę. Też jestem juniorem i trafiłem do bardzo skomplikowanego projektu w architekturze microserwisowej (80 serwisów)

Jak pracować i testować swoje rozwiązania, jeśli posiadam pustą bazę danych, bez obiektów, a muszę implementować logikę ? Wprowadzanie wszystkiego SQL'em nie wchodzi w grę, musiałbym stworzyć chyba kilkadziesiąt różnych zależności, by móc operować na jednym obiekcie :/

Postman też odpada, bo od razu mi strzela errorami, np że nie mam uprawnień, albo jakaś zależność nie istnieje, itp.

4

Jestem juniorem i trafiłem w pracy na monolit o bardzo skomplikowanym kodzie z długiem technologicznym i wieloma zależnościami. Jak najskuteczniej robić zadania w takim labiryncie? Jak najlepiej analizować ten kod?

Dużo pytać innych programistów, bo w takich projektach jest dużo wiedzy ukrytej i "modułów wstydu", które są tak wstydliwe, że jedyna dokumentacja i know how jest w głowie seniorów, którzy są w projekcie dłużej niż ty.

Niestety często o tym, że w kodzie jest spaghetti, dowiadujesz się dopiero po zatrudnieniu. Programiści zwykle NDA mają podpisane właśnie na taką okoliczność - żeby nie wygadali na zewnątrz, że w danej firmie jest spaghetti kod i dług technologiczny, bo to by odstraszyło kandydatów.

2
RezyserKinaAkcji napisał(a):

O, podebne się pod pytanie jeśli mogę. Też jestem juniorem i trafiłem do bardzo skomplikowanego projektu w architekturze microserwisowej (80 serwisów)

Jak pracować i testować swoje rozwiązania, jeśli posiadam pustą bazę danych, bez obiektów, a muszę implementować logikę ? Wprowadzanie wszystkiego SQL'em nie wchodzi w grę, musiałbym stworzyć chyba kilkadziesiąt różnych zależności, by móc operować na jednym obiekcie :/

Postman też odpada, bo od razu mi strzela errorami, np że nie mam uprawnień, albo jakaś zależność nie istnieje, itp.

  1. Jak się uczyć to tylko na głębokiej wodzie.
  2. No ale nie chce mi się wierzyć, że naprawdę nie macie żadnej bazy dla developerów/testerów? Są tam w ogóle jacyś testerzy? Jeśli nie to jak apka z 80 serwisami jeszcze żyje...
  3. W Twojej sytuacji nikt z zewnątrz Ci nie pomoże dopóki w środku nie będzie ulepszenia. Popytaj doświadczonych kolegów jak pracują każdego dnia, jak testują swoje rozwiązania.
3

@Commander300 czytać i pisać testy integracyjne
@RezyserKinaAkcji robisz porządnego DSLa do testów i wio https://github.com/Pharisaeus/almost-s3 ;)

3

W architekturze mikrousług to generalnie jest tak, że jest dobrze określona odpowiedzialność zespołów za dany kawałek domeny. Każdy serwis ma własna bazę danych (lub nie ma w ogóle), testujesz to jak każda normalna aplikacje.

W przypadku większych testów: Po pierwsze nie testujesz e2e całej aplikacji, bo to nie ma sensu w momencie, kiedy masz niezależność wdrożeń (a jak nie masz niezależności wdrożeń, to nie masz mikrousług). Po drugie - jeśli chcesz przetestować większy kawałek, to albo piszecie jakieś Selenium, albo komunikujecie się z określonymi zespołami, żeby udostępnili Wam określony stan swoich serwisów - u nich jest wiedza i tak ma być.

@Commander300 - pair programming? Zadania dla „nowych osób”?

4

Zwykle po sznurku do kłębka. Czepiasz się jakiegoś zewnętrznego zjawiska (dajmy na to tekst wypisany w konsoli, paczka tcp, you name it) szukasz w kodzie, skąd się to bierze. Stamtąd masz już całą pajęczynę możliwości do prześledzenia. Widzisz gównokod i strzelasz, „pewnie tak!”, a jeśli tak to jeśli dopiszę tu takiego printa to zobaczę takie coś! Sprawdzasz, wyciągasz wnioski. W ten sposób dochodzisz od tego co widać do miejsca, które chciałbyś zmienić. :)

0

Jeżeli ktoś jeszcze ma możliwość odpalenia odpalenia aplikacji w IDE i jakiejkolwiek interakcji to jest imho szczęściarzem.

Swego czasu rotowałem średnio co 2-3 tygodnie między projektami legacy (websphery, strutsy, ejb) których ani nie mogłem uruchomić ani poprawnie zaimportować do IDE (n zależności gdzieś w repo klienta do których nie miałem dostępu i pół projektu na moim lokalnym lapku świeciło się na czerwowo ;)
Ps. środowiska dev nie było :D

2

@RezyserKinaAkcji:
80 mikroserwisów dla jednego zespołu czy cały serwis składa się z tylu i Wy macie tylko część?
Przydałoby się Wam jakieś podobne środowisko deweloperskie, może nawet niekoniecznie z frontem. W postmanie możesz napisać sobie skrypt, który będzie wyciągał token uderzając jakimś utworzonym użytkownikiem i wrzucał go w request. Inne rozwiązanie to po prostu porządne testy integracyjne skoro jesteście oddzieleni od środowiska testowego xD

@Commander300
Byłem jakieś 1.5 roku temu w identycznym położeniu. Najlepszym sposobem jest to co opisał Ci @MrMadMatt . Jak któreś fragmenty kodu są dla Ciebie niejasne to najlepiej uderzyć do kogoś kto siedzi w tym projekcie nieco dłużej i robicie sobie taką sesję czytania kodu. Piszesz, że midzi nie chcą zbytnio pomagać - macie tam jakiegoś team lidera? Bo coś jest nie tak i powinniście wiedzieć, że gracie wspólnie do jednej bramki i to jego rola aby zespół był tego świadom.

1 użytkowników online, w tym zalogowanych: 0, gości: 1