Свежая выжимка ml и AI статей - каждый день
Технический долг (TD) — это термин, используемый для описания дополнительной работы и затрат, которые возникают, когда разработчики выбирают быстрое и простое решение проблемы вместо более эффективного и хорошо продуманного, но требующего больше времени подхода. Самопризнанные технические долги (Self-Admitted Technical Debts, SATD) — это специфический тип технических долгов, которые разработчики намеренно документируют и признают, обычно через текстовые комментарии. Эти самопризнанные комментарии являются полезным инструментом для выявления технических долгов, однако большинство существующих подходов сосредотачиваются на захвате ключевых токенов, связанных с различными категориями TD, пренебрегая богатой информацией, встроенной в сам код.
Недавние исследования сосредоточились на выявлении SATD путем анализа комментариев, встроенных в исходный код, и было проведено мало работы по выявлению технических долгов, содержащихся непосредственно в коде. Чтобы заполнить этот пробел, в данном исследовании через анализ комментариев и связанного с ними исходного кода из 974 проектов Java, размещенных в корпусе Stack, мы создали первый в своем роде набор данных технических долгов, идентифицированных по комментариям кода, вместе с соответствующим исходным кодом. В ходе эмпирической оценки мы обнаружили, что комментарии из полученного набора данных помогают улучшить производительность прогнозирования моделей обнаружения SATD. Более важно, включение классифицированного исходного кода значительно повышает точность прогнозирования различных типов технического долга.
Таким образом, наша работа имеет двойное значение:
Технический долг — это метафора, используемая в разработке программного обеспечения для описания компромиссов между скоростью разработки и качеством кода. Когда разработчики выбирают быстрое решение, которое может быть не оптимальным в долгосрочной перспективе, они создают технический долг. Это может проявляться в виде:
SATD — это технические долги, которые разработчики намеренно документируют через комментарии в коде. Эти комментарии могут содержать предупреждения о временных решениях, плохом дизайне, или необходимости будущих улучшений.
Пре-тренированные языковые модели — это модели, которые обучаются на больших объемах данных для понимания и генерации текста. Они используются в NLP (обработка естественного языка) для различных задач, включая классификацию текста, перевод, и даже анализ кода. В контексте обнаружения TD, PLMs могут быть использованы для анализа комментариев и кода на предмет наличия технических долгов.
Transformer — это архитектура нейронных сетей, используемая в PLMs, которая позволяет моделям обрабатывать последовательности данных (например, текст) более эффективно, чем предыдущие архитектуры, такие как RNN или LSTM, благодаря механизму внимания (self-attention). Это позволяет моделям учитывать контекст слов в предложении, что критически важно для понимания и генерации текста.
Эмпирическая оценка включает в себя эксперименты, проводимые для проверки гипотез и оценки эффективности предложенных методов или моделей. В нашем случае, это оценка того, как обогащенный набор данных влияет на обнаружение SATD и TD в целом.
Мы использовали корпус Stack, который содержит примеры кода на 358 языках программирования, но сфокусировались на Java. Из 26 миллионов файлов мы проанализировали 2 миллиона файлов, чтобы извлечь функции и комментарии, связанные с SATD.
Для анализа на уровне функций мы использовали инструменты для парсинга исходного кода в AST (Abstract Syntax Tree) представления, что позволило нам извлекать функции и их комментарии.
Мы разработали инструменты на основе PLMs для обнаружения SATD в комментариях, используя RoBERTa как базовую модель. Эти инструменты были обучены на наборе данных Maldonado-62K, который включает более 62,000 комментариев, классифицированных на наличие или отсутствие SATD.
Для эффективного использования ресурсов и снижения нагрузки на аннотаторов, мы применили стратегию выборки, основанную на неопределенности (uncertainty sampling), чтобы выбрать комментарии, которые могут содержать SATD. Эти комментарии, вместе с соответствующим кодом, были аннотированы группой из семи студентов магистратуры по компьютерным наукам, которые провели аннотацию на предмет наличия TD в коде.
В результате нашей работы мы создали набор данных TESORO, который включает в себя не только комментарии, но и связанный с ними исходный код, что позволяет исследовать технический долг не только через комментарии, но и через сам код.
Мы провели эксперименты, чтобы ответить на следующие исследовательские вопросы:
RQ1: Улучшают ли вручную классифицированные комментарии обнаружение SATD?
RQ2: Улучшает ли включение исходного кода обнаружение технического долга?
RQ3: Какова точность различных пре-тренированных моделей при обнаружении TD только из исходного кода?
Наша работа демонстрирует, что интеграция исходного кода в процесс обнаружения SATD значительно улучшает результаты. Мы создали набор данных TESORO, который может быть использован для дальнейших исследований в области обнаружения технических долгов. Будущие работы могут включать улучшение контекста для обнаружения TD путем добавления дополнительной информации, такой как результаты выполнения, покрытие тестами и метрики времени выполнения, что может привести к более точным и всесторонним методам обнаружения технических долгов.