Skip to content
/ tp_hse Public

Технологии программирования, ДБИ ВШБ ВШЭ

Notifications You must be signed in to change notification settings

demist/tp_hse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

year status progress

4 модуль, 2023/2024 учебный год, ВШЭ ВШБ ДБИ

Обратим внимание: оценки по ТЗ ведут семинаристы

Аннотация

Курс про все, что связано с созданием ПО, кроме непосредственно написания программного кода

Курс состоит из лекционного материала (в формате записей и тестов к ним) и очных "живых" семинарских занятий.

Лекционный материал включает краткий обзор важных с точки зрения процесса разработки понятий: методы отладки и этапы исправления дефектов ПО, критерии хорошей и неудачной архитектуры, этапы проектирования и разработки, методологии разработки. Семинарский материал состоит из рассказа о важных инструментах программиста: системы контроля версий, системы сборки, gdb, valgrind, развертывание и настройка систем непрерывной интеграции.

Цель курса — дать слушателям, которые параллельно изучают языки программирования, алгоритмы и т.п., информацию и дополнительные знания, какими инструментами можно пользоваться и на что обращать внимание при создании рыночного программного продукта.

Лекционный материал

Записи лекций и тесты

Плейлист с лекциями на YouTube

Курсивом выделены предварительные даты, жирным - фактические.

Тема Ссылка на запись Ссылка на презентацию(и) Контрольный тест Дата публикации теста Дата и время закрытия теста
0 Организационное YouTube нет презентации нет теста
1 Этапы развития проекта YouTube pdf-файл Тест №1 7 апреля 14 апреля 18:00
2 Базовые понятия о языках программирования YouTube pdf-файл Тест №1 7 апреля 14 апреля 18:00
3 Основные диаграммы UML YouTube(1/2) YouTube(2/2) pdf-файл Тест №2 14 апреля 21 апреля в 18:00
4 CI/CD/CD YouTube pdf-файл Тест №2 14 апреля 21 апреля в 18:00
5 Отладка ПО, ч.1: работа с ошибками ПО YouTube(1/2) YouTube(2/2) pdf-файл Тест №3 21 апреля 28 апреля в 18:00
6 Отладка ПО, ч.2: техники отладки YouTube YouTube(дополнение) pdf-файл Тест №3 21 апреля 28 апреля в 18:00
7 Управление качеством ПО, ч.1 YouTube pdf-файл Тест №4 28 апреля 5 мая в 18:00
8 Управление качеством ПО, ч.2 YouTube(предисловие) YouTube pdf-файл Тест №4 28 апреля 5 мая в 18:00
9 Принципы проектирования ПО, ч.1 YouTube pdf-файл Тест №5 12 мая 19 мая в 18:00
10 Принципы проектирования ПО, ч.2 YouTube pdf-файл Тест №5 12 мая 19 мая в 18:00
11 Архитектурные паттерны YouTube(1/2) YouTube(2/2) pdf-файл Тест №6 19 мая 26 мая в 18:00
12 Методологии разработки ПО YouTube(1/2) YouTube(2/2) Доп.1 Доп.2 Доп.3 pdf-файл Тест №6 19 мая 26 мая в 18:00

Содержание лекций

Лекция 0

Организационное

  • План курса
  • Правила оценивания
  • Информация о заданиях
  • Контрольные мероприятия

Лекция 1

Этапы развития проекта

  • Основные этапы жизненного цикла проектирования, реализации и внедрения ПО
  • Формирование требований
  • Разработка концепции
  • Техническое задание
  • Эскизный проект
    • Понятие о MVP и примеры MVP
  • Технический проект
  • Рабочая документация
  • Поставка / ввод в действие
  • Сопровождение
  • Вывод из эксплуатации

Почитать подробнее про MVP можно тут, тут, тут и тут

Хороший пост про "Техническое задание на разработку ПО"

Лекция 2

Базовые понятия о языках программирования

  • Парадигмы программирования
    • Императивное программирование
      • Описание
      • Примеры
      • "Вложенные парадигмы"
        • Процедурное программирование
        • Структурное программирование
        • Аспектно-ориентированное программирование
        • Объектно-ориентированное программирование
        • Обобщенное программирование
    • Декларативное программирование
      • Пример-объяснение
      • "Вложенные парадигмы"
        • Логическое программирование
        • Функциональное программирование
    • Общая схема парадигм
    • Метапрограммирование
    • Реализация парадигм в языках программирования
  • Компилируемые и интерпретируемые языка
    • Определения
    • Примеры
  • Типизация
    • Сильная / слабая типизация
    • Статическая / динамическая типизация
    • Явная / неявная типизация

Лекция 3

Основные диаграммы UML

  • Что такое UML?
    • Базовое понятие о нотации UML
  • Диаграмма вариантов использования
    • Понятие о вариантах использования
    • Понятие об акторах
    • Нотация диаграммы вариантов использования
  • Диаграмма классов
    • Понятие о классах
    • Нотация диаграммы классов
    • Выделение сущностей
      • Карточки CRC
      • Метод Аббота
  • Диаграмма последовательности
    • Нотация диаграммы последовательности
  • Диаграмма состояний
    • Нотация диаграммы состояний
  • Диаграмма деятельности
    • Нотация диаграммы деятельности

UML Cheat Sheet

Лекция 4

CI/CD/CD

  • CI/CD/CD
  • Понятие о Continuous Integration
  • Понятие о Continuous Delivery
  • Понятие о Continuous Deployment
  • Пример организации процесса разработка из индустрии
    • Этап проектирования
    • Этап реализации
    • Этап сдачи задачи
    • Подготовка к выпуску версии

TravisCI, TeamCity, GitHub Actions, Jenkins

Лекция 5

Отладка ПО, ч.1: работа с ошибками ПО

  • Основные этапы отладки ПО
  • Воспроизведение дефекта
    • Необходимая информация для воспроизведения
  • Анализ дефекта
    • Понятие root-cause
    • Условия возникновения
    • Область повреждения
    • Необходимые выводы
  • Дизайн исправления
    • Технический
    • Архитектурный
    • Технологический
  • Исправление дефекта
  • Валидация исправления
  • Интеграция исправления в код или целевую систему
  • Дополнительные валидации после интеграции

Лекция 6

Отладка ПО, ч.2: техники отладки

  • Запуск программ в отладчике (трассировка)
    • Софтверный дебаггер
    • "Железный" дебаггер
    • Удаленный дебаггер
  • Логирование
    • Работы системы
    • Программного кода
  • Анализ программного кода без исполнения программы
    • "Метод пристального взгляда"
    • Статические анализаторы
  • Анализ поведения системы
    • Упрощение сценария
    • Ограничение объема данных
    • Упрощение данных / запроса
  • UNIT-тестирование
  • Прототипирование
  • Отладка с помощью дампов
  • Отладка с помощью перехватов
  • Профилирование кода
  • Выполнение кода в другой среде
  • Отладка методом RPC (Remote procedure call)
  • Отладка путем анализа документации
  • Отладка трансляцией кода
    • Трансляция "вниз"
    • Трансляция "вверх"
  • Отладка разработкой интерпретатора
  • Метод индукции
  • Метод дедукции
  • Обратное движение по алгоритму

Лекция 7

Управление качеством ПО, ч.1

  • Понятие о качестве ПО
  • Характеристики и атрибуты качества ПО
  • Основые аспекты качества ПО
  • Парадокс тестировщика
  • Соответствие ожиданиям stakeholder'ов
  • Качество и деньги
    • Десятичное правило качества
    • Важные аспекты

Лекция 8

Управление качеством ПО, ч.2

  • Ручное тестирования
    • Класс эквивалентности
    • Граничные значения
  • 7 ключевых инструментов качества
    • Причинно-следственная диаграмма Исикавы
    • Блок-схема
    • Контрольный листок
    • Контрольная карта (карта Шухарта)
      • Примеры
    • Гистограмма
    • Диаграмма Парето
    • Диаграмма разбрасывания
  • Ручное тестирование. Практические советы
  • Автоматизированное тестирование
    • Основные аспекты
    • Жизненный цикл автотеста
    • Практические советы
    • Как на практике?

Лекция 9

