2010/2011 — Осенний семестр
Современная практика коллективной разработки программного обеспечения
Годовой курс по выбору.
Разделы: Бизнес и управление проектами, Программирование.
Кафедра информатики.
Проходит: по четвергам с 18:30 до 19:50, первое занятие 16 сентября. Аудитория: 702 КПМ.
Лектор: Исходжанов Тимур, Software Engineer, Google.
Рекомендуется студентам 3 — 6 курсов, собирающимся работать по компьютерным специальностям.
- Системы контроля версий. Работа с svn, git.
- Code review. Совместное написание кода.
- Bug tracking. Системы отслеживания ошибок.
- Testing. Автоматическое тестирование.
- TDD. Test-driven development.
- Benchmarking. Оптимизация кода, профилирование.
- Open source. Работа в проектах с открытым исходным кодом.
Основной целью предлагаемого курса является обучение студентов современным подходам к разработке ПО, принятым во многих компаниях и сообществах разработчиков. Особое внимание уделяется таким аспектам, как совместная работа в команде и средства автоматического регулярного тестирования. Благодаря предлагаемым подходам многие сложные рутинные задачи, с которыми трудно справляться начинающим программистам, могут быть значительно упрощены.
Изучение тем курса будет сопровождаться практическими занятиями, на которых студенты смогут собственноручно попробовать предлагаемые подходы. Также студенты будут совместно работать над проектами с открытым исходным кодом под руководством инженеров компании Google. В рамках курса будет прочитано несколько лекций по языку
программирования Python, на котором рекомендуется разрабатывать проекты в первой половине данного курса. Также периодически будут читаться лекции, посвящённые различным технологиям Google (в т. ч. с открытым исходным кодом) для расширения
кругозора студентов.
Данный курс рекомендуется студентам 3 — 6 курсов, собирающимся работать по компьютерным специальностям.
Структура курса
- Введение. Отличия в процессах разработки учебных приложений и разработки приложений в большой команде разработчиков.
- Вводный курс языка Python.
- Системы контроля версий (version control systems). Обзор программ Subversion, git. Примеры работы с публичными репозиториями code.google.com, github.com.
- Понятия об оформлении кода на примере Google Code Style Guide.
- Совместная работа с общим репозиторием. Понятие code review. Использование сервиса rietveld (codereview.appspot.com). Утилиты diff, patch.
- Системы учёта ошибок (issue tracking) на примере code.google.com.
- Использование средств ведения журнала сообщений (logging) и средств assert для упрощения процесса поиска ошибок.
- Средства автоматического тестирования на примере Python unittest и googletest. Пример процесса разработки ПО, где написание тестов предшествует написанию кода (test driven development).
- Средства непрерывного тестирования на примере buildbot. Понятия presubmit queue и try job.
- Краткий обзор подходов к проектированию программной архитектуры: паттерны программирования, Model View Controller.
- Понятия «макет класса» и «заглушка» (mock и stub) и их использование на примере python pymox и Google Mock Library.
- Оптимизация. Понятия о сложности алгоритмов. Написание тестов производительности (benchmark). Профилирование.
- Разработка проектов с окрытым исходным кодом (open source). Различные типы лицензий. Подходы, применяемые в проектах с открытым исходным кодом для работы со сторонними разработчиками.
Примеры задач
- Пошаговая игра через Интернет
- SQL-подобная база данных
- Моделирование сложных систем (компьютерные сети)
- Аудио чат
- Распределённые системы (торрент-клиент)
- Поиск по сайту
- Приложение для операционной системы Android
Что развивает курс (данные для «Вектора»)
- Работа в команде (курс сфокусирован на этом)
- Использование ПО для управления проектами (курс сфокусирован на этом)
- Управление бизнес-процессами и их оптимизация (развивает косвенно)
- Понимание проблем заказчика/потребителя (развивает косвенно)
- Постановка задачи и определение критериев успеха (развивает косвенно)
- Достижение результата в соответствии с критериями успеха (развивает косвенно)
Информация о развиваемых компетенциях занесена в систему для работы «Вектора». Поскольку занесение информации производится редакторами проекта, а не авторами курсов, информация может быть неполной или даже частично неверной. Если Вы нашли ошибку, напишите нам об этом. См. также подробнее о системе «Вектор» и полный список компетенций.