S6: Wyszukiwanie kodu oparte na semantyce

Oryginał dostępny w dniu cs.brown.edu

Nasza praca w zakresie wyszukiwania kodów ma za zadanie zapewnienie programistom wykorzystania wielkich zasobów kodów typu open source dostępnych w sieci.  Tradycyjne wyszukiwarki takie jak Google codesearch, Koders czy Krugle umożliwiają dostęp do takich zasobów, ale tak naprawdę nie upraszczają zadania polegającego na użyciu tych kodów przez programistę. Na podstawie słów kluczowych podpowiadają one setki rezultatów wyszukiwań dotyczących potencjalnie użytecznych fragmentów kodów. Programista musi samodzielnie sprawdzić każdy z rezultatów wyszukiwania i tylko w taki sposób może potwierdzić jego potencjalną użyteczność. Jeśli  takowe znajdzie, dopiero ich dokładna analiza może odpowiedzieć na pytanie o ich mniejszą lub większą zgodność z zapotrzebowaniem. Na koniec, jego zadaniem będzie adaptacja kodu w celu spełnienia specyficznych wymagań dotyczących nazewnictwa, formatowania, raportowania i poprawy błedów, etc.

Uważamy, iż znacznie lepszym podejściem będzie umożliwienie programistom przekazania bardziej precyzyjnej informacji co do ich życzeń i potrzeb  aby dopiero wtedy pozwolić naszemu systemowi wykonanie niewdzięcznej pracy sprawdzania i dopasowania wyszukanych fragmentów kodu, dostosowania go do potrzeb programisty i tworzonego rozwiązania. Nasz front end wyszukiwania pozwala programiście na szczegółowe sformułowanie semantyki swoich potrzeb. Obejmuje on między innymi użycie słów kluczowych, nieformalnych opisów, przypadków testowych i kontraktów (za pomocą Java Modelling Language) dla specyfikacji funkcjonalnych, ograniczeń związanych z zabezpieczeniami (używając modelu zabezpieczeń Java) oraz ograniczeń wątków. Dodatkowo, użytkownik może opisać kontekst w jaki musi wpisać się poszukiwany kod. Nasz front end ma za zadanie ułatwić formułowanie i przekazywanie takich specyfikacji.

System poprzez zastosowanie słów kluczowych umożliwia dostęp do jednej z dostępnych wyszukiwarek kodów (lub lokalnej wyszukiwarki dostępnej w Brown University) aby pozyskać zbiór potencjalnie przydatnych rezultatów. Każda z klas lub metod (bloków kodu) pojawiających się w rezultatach wyszukiwania (w zależności od zdefiniowanego przez użytkownika sposobu wyszukiwania) jest klasyfikowana jako zbiór potencjalnych rozwiązań. Takie zbiory są następnie przekształcane za pomocą około 30 dostępnych transformacji w celu zmapowania kodu do dokładnych oczekiwań klienta. Transformacje te są zróżnicowane: od prostych (np. zmiana nazwy metody w celu dopasowania jej do sygnatury) do kompleksowych (znalezienia linii w metodzie, która oblicza wartość zwrotną a następnie zastosowanie wstecznej dekonfiguracji  – tzw. backward slice – aż do otrzymania zestawu zmiennych swobodnych składających się tylko z wartości parametrów). Wszystkie rozwiązania, które mogą być przekształcone tak aby odpowiadać zadanej sygnaturze są następnie sprawdzane z użyciem przypadków testowych, ograniczeń bezpieczeństwa oraz reguł JML. Na podstawie rezultatów przypadków testowych można również zidentyfikować pożądane dodatkowe transformacje Rozwiązania które pomyśłnie przeszły testy są następnie formatowane zgodnie ze specyficznym stylem użytkownika, sortowane na podstawie wielkości, kompleksowości i jakości zachowania podczas testów i prezentowane użytkownikowi. 

System można wypróbować (przez większość czasu, czasami serwer jest niedostępny) pod adresem http://conifer.cs.brown.edu/s6.

Rozszerzając oryginalne funkcjonalności systemu S6, umożliwiśmy znajdowanie odpowiednich interfejsów użytkownika za pomocą szkiców interfejsów oraz dopasowanie przypadków testowych na podstawie przesłanego do testowania kodu 

Publikacje

Semantics-Based Code Search, ICSE 2009, May 2009.

Specifying What to Search For, SUITE 2009, May 2009.

Seeking the User Interface, ASE 2014.

Creating Test Cases Using Code Search unpublished.

Hunter: Next-Generator Code Reuse for Java by Yuepeng Want, Yu Feng, Ruben Martins, Arati Kaushik, Isil DIllig and Steven Reiss, FSE 2016.

Seeking the User Interface by Steven Reiss, Yun Miao and Qi Xin, Automated Software Engineering Journal, 2017.

Obrazy (zrzuty ekranowe)

Front end:

Front end pokazujący rezultaty wyszukiwania:

Diagram pokazujący intern>ls:

Oprogramowanie

Oprogramowanie jest dostępne tu: ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz.