Инструменты разработки
Кирилл Корняков (Intel, ННГУ)
Февраль 2019
Структура лекций
- Первые 10 минут письменная самостоятельная работа
- Рекомендуется посещать и не опаздывать
- Основная часть, лекция
- Рекомендуется вести конспект
- Иногда постараемся проводить живые демонстрации
Практические занятия
Необходимо разработать библиотеку на С++, которая:
- Решает простую прикладную задачу
- Разрабатывается на GitHub
- Собирается при помощи CMake
- Имеет модульные тесты на базе GoogleTest
- Имеет документацию
Каждый шаг засчитывается в момент попадания вашего кода в центральный репозиторий.
Порядок приема лабораторных работ
Отчетность
- Наличие всех самостоятельных работ
- Наличие кода в центральном репозитории
Важность инструментов
Инструменты пока не могут создавать ПО вместо вас, однако
- Значительно усиливают ваши способности
- Работают пока вы спите
Разнообразие технологий
Опыт типичного разработчика сегодня
- Host OS: Windows, Linux, macOS
- Target OS: Embedded Win/Lin, Android, iOS
- Target HW: x86, ARM, GPU, а также MIPS, DSP
- Языки:
- Native: С, С++, Objective-C
- Bytecode: C#, Java
- Dynamic: Python, Ruby
- GPU: GLSL, CUDA, OpenCL
- IDE: Borland Builder, MSVS, Eclipse, Qt Creator, Xcode
Цели курса
Познакомить с некоторыми классами инструментов и подходами,
которые будут полезны при работе в любом проекте и на любой платформе.
Хороший инструмент
Мы постараемся сосредоточиться на "хороших" инструментах.
И очень часто это будут консольные и веб-приложения.
- Проверен временем ("Lindy effect")
- Кросс-платформенный
- Допускает автоматизацию
- Быстрый
- Имеет открытый исходный код
Программа курса: Жизненный цикл разработки ПО
Waterfall Model of the Software Development Lifecycle
Программа курса: От малого к большому
- Личное мастерство
- Работа с текстом
- Автоматизация
- Работа с кодом
- Построение систем
- Анализ бинарных модулей
- Качество кода
- Содержание кода "в чистоте"
- Тестирование и отладка
- Коллективная разработка
- Коммуникация
- Управление задачами
- Формирование сообщества
"Золотые" практики Программной Инженерии
- Автоматические тесты
- Непрерывная интеграция
- Рецензии кода (формальные инспекции)
- Использование VCS
Android Contribution Workflow
Инструментальная поддержка
- Автоматические тесты
- Unit-testing frameworks (xUnit: JUnit, Google Test, NUnit)
- Непрерывная интеграция (Continuous Integration)
- Continuous Integration systems (Jenkins, BuildBot, Travis)
- Код ревью
- Web-based Code Review systems (Review Board, GitHub)
- Использование VCS
- Distributed VCS (Git, Mercurial)
Сегодня все эти классы инструментов достаточно зрелые, и доступны бесплатно.
Современное состояние
- На сегодняшний день "лучшие" практики стали более легковесными,
и наконец сложились в некоторую "гармоничную" схему.
- Эту схему можно условно назвать современным рабочим процессом (workflow),
и она применяется во многих современных проектах (Android, Chrome, OpenCV).
- Данный workflow имеет ряд преимуществ:
- простота и легковесность
- стабильность — система всегда в рабочем состоянии
- высокое качество кода — благодаря объединению тестирования и рецензирования
- предсказуемость и управляемость процесса разработки
Одним словом, появилась возможность контролируемо развивать ПО,
снижая влияние человеческого фактора.
Базовые принципы
- Предпочитайте plain-text формат в качестве исходного
- Храните исходники в VCS
- Овладейте техникой обработки текста в совершенстве
- Освойте командную строку, используйте ее по максимуму
- Обработка текста
- Автоматизация рутинных операций
- Изучите Python и его популярные модули
- NumPy, Matplotlib
- XML, Excel, pdf, email
Базовые принципы (2)
- В деталях изучите устройство бинарных модулей
- Последовательность шагов построения приложений (компиляция и линковка)
- Инструменты анализа готовых файлов
- Разрабатывайте так, чтобы вам не приходилось заниматься отладкой
- Непрерывная интеграция (автоматическое тестирование)
- Контроль качества кода (автоматический анализ и peer review)
- Переиспользуйте стороннее ПО, преимущественно open-source
- Стремительное развитие проекта (Android)
- Полная свобода настройки и переделки
Книги
- Стив Макконнелл "Совершенный код"
- Дейв Томас, Энди Хант "Программист-прагматик"
- Нил Форд "Продуктивный программист"
- Kernighan & Pike "The Practice of Programming"
Контрольные вопросы
- Общее назначение инструментов, примеры.
- Признаки "хороших" инструментов, с пояснениями.
- Примеры практик Программной инженерии, их суть.
- Приведите примеры инструментов, помогающих применять практики.
- Диаграмма каскадной модели жизненного цикла.
- Диаграмма работы программиста над задачей.
Спасибо за внимание!
Вопросы?