Бакалавриат
2021/2022





Исходный код как данные
Статус:
Курс по выбору (Программная инженерия)
Направление:
09.03.04. Программная инженерия
Кто читает:
Департамент программной инженерии
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 3, 4 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
5
Контактные часы:
60
Программа дисциплины
Аннотация
Данная дисциплина познакомит студентов с трудностями, которые возникают в ходе автоматизированного анализа больших объемов исходного кода. Будет показано, каким образом собирать конвейеры (pipeline) для обработки исходного кода как данных, какие особенные методы при этом использовать. Кроме того, будет рассмотрен вопрос масштабирования процесса обработки кода на десятки и сотни тысяч репозиториев.
Цель освоения дисциплины
- Ознакомление студентов с основными этапами обработки кода
- Получение студентами практического опыта имплементации этих этапов
Планируемые результаты обучения
- Понимание основных этапов работы с кодом как данными
- Умение вести качественный проект на GitHub
- Умение применять на практике эти знания - работа с git/GitHub API/классификатором языков программирования/с кодом в виде AST - в частности во время имплементации проект Поиск похожих разработчиков
Содержание учебной дисциплины
- Введение. Почему появилась эта дисциплина?
- Работа с git'ом. Как организован внутри?
- Работа с git'ом. Существующие библиотеки, примеры работы, задание по работе с git для проекта Поиск похожих разработчиков.
- Работа с git hosting'ами.
- Работа с GitHub API. Задание по работе с GitHub API для проекта Поиск похожих разработчиков.
- Классификация языков программирования.
- Использование enry для классификации языков программирования. Задание по работе с классификатором языков программирования для проекта Поиск похожих разработчиков.
- Работа с кодом в виде AST.
- Изучение tree-sitter - библиотеки для извлечения AST из кода.
- Изучение tree-sitter. Задание по работе с кодом в виде AST при использовании tree-sitter для проекта Поиск похожих разработчиков.
- Масштабирование обработки исходного кода.
- Проект GitBase - идеи, концепты, особенности реализации.
- Проект jgit-spark-connector - идеи, концепты, особенности реализации.
- Типичный пайплайн для работы с исходным кодом, раскрытый на примере проекта Поиск похожих разработчиков.
- Как сделать качественный проект? От идеи до реализации с тестами, документацией, докер образами и т.д.
Элементы контроля
- Задание по работе с GitHub API
- Задание по работе с git
- Задание по работе с классификатором языков программирования
- Задание по работе с кодом в виде AST при использовании tree-sitter
- Задание по поиску похожих разработчиков
Промежуточная аттестация
- 2021/2022 учебный год 4 модульОценка = (github_api * 0.15 + git * 0.25 + enry * 0.2 + tree_sitter * 0.25 + similar_dev_search * 0.15) * 8 + (tests + style_check + docker) * 2/3
Список литературы
Рекомендуемая основная литература
- Allamanis, M., Barr, E. T., Devanbu, P., & Sutton, C. (2017). A Survey of Machine Learning for Big Code and Naturalness.
Рекомендуемая дополнительная литература
- Lin, X. V., Wang, C., Zettlemoyer, L., & Ernst, M. D. (2018). NL2Bash: A Corpus and Semantic Parser for Natural Language Interface to the Linux Operating System.
- Shin, R., Allamanis, M., Brockschmidt, M., & Polozov, O. (2019). Program Synthesis and Semantic Parsing with Learned Code Idioms.
- Shin, R., Kant, N., Gupta, K., Bender, C., Trabucco, B., Singh, R., & Song, D. (2019). Synthetic Datasets for Neural Program Synthesis.