Принципы проектирования ПО, часть 1

  • Что такое программа, как она устроена, как она работает
  • Что такое архитектура ПО
  • Что такое "Проектирование ПО"?
  • По каким критериям можно оценить архитектуру?
    • Критерии хорошей архитектуры
      • Эффективность
      • Гибкость
      • Расширяемость
      • Масштабируемость, тестируемость, возможность повторного использования, сопровождаемость
    • Критерии неудачной архитектуры
      • Жесткость
      • Хрупкость
      • Неподвижность
  • Принцип High Cohesion / Low Coupling

Отличный ресурс про паттерны проектирования

Лекция 10

Принципы проектирования ПО, часть 2

  • Принципы SOLID
    • Single responsibility principle
    • Open-closed principle
    • Liskov substitutional principle
    • Interface segregation principle
    • Dependency inversion principle
  • Закон Деметры
  • YAGNI
  • DRY / DIE
  • KISS

Лекция Роберта Uncle Bob Мартина про SOLID

Лекция 11

Архитектурные паттерны

  • Классификация архитектуры ПО
    • Локальные
    • Распределенные
      • Файл-серверные
      • Клиент-серверные
        • Двухзвенные
        • Трехзвенные
        • Многозвенные
  • Локальные приложения
    • MVC (Model-View-Controller)
  • Клиент-серверная архитектура
    • Тонкий и толстый клиент
    • Трехзвенная архитектура
  • Оценка нагрузки на систему
  • Тим проекта и влияние на нагрузку
  • Ресурсы для обеспечения производительности
  • Масштабирование
    • Горизонтальное
    • Вертикальное
    • Функциональное разбиение
    • Шардинг
  • Типичная архитектура веб-сервиса
  • Типичная архитектура нагруженной информационной системы

Лекция 12

Методологии разработки ПО

  • Основные понятия
  • Факторы, оказывающие влияние на процесс разработки
    • Внешние факторы
    • Внутренние факторы
  • Каскадная модель
  • V-модель
  • Инкрементная модель
  • Итерационная модель
  • Спиральная модель
  • RAD-модель
  • Семейство гибких методологий
    • Agile-манифест
    • Scrum
    • Kanban

Статья про методологии разработки

Семинары

Объявления к семинарам

Подготовка к Семинару №1

Для успешного выполнения практики на Семинаре №1 вам понадобятся некоторые инструменты, для разных операционных систем на вашем ПК действия разные:

  • Если у вас Windows, варианты:
  • Если у вас MacOS - у вас есть уже приложение Terminal
    • Очень желательно, кроме того, установить brew
      • Инструкция тут
        • Достаточно в Terminal вставить команду /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • После установки brew - установить Git
      • Инструкция тут
        • Достаточно в Terminal вставить команду brew install git
  • Если у вас Linux (любой дистрибутив) - у вас уже есть приложение Терминал / Эмулятор терминала / "что-то подобное" - точно есть во всех дистрибутивах, просто поищите
    • Нужно установить Git
      • Достаточно в Терминале набрать команду sudo apt-get install git (если выпадает ошибка - стоит погуглить, какой менеджер пакетов используется в вашем дистрибутиве)

План семинаров

Семинар 1 (неделя 1)

Базовые инструменты разработки ПО, ч.1

Bash и основные команды.

План семинара:

  • показываем bash
  • базовые команды bash: touch, rm, cd, mkdir, rmdir, ls, cp, mv, cat, echo, ...
  • пишем простой скрипт на bash (Например, считаем количество файлов в директории)
  • пишем более сложный скрипт на bash (Например, считаем количество файлов в директории в разрезе типов файлов)

bash commands cheatsheet

bash script cheatsheet

Семинар 2 (неделя 2)

Базовые инструменты разработки ПО, ч.2

Системы контроля версий, git, опционально gitflow

План семинаров

  • рассказываем про системы контроля версий в целом (зачем нужно, какие есть)
  • рассказываем основы git: что такое репозиторий, что такое ветки, что такое коммиты, pull-request'ы
  • показываем: создание репозитория на github, клонирование локально, создание файла, коммит, push origin
  • показываем работу с ветками, переключение между ветками, поиск источника изменений (какой коммит привел к изменению конкретной строчки в файле)
  • показываем процесс создаения pull-request'а на github: от клонирования репозитория до принятия pull-request'а (с resolving'ом конфликтов)

Семинар 3 (неделя 3)

Инструменты отладки

Профилировка, gdb и valgrind

План семинара:

  • запускаем любимую IDE
  • пишем простую программу (на Java), запускаем дебагер
  • показываем профилировщик
  • показываем gdb - как работать из консоли (опять же, на простом примере - на C++)
  • показываем valgrind в простейших сценариях (память не освобождена, переменная не инициализирована, используется неинициализированная переменная в условном переходе)
  • опционально показать статический анализатор кода (для Java)

Семинар 4 (неделя 4)

Тестирование ПО

Отработка на семинаре простейших примеров написания тестов на Java, демонстрация разных видов тестов

План семинара:

  • пишем на Java пару простых функций (например, сложение и умножение чисел)
  • показываем юнит-тесты (каждую функцию)
  • показываем нагрузочное тестирование (запускаем много итераций теста, смотрим производительность)
  • показываем сценарное тестирование (на уровне "посчитаем значения выражения")
  • показываем, как настроить простейший CI в GitHub Actions

Семинар 5 (неделя 5)

Диаграммы UML

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

План семинара:

  • решаем задачку на диаграмму вариантов использования (например, "варианты использования сайта аэропорта")
  • решаем задачку на диаграмму последовательности (например, "снимаем деньги в банкомате")
  • решаем задачку на диаграмму деятельности (например, "поступаем в университет")
  • решаем задачку на диаграмму состояний ("рассматриваем сдачу курса: изучается-сдан-пересдача-не сдан")
  • решаем задачку на диаграмму классов ("например, система "пользователь заказывает билеты на сайте аэропорта")

Семинар 6 (неделя 6)

Практика проектирования

Отрабатываем практические навыки проектирования (без погружения в программный код) понятных предметных задач: заказ такси через приложение, покупка в интернет-магазине...Рисуем диаграммы классов UML

План семинара:

  • решаем простую задачу на проектирование локального приложения (мобильного или десктопного), без взаимодействия с сервером. Например, проектируем простейшее приложение для создания и хранения заметок. Жетально проектировать на уровне классов. Если идет сложно - сначала пытаемся выделить варианты использования и придумать, как их реализовать. Даже если получится по итогу криво, главное, чтобы получилось хоть что-то..
  • решаем задачу посложнее на проектирование клиент-серверного приложения. Например, приложение для заказа такси. Обязательно надо подстветить проблему, что запрос от клиента до сервера может не дойти (или от сервера до клиента), как это можно решать (спойлер - таймлимитом)

Контрольные мероприятия

Тесты по лекциям (6 штук)

  • Всего будет 6 тестов
  • Каждый тест - по двум лекциям, распределение лекций по тестам - в таблице Записи лекций и тесты
  • Каждый тест - 10 вопросов (5 по одной лекции, 5 - по другой). Каждый вопрос стоит 1 балл, всего за один тест можно набрать 10 баллов
  • Тесты публикуются в определенные дни (по воскресеньям), согласно графику. На выполнение теста - 1 неделя (дедлайн по тесту указан в таблице, также будет дублироваться объявлением)
  • Каждый студент проходит тест только 1 раз
  • Результаты непосредственно после прохождения теста не публикуются, посмотреть правильные ответы нельзя
  • После закрытия теста публикуются результаты и баллы за него, а также правильные ответы

Техническое задание №1 (ТЗ1)

Пишем скрипт на bash

Легенда задания

Вам нужно написать скрипт на bash, который на вход принимает два параметра - две директории (входная директория и выходная директория). Во входной директории могут находиться как файлы, так и вложенные директории (внутри которых тоже могут быть как файлы, так и папки) - уровень вложенности может быть любой. Задача скрипта - "обойти" входную директорию и скопировать все файлы из нее (и из всех сложенных директорий) в выходную директорию - но уже без иерархии, а просто все файлы - внутри выходной директории.

Пример:

Входная директория = /home/input_dir; Выходная директория = /home/output_dir.

/home/output_dir изначально пустая.

Структура /home/input_dir:

  • input_dir
    • a.txt
    • dir2
      • b.txt
    • dir3
      • c.txt

Тогда после работы вашего скрипта структура /home/output_dir должна быть следующая:

  • output_dir
    • a.txt
    • b.txt
    • c.txt

Обратите внимание: в разных поддиректориях входной директории могут быть файлы с одинаковым названием. В момент копирования в выходную аудиторию необходимо такие ситуации каким-либо образом разрешить без потери файлов и содержания файлов (как именно - на ваше усмотрение).

Требования и критерии оценки

За задание вы можете получить максимум 10 баллов.

Семинарист при проверке может выставить за какой-либо пункт частичный балл, если требования пункта выполнены не полностью.

  • 1 балл Скрипт запускается и принимает два параметра
  • 1 балл Реализовано получение списка файлов, находящихся непосредственно во входной директории (не во вложенных в нее директориях)
  • 1 балл Реализовано получение списка директорий, находящихся во входной директории
  • 3 балла Реализовано получение списка всех файлов, вложенных во входную директорию
  • 1 балла Реализовано копирование всех файлов, вложенных во входную директорию в выходную директорию
  • 3 балла Решена проблема с файлами, имеющими одинаковое название

Дедлайн

Есть два дедлайна - мягкий и жесткий.

  • Если вы присылаете ваше решение до мягкого дедлайна - то ваш семинарист проверяет работу, дает замечания, и далее у вас есть 3 дня на то, чтобы внести исправления (и получить балл выше). Обратите внимание, допускается именно исправление замечаний, а не доработка каких-то пунктов задания, которые вы изначально не сделали. Вы можете не вносить исправления и согласиться на тот балл, который получили по итогам первой проверки.
  • Если вы присылаете ваше решение после мягкого дедлайна, но до жесткого дедлайна - семинарист проверяет вашу работу и выставляет балл. Исправления не допускаются.
  • Если вы присылаете ваше решение после жесткого дедлайна, то задание не проверяется, и вы получаете 0 баллов

Сроки

Мягкий дедлайн: 6 дней после семинара №2 (в разных группах это могут быть разные даты!).

Жесткий дедлайн: 13 дней после семинара №2 (в разных группах это могут быть разные даты!).

Например, если семинар №2 прошел у вас в понедельник, то мягкий дедлайн - до воскресенья той же недели включительно, жесткий дедлайн - в воскресенье спустя неделю после мягкого дедлайна.

Формат сдачи

Задание вы сдаете своему семинаристу. Результаты выполнения задания должны быть загружены в репозиторий на GitHub. Канал отправки ссылки на репозиторий семинаристу - на усмотрение семинариста.

Техническое задание №2 (ТЗ2)

Добавляем тесты и разворачиваем простейший CI/CD

Задание состоит из двух частей. Каждая часть оценивается максимум в 5 баллов. Общий максимальный балл за задание: 5 + 5 = 10 баллов

Часть №1 Тестирование (стоит 5 баллов из 10)

Задание

Реализуйте на Java простейшую программу, которая будет считывать из файла числа, а далее отдельными функциями искать среди этих чисел минимальное число, максимальное число, считать их общую сумму и произведение.

Функции должны называться, соответственно _min (минимальное число), _max (максимальное число), _sum (сумма всех чисел), _mult (произведение всех чисел).

Числа в файле записаны в одной строке, друг от друга отделены пробелами. В файле есть минимум одно число. Максимально возможное количество чисел в файле - 1 млн.

Для этой программы подготовьте тесты:

  • проверяющие корректность работы функций поиска минимума и максимума
  • проверяющие корректность работы функций сложения и умножения
  • проверяющие скорость работы программы при увеличении размера входного файла (при увеличении количества чисел в файле).

Пример работы

В файле: 1 4 2 3

Минимальное: 1

Максимальное: 4

Сумма: 10 (1+2+3+4)

Произведение: 24 (1*2*3*4)

Критерии оценки

  • 1 балл: реализуйте функции чтения из файла, поиска минимального числа, поиска максимального числа, сложения и умножения всех чисел из файла
  • 1 балл: реализуйте тесты для проверки корректности функций поиска минимума, максимума, сложения и умножения
  • 1 балл: реализуйте тесты для проверки скорости работы программы при увеличении размера входного файла (для каждой из функций: поиск минимума, максимума, сложение и умножение)
  • 1 балл: реализуйте любой другой тест на ваше усмотрение
  • 1 балл: постройте график зависимости времени выполнения от кол-ва чисел в файле (вы можете измерять время выполнения любой функции из реализованных на ваш выбор)

Часть №2 (стоит 5 баллов из 10)

Github Actions

Travis CI

Circle CI

Задание

Теперь вам необходимо настроить CI-систему для своего мини-проекта.

Критерии оценки

  • 1 балл: заведите репозиторий для своего проекта на GitHub. Оформите простейший README.md (туториал по markdown (файлы формата .md)). Загрузите в репозиторий файлы своего мини-проекта (код, тесты, README.md).
  • 1 балл: подключите к вашему проекту любую CI-систему (выше есть подсказки с вариантами систем, но мы крайне рекомендуем использовать GitHub Actions в рамках этого задания, только если Ваш семинарист не демонстрировал вам другую систему). Обеспечьте возможность запуска тестов в ручном режиме (например, по щелчку кнопки в веб-интерфейсе CI-системы)
  • 1 балл: настройте CI таким образом, чтобы прогон тестов запускался автоматически при любом новом коммите в репозиторий вашего проекта
  • 1 балл: сделайте интеграцию CI-системы и вашего репозитория на GitHub: сделайте бэйдж в README.md, который будет показывать текущий статус тестов. Для информации смотрите тут, тут или в аналогичном доке для выбранной вами CI-системы. Как выглядят бэйджи в целом, можно посмотреть в любом проекте на GitHub, где они сделаны, например, в репозитории Telegram
  • 1 балл: сделайте любую интеграцию CI-системы и какого-либо мессенджера (например, telegram, slack, msteams и т.п.). Настройте систему так, чтобы при успешном прохождении теста посылалось сообщение "все ок", при неуспешном - посылалась информация, какие именно тесты не пройдены. Обратите внимание, тут не нужно писать код, тут нужно взять готовые аддоны / расширения и просто настроить

Дедлайн

Мягкий дедлайн: 6 дней после семинара №4 (в разных группах это могут быть разные даты!).

Жесткий дедлайн: 13 дней после семинара №4 (в разных группах это могут быть разные даты!).

Техническое задание №3 (ТЗ3)

Проектируем небольшое приложение по требованиям

Задание

Вам необходимо спроектировать небольшое приложение. Подчеркнем, что вам нужно именно спроектировать приложение, а не разработать его. Писать программный код не нужно. В рамках проектирования приложения вам необходимо подготовить несколько UML-диаграмм.

Какие инструменты можно использовать для построения диаграмм

Вы можете использовать любые удобные для вас инструменты. Как вариант, предлагаем следующие бесплатные онлайн-сервисы:

Легенда

Наверное, каждый из вас хоть раз заказывал доставку еды через мобильное приложение. Если нет - можете посмотреть, как работают подобные сервисы, например, Яндекс.Еда или Delivery Club. Вам необходимо спроектировать подобное приложение. Понятно, что вы не можете в деталях знать, как устроена работа подобных систем с ресторанами и курьерами - но от вас и не требуется описать то, как работает в данных системах. Вы можете предложить любые процессы и сценарии на ваше усмотрение, главное, чтобы они были логичны и реализуемы.

Требования и критерии оценки

  • Обязательное требование (без выполнения этого пункта проверка невозможна): подготовьте краткое (0.5-1 стр текста) описание системы, для которой вы будете далее строить диаграммы
  • 2 балла Постройте диаграмму вариантов использования. На диаграмме укажите только основные сценарии (не более 5-7 штук).
  • 2 балла Постройте диаграмму последовательности для процесса заказа еды через приложение
  • 2 балла Постройте диаграмму состояний для заказа (подумайте, какие статусы могут быть у заказа)
  • 2 балла Постройте диаграмму деятельности для описания процесса обработки заказа системой
  • 2 балла Постройте диаграмму классов для системы. Обратите внимание, можно вместо классов указывать большие "модули системы" - например, "модуль оплаты" или "модуль расчета времени доставки"

Дедлайн

Мягкий дедлайн: 6 дней после семинара №5 (в разных группах это могут быть разные даты!).

Жесткий дедлайн: 13 дней после семинара №5 (в разных группах это могут быть разные даты!).

Письменный экзамен в онлайн-формате (ЭКЗ)

Итоговая оценка за экзамен ставится по 10-балльной шкале (без округления).

Письменный экзамен включает в себя вопросы исключительно по лекционной части курса. Для подготовки - пересматривайте записи лекций, смотрите презентации к лекциям - все есть в этом репозитории.

🔥 Экзамен пройдет 14 июня.

Начало экзамена - в 10:00.

Как будет устроен экзамен:

  • В 10:00 в tg-группе курса будет запущен видеочат. Кратко проговорим правила игры и формальности
  • После этого будет опубликована ссылка на google-форму (как было на тестах) - вы заходите и выполняете задания
  • Задания есть двух типов
    • Привычные тестовые
    • Задания, в которых нужно написать ответ словами ("задания с открытым ответом")
  • У заданий будет видно, сколько какое задание "стоит" баллов
  • Продолжительность экзамена - 2.5 часа
  • Оценка за экзамен = (набранное количество баллов / суммарное количество баллов за все задания экзамена) * 10 (без округления)
  • Если в письменном экзамене увидим плагиат - 0 баллов за экзамен получат все, у кого ответы совпадают. В первую очередь, речь про задания со свободным ответом. В то, что 2 человека могут независимо написать 3-4 предложения, совпадающих слово в слово, мы не верим. Разбираться, кто у кого списал - не будем, просто выставим "0 баллов" всем, у кого ответы будут совпадать с другими работами (если хотя бы один ответ даже совпадает)
  • Прокторинга не будет

Понедельный план

Обратите внимание - на каждой неделе курса рекомендуется изучать определенные лекции.

Изучать лекции быстрее графика можно, но не рекомендуем - может быть слишком много информации в единицу времени, лучше не торопиться.

Изучать лекции медленнее графика - крайне не рекомендуем, могут быть сложности и на семинарах, и с ТЗ, и в конце курса будет завал (а там еще и сессия будет близко и будет не до этого).

Обратим внимание: в таблице ниже график семинаров - ориентировочный, в разных группах может быть разное расписание. Соответственно, даты выдачи ТЗ и дедлайны (мягкий и жесткий по ТЗ) у разных групп может отличаться. Дедлайны по ТЗ считаются от даты фактического проведения определенного семинара.

Неделя № лекций для изучения Семинары (ориентировочно) Выдача заданий (ориентировочно) Сдача заданий (ориентировочно)
До первого семинара 0 Установить необходимое ПО для курса на свои машины
1 1, 2 №1 Базовые инструменты разработки ПО, ч.1
2 3, 4 №2 Базовые инструменты разработки ПО, ч.2 ТЗ1: Пишем скрипт на bash
3 5, 6 №3 Инструменты отладки Мягкий дедлайн ТЗ1
4 7, 8 №4 Тестирование ПО ТЗ2: Добавляем тесты и разворачиваем простейший CI/CD Жесткий дедлайн ТЗ1
5 9, 10 №5 Диаграммы UML ТЗ3: Проектируем небольшое приложение по требованиям Мягкий дедлайн ТЗ2
6 11, 12 №6 Практика проектирования Жесткий дедлайн ТЗ2 Мягкий дедлайн ТЗ3
7 ЭКЗ Жесткий дедлайн ТЗ3

Правила оценивания

Оценка за тесты = Сумма баллов по всем тестам / 6

Каждый тест оценивается по 10-балльной шкале. Оценка за тесты не округляется.

Финальная оценка = Математическое округление (0.1*Оценка за тесты + 0.15*ТЗ1 + 0.15*ТЗ2 + 0.15*ТЗ3 + 0.45*ЭКЗ)

About

Технологии программирования, ДБИ ВШБ ВШЭ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published