Nowe narzędzie naprawi zawieszanie się programów Javy i nie tylko
Naukowcy z North Carolina State University oraz IBM Research opracowali narzędzie o nazwie HangFix, który może automatycznie naprawić większość wzorców w kodzie, które sprawiają, że programy się zawieszają. Jingzhu He, Xiaohui Gu i Guoliang Jin z North Carolina State oraz Ting Dai z IMB Research przedstawią na AMC Symposium on Cloud Computing w przyszłym tygodniu pracę naukową na temat tego, jak ich wynalazek może załatać Java bytecode, który doprowadza do zawieszania się aplikacji w środowisku chmurowym.
Obiecujące narzędzie
Wyżej wspomniani naukowcy twierdzą, że prototyp programu HangFix został już zaimplementowany. Jego twórcy utrzymują, że zbadali reprodukcje 42 prawdziwych błędów, polegający na zawieszeniu się JVM, w 10 szeroko używanych usługach chmurowych (np. Cassandra, HDFS, Mapreduce, czy HBase) - ich program naprawił 40 z nich w ciągu kilku sekund. Naprawa takich bugów zazwyczaj zajmuje developerom kilka dni i, co gorsza, trzeba to robić ręcznie.
Przy pozostałych dwóch błędach trzeba było trochę więcej pogrzebać i to przy pomocy innych programistów. Niemniej jednak powyższy wynik i tak jest bardzo obiecujący.
Według twórców HangFix jest w stanie rozpoznać aż 76% ze wszystkich 237 błędów, które do tej pory zidentyfikowano. Twórcy mówią, że reszta bugów dotyczy głównie współbieżności i synchronizacji, które można rozwiązać przy pomocy innych narzędzi do tego przeznaczonych.
HangFix w kodzie
Nowe narzędzie skupia się na 4 wzorcach, które mogą spowodować zawieszenie się systemu/programu. Są to:
- Nieoczekiwane pojawienie się wartości zwracanych funkcji w pętlach
- Niepoprawnie skonfigurowane parametry w pętlach
- Niewłaściwa obsługa wyjątków w pętlach
- Blokowanie operacji, które nie zawierają pętli.
Zawieszanie się programów
Twórcy narzędzia utrzymują, że błędy doprowadzające do zawieszania się programów są trudne do odnalezienia, ponieważ nie produkują zazwyczaj zbyt dużo informacji diagnostycznej. Ciężko jest też je odnaleźć podczas testów, ponieważ są one wynikiem deformacji danych związanych z uruchamianiem programu lub problemów w wewnętrznej komunikacji, które dają o sobie znać na produkcji.
Błędy powodujące zawieszanie się programów różnią się od bugów, które powodują crash, tym, że są po prostu frustrujące i spowalniają pracę, powodując przerwy w działaniu całych serwerów.
Koszty
Zawieszenie się programu lub systemu może być dosyć drogie. Outage usług dla British Airways z 2017 roku kosztował firmę około 80 milionów funtów. Bug, który to spowodował, pojawił się po deformacji danych spowodowanych przez awarię w centrum danych.
Innym przypadkiem jest pięciogodzinny outage Amazon DynamoDB z 2015 roku, który zawiesił m.in. Netflixa, Tindera, czy portal filmowy IMDb. A wszystko przez bug, który był rezultatem złej obsługi błędów, co obciążyło serwer metadanych zbyt wieloma żądaniami.
Co dalej?
Xiaohui Gu, jeden z twórców HangFix, mówi, że narzędzie ma zostać oficjalnie wydane jako open source na GitHubie. Warto tutaj jeszcze zaznaczyć, że zostało ono zaprojektowane z myślą o Javie, ale będzie go można używać z innymi językami programowania, według tego, co mówi Gu.