Pracuję dla firmy produkującej oprogramowanie. Mamy dużych klientów korporacyjnych, którzy wdrażają nasz produkt i zapewniamy im wsparcie. Na przykład, jeśli występuje wada, zapewniamy łatki itp. Innymi słowy, jest to dość typowa konfiguracja.
Niedawno wydano i przypisano mi bilet dotyczący wyjątku znalezionego przez klienta w pliku dziennika, który ma związek z równoczesnym dostępem do bazy danych w klastrowej implementacji naszego produktu. Tak więc konkretna konfiguracja tego klienta może mieć kluczowe znaczenie w przypadku wystąpienia tego błędu. Od klienta dostaliśmy tylko plik dziennika.
Podejście, które zaproponowałem mojemu zespołowi, polegało na próbie odtworzenia błędu w konfiguracji podobnej do konfiguracji klienta i uzyskania porównywalnego dziennika. Nie zgadzają się jednak z moim podejściem, mówiącym, że nie muszę odtwarzać błędu, ponieważ jest to zbyt czasochłonne i będzie wymagało symulacji klastra serwerów na maszynach wirtualnych. Mój zespół sugeruje, że po prostu „podążam za kodem”, aby zobaczyć, gdzie znajduje się kod niebezpieczny dla wątków i / lub transakcji, i wprowadzam zmiany w wyniku prostego rozwoju lokalnego, który nie jest implementacją klastra, taką jak środowisko, z którego wystąpienie błąd pochodzi.
Dla mnie opracowanie abstrakcyjnego planu (kodu programu) zamiast namacalnej, widocznej manifestacji (odtwarzanie w czasie wykonywania) wydaje się trudne, dlatego chciałem zadać ogólne pytanie:
Czy uzasadnione jest naleganie na odtworzenie każdej usterki i debugowanie jej przed zdiagnozowaniem i naprawieniem?
Lub:
Jeśli jestem starszym programistą, czy powinienem być w stanie odczytać kod wielowątkowy i stworzyć w pamięci obraz tego, co robi we wszystkich scenariuszach przypadków użycia, zamiast wymagać uruchamiania aplikacji, testowania różnych scenariuszy przypadków użycia i przejścia przez kod po linii? A może jestem kiepskim deweloperem wymagającym tego rodzaju środowiska pracy?
Czy debugowanie dla maminsynek?
Moim zdaniem każda poprawka przesłana w odpowiedzi na zgłoszenie zdarzenia powinna zostać przetestowana w środowisku symulowanym tak, aby znajdowała się jak najbliżej pierwotnego środowiska. Skąd jeszcze możesz wiedzieć, że to naprawi problem? To jak wypuszczenie nowego modelu pojazdu bez testowania zderzeniowego z manekinem, aby wykazać, że poduszki powietrzne rzeczywiście działają.
Wreszcie, jeśli się ze mną zgadzasz:
Jak mam porozmawiać z moim zespołem, aby przekonać ich, że moje podejście jest rozsądne, konserwatywne i bardziej kuloodporne?
new
. I te błędy nie są gwarantowane w sposób niezawodny, zgodnie ze specyfikacją Java Memory Model