ISDElective

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Страница факультативного курса "Методы разработки программного обеспечения" (Industrial Software Development)

О курсе

Курс для тех, кто хотел бы овладеть методами, применяемыми при разработке крупномасштабного корпоративного программного обеспечения. Будет рассказано о том, каким образом устроена работа с репозиториями исходных кодов, каким образом организуется совместная работа большого количества программистов над одним проектом, как использовать код с открытой лицензией, каким образом проводить рефакторинг и т.д. Подробный список тем приводится далее.

Расписание

Осень 2019

Курс будет проходить по средам с 16:40 до 19:30.
Каждую неделю запланированы одна лекция и одно практическое занятие.
Первое занятие запланировано на 25 сентября.

1 модуль: c 25 сентября по 16 октября – ауд. G115
2 модуль: c 23 октября по 20 ноября – ауд. G115

Не переживайте, если число мест для записи ни факультатив закончилось. Если вам интересен курс, имеет смысл всё равно появиться на первом занятии. Курс смогут проходить более 20 человек.

Предварительный список тем курса

Раздел 1. Системы контроля версий (СКВ) и работа с ними

  • Какие бывают СКВ?
  • История средств и методов контроля версий ПО.
  • Какие бывают репозитории?
  • Что такое моно-репозитории и в чём их отличие от других?
  • Почему современные компании массово переходят на моно-репозитории?

Раздел 2. Непрерывная интеграция

  • Что такое непрерывная интеграция (CI)?
  • Зачем применяется CI и в чём существо используемых методов?
  • Какие современные методы развёртывания ПО применяются в промышленном программировании?
  • В чём отличие библиотеки и приложения, когда речь идёт о развертывании?
  • Что такое контейнеры и как они применяются?

Раздел 3. Тестирование в масштабных программных проектах

  • Зачем нужны модульные тесты?
  • В чём состоят особенности больших проектов, когда речь идёт о тестировании?
  • Что такое интеграционное и регрессионное тестирование, в чём отличия?
  • Какие практики тестирования применяются?
  • Что такое разработка через тестирование (TDD)?

Раздел 4. Практики командной работы с программным кодом

  • Что такое стиль кода?
  • Зачем нужны соглашения о стиле кода? Нужны ли они в действительности?
  • Что такое linter и как с ним работать?
  • Что такое рефакторинг? Как проводить рефакторинг? Когда вам нужен рефакторинг, а когда не нужен?
  • Как правильно распределить изменения по коммитам?
  • Что такое рецензирование кода (code review)?
  • Как готовить код к рецензированию?
  • Как проводить рецензирование чужого кода?
  • Как организовать рецензирование кода в команде?

Раздел 5. Планирование и работа с системами трекинга

  • Что такое баг-трекер (bug/issue tracker)?
  • Какие используются эффективные практики документирования ошибок и требований?
  • Что такое релизные циклы? Как их планировать?
  • Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
  • Что особенно важно не забыть при документировании проблем и ошибок в ПО?

Раздел 6. Особенности разработки и использования открытого программного обеспечения

  • Что такое открытое программное обеспечение?
  • В чём особенности проектов с открытым исходным кодом?
  • Всегда ли ПО с открытым кодом разрабатывается сообществом?
  • Как эффективно использовать ПО с открытым исходным кодом и не наступать на сопутствующие грабли?
  • Какие существуют практики участия в коллективно разрабатываемых проектах?
  • Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?

Раздел 7. Исследования и разработка

  • Чем исследовательские статьи могут быть полезны прикладному программисту?
  • Как правильно инженеру читать статьи? И надо ли вообще их читать?
  • Как и где искать новые способы решения задач, которые надо решать?
  • Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
  • Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?

Раздел 8. Социальные аспекты жизни программиста

  • Что такое интервью? Когда и какие они бывают у программистов?
  • Как правильно готовиться к и проходить интервью?
  • В чём состоят особенности работы программиста в распределённых командах из многих участников?
  • Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?

Оценка

Текущий контроль предусматривает выполнение студентам набора домашних заданий. Накопленная оценка (О_накопленная) за курс выставляется по сумме баллов, полученных за выполнение этих домашних заданий. Оценка за домашнее задание выставляется с учетом полноты выполнения задания, а также способности студента объяснить примененные при решении приемы. На последнем занятии студенты сдают устный экзамен (О_экзамен) по всему материалу курса. Студент получает не менее 80 минут на подготовку к ответу.

О_накопленная формируется на основании суммы баллов, полученных в ходе курса, по следующей схеме:

Балл 0 1-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99 ≥100
О_накопленная 0 1 2 3 4 5 6 7 8 9 10

Результирующая оценка вычисляется по формуле: О_результирующая = min(0,8*О_экзамен + 0,4*О_накопленная; 10)

Авторы курса

  • В. К. Кошелев - лектор курса, ведущий разработчик компании JetBrains (вот тут Владимир рассказывает про баги)
  • А. А. Мицюк - научный сотрудник ФКН (личная страница)

Благодарности

Факультатив проходит при поддержке компании JetBrains.