Nauczanie maszynowe w walce z błędami w kodzie

Nauczanie maszynowe w walce z błędami w kodzie
Uznaje się, że automatyzacja w pierwszej kolejności wyeliminuje testowanie oprogramowania. Czy powstające jak po deszczu narzędzia wyszukujące błędy w kodzie zredukują zapotrzebowanie na testerów czy może na programistów? Na przykładzie Intel ControlFlag.

Firma Intel zaprezentowała ControlFlag - system używający nauczania maszynowego do badania oprogramowania, który może autonomicznie wykrywać błędy w kodzie. Jak piszą jego twórcy pierwsze wyniki narzędzia są bardzo obiecujące. Jest olbrzymia szansa na znaczące zwiększenie produktywności twórców oprogramowania w wielu pracochłonnych zadaniach. We wstępnych testach ControlFlag uczył się defektów z blisko miliarda linii kodu jakości produkcyjnej.

„Uważamy, że ControlFlag to nowe, potężne narzędzie, które może radykalnie zmniejszyć czas i pieniądze potrzebne do oceny i debugowania kodu. Według badań programiści spędzają około 50% czasu na debugowaniu. Dzięki ControlFlag i podobnym systemom wyobrażam sobie świat, w którym programiści spędzają znacznie mniej czasu na debugowaniu, a więcej na tym, co według mnie powinni robić programiści - przekazywaniu kreatywnych, nowych pomysłów maszynom. ”

–Justin Gottschlich, główny naukowiec i dyrektor / założyciel działu Machine Programming Research w Intel Labs.

Dlaczego to odkrycie ma znaczenie? W świecie coraz częściej zarządzanym przez oprogramowanie programiści nadal spędzają nieproporcjonalnie dużo czasu na naprawianiu błędów, a nie na kodowaniu. Szacuje się, że z 1,25 biliona dolarów jakie branża IT każdego roku wydaje na rozwój oprogramowania, 50% jest wydawanych na debugowanie kodu.

Oczekuje się, że debugowanie jeszcze bardziej będzie angażować programistów i całą branżę przy rosnącej złożoności oprogramowania. Wszystko to za sprawą wkraczania w erę heterogenicznych architektur, zdefiniowanej przez zestawy specjalnie zbudowanych procesorów do zarządzania ogromnym morzem danych. Ponadto trudno jest znaleźć programistów, którzy mają doświadczenie w prawidłowym, wydajnym i bezpiecznym programowaniu na zróżnicowanym sprzęcie, co przekłada się na kolejne ryzyko nowych i trudniejszych do wykrycia błędów w kodzie.

Po pełnym wdrożeniu ControlFlag może wspomóc to wyzwanie, automatyzując żmudne zadania tworzenia oprogramowania, takie jak testowanie, monitorowanie i debugowanie. Pozwoliłoby to programistom nie tylko wydajniej wykonywać swoją pracę i poświęcić więcej czasu kreatywnym zadaniom, ale także zredukowałoby jeden z największych kosztów w dzisiejszym rozwoju oprogramowania.

Jak to działa? Wykrywania błędów w ControlFlag jest możliwe dzięki programowaniu maszynowemu, czyli połączeniu uczenia maszynowego, formalnych metod tworzenia kodu, reguł języków programowania, kompilatorów i systemów komputerowych.

ControlFlag używa w szczególności funkcję opisaną jako wykrywanie anomalii. Ludzie żyjący w świecie przyrody są w stanie definiować pewne wzorce, które dzięki obserwacji uznają za „normalne”. Podobnie ControlFlag uczy się na podstawie zweryfikowanych przykładów, jak wykryć normalne wzorce kodowania jednocześnie identyfikując anomalie w kodzie, które mogą spowodować błąd. Ponadto ControlFlag może wykryć te anomalie niezależnie od języka programowania.

Główną zaletą, niewymagającą ustawiania, ControlFlag jest rozpoznawania i uczenie się wzorców danego programisty  i dostosowania się do jego stylu. Mając nawet ograniczone dane wejściowe, które narzędzie powinno oceniać, ControlFlag może zidentyfikować stylistyczne różnice w programowaniu, podobnie jak czytelnicy książek rozpoznają różnice między pełnymi opisami, a skrótami.

Narzędzie uczy się identyfikować i oznaczać daną stylistykę dzięki czemu adaptuje się i co może być podstawą do identyfikacji błędów ale również może być uznane za stylistyczne odchyleniem między dwoma zespołami programistów.

Intel rozpoczął testy ControlFlag od wewnętrznych projektów, aby zidentyfikować błędy w rozwoju własnego oprogramowania. Jest to kluczowy element projektu Intel Rapid Analysis for Developers, którego celem jest przyspieszenie tempa pracy poprzez zapewnienie wsparcia ekspertów.

Naszym zdaniem

Po tym komunikacie prasowym wiele mediów ogłosiło, że największą korzyścią z nowego rozwiązania będzie eliminacja żmudnego testowania oprogramowania. W naszej opinii na pewno wpłynie to na pracochłonność testowania kodu, ale nie testowania interfejsów programowalnych czy graficznych. Narzędzie to sprawdza jedynie jakość kodu, a jego danymi wejściowymi nie są wymagania klienta, a sam kod źródłowy. Może wyszukiwać wzorców defektów, ale nie będzie w stanie oflagować miejsca gdzie programista źle zinterpretował oczekiwania klienta i zbudował niepoprawny kod.

Przez to, że programowanie jest największym kosztem w produkcji oprogramowania szuka się metod ograniczenia tych wydatków. W rzeczywistości narzędzia takie jak ControlFlag (jeśli tylko zadziałają) pozwolą ograniczyć etaty programistyczne, ale nie wpłyną znacząco na etaty testerskie.

Źródła:
https://newsroom.intel.com/news/intel-machine-programming-tool-detects-bugs-code/
https://whatnext.pl/intel-controlflag-programisci-bledy/