Ай Дайджест

Свежая выжимка ml и AI статей - каждый день

Улучшение выявления технических долгов в исходном коде Java с помощью обогащенного набора данных

Технический долг (TD) — это термин, используемый для описания дополнительной работы и затрат, которые возникают, когда разработчики выбирают быстрое и простое решение проблемы вместо более эффективного и хорошо продуманного, но требующего больше времени подхода. Самопризнанные технические долги (Self-Admitted Technical Debts, SATD) — это специфический тип технических долгов, которые разработчики намеренно документируют и признают, обычно через текстовые комментарии. Эти самопризнанные комментарии являются полезным инструментом для выявления технических долгов, однако большинство существующих подходов сосредотачиваются на захвате ключевых токенов, связанных с различными категориями TD, пренебрегая богатой информацией, встроенной в сам код.

Недавние исследования сосредоточились на выявлении SATD путем анализа комментариев, встроенных в исходный код, и было проведено мало работы по выявлению технических долгов, содержащихся непосредственно в коде. Чтобы заполнить этот пробел, в данном исследовании через анализ комментариев и связанного с ними исходного кода из 974 проектов Java, размещенных в корпусе Stack, мы создали первый в своем роде набор данных технических долгов, идентифицированных по комментариям кода, вместе с соответствующим исходным кодом. В ходе эмпирической оценки мы обнаружили, что комментарии из полученного набора данных помогают улучшить производительность прогнозирования моделей обнаружения SATD. Более важно, включение классифицированного исходного кода значительно повышает точность прогнозирования различных типов технического долга.

Таким образом, наша работа имеет двойное значение:

  1. Мы верим, что наш набор данных станет катализатором для будущих работ в этой области, вдохновляя на различные исследовательские вопросы, связанные с распознаванием технического долга.
  2. Предложенные классификаторы могут служить базовыми моделями для других исследований по обнаружению TD с использованием созданного набора данных.

Основные понятия и терминология

Технический долг (Technical Debt, TD)

Технический долг — это метафора, используемая в разработке программного обеспечения для описания компромиссов между скоростью разработки и качеством кода. Когда разработчики выбирают быстрое решение, которое может быть не оптимальным в долгосрочной перспективе, они создают технический долг. Это может проявляться в виде:

  • Долгов по дизайну (Design Debt): Недостатки в архитектуре или дизайне кода, которые могут привести к сложностям при дальнейшем развитии или поддержке.
  • Долгов по реализации (Implementation Debt): Код, который был написан быстро, но не соответствует стандартам или принципам хорошего программирования.
  • Долгов по дефектам (Defect Debt): Ошибки или баги, которые не были исправлены, создавая потенциальные проблемы в будущем.
  • Долгов по документации (Documentation Debt): Отсутствие или недостаточная документация, затрудняющая понимание и поддержку кода.
  • Долгов по тестированию (Testing Debt): Недостаточное тестирование, которое может привести к скрытым ошибкам в коде.

Самопризнанные технические долги (Self-Admitted Technical Debts, SATD)

SATD — это технические долги, которые разработчики намеренно документируют через комментарии в коде. Эти комментарии могут содержать предупреждения о временных решениях, плохом дизайне, или необходимости будущих улучшений.

Пре-тренированные языковые модели (Pre-trained Language Models, PLMs)

Пре-тренированные языковые модели — это модели, которые обучаются на больших объемах данных для понимания и генерации текста. Они используются в NLP (обработка естественного языка) для различных задач, включая классификацию текста, перевод, и даже анализ кода. В контексте обнаружения TD, PLMs могут быть использованы для анализа комментариев и кода на предмет наличия технических долгов.

Transformer архитектура

Transformer — это архитектура нейронных сетей, используемая в PLMs, которая позволяет моделям обрабатывать последовательности данных (например, текст) более эффективно, чем предыдущие архитектуры, такие как RNN или LSTM, благодаря механизму внимания (self-attention). Это позволяет моделям учитывать контекст слов в предложении, что критически важно для понимания и генерации текста.

Эмпирическая оценка

Эмпирическая оценка включает в себя эксперименты, проводимые для проверки гипотез и оценки эффективности предложенных методов или моделей. В нашем случае, это оценка того, как обогащенный набор данных влияет на обнаружение SATD и TD в целом.

Методология исследования

Сбор данных

Мы использовали корпус Stack, который содержит примеры кода на 358 языках программирования, но сфокусировались на Java. Из 26 миллионов файлов мы проанализировали 2 миллиона файлов, чтобы извлечь функции и комментарии, связанные с SATD.

Парсинг кода

Для анализа на уровне функций мы использовали инструменты для парсинга исходного кода в AST (Abstract Syntax Tree) представления, что позволило нам извлекать функции и их комментарии.

Инструменты обнаружения SATD

Мы разработали инструменты на основе PLMs для обнаружения SATD в комментариях, используя RoBERTa как базовую модель. Эти инструменты были обучены на наборе данных Maldonado-62K, который включает более 62,000 комментариев, классифицированных на наличие или отсутствие SATD.

Стратегия выборки и аннотация

Для эффективного использования ресурсов и снижения нагрузки на аннотаторов, мы применили стратегию выборки, основанную на неопределенности (uncertainty sampling), чтобы выбрать комментарии, которые могут содержать SATD. Эти комментарии, вместе с соответствующим кодом, были аннотированы группой из семи студентов магистратуры по компьютерным наукам, которые провели аннотацию на предмет наличия TD в коде.

Создание набора данных TESORO

В результате нашей работы мы создали набор данных TESORO, который включает в себя не только комментарии, но и связанный с ними исходный код, что позволяет исследовать технический долг не только через комментарии, но и через сам код.

Эмпирические результаты

Влияние обогащенных данных на обнаружение SATD

Мы провели эксперименты, чтобы ответить на следующие исследовательские вопросы:

  • RQ1: Улучшают ли вручную классифицированные комментарии обнаружение SATD?

    • Результаты показали, что добавление наших новых комментариев к существующему набору данных улучшило производительность моделей обнаружения SATD на 1-14% в зависимости от модели и задачи.
  • RQ2: Улучшает ли включение исходного кода обнаружение технического долга?

    • Включение исходного кода вместе с комментариями значительно улучшило точность обнаружения SATD, особенно когда использовалась полная функция или несколько строк кода вокруг комментария.
  • RQ3: Какова точность различных пре-тренированных моделей при обнаружении TD только из исходного кода?

    • Модели, такие как DeepSeek-Coder, показали наилучшие результаты в обнаружении TD непосредственно из кода, хотя все модели демонстрировали производительность ниже 50% по метрикам EM и F1-score, указывая на необходимость дальнейших улучшений.

Заключение и будущие работы

Наша работа демонстрирует, что интеграция исходного кода в процесс обнаружения SATD значительно улучшает результаты. Мы создали набор данных TESORO, который может быть использован для дальнейших исследований в области обнаружения технических долгов. Будущие работы могут включать улучшение контекста для обнаружения TD путем добавления дополнительной информации, такой как результаты выполнения, покрытие тестами и метрики времени выполнения, что может привести к более точным и всесторонним методам обнаружения технических долгов.