Patryk27
2017-05-15 20:02

Mieliśmy ostatnio w pracy inwentaryzację przy wykorzystaniu aplikacji, którą napisałem.

W pewnym momencie u jednej z ekip (sklep ma trochę metrów, zatem byliśmy podzieleni na cztery ekipy) zaczęły pojawiać się podejrzane stany produktów. Takie w rodzaju minus pięć miliardów sztuk :) Była to jedyna drużyna, u której ten błąd występował, a ponadto znajdował się w niej szef, zatem przewinąłem moją flanelową koszulę +64 do programowania na drugą stronę i, zakasawszy rękawy, odpaliłem PhpStorma.

Aplikacja jest stroną internetową i wykorzystuje do komunikacji oraz zapisywania danych do localStorage json (zaskoczenie), zatem moje pierwsze podejrzenie opierało się o istnienie jakiegoś bugu na linii serializacja danych - przetwarzanie.

chrome json int bug w Google (:D) nic ciekawego nie zwróciło, zatem stwierdziłem, że nie będę tak na sucho szukał sam nie wiedząc tak właściwie czego i usiadłem obok tej ekipy, przyglądając się temu, co oni takiego podejrzanego robią, że wywołują błąd.

Hehe, nikt nie zgadnie.

Raz na jakiś czas przypadkowo skanowali kod kreskowy w pole Liczba sztuk produktu :--DD

(jeden był przy komputerze, drugi latał po sklepie ze skanerem, dlatego ten ze skanerem nie widział, co się dzieje na monitorze)

A że taki kod kreskowy przeważnie jest całkiem długi (z rodzaju 314159265359), to i biedny 32-bitowy int się overflował, co przełożyło się na nieprawidłowe działanie aplikacji.

Dodałem odpowiednie zabezpieczenie i magicznie więcej błędów nie było.
Jak to szło: przychodzi tester do baru...

#programowanie #tester #testowanie #php #achciużytkownicy

czysteskarpety

a, bo szef to zawsze wszystko spier... :) ale najważniejsze, że sytuacja opanowana

Patryk27

Ano opanowana, ale przez ponad godzinę (jak ten bug był w akcji) rozważałem zmianę zawodu, bo to nie na moje nerwy :-D

czysteskarpety

w zasadzie to nie był twój błąd, ale wiadomo w razie co trzeba na kogoś zwalić ;)

Marooned

I prawidłowo, że się wywalał, bo produkty są policzalne, a więc liczba sztuk, a nie ilość! grr :P

ŁF

Liczby, które ze swojej natury nie mogą być ujemne, powinny być trzymane w typach liczbowych, które ze swojej natury nie mogą być ujemne. Amen.

msm

@ŁF łatwo tak mówić, do momentu kiedy nie piszesz w PHP (jak tutaj), nie piszesz w JS (jak tutaj), albo nie natniesz się pierwszy raz na quirki typów unsigned (np. w C/C++). Nie bez powodu java typów unsigned w ogóle nie ma (inna sprawa że ta skrajność też jest głupia).

Patryk27

@ŁF: tak, unsigned w JSie ;-) Zresztą zupełnie nie o to chodzi - gdyby nawet JS miał wprost wsparcie dla liczb bez znaku, problem by pozostał w dokładnie takiej samej formie, tylko że liczba sztuk wniosłaby nie minus blah blah, a osiemnaście miliardów.

furious programming

jest też inny wał związany z liczeniem produktów.

Podczas ostatniej inwentaryzacji w znajomym sklepiku, niektóre towary miały ujemną liczbę sztuk - tak jakby sprzedało się więcej niż było na stanie. Gdyby oprogramowanie (tu: desktopowe) korzystało z uintów to licznik by się przekręcił i też było by źle (choć równie ciekawie).

ŁF

@msm, @Patryk27 przecież gdzieś zapisujesz tą liczbę, nie wierzę, że nie w bazie danych. MySql ma typ pola unsigned int i to powinna być ostatnia linia obrony ;-)

Patryk27

@ŁF: co ma typ pola do rzeczy? Tak, jest unsigned, tyle że od zeskanowania produktu do jego zapisania w bazie długa droga ;-) Piszesz tak, jak gdyby głównym problemem było to, że liczba sztuk jest ujemna, chociaż wcale nie o to chodzi.

Azarien

A po co to było zrobione jako strona?

vpiotr

@msm: Java ma jeden typ unsigned (16 bitów): https://ideone.com/3mBSZv Poza tym od Java 8 rozszerzono API klasy Integer o obsługę unsigned.

ŁF

@vpiotr: tu masz php, a java tylko w słowie javascript.

vpiotr

@ŁF: nie wiem o co Ci chodzi. Przeczytaj to co napisał msm 2017-05-16 17:41

spartanPAGE

@vpiotr możesz kliknąć na datę, by uzyskać odnośnik do komentarza: Mieliśmy ostatnio w pracy in... (niestety nie działa jakoś super świetnie jeśli już znajdujesz się w sekcji komentarzy)

Patryk27

@Azarien: ponieważ wtedy można tę aplikację bez problemu odpalić nawet i na tablecie z podpiętym czytnikiem, bez zabawy w "ooo, widzę kolega ma Maczka - cóż, nie przydasz nam się". Poza tym jestem web developerem, nie pamiętam już czasów, gdy tykałem aplikację okienkową, a w robocie jestem jednym programistą :-P

Azarien

to ludzie używali prywatnych urządzeń do pracy?