Инструменты разработки

Кирилл Корняков (Intel, ННГУ)
Февраль 2019

Структура лекций

  1. Первые 10 минут письменная самостоятельная работа
    • Рекомендуется посещать и не опаздывать
  2. Основная часть, лекция
    • Рекомендуется вести конспект
  3. Иногда постараемся проводить живые демонстрации

Практические занятия

Необходимо разработать библиотеку на С++, которая:

  1. Решает простую прикладную задачу
  2. Разрабатывается на GitHub
  3. Собирается при помощи CMake
  4. Имеет модульные тесты на базе GoogleTest
  5. Имеет документацию

Каждый шаг засчитывается в момент попадания вашего кода в центральный репозиторий.

Порядок приема лабораторных работ

Отчетность

Ресурсы

Важность инструментов

Инструменты пока не могут создавать ПО вместо вас, однако

Разнообразие технологий

Опыт типичного разработчика сегодня

Цели курса

Познакомить с некоторыми классами инструментов и подходами,
которые будут полезны при работе в любом проекте и на любой платформе.

Хороший инструмент

Мы постараемся сосредоточиться на "хороших" инструментах.
И очень часто это будут консольные и веб-приложения.

  1. Проверен временем ("Lindy effect")
  2. Кросс-платформенный
  3. Допускает автоматизацию
  4. Быстрый
  5. Имеет открытый исходный код

Программа курса: Жизненный цикл разработки ПО

Waterfall Model of the Software Development Lifecycle

Программа курса: От малого к большому

  1. Личное мастерство
    • Работа с текстом
    • Автоматизация
  2. Работа с кодом
    • Построение систем
    • Анализ бинарных модулей
  3. Качество кода
    • Содержание кода "в чистоте"
    • Тестирование и отладка
  4. Коллективная разработка
    • Коммуникация
    • Управление задачами
    • Формирование сообщества

"Золотые" практики Программной Инженерии

Development Workflow

Android Contribution Workflow

OpenCV Workflow

Инструментальная поддержка

Сегодня все эти классы инструментов достаточно зрелые, и доступны бесплатно.

Современное состояние

Одним словом, появилась возможность контролируемо развивать ПО,
снижая влияние человеческого фактора.

Базовые принципы

  1. Предпочитайте plain-text формат в качестве исходного
    • Храните исходники в VCS
    • Овладейте техникой обработки текста в совершенстве
  2. Освойте командную строку, используйте ее по максимуму
    • Обработка текста
    • Автоматизация рутинных операций
  3. Изучите Python и его популярные модули
    • NumPy, Matplotlib
    • XML, Excel, pdf, email

Базовые принципы (2)

  1. В деталях изучите устройство бинарных модулей
    • Последовательность шагов построения приложений (компиляция и линковка)
    • Инструменты анализа готовых файлов
  2. Разрабатывайте так, чтобы вам не приходилось заниматься отладкой
    • Непрерывная интеграция (автоматическое тестирование)
    • Контроль качества кода (автоматический анализ и peer review)
  3. Переиспользуйте стороннее ПО, преимущественно open-source
    • Стремительное развитие проекта (Android)
    • Полная свобода настройки и переделки

Книги

Контрольные вопросы

  1. Общее назначение инструментов, примеры.
  2. Признаки "хороших" инструментов, с пояснениями.
  3. Примеры практик Программной инженерии, их суть.
  4. Приведите примеры инструментов, помогающих применять практики.
  5. Диаграмма каскадной модели жизненного цикла.
  6. Диаграмма работы программиста над задачей.

Спасибо за внимание!

Вопросы?