SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
Некоторые методы проектирования
и оптимизации кода
Антон Зачесов
Video Group
CS MSU Graphics & Media Lab
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Оптимизация кода
 Полезное в работе с Visual Studio
2
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Описание проблемы (1/2)
3
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Описание проблемы (2/2)
Следствия отсутствия (либо некорректного)
проектирования/оптимизации:
 Приложение работает неочевидно
(делает не то, что вы ожидаете)
 Приложение работает медленнее, чем должно
(или вы бы хотели)
 Код приложения настолько ужасен, что хочется
его выкинуть и переписать заново
4
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Постановка проблемы
Кажущиеся способы решения
 Увеличить сроки разработки
 Увеличить число людей в проекте
 Обеспечить программистов адекватными
требованиями к разработке
В 90% случаев эти способы не сработают
5
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Постановка требований
Пример
«Хочу в приложении кнопку сделать хорошо”,
и чтобы она всегда работала»
Или более адекватный:
«Нужно сделать плагин синхронизации
стереовидео во времени
(с учетом смещения в 0,5 кадра)»
6
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Черты идеального продукта
 Соответствие целям пользователя
 Понятность и очевидность поведения
 Стабильность
 Быстрый отклик на действия пользователя
 Адекватная производительность
7
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Черты идеального проекта
Как приблизиться к идеалу?
Разобраться в этом – цель данного доклада
8
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Проектирование взаимодействия
 Проектирование кода
 Оптимизация кода
 Полезное в работе с Visual Studio
9
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование
«Проектирование – то, чем
программисты занимаются 20 минут
перед тем, как начать писать код»
(бородатый анекдот)
10
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование
Суть
Весь процесс создания программы
от постановки требований до начала
написания кода
Цели:
 Определить usecases программы
 Найти контакт с пользователем программы
 Облегчить жизнь программистам-потомкам
11
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Виды проектирования
12
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Виды проектирования
Различия
 Проектирование кода (фактически,
программирование) полностью
на совести программиста
 Проектирование взаимодействия
программист не в состоянии сделать один
«Программирование определяется краевыми
случаями, а проектирование – центральными»
(Алан Купер)
13
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Проектирование взаимодействия
 Проектирование кода
 Оптимизация кода
 Полезное в работе с Visual Studio
14
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование взаимодействия
Цель – преодолеть подобную ситуацию
15
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование взаимодействия
«Танцующий медведь»
«Танцует медведь просто ужасно,
но чудо не в том, что он танцует
хорошо, а в том, что он вообще
танцует»
(Алан Купер)
Суровая реальность в том, что
многие приложения похожи
на «танцующих медведей»
17
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование взаимодействия
Основная цель
 Главное – понять цели пользователя
и сделать их достижение возможным
 Выбрать, какие функции
могут понадобиться пользователю
для достижения цели, – не главное.
Они могут не соответствовать целям
18
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование взаимодействия
Персонажи
Задача – максимально подробно описать
пользователя программы
19
Достаточно подробноНедостаточно подробно
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование взаимодействия
Сценарии
Цель – получить минимальное количество
проблем с основными функциями
Задача – максимально детально описать
процесс регулярного использования программы
Вспоминаем:
«Программирование определяется краевыми
случаями, а проектирование – центральными»
(Алан Купер)
20
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Проектирование взаимодействия
 Проектирование кода
 Оптимизация кода
 Полезное в работе с Visual Studio
21
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
«Есть два способа разработки проекта:
сделать его настолько простым, чтобы было
очевидно, что в нем нет недостатков, или
сделать его настолько сложным, чтобы в нем
не было очевидных недостатков»
(С. А. Р. Хоар)
22
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
Мое восприятие
 Проектирование кода – всегда изобретение
велосипеда
 Важно не впадать в крайности:
23
…
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
Цели (1/3)
Одна из целей – оказаться слева
24
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
Цели (2/3)
Основные цели:
 реализация всех требований к проекту
 реализация всех требований проектирования
взаимодействия
 ничего больше
Побочные цели:
 понятность и читабельность кода
 устойчивость к модификациям
обычно способствуют основной
25
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
Цели (3/3)
«Книга закончена не тогда,
когда в нее нечего добавить,
а тогда, когда из нее нечего выбросить»
(Алан Купер)
26
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование кода
Модели
 Нисходящая
Проектирование от идеи
к реализации
 Восходящая
Проектирование от деталей
конструктора к результату
 Смешанная
Тоже работает
27
Нисходящее проектирование
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Проектирование алгоритма
Из личного опыта:
 Простые идеи работают чаще, чем сложные
 Очень полезным является прототипирование
«Прототипирование – написание абсолютно
минимального объема подлежащего
выбрасыванию кода, нужного для ответа
на отдельный вопрос проектирования»
(Алан Купер)
29
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Прототипирование
 Лучше использовать не ту среду, в которой
пишется финальный продукт
 Чаще всего это MATLAB
 В своей практике я использовал
Adobe After Effects и Photoshop
Если что-то пошло не так:
«Если сомневаетесь, используйте грубую
силу» (Батлер Пэмпсон)
30
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Повторное использование кода
 Очень полезно
 Тем не менее, крайности опасны
31
…
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Понятность кода
«Я никогда не встречал человека, желающего
читать 17000 страниц документации,
а если бы встретил, то убил бы его»
(Джозеф Кастелло)
Вывод:
Лучшая документация кода – сделать его
читабельным и понятным в первую очередь
для других программистов
32
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Оптимизация кода
 Статический анализ кода
 Полезное в работе с Visual Studio
33
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Оптимизация
Цель – избежать подобной ситуации:
34
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Оптимизация
Методы
 Высокоуровневая
 Использование кэширования
 Предоставление быстрого отклика
на запрос / прогресс-бара
 Алгоритмические оптимизации
 Низкоуровневая
35
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Оптимизация
Низкоуровневая
 Метод «орлиного взора»
 Использование профилировщиков
Профилировка – измерение производительности
программы с целью нахождения Hot Spots (участков
программы, на выполнение которых расходуется
наибольшее количество времени)
36
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Оптимизация
Примеры профилировщиков
 Visual Studio Ultimate
 Intel Parallel Amplifier
 AQTime
 …
37
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Профилировщик
Пример использования
38
Профилировка библиотеки StereoToMultiview
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Результат профилировки
39
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Шаг 1
Проверка настроек оптимизации компилятора
40
Было:
Стало:
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Результат шага 1
41
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Шаг 2
Исправление указанных профилировщиком мест
42
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Исправление кода
43
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Результат шага 2
44
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Финальный вариант кода
45
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Результат
46
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Пример оптимизации
Исходный вариант
47
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Оптимизация кода
 Оптимизация кода
 Статический анализ кода
 Полезное в работе с Visual Studio
48
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Статический анализ кода
Идеи
“The first step is fully admitting that the code
you write is riddled with errors”
(John Karmak)
“The more I push code through static analysis,
the more I’m amazed that computers boot at all”
(Dave Revell)
49
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Статический анализ кода
 Static Code Analysis – анализ кода,
проводимый без реального выполнения
программы
 Поиск очевидных (и не очень) ошибок
в процессе компиляции кода
 Мной используется PVS-Studio
50
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Содержание
 Зачем все это нужно?
 Проектирование проекта
 Оптимизация кода
 Полезное в работе с Visual Studio
51
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Visual Studio
 Позволяет эффективно разделять
код на проекты (библиотечные
и исполняемые модули)
 Используется в проектах лаборатории
 Чаще всего – работа с многими проектами
одновременно
52
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Настройки Visual Studio
Project Dependencies
 Некорректная настройка:
Ошибки вида Unresolved External
или Duplicate Identifier
 Глубинный смысл:
Код проектов, имеющих зависимости,
генерируется позже и может явно
ссылаться на уже сгенерированный код
проектов-зависимостей
53
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Настройки Visual Studio
Runtime Library
 Некорректная настройка:
Ошибки вида
… already defined in LIBCMT.lib
и unresolved external
 Глубинный смысл:
При выборе *dll собранной программе
добавляется зависимость от системных
динамических библиотек,
например, MSVCR90.dll
55
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Настройки Visual Studio
Настройка Debug
 В исполняемом коде нужна информация
об исходном коде
 Необходимо настроить компиляцию кода
с информацией для дебага
(Debug Information)
 Необходимо включить опцию линковки
с информацией для дебага
(Generate Debug Info)
56
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Настройки Visual Studio
Link Library Dependencies
 Некорректная настройка
Ошибки вида unresolved external
 Глубинный смысл:
Бинарный код всех библиотек-
зависимостей копируется в главную
библиотеку
 Следствие:
Иногда линковка занимает много времени
57
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Настройки Visual Studio
Compile As
 Некорректная настройка:
Ошибки при компиляции С++ инструкций
по правилам С
 Глубинный смысл:
Вообще говоря, просто выбор компилятора
для конкретного файла
58
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Литература
1. А. Купер, “Психбольница в руках пациентов”.
2. С. Макконнелл, “Совершенный код”.
60
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Вопросы?
61
CS MSU Graphics & Media Lab (Video Group)
www.compression.ru/video/
Only for
Maxus 
Лаборатория компьютерной
графики и мультимедиа
Видеогруппа — это:
 Выпускники в аспирантурах
Англии, Франции, Швейцарии
(в России в МГУ и ИПМ им. Келдыша)
 Выпускниками защищены 5 диссертаций
 Наиболее популярные в мире сравнения
видеокодеков
 Более 3 миллионов скачанных фильтров
обработки видео
62

Weitere ähnliche Inhalte

Was ist angesagt?

Способы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиСпособы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиMSU GML VideoGroup
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCMSU GML VideoGroup
 
Исправление стерео видео
Исправление стерео видеоИсправление стерео видео
Исправление стерео видеоMSU GML VideoGroup
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоMSU GML VideoGroup
 
Research & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиResearch & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиMSU GML VideoGroup
 
Некоторые методы матирования видео
Некоторые методы матирования видеоНекоторые методы матирования видео
Некоторые методы матирования видеоMSU GML VideoGroup
 
Цветонезависимое сопоставление стерео
Цветонезависимое сопоставление стереоЦветонезависимое сопоставление стерео
Цветонезависимое сопоставление стереоMSU GML VideoGroup
 
Обзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовОбзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовMSU GML VideoGroup
 
Современные методы Optical Flow c GPU реализацией
Современные методы Optical Flow c GPU реализациейСовременные методы Optical Flow c GPU реализацией
Современные методы Optical Flow c GPU реализациейMSU GML VideoGroup
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениMSU GML VideoGroup
 
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияMSU GML VideoGroup
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмовMSU GML VideoGroup
 
Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)MSU GML VideoGroup
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияMSU GML VideoGroup
 
Управление разработкой программного обеспечения
Управление разработкой программного обеспеченияУправление разработкой программного обеспечения
Управление разработкой программного обеспеченияMSU GML VideoGroup
 
Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоMSU GML VideoGroup
 
Генерация высококачественного стерео с помощью матирования
Генерация высококачественного стерео с помощью матированияГенерация высококачественного стерео с помощью матирования
Генерация высококачественного стерео с помощью матированияMSU GML VideoGroup
 
Вычисление глубины по одному изображению
Вычисление глубины по одному изображениюВычисление глубины по одному изображению
Вычисление глубины по одному изображениюMSU GML VideoGroup
 
Методы повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаМетоды повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаMSU GML VideoGroup
 
Исправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоИсправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоMSU GML VideoGroup
 

Was ist angesagt? (20)

Способы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиСпособы построения и оценки карт салиентности
Способы построения и оценки карт салиентности
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVC
 
Исправление стерео видео
Исправление стерео видеоИсправление стерео видео
Исправление стерео видео
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видео
 
Research & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиResearch & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибки
 
Некоторые методы матирования видео
Некоторые методы матирования видеоНекоторые методы матирования видео
Некоторые методы матирования видео
 
Цветонезависимое сопоставление стерео
Цветонезависимое сопоставление стереоЦветонезависимое сопоставление стерео
Цветонезависимое сопоставление стерео
 
Обзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовОбзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектов
 
Современные методы Optical Flow c GPU реализацией
Современные методы Optical Flow c GPU реализациейСовременные методы Optical Flow c GPU реализацией
Современные методы Optical Flow c GPU реализацией
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времени
 
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмов
 
Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображения
 
Управление разработкой программного обеспечения
Управление разработкой программного обеспеченияУправление разработкой программного обеспечения
Управление разработкой программного обеспечения
 
Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видео
 
Генерация высококачественного стерео с помощью матирования
Генерация высококачественного стерео с помощью матированияГенерация высококачественного стерео с помощью матирования
Генерация высококачественного стерео с помощью матирования
 
Вычисление глубины по одному изображению
Вычисление глубины по одному изображениюВычисление глубины по одному изображению
Вычисление глубины по одному изображению
 
Методы повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаМетоды повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фона
 
Исправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоИсправление различий резкости в 3D видео
Исправление различий резкости в 3D видео
 

Ähnlich wie Некоторые методы проектирования и оптимизации кода

Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияMSU GML VideoGroup
 
Декодирование видео на GPU
Декодирование видео на GPUДекодирование видео на GPU
Декодирование видео на GPUMSU GML VideoGroup
 
Обзор методов сегментации видео
Обзор методов сегментации видеоОбзор методов сегментации видео
Обзор методов сегментации видеоMSU GML VideoGroup
 
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...MSU GML VideoGroup
 
Обзор новинок в области GPGPU
Обзор новинок в области GPGPUОбзор новинок в области GPGPU
Обзор новинок в области GPGPUMSU GML VideoGroup
 
Обзор подходов к измерению качества 3D видео
Обзор подходов к измерению качества 3D видеоОбзор подходов к измерению качества 3D видео
Обзор подходов к измерению качества 3D видеоMSU GML VideoGroup
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидеоMSU GML VideoGroup
 
Генерация текстур
Генерация текстурГенерация текстур
Генерация текстурMSU GML VideoGroup
 
Некоторые методы повышения качества построения стерео
Некоторые методы повышения качества построения стереоНекоторые методы повышения качества построения стерео
Некоторые методы повышения качества построения стереоMSU GML VideoGroup
 
Программное обеспечение
Программное обеспечениеПрограммное обеспечение
Программное обеспечениеSaa-Kaya
 
Статический анализатор кода PVS-Studio
Статический анализатор кода PVS-StudioСтатический анализатор кода PVS-Studio
Статический анализатор кода PVS-Studiocppclimber
 
Cравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуCравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуilja.panin
 
Кризисное управление проектами: проблемы, компромиссы, решения
Кризисное управление проектами: проблемы, компромиссы, решенияКризисное управление проектами: проблемы, компромиссы, решения
Кризисное управление проектами: проблемы, компромиссы, решенияSQALab
 
Методы тестирования устройств для показа 3D
Методы тестирования устройств для показа 3DМетоды тестирования устройств для показа 3D
Методы тестирования устройств для показа 3DMSU GML VideoGroup
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеTatyanazaxarova
 
Некоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоНекоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоMSU GML VideoGroup
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Tatyanazaxarova
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Andrey Karpov
 

Ähnlich wie Некоторые методы проектирования и оптимизации кода (20)

Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зрения
 
Декодирование видео на GPU
Декодирование видео на GPUДекодирование видео на GPU
Декодирование видео на GPU
 
Обзор методов сегментации видео
Обзор методов сегментации видеоОбзор методов сегментации видео
Обзор методов сегментации видео
 
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...
Новые тенденции в области автостереоскопических дисплеев, съемки и отображени...
 
Обзор новинок в области GPGPU
Обзор новинок в области GPGPUОбзор новинок в области GPGPU
Обзор новинок в области GPGPU
 
Обзор подходов к измерению качества 3D видео
Обзор подходов к измерению качества 3D видеоОбзор подходов к измерению качества 3D видео
Обзор подходов к измерению качества 3D видео
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидео
 
Генерация текстур
Генерация текстурГенерация текстур
Генерация текстур
 
Некоторые методы повышения качества построения стерео
Некоторые методы повышения качества построения стереоНекоторые методы повышения качества построения стерео
Некоторые методы повышения качества построения стерео
 
Программное обеспечение
Программное обеспечениеПрограммное обеспечение
Программное обеспечение
 
Статический анализатор кода PVS-Studio
Статический анализатор кода PVS-StudioСтатический анализатор кода PVS-Studio
Статический анализатор кода PVS-Studio
 
378 vasilyev
378 vasilyev378 vasilyev
378 vasilyev
 
Cравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуCравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформу
 
Кризисное управление проектами: проблемы, компромиссы, решения
Кризисное управление проектами: проблемы, компромиссы, решенияКризисное управление проектами: проблемы, компромиссы, решения
Кризисное управление проектами: проблемы, компромиссы, решения
 
Методы тестирования устройств для показа 3D
Методы тестирования устройств для показа 3DМетоды тестирования устройств для показа 3D
Методы тестирования устройств для показа 3D
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработке
 
Некоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоНекоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видео
 
Листовка Model studio CS
Листовка Model studio CSЛистовка Model studio CS
Листовка Model studio CS
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 

Некоторые методы проектирования и оптимизации кода

  • 1. Некоторые методы проектирования и оптимизации кода Антон Зачесов Video Group CS MSU Graphics & Media Lab
  • 2. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Оптимизация кода  Полезное в работе с Visual Studio 2
  • 3. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Описание проблемы (1/2) 3
  • 4. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Описание проблемы (2/2) Следствия отсутствия (либо некорректного) проектирования/оптимизации:  Приложение работает неочевидно (делает не то, что вы ожидаете)  Приложение работает медленнее, чем должно (или вы бы хотели)  Код приложения настолько ужасен, что хочется его выкинуть и переписать заново 4
  • 5. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Постановка проблемы Кажущиеся способы решения  Увеличить сроки разработки  Увеличить число людей в проекте  Обеспечить программистов адекватными требованиями к разработке В 90% случаев эти способы не сработают 5
  • 6. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Постановка требований Пример «Хочу в приложении кнопку сделать хорошо”, и чтобы она всегда работала» Или более адекватный: «Нужно сделать плагин синхронизации стереовидео во времени (с учетом смещения в 0,5 кадра)» 6
  • 7. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Черты идеального продукта  Соответствие целям пользователя  Понятность и очевидность поведения  Стабильность  Быстрый отклик на действия пользователя  Адекватная производительность 7
  • 8. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Черты идеального проекта Как приблизиться к идеалу? Разобраться в этом – цель данного доклада 8
  • 9. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Проектирование взаимодействия  Проектирование кода  Оптимизация кода  Полезное в работе с Visual Studio 9
  • 10. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование «Проектирование – то, чем программисты занимаются 20 минут перед тем, как начать писать код» (бородатый анекдот) 10
  • 11. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование Суть Весь процесс создания программы от постановки требований до начала написания кода Цели:  Определить usecases программы  Найти контакт с пользователем программы  Облегчить жизнь программистам-потомкам 11
  • 12. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Виды проектирования 12
  • 13. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Виды проектирования Различия  Проектирование кода (фактически, программирование) полностью на совести программиста  Проектирование взаимодействия программист не в состоянии сделать один «Программирование определяется краевыми случаями, а проектирование – центральными» (Алан Купер) 13
  • 14. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Проектирование взаимодействия  Проектирование кода  Оптимизация кода  Полезное в работе с Visual Studio 14
  • 15. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование взаимодействия Цель – преодолеть подобную ситуацию 15
  • 16. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование взаимодействия «Танцующий медведь» «Танцует медведь просто ужасно, но чудо не в том, что он танцует хорошо, а в том, что он вообще танцует» (Алан Купер) Суровая реальность в том, что многие приложения похожи на «танцующих медведей» 17
  • 17. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование взаимодействия Основная цель  Главное – понять цели пользователя и сделать их достижение возможным  Выбрать, какие функции могут понадобиться пользователю для достижения цели, – не главное. Они могут не соответствовать целям 18
  • 18. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование взаимодействия Персонажи Задача – максимально подробно описать пользователя программы 19 Достаточно подробноНедостаточно подробно
  • 19. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование взаимодействия Сценарии Цель – получить минимальное количество проблем с основными функциями Задача – максимально детально описать процесс регулярного использования программы Вспоминаем: «Программирование определяется краевыми случаями, а проектирование – центральными» (Алан Купер) 20
  • 20. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Проектирование взаимодействия  Проектирование кода  Оптимизация кода  Полезное в работе с Visual Studio 21
  • 21. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода «Есть два способа разработки проекта: сделать его настолько простым, чтобы было очевидно, что в нем нет недостатков, или сделать его настолько сложным, чтобы в нем не было очевидных недостатков» (С. А. Р. Хоар) 22
  • 22. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода Мое восприятие  Проектирование кода – всегда изобретение велосипеда  Важно не впадать в крайности: 23 …
  • 23. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода Цели (1/3) Одна из целей – оказаться слева 24
  • 24. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода Цели (2/3) Основные цели:  реализация всех требований к проекту  реализация всех требований проектирования взаимодействия  ничего больше Побочные цели:  понятность и читабельность кода  устойчивость к модификациям обычно способствуют основной 25
  • 25. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода Цели (3/3) «Книга закончена не тогда, когда в нее нечего добавить, а тогда, когда из нее нечего выбросить» (Алан Купер) 26
  • 26. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование кода Модели  Нисходящая Проектирование от идеи к реализации  Восходящая Проектирование от деталей конструктора к результату  Смешанная Тоже работает 27 Нисходящее проектирование
  • 27. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Проектирование алгоритма Из личного опыта:  Простые идеи работают чаще, чем сложные  Очень полезным является прототипирование «Прототипирование – написание абсолютно минимального объема подлежащего выбрасыванию кода, нужного для ответа на отдельный вопрос проектирования» (Алан Купер) 29
  • 28. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Прототипирование  Лучше использовать не ту среду, в которой пишется финальный продукт  Чаще всего это MATLAB  В своей практике я использовал Adobe After Effects и Photoshop Если что-то пошло не так: «Если сомневаетесь, используйте грубую силу» (Батлер Пэмпсон) 30
  • 29. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Повторное использование кода  Очень полезно  Тем не менее, крайности опасны 31 …
  • 30. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Понятность кода «Я никогда не встречал человека, желающего читать 17000 страниц документации, а если бы встретил, то убил бы его» (Джозеф Кастелло) Вывод: Лучшая документация кода – сделать его читабельным и понятным в первую очередь для других программистов 32
  • 31. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Оптимизация кода  Статический анализ кода  Полезное в работе с Visual Studio 33
  • 32. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Оптимизация Цель – избежать подобной ситуации: 34
  • 33. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Оптимизация Методы  Высокоуровневая  Использование кэширования  Предоставление быстрого отклика на запрос / прогресс-бара  Алгоритмические оптимизации  Низкоуровневая 35
  • 34. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Оптимизация Низкоуровневая  Метод «орлиного взора»  Использование профилировщиков Профилировка – измерение производительности программы с целью нахождения Hot Spots (участков программы, на выполнение которых расходуется наибольшее количество времени) 36
  • 35. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Оптимизация Примеры профилировщиков  Visual Studio Ultimate  Intel Parallel Amplifier  AQTime  … 37
  • 36. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Профилировщик Пример использования 38 Профилировка библиотеки StereoToMultiview
  • 37. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Результат профилировки 39
  • 38. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Шаг 1 Проверка настроек оптимизации компилятора 40 Было: Стало:
  • 39. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Результат шага 1 41
  • 40. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Шаг 2 Исправление указанных профилировщиком мест 42
  • 41. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Исправление кода 43
  • 42. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Результат шага 2 44
  • 43. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Финальный вариант кода 45
  • 44. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Результат 46
  • 45. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Пример оптимизации Исходный вариант 47
  • 46. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Оптимизация кода  Оптимизация кода  Статический анализ кода  Полезное в работе с Visual Studio 48
  • 47. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Статический анализ кода Идеи “The first step is fully admitting that the code you write is riddled with errors” (John Karmak) “The more I push code through static analysis, the more I’m amazed that computers boot at all” (Dave Revell) 49
  • 48. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Статический анализ кода  Static Code Analysis – анализ кода, проводимый без реального выполнения программы  Поиск очевидных (и не очень) ошибок в процессе компиляции кода  Мной используется PVS-Studio 50
  • 49. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Содержание  Зачем все это нужно?  Проектирование проекта  Оптимизация кода  Полезное в работе с Visual Studio 51
  • 50. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Visual Studio  Позволяет эффективно разделять код на проекты (библиотечные и исполняемые модули)  Используется в проектах лаборатории  Чаще всего – работа с многими проектами одновременно 52
  • 51. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Настройки Visual Studio Project Dependencies  Некорректная настройка: Ошибки вида Unresolved External или Duplicate Identifier  Глубинный смысл: Код проектов, имеющих зависимости, генерируется позже и может явно ссылаться на уже сгенерированный код проектов-зависимостей 53
  • 52. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Настройки Visual Studio Runtime Library  Некорректная настройка: Ошибки вида … already defined in LIBCMT.lib и unresolved external  Глубинный смысл: При выборе *dll собранной программе добавляется зависимость от системных динамических библиотек, например, MSVCR90.dll 55
  • 53. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Настройки Visual Studio Настройка Debug  В исполняемом коде нужна информация об исходном коде  Необходимо настроить компиляцию кода с информацией для дебага (Debug Information)  Необходимо включить опцию линковки с информацией для дебага (Generate Debug Info) 56
  • 54. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Настройки Visual Studio Link Library Dependencies  Некорректная настройка Ошибки вида unresolved external  Глубинный смысл: Бинарный код всех библиотек- зависимостей копируется в главную библиотеку  Следствие: Иногда линковка занимает много времени 57
  • 55. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Настройки Visual Studio Compile As  Некорректная настройка: Ошибки при компиляции С++ инструкций по правилам С  Глубинный смысл: Вообще говоря, просто выбор компилятора для конкретного файла 58
  • 56. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Литература 1. А. Купер, “Психбольница в руках пациентов”. 2. С. Макконнелл, “Совершенный код”. 60
  • 57. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Вопросы? 61
  • 58. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ Only for Maxus  Лаборатория компьютерной графики и мультимедиа Видеогруппа — это:  Выпускники в аспирантурах Англии, Франции, Швейцарии (в России в МГУ и ИПМ им. Келдыша)  Выпускниками защищены 5 диссертаций  Наиболее популярные в мире сравнения видеокодеков  Более 3 миллионов скачанных фильтров обработки видео 62