Odpowiedzialność za kopiowanie błędów


25

Tworzę program przy użyciu biblioteki stworzonej przez innego programistę (pracuje w tej samej firmie). Niedawno odkryłem wyciek w bibliotece, który zdarza się w pewnych warunkach sieciowych po kilku godzinach działania. Złożyłem błąd z opisem warunków, aby ten wyciek miał miejsce. Ten programista odpowiedział, że „to nie wystarczy”, „nie jest odpowiedzialny za odtwarzanie błędów” i muszę utworzyć test jednostkowy, aby odtworzyć ten błąd, w przeciwnym razie nic nie zrobi.

  1. Czy on ma rację?
  2. Co mogę zrobić w tej sytuacji? Utworzenie testu jednostkowego jest niemożliwe, ponieważ zależy od niektórych losowych ustawień sieci.

26
Jeśli masz zamiar napisać test jednostkowy, równie dobrze możesz naprawić błąd i wziąć kredyt za całość.
JeffO,

3
@JeffO, zarządza tą biblioteką i nie zaakceptuje poprawki błędów. Ponieważ „nie jest przekonany, że błąd kiedykolwiek istniał”
user626528,


Czy to możliwe, że opiekun biblioteki należy do zespołu, którego zasadą jest, że błędy nie są akceptowane bez testów automatycznych? Słyszałem też, że termin test jednostkowy określa, kiedy to, czego się faktycznie oczekuje, może być dowolną formą testu automatycznego, szczególnie w przypadku testu integracyjnego.
Joshua Drake

Odpowiedzi:


30

Czy ma rację, to prawdopodobnie pytanie, na które tak naprawdę nie można odpowiedzieć bez znajomości twojej firmy. Jednak z pewnością nie jest zbyt pomocny.

Zgłaszam z nim błąd (co już zrobiłeś), jeśli powoduje on problem z twoim projektem, podniosę go jako blokera z twoim kierownikiem projektu i jasno stwierdzę, że zgłosiłeś błąd z odpowiednim osoba, ale wpłynie to na twój projekt, jeśli nie zostanie natychmiast naprawiony.

Chciałbym również porozmawiać z deweloperem i wyjaśnić, dlaczego tworzenie testów jednostkowych jest niewykonalne, ale chętnie pokażesz mu to na swoim komputerze (zakładając, że jest to wykonalne?).


48

Ma 100% racji, że musisz podać wystarczającą ilość informacji, aby błąd był odtwarzalny - w przeciwnym razie nie ma szansy dowiedzieć się, czy jakakolwiek poprawka, którą poda, naprawdę zadziała.

Ale - jest w 100% w błędzie IMHO, że musi to być test jednostkowy. Jeśli potrafisz opisać scenariusz testowy w taki sposób, aby mógł odtworzyć awarię (przynajmniej z dużym prawdopodobieństwem w rozsądnym czasie lub przez testowanie ręczne), masz dowód, że problem istnieje - co powinno ustalić twojego kolegę odpowiedzialny za to naprawić. Oczywiście, jeśli jesteś w stanie stworzyć scenariusz, który szybciej odtwarza błąd, byłoby to dla niego pomocne. Najlepiej byłoby wykonać z tego zautomatyzowany test, i to zależy od organizacji, która jest za to odpowiedzialna.


11
Więc jeśli aplikacja zawiesza się „co jakiś czas”, bez dicerowalnego wzorca dla użytkownika, to programista nie musi go naprawiać, ponieważ użytkownik nie może go odtworzyć na polecenie? Zdecydowanie się nie zgadzam tutaj ...
Heinzi

20
@Heinzi: jeśli dostanę raport o błędzie „aplikacja zawiesza się co jakiś czas”, nadałbym temu zagadnieniu bardzo niski priorytet, aby nad nim popracować. Minimalną rzeczą, jakiej oczekuję od użytkownika, jest zapisanie, jak często „od czasu do czasu”, co dokładnie robił z aplikacją w momencie, gdy aplikacja uległa awarii po raz ostatni, oraz dokładny komunikat o błędzie.
Doc Brown

3
@ user626528: IMHO właściciel biblioteki powinien spróbować przejść przez kroki, które każą mu odtworzyć błąd - nie powinien wypróbować 500 nieco innych scenariuszy, gdy twój opis nie pokazuje żadnego błędu.
Doc Brown

6
Reporter nie powinien być zmuszony do wykonywania czynności związanych z odtwarzaniem; dość często po prostu dołączamy zrzut z procesu, który uległ awarii, zwłaszcza jeśli ma to miejsce podczas automatycznego uruchamiania. Cesjonariusz jest odpowiedzialny za znalezienie kroków reprodukcji, aby można było zweryfikować poprawkę.
avakar

2
(To nie znaczy, że reporter nie powinien próbować być pomocny i podać kroki, jeśli je zna. W przypadku sporadycznych awarii reporter nie ma jednak obowiązku tracić czasu na szukanie czegoś, co właściciel komponentu prawdopodobnie zorientuje się szybciej. )
avakar

9

Obie strony powinny włożyć trochę wysiłku.

Deweloper biblioteki powinien włożyć dodatkowy wysiłek nawet bez testów jednostkowych, ponieważ niektórych problemów nie można odtworzyć za pomocą testów jednostkowych. Czasami jest to sprzęt, a czasem konkretna sekwencja poprawnych działań z reszty programu, co powoduje, że biblioteka generuje złe wyniki.

Powinieneś włożyć dodatkowy wysiłek, ponieważ po tym wszystkim nie będę błędem w bibliotece, ale wynikiem niepoprawnych działań reszty programu (np. Uszkodzona sterta może powodować, że każda biblioteka zachowuje się dziwnie). Dlatego sensowne jest ograniczenie w możliwie największym stopniu kodu niebibliotecznego związanego z odtwarzaniem błędów. I prawdopodobnie zrobisz to szybciej i czystiej niż osoba nieznająca kodu Twojej aplikacji.


5

Jeśli autor biblioteki nie jest w stanie odtworzyć błędu na podstawie twojego raportu, nie można oczekiwać, że poświęci mu dużo czasu, a co dopiero naprawić.

Ale masz również ograniczoną ilość czasu spędzonego na pracy nad produktem, który jest dla Ciebie interesujący. Niestety może to oznaczać, że błąd nadal występuje i nie ma pracy nad jego rozwiązaniem.

Na szczęście nie musi to być katastrofą - podczas gdy w idealnym świecie całe oprogramowanie byłoby wolne od błędów, tak nie jest, dlatego musimy ustalać priorytety w oparciu o problemy, jakie powoduje USA.

Oznacza to, że rzeczywiście Twoim obowiązkiem jest opracowanie odtwarzalnego przypadku testowego, JEŚLI CHCESZ TO USUNĄĆ. Możesz nie dbać o to, czy zostanie to naprawione, aw takim przypadku zrobiłeś wszystko, co można i należy od ciebie oczekiwać. Możesz chcieć to naprawić, ale nie na tyle, aby poświęcić czas, aby w tej chwili było odtwarzalne. To jest całkowicie do przyjęcia.

Zgłaszanie błędu najlepiej jak potrafisz w czasie, gdy musisz sobie z nim poradzić, jest po prostu dobrym obywatelstwem, nie musisz wykraczać poza to, chyba że jest to konieczne dla twojego programu. I może nie chcesz tego robić nawet wtedy, może istnieć inna biblioteka, z której możesz skorzystać, lub może być możliwe stworzenie własnej biblioteki w rozsądnym czasie. Zasadniczo to Ty decydujesz, jaki i jaki wysiłek jest dla Ciebie wart.


1
Twoja odpowiedź wygląda dla mnie bardzo dziwnie. Naprawiam błędy sam i nie czekam, aż ktoś wykona brudną robotę zamiast mnie. Powiedziałbym, że głównym obowiązkiem autora kodu jest dołożenie wszelkich starań, aby naprawić swój kod.
user626528,

1
Ponieważ TY jesteś tym, który chce to teraz naprawić, Twoim obowiązkiem jest przekonanie go, że warto JEGO czas naprawić teraz, zamiast 10 lub 12 lat, kiedy nie ma nic ważniejszego do naprawy. theregister.co.uk/2013/01/21/kde_bug_quashed . Biorąc pod uwagę niemożliwy do odtworzenia błąd o znaczeniu X i powtarzalny błąd o tym samym znaczeniu, będę pracować nad powtarzalnym błędem za każdym razem.
jmoreno

za dużo ego. On jest wypłacane do pracy na tej biblioteki bzikujący.
user626528,

1
@ user626528: Tu nie chodzi o ego, chodzi o priorytety - niemożność odtworzenia błędu jest priorytetem. Biorąc pod uwagę dwa błędy EOI (Natychmiastowe wykonanie operatora), jeden powtarzalny, a drugi nie, pracowałbym nad tym, który można odtworzyć jako pierwszy, i powiedziałbym każdemu programistowi, aby zrobił to samo. A jeśli biblioteka nie jest tak często używana, mogę całkowicie pracować nad innym projektem - nawet jeśli błędy w nim nie są tak znaczące. Jeśli jest / wyłącznie / otrzymuje wynagrodzenie za pracę nad tą biblioteką ORAZ nie ma żadnych zaległych żądań funkcji lub błędów innych niż ta, to tak, powinien to zrobić.
jmoreno

2

Byłbym skłonny pozwolić, by śpiące psy na razie kłamały - podniosłeś problem i jest on przypisany do niego. Przypuszczalnie istnieją procesy umożliwiające śledzenie zaległych błędów i ich ściganie?

Jeśli chcesz aktywnie kontynuować ten proces, radzę porozmawiać ze swoim przełożonym, aby sprawdzić, czy dostępne są jakieś narzędzia testowe, które mogą w wiarygodny sposób odtworzyć problem.

Od strony dewelopera - byłoby bardzo obojętne, gdyby nic nie zrobili, biorąc pod uwagę, że dostarczyłeś wymagane informacje. Może się jednak zdarzyć, że mają ogromne obciążenie pracą, więc nie mogą poświęcić czasu potrzebnego na śledzenie problemu.


2

Znalazłeś błąd, zgłosiłeś go, a on jest tym palantem.

Gdybyście byli bliskimi przyjaciółmi, zrobiłby coś, by pomóc, ale wolałby po prostu odepchnąć problem.

Możesz zrobić więcej, zgłaszając więcej szczegółów i próbując wesprzeć swoje twierdzenia, że ​​przecieka pamięć. Mimo to masz własne obowiązki i musisz zakończyć swoją pracę.

Zaloguj jak najwięcej informacji do narzędzia do śledzenia błędów i przejdź dalej.

Jeśli zobaczysz tę osobę ponownie w przyszłości. Bądź przyjacielski, spróbuj porozmawiać o wspólnych zainteresowaniach i zrozum, że dobre relacje to znacznie bardziej skuteczny sposób na naprawienie rzeczy, niż każda ilość faktów, które możesz podać na poparcie roszczenia.


Mam trochę sympatii do autora biblioteki. Być może ich zdaniem jest to, że twórca aplikacji próbuje korzystać z biblioteki i spowodował awarię jej kodu. Nie jest zgłaszany na wolności ani przez żadnego innego programistę, więc dla nich jest to błąd o niskim priorytecie (lub fałszywy).
Robbie Dee,

@RobbieDee tak prawda, to nie była jedna z moich najlepszych odpowiedzi. Pomyślałem, że to dziwne, że ta dwójka nie mogła współpracować, biorąc pod uwagę, że pracują dla tej samej firmy. Mam na myśli to, że jeśli właściciel firmy usłyszał, że pracownik musiał tu przyjść, aby uzyskać wsparcie. Zastanawiam się, co by o tym pomyślał. Nie chciałbym, żeby coś działało w moim miejscu.
Reactgular,

0

Często w podobnych sytuacjach natknąłem się na założenie, że wszystkie błędy powinny zostać naprawione i chociaż jest to godne podziwu, zdecydowanie jest to świetny cel, aby mieć (powiedzmy sobie, że nigdy nie zamierzaliśmy pisać błędów!), Jest to ostatecznie nierealne każdy projekt o przyzwoitej wielkości, aby naprawić błąd tylko dlatego, że jest to błąd (jeśli można go znaleźć!) Dlatego mamy metody zarządzania projektami i kodowania, wzorce i praktyki itp.

Tak więc, jedną rzeczą, którą powiedziałbym w obronie właściciela biblioteki (i tak było w przypadku, gdy pracowałem nad niektórymi dużymi projektami) jest to, że czas deweloperski kosztuje pieniądze i jest skończonym zasobem, więc decyzja o sposobie obsługi raportu , kto bada, jakie testy są produkowane / potrzebne i ostatecznie, jeśli (a jeśli tak, to kiedy) wprowadzono poprawkę, opiera się wyłącznie na wpływie firmy. Jaki jest wpływ na ponowne uruchamianie długotrwałego procesu, jeśli się nie powiedzie i czy można go łatwo zautomatyzować (a może nie powinieneś już być defensywnym środkiem programowania?), Czy to tylko czas, czy może jest coś więcej ?

Spójrz również na to z ich punktu widzenia, raport o błędzie od jednego użytkownika o nieprzewidywalnym problemie w odrobinie kodu, który zdarza się bardzo rzadko, tylko w połączeniu z ich kodem, być może tylko na jednym komputerze i tylko w zestawie nietypowego czasu warunki po prostu nie będą miały uzasadnienia dla dużej części czasu deweloperów na znalezienie i naprawienie - jeśli to w ogóle możliwe. Ale jeśli jest to wystarczająco mocne uzasadnienie biznesowe, aby ten użytkownik chciał / musiał poświęcić czas na dokładniejsze zbadanie sprawy i dostarczyć wiarygodnego przypadku testowego / aplikacji lub radykalnie bardziej szczegółowego opisu problemu niż ich początkowy, to może to być zupełnie inna gra .

Być może jest to kwestia komunikacji, której właściciel biblioteki nie rozważał w ten sposób, a jeśli masz mocne uzasadnienie biznesowe (na przykład, że Twój kod jest kosztowny dla firmy, ma wymagania prawne dotyczące zgodności, dziurę w zabezpieczeniach lub ma trochę inny znaczący efekt domina), nadszedł czas, aby uruchomić zarządzanie i pozwolić im walczyć.


1
Wyrażam współczucie, że ktoś rozważa twoją odpowiedź (co jest praktyczną możliwością) złą i zagłosował za nią. To samo stało się z moją odpowiedzią.
isntn

-3

Wspomniałeś, że „Złożyłem błąd z opisem warunków spowodowania tego wycieku”.

Jeśli masz pewność, że opis naprawdę wystarczy do odtworzenia błędu, znasz już dokładne warunki. Otóż, jeśli nie możesz napisać testu jednostkowego po znajomości warunków, oznacza to wyraźnie, że nie możesz wyśmiewać niektórych zaangażowanych komponentów lub niektórych części kodu jest zbyt mocno połączonych, aby umożliwić stworzenie praktycznego testu jednostkowego.

Należy poprosić właściciela biblioteki o zmianę kodu, aby umożliwić utworzenie testu jednostkowego. Będziesz musiał jasno wyjaśnić, co jest w bibliotece, co powstrzymuje cię przed utworzeniem testu jednostkowego. Będzie musiał zmienić kod, w przeciwnym razie przyzna, że ​​test jednostkowy nie jest możliwy przy obecnym kodzie. W obie strony wygrywasz.

Jeśli to nie zadziała, dostępne są następujące opcje:

  • Błąd można odtworzyć z większą liczbą dowodów.
  • Spróbuj zaangażować wyższy autorytet i poproś go o ocenę twoich dowodów.
  • Spróbuj użyć biblioteki w prototypowej aplikacji ze sztucznym środowiskiem do kodowania tylko w celu odtworzenia błędu. W ten sposób będziesz w stanie udowodnić, że przynajmniej istnieje błąd.

3
Utworzenie testu jednostkowego dla opiekuna biblioteki nie jest obowiązkiem OP.
Andy,

6
Jeśli drugi programista ignoruje raporty o błędach od kogoś, jest praktycznie zerowa szansa, że ​​pozytywnie zareaguje na prośbę o poważne refaktoryzowanie. Ponadto nie wszystkie rodzaje problemów można łatwo odtworzyć za pomocą testów jednostkowych: programmers.stackexchange.com/questions/196105/…
Dan Neely

1
@ DanNeely: Nie ignoruje, twierdzi, że reporter musi zrobić coś więcej - czego nie można zrobić dla reportera. A reporter musi się z powrotem komunikować! Zasugerowałem także zaangażowanie autorytetu, ponieważ do tego doszło.
isntn

1
@Andy Na niektórych pozycjach zgodnie z polityką korporacyjną błędy nie są akceptowane bez automatycznego testu.
Joshua Drake

5
Wydajesz się zdezorientowany co do prawidłowego korzystania z głosowania, a bycie na ten temat raczej nie pomoże twojej sprawie. Przegłosowane są akceptowanym sposobem na powiedzenie „Myślę, że to zła odpowiedź”. Językiem obraźliwym należy się zajmować nie (wyłącznie) poprzez głosowanie w dół, ale poprzez edycję lub oznaczenie, w zależności od tego, czy reszta odpowiedzi jest przydatna. Odpowiedź bez kontekstu można rozwiązać w obu kierunkach, w zależności od tego, jak bardzo jest ona rażąca.
Dan Neely
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.