ISDElective: различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к навигации Перейти к поиску
Нет описания правки
м Откат правок Seosky (обсуждение) к версии Alexmitsyuk
 
(не показано 30 промежуточных версий 3 участников)
Строка 7: Строка 7:
== Регистрация ==
== Регистрация ==


Для регистрации нужно заполнить [http://%20https://docs.google.com/forms/d/e/1FAIpQLScr0mWcfm_ULCve_sGZWb45G46ZEjaDGLDwO8EsqwAU6Qes2w/viewform эту анкету]
Для регистрации нужно заполнить [https://docs.google.com/forms/d/e/1FAIpQLScr0mWcfm_ULCve_sGZWb45G46ZEjaDGLDwO8EsqwAU6Qes2w/viewform эту анкету]


Наша группа в [https://t.me/software_development_hse телеграмме]
Наша группа в [https://t.me/software_development_hse телеграмме]


== Расписание ==
=== Осень 2019 ===
=== Осень 2019 ===


Строка 17: Строка 18:
Первое занятие запланировано на 25 сентября.
Первое занятие запланировано на 25 сентября.


1 модуль: c 25 сентября по 16 октября – ауд. '''G118'''<br />
1 модуль: c 25 сентября по 16 октября – ауд. '''G103'''<br />
2 модуль: c 23 октября по 20 ноября – ауд. '''G118'''
2 модуль: c 23 октября по 20 ноября – ауд. '''G103'''
 
'''Внимание, 23 октября занятия не будет из-за сессии, следующее - 30 октября.'''<br />
Внимание, 9 октября занятия не будет, следующее - 16 октября.


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


== Предварительный список тем курса ==
== Предварительный список тем курса ==
Строка 30: Строка 33:
* История средств и методов контроля версий ПО.  
* История средств и методов контроля версий ПО.  
* Какие бывают репозитории?   
* Какие бывают репозитории?   
* Что такое моно-репозитории и в чём их отличие от других?
* Что такое моно-репозитории и в чём их отличие от других? Почему компании переходят на моно-репозитории?
* Почему современные компании массово переходят на моно-репозитории?
 
[https://docs.google.com/presentation/d/1ZG8zGEYdriQyFkCbh6yUV9O3opGxihRmsIore045dzQ/edit?usp=sharing Слайды для лекции по VCS]
 
[https://www.youtube.com/watch?v=8Ph81IYXVxE&feature=youtu.be Видео лекции по VCS]


[https://docs.google.com/presentation/d/1ZG8zGEYdriQyFkCbh6yUV9O3opGxihRmsIore045dzQ/edit?usp=sharing Слайды для лекции по VCS ]
==== Раздел 2. Верификация и Валидация ====


==== Раздел 2. Тестирование в масштабных программных проектах ====
* Статический Анализ: Теорема Райса, Алгоритмическая неразрешимость, Аппроксимация сверху и снизу, Неточный анализ.  
* Тестирование программ: уровни, методы, цели. Тестовые фреймворки и мокинг. Покрытие, Профилирования, Бернчакринг.
* Валидация: догфудинг, UI сессии, метрики и аналитика, АБ-тестирование.


* Зачем нужны модульные тесты?
[https://docs.google.com/presentation/d/1IvD3z-TME1SBFMMl7CnVmZerj6ZcDuXraj71iQDYWO0/edit?usp=sharing Слайды для лекции Verification and Validation]
* В чём состоят особенности больших проектов, когда речь идёт о тестировании?
* Что такое интеграционное и регрессионное тестирование, в чём отличия?
* Какие практики тестирования применяются?
* Что такое разработка через тестирование (TDD)?


==== Раздел 3. Непрерывная интеграция ====
[https://www.youtube.com/watch?v=758p3aOC_QE Видео лекции Verification and Validation]


* Что такое непрерывная интеграция (CI)?
==== Раздел 3. Системы сборки, пакетные менеджеры и непрерывная интеграция ====
* Зачем применяется CI и в чём существо используемых методов?
 
* Какие современные методы развёртывания ПО применяются в промышленном программировании?
[https://docs.google.com/presentation/d/1SQYu_bvZhZth4vnvMMbSh_Jkme7XaQy2Swbws2Swh50/edit?usp=sharing Слайды для лекции Building and Distribution]
* В чём отличие библиотеки и приложения, когда речь идёт о развертывании?
 
* Что такое контейнеры и как они применяются?
[https://www.youtube.com/watch?v=KZWmmWVENFg Видео лекции Building and Distribution]


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


* Что такое стиль кода?
* Что такое стиль кода?
* Зачем нужны соглашения о стиле кода? Нужны ли они в действительности?
* Зачем нужны соглашения о стиле кода?
* Что такое linter и как с ним работать?
* Что такое принципы проектирования?
* Что такое рефакторинг? Как проводить рефакторинг? Когда вам нужен рефакторинг, а когда не нужен?
* Какие есть принципы в ООП?
* Как правильно распределить изменения по коммитам?
* Что такое шаблоны проектирования, чем они отличаются от принципов?
* Что такое рецензирование кода (code review)?
* Что такое рецензирование кода (code review)?
* Как готовить код к рецензированию?
* Как готовить код к рецензированию?
* Как проводить рецензирование чужого кода?
* Как проводить рецензирование чужого кода?
* Как организовать рецензирование кода в команде?
* Как организовать рецензирование кода в команде?
[https://docs.google.com/presentation/d/13Dlhm0A4tiTahzbIPBLLUAr-PMP4nUooNfYGeq4O9pA Слайды]
[http://google.github.io/styleguide/ Google Style Guides]
[https://google.github.io/eng-practices/review/ Google's Engineering Practices - Code Review Developer Guide]
[https://www.youtube.com/watch?v=KOJgKdwjg88 Видео лекции How to write code]


==== Раздел 5. Планирование и работа с системами трекинга ====
==== Раздел 5. Планирование и работа с системами трекинга ====
Строка 70: Строка 81:
* Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
* Как должна выглядеть хорошая запись об ошибке для себя/другого программиста?
* Что особенно важно не забыть при документировании проблем и ошибок в ПО?
* Что особенно важно не забыть при документировании проблем и ошибок в ПО?
[https://www.youtube.com/watch?v=TbEXkm2LsgY Видео лекции Product management]


==== Раздел 6. Особенности разработки и использования открытого программного обеспечения ====
==== Раздел 6. Особенности разработки и использования открытого программного обеспечения ====
Строка 79: Строка 92:
* Какие существуют практики участия в коллективно разрабатываемых проектах?
* Какие существуют практики участия в коллективно разрабатываемых проектах?
* Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?
* Каковы особенности использования ПО с открытым исходным кодом в коммерческих разработках?
[https://www.youtube.com/watch?v=_OKG8VKMFE8 Видео лекции про свободное ПО]


==== Раздел 7. Исследования и разработка ====
==== Раздел 7. Исследования и разработка ====
Строка 87: Строка 102:
* Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
* Чем отличается характер работы в исследовательских (R&D) компаниях или отделах компаний от работы обычного прикладного/системного программиста?
* Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?
* Стоит ли описывать в исследовательских статьях свои собственные результаты? Что это даёт инженеру, который не занимается научной работой?
[https://www.youtube.com/watch?v=V_Y-slDJBM0 Видео лекции]


==== Раздел 8. Социальные аспекты жизни программиста ====
==== Раздел 8. Социальные аспекты жизни программиста ====
Строка 94: Строка 111:
* В чём состоят особенности работы программиста в распределённых командах из многих участников?
* В чём состоят особенности работы программиста в распределённых командах из многих участников?
* Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?
* Почему работа современного программиста не может рассматриваться в отрыве от социальных аспектов?
[https://www.youtube.com/watch?v=g-ouezO7-ME Видео восьмой лекции]
[https://www.youtube.com/playlist?list=PLEqoHzpnmTfBKKNYsPjCF34vOWOco292i Плейлист с записями всех лекций курса осенью 2019 года]


== Оценка ==
== Оценка ==

Текущая версия от 10:36, 26 августа 2022

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

О курсе

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

Регистрация

Для регистрации нужно заполнить эту анкету

Наша группа в телеграмме

Расписание

Осень 2019

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

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

Внимание, 23 октября занятия не будет из-за сессии, следующее - 30 октября.
Внимание, 9 октября занятия не будет, следующее - 16 октября.

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

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

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

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

Слайды для лекции по VCS

Видео лекции по VCS

Раздел 2. Верификация и Валидация

  • Статический Анализ: Теорема Райса, Алгоритмическая неразрешимость, Аппроксимация сверху и снизу, Неточный анализ.
  • Тестирование программ: уровни, методы, цели. Тестовые фреймворки и мокинг. Покрытие, Профилирования, Бернчакринг.
  • Валидация: догфудинг, UI сессии, метрики и аналитика, АБ-тестирование.

Слайды для лекции Verification and Validation

Видео лекции Verification and Validation

Раздел 3. Системы сборки, пакетные менеджеры и непрерывная интеграция

Слайды для лекции Building and Distribution

Видео лекции Building and Distribution

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

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

Слайды

Google Style Guides Google's Engineering Practices - Code Review Developer Guide

Видео лекции How to write code

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

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

Видео лекции Product management

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

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

Видео лекции про свободное ПО

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

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

Видео лекции

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

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

Видео восьмой лекции

Плейлист с записями всех лекций курса осенью 2019 года

Оценка

Текущий контроль предусматривает выполнение студентам набора домашних заданий. Накопленная оценка (О_накопленная) за курс выставляется по сумме баллов, полученных за выполнение этих домашних заданий. Оценка за домашнее задание выставляется с учетом полноты выполнения задания, а также способности студента объяснить примененные при решении приемы. На последнем занятии студенты сдают устный экзамен (О_экзамен) по всему материалу курса. Студент получает не менее 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.