Наша работа над поиском кода разработана, чтобы позволить программистам использовать в своих интересах большие репозитарии доступного с открытым исходным кодом. Традиционные поисковые системы кода, такие как Google's codesearch, Koders или Krugle обеспечивают доступ к таким репозитариям, но действительно не упрощают задание программистов в использовании кода. Они берут ключевые слова, и возвращает потенциально сотни частей кандидата кода. Программист тогда должен пройти через каждый из этих возвращенных файлов. Они тогда должны видеть, мог ли бы код быть релевантным. Если это, они должны считать его подробно, чтобы определить, ли это точно, что они хотят или по крайней мере близко к нему. Наконец, они должны адаптировать код, чтобы удовлетворить их определенные требования относительно именования, форматирования, обработки ошибок, и т.д.
Мы чувствуем, что лучший подход должен был бы сделать, чтобы программист предоставил более точную информацию относительно того, что они хотят и затем имеют систему, делают трудную работу проверки возвращенных фрагментов кода, изменения кода, чтобы сделать то, что программист хочет, и преобразования кода, чтобы вписаться в целевую платформу. Наш поисковый фронтэнд имеет программу который определить семантику, чего они хотят. Это включает ключевые слова как неофициальное описание, подпись, тестовые сценарии и контракты (через JML) для функциональных спецификаций, ограничения безопасности (использующий модель обеспечения безопасности Java) и распараллеливающий ограничения (не полностью реализованный). Кроме того, пользователь может обеспечить контекст, которому будет соответствовать код. Фронтэнд пытается сделать эти спецификации простыми обеспечить.
Система работает при помощи ключевых слов, чтобы получить доступ к одной из доступных поисковых систем кода (или поисковой системы локального кода для кода, доступного в Brown), получить файлы кандидата. Каждый класс или метод в этих файлах (в зависимости от того, что ищет пользователь) считают потенциальным решением. Эти решения тогда преобразованы, используя ряд приблизительно 30 преобразований в попытке отобразить код в точно, что определил программист. Преобразования колеблются от простого (например, изменение имени метода, чтобы соответствовать подпись) к комплексу (например, нахождение строки в методе, который вычисляет значение возвращенного типа и затем выполнения обратной части, пока единственные свободные переменные не значения типов параметра). Все решения, которые могут быть преобразованы, чтобы соответствовать подпись, тогда протестированы, используя данные тестовые сценарии, ограничения безопасности и правила JML. Дополнительные преобразования могут быть применены на основе результатов тестовых сценариев. Решения, которые передают тестовые сценарии, тогда отформатированы согласно указанному стилю пользователей, сортированному размером, сложностью или производительностью на тестовых сценариях, и представили назад пользователю.
Система может быть испытана (большую часть времени - иногда сервер недоступен) по http://conifer.cs.brown.edu/s6.
Работы
Semantics-Based Code Search (Поиск Кода на Основе Семантике), ICSE 2009, Май 2009.
Specifying What to Search For (Определяя, Что Нужно Искать), SUITE 2009, Май 2009.
Изображения
Фронтэнд:
Результаты показа фронтэнда:
Схема внутреннего устройства:
Программное обеспечение
Программное обеспечение доступно на ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz