Regularnie w Sieci publikowane są doniesienia o kolejnych etapach algorytmów uczonych maszynowo w celu pisania programów, co miałoby docelowo prowadzić do bezrobocia technologicznego wśród ludzkich programistów. Na razie jest to jednak dość odległa wizja, co nie znaczy, że nie są opracowywane autonomiczne narzędzia dalece automatyzujące codzienne zadania programisty.
Machine Inferred Code Similarity
Jednym z nich jest Machine Inferred Code Similarity silnik opracowany przez ekspertów z MIT, Georgia Institute of Technology oraz pracowników Intela, który służy maszynowemu porównywaniu bloków kodu. Głównym zastosowaniem MICS jest sprawdzenie, czy dwa bloki kodu realizują te same zadania, nawet jeśli mają one zupełnie inną strukturę i wykorzystują inne algorytmy. Sami twórcy owoce swojej pracy podsumowują następująco:
Zaprezentowaliśmy MICS, system porównujący podobieństwo kodu end-to-end. MICS wnosi dwie główne nowości. Pierwszą jest kontekstowa struktura semantyczna (CASS) zaprojektowana tak, by obsługiwać znaczenia semantyczne dla składni kodu. Druga to neuronowy system szacowania podobieństw z użyciem CASS. Nasze eksperymenty wykazały, że MICS wielokrotnie przewyższa trzy inne systemy sprawdzania podobieństw kodu (jest skuteczniejszy nawet o 40,6 razy).
MICS ma stanowić odpowiedź na bieżące realia, kiedy coraz częściej mamy do czynienia z przeprowadzaniem obliczeń w środowisko heterogenicznym – coraz więcej urządzeń wykorzystuje układy w architekturze ARM, podczas gdy inne trwają przy x86, a to rodzi konkretne wyzwania. W jednym środowisku działać musi kod kompilowany na różne architektury i to między innymi w takich scenariuszach sprawdzić się ma MICS.
CASS, czyli context-aware semantic structure
Jak wspomnieli sami naukowcy, jedną z największych innowacji wprowadzonych przez Machine Inferred Code Similarity jest możliwość pracy silnika ze „świadomością” kontekstu, czy też po prostu kontekstualna semantyczna analiza przetwarzanego i porównywanego kodu. W pierwszym etapie fragmenty kodu (w eksperymencie posłużono się kodem w C/C++) są zatem przetwarzane wspomnianą metodologią CASS.
W kolejnym etapie natomiast, na podstawie rezultatów CASS, wprowadzany jest szacowany współczynnik podobieństwa. I nie chodzi tu rzecz jasna o podobieństwo strukturalne, lecz funkcjonalne. MICS jest bowiem w stanie rozpoznać rezultaty działania kodu i poprawnie zidentyfikować, że rozwiązują one ten sam problem, nawet jeśli robią to w zupełnie inny sposób, wykorzystując zupełnie inną strukturę kodu i algorytm.
Rezultaty i zastosowania
Aktualnie trwają prace nad tym, by silnik MICS przeszedł z fazy testowej i demonstracyjnej do dojrzałości umożliwiającej stosowanie go w praktyce. Docelowo ma on znaleźć zastosowanie w takich zadaniach, jak sugerowanie programistom całych bloków kodu, podobnie jak ma to dziś z pojedynczymi elementami składni w takich mechanizmach, jak m.in. IntelliSens w IDE z rodziny Visual Studio czy ML Complete dla języka Dart.
W rezultacie MICS mógłby analizować z uwzględnieniem kontekstu zastosowanie jakiegoś bloku kodu i sugerować lepsze, prostsze i bardziej zoptymalizowane rozwiązanie problemu. Nie tylko przełożyłoby się to zatem na jakość wytwarzanego oprogramowania, być może nawet na poziomie pozwalającym unikać takich problemów jak code smell, ale też zredukowało czas poświęcany na debugowanie kodu.