Original:http://cs.brown.edu/~spr/research/s6.html

6 : пошук на основі семантики коду

Наша робота з пошуку коду призначена для того, щоб програмісти могли скористатися великими сховищами доступного відкритого коду. Традиційні пошукові системи коду, такі як Google Code Search, Кодерс або Krugle, забезпечують доступ до таких сховищ, але насправді не спрощують роботу програмістів у використанні коду. Вони беруть ключові слова та повертають потенційно сотні претендентських частин коду. Потім програміст повинен пройти кожен з цих повернутих файлів. Потім вони повинні з'ясувати, чи може кодекс бути релевантним. Якщо це так, вони повинні прочитати його докладно, щоб визначити, чи це саме те, що вони хочуть, або, принаймні, до нього. Нарешті, вони повинні адаптувати код, щоб відповідати їхнім особливим вимогам щодо іменування, форматування, обробки помилок тощо.

Ми вважаємо, що кращий підхід полягає б у тому, щоб програміст надавав більш точні дані про те, що вони хочуть, а потім матимуть систему виконувати грубу роботу з перевірки фрагментів коду повернення, модифікації коду, щоб зробити те, що хоче програміст, і перетворення коду на цільову рамку. У нашому інтерфейсі пошуку програміст визначає семантику того, що вони хочуть. Це включає в себе ключові слова як неформальне опис, підпис, тестові випадки та контракти (через JML) для функціональних специфікацій, обмежень безпеки (за допомогою моделі безпеки Java) та обмежень потоку (не повністю реалізовані). Крім того, користувач може надати контекст, в якому код відповідатиме. Передній кінець намагається зробити ці специфікації легкими для забезпечення.

Система працює за допомогою ключових слів, щоб отримати доступ до одного з доступних пошукових систем коду (або локальної пошукової системи коду для коду, доступного у Брауні), щоб отримати кандидатські файли. Кожен клас або метод у цих файлах (в залежності від того, що шукає користувач) вважається потенційним рішенням. Ці рішення потім перетворюються, використовуючи набір близько 30 перетворень, намагаючись відобразити код саме в тому, що вказав програміст. Перетворення варіюються від простого (наприклад, зміни назви методу на відповідність підпису) до комплексу (наприклад, виявлення рядка в методі, який обчислює значення поверненого типу, а потім виконує зворотний фрагмент, доки не будуть доступні лише вільні змінні значення типів параметрів). Всі рішення, які можуть бути перетворені на підпис, піддаються тестуванню з використанням даних тестів, обмежень безпеки та правил JML. Додаткові перетворення можуть бути застосовані, виходячи з результатів тестових випадків. Рішення, що передають тестові випадки, потім відформатуються відповідно до вказаного користувачем стилю, відсортовані за розміром, складністю або продуктивністю в тестових випадках і подаються назад користувачеві.

Система може бути спробованабільшості випадків - іноді сервер не працює) за адресою http://conifer.cs.brown.edu/s6 .

У подальшій роботі до оригіналу S6 ми розширили систему, щоб знайти інтерфейси користувача, маючи ескіз інтерфейсу користувача, і знайти тестові випадки, котрі повинні бути перевірені.

Статті

Семантичний пошук коду , ICSE 2009, травень 2009.

Вкажіть, що шукати , SUITE 2009, травень 2009.

Шукаю користувальницький інтерфейс , ASE 2014.

Створення тестових випадків з використанням коду пошуку не опубліковано.

Hunter: повторне використання коду наступного генератора для Java за допомогою Yuepeng Want, Ю Фенга, Рубен Мартінс, Араті Каусик, Ісіл ДІІЛІГ та Стівен Рейсс, FSE 2016.

Пошук інтерфейсу користувача Стівена Рейса, Юнь Мяо та Ци Сінь, Автоматизований програмний інжиніринговий журнал, 2017.

Зображення

Передній кінець:

S6 передня частина зображення

Внутрішній інтервал показує результати:

інтерфейс з результатами

Діаграма внутрішніх органів:

внутрішній вигляд

Програмне забезпечення

Програмне забезпечення доступне за адресою ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz .