Znajdowanie i naprawianie błędów w kodzie programu nadal zajmuje dużo czasu programistom. Zespół z TU Graz opracował rozwiązanie, które radzi sobie z największymi marnotrawcami czasu.
Nowoczesne aplikacje programowe zazwyczaj składają się z licznych plików i kilku milionów linii kodu. Ze względu na ogromną ilość, znajdowanie i korygowanie błędów, znane jako debugowanie, jest trudne. W wielu firmach programistycznych programiści nadal ręcznie szukają błędów – co zajmuje znaczną część ich czasu pracy. Badania wskazują, że stanowi to od 30 do 90 procent całkowitego czasu rozwoju. Birgit Hofer i Thomas Hirsch z Instytutu Technologii Oprogramowania na Uniwersytecie Technicznym w Grazu (TU Graz) opracowali rozwiązanie oparte na istniejących metodach przetwarzania języka naturalnego i metrykach, które mogą znacznie przyspieszyć proces znajdowania wadliwego kodu, a tym samym debugowania.
Lokalizacja usterek pochłania najwięcej czasu
„Jako pierwszy krok przeprowadziliśmy ankiety wśród programistów, aby dowiedzieć się, co jest największą stratą czasu podczas debugowania. Okazało się, że samo naprawianie błędów wcale nie jest dużym problemem, ale programiści są głównie uwikłani w lokalizowanie błędów, tj. zawężanie wyszukiwania do właściwego obszaru w kodzie programu” — wyjaśnia Birgit Hofer.
Opierając się na tym spostrzeżeniu, badacze przystąpili do znalezienia rozwiązania tego problemu, które jest również skalowalne dla aplikacji z dużą ilością kodu. Chociaż istnieją wydajne podejścia oparte na modelach, w których program jest konwertowany na reprezentację logiczną (nazywaną modelem), działa to tylko w przypadku małych programów. Dzieje się tak, ponieważ wysiłek obliczeniowy wzrasta wykładniczo wraz z rozmiarem kodu. Podejście przyjęte przez Birgit Hofer i Thomasa Hirscha przedstawia pewne właściwości oprogramowania w liczbach – na przykład czytelność lub złożoność kodu – i może być również stosowane w przypadku dużych ilości kodu, ponieważ wysiłek obliczeniowy wzrasta tylko liniowo.
Porównanie opisu błędu i kodu
Punktem wyjścia do lokalizacji błędów jest raport o błędzie, w którym testerzy lub użytkownicy wypełniają formularz, w którym opisują zaobserwowaną awarię i wprowadzają informacje o wersji oprogramowania, swoim systemie operacyjnym, krokach, które wykonali przed wystąpieniem awarii, oraz inne istotne informacje. Na podstawie tego raportu o błędzie, połączenie przetwarzania języka naturalnego i metryk analizuje cały kod w odniesieniu do klas i nazw zmiennych, plików, metod lub funkcji oraz wywołań metod i funkcji. Aplikacja identyfikuje sekcje kodu, które najlepiej odpowiadają raportowi o błędzie. W rezultacie programiści otrzymują listę od pięciu do dziesięciu plików uporządkowanych według prawdopodobieństwa, że są odpowiedzialne za zaobserwowaną awarię. Programiści otrzymują również informacje o typie usterki, która najprawdopodobniej jest zaangażowana. Dane te mogą być wykorzystane do szybszego zlokalizowania i naprawienia błędu.
„Czas pracy programistów oprogramowania jest kosztowny, ale często poświęcają więcej tego kosztownego czasu na lokalizowanie i naprawianie błędów niż na rozwijanie nowych funkcji” — mówi Birgit Hofer. „Ponieważ istnieje już wiele podejść do wyeliminowania tego problemu, zbadaliśmy, w jaki sposób możemy je połączyć i udoskonalić, aby stworzyć podstawę do zastosowań komercyjnych. Teraz położyliśmy fundamenty i system działa. Jednak aby zintegrować go z firmą, nadal musiałby zostać dostosowany do jej potrzeb”.
System debugowania jest dostępny za pośrednictwem platformy „GitHub”. Na stronie można znaleźć artykuły i repozytoria związane z tymi badaniami.
Badania te są zakotwiczone w projekcie „Amadeus” Austriackiego Funduszu Naukowego (FWF) ( https://doi.org/10.55776/P32653 ) i jest zakotwiczona w dziedzinie wiedzy specjalistycznej, będącej jednym z pięciu strategicznych obszarów badań na Uniwersytecie Technicznym w Grazu.
<