Upload
custis
View
81
Download
0
Embed Size (px)
Citation preview
Давайте познакомимся
Образование
Программирование – увлечение с детства
С 2011 года в IT-отрасли
Менеджер по продажам
Программист
Аналитик
2/64
Почему важно уметь искать
и читать код?
Дэйв Томас, Диомидис Спинеллис
Чтение кода – повседневное занятие
программиста
90% ошибок можно устранить
при чтении кода
Нас часто учат писать код,
но редко – читать код
Чтобы что-то написать, нужно прочитать
Зачем изобретать велосипед?
5/64
Задачи работы с кодом
Исправление и доработка кода
Поиск примеров
Найти шаблон для новой функции
Делал ли так кто-то раньше?
Рецензирование
6/64
Работа с артефактами
7/64
Семинар Дениса Гаврилова
«Практики командной работы:
о пользе письменных артефактов»
(CUSTIS, октябрь 2014)
Концепции и инструменты
Концепции – универсальны
Инструменты
C# (.NET)
Visual Studio
ReSharper
Бесплатные инструменты
Универсальные инструменты
8/64
Где мы?
Введение
Поиск кода
Перебором
По ключевым словам
По классификаторам
По стеку
Общие советы
Понимание кода
Примеры
11/64
Где мы?
Введение
Поиск кода
Перебором
По ключевым словам
По классификаторам
По стеку
Общие советы
Понимание кода
Примеры
14/64
Что такое ключевое слово?
Словарь «Исследовательская
деятельность»:
Ключевое слово – слово
или словосочетание из текста документа
или запроса, несущее существенную
смысловую нагрузку с точки зрения
информационного поиска.
15/64
Стратегии поиска
по ключевым словам
Подбирать редкие ключевые слова
Сначала найти много, а затем сузить поиск
Стремиться найти хотя бы что-то,
а не именно то, что нужно
16/64
Откуда брать ключевые слова?
Описание задачи
Экранная форма и действия пользователя
Номер ошибки
Текст ошибки или сообщения
SQL-запрос и т. д.
17/64
Инструменты поиска
по ключевым словам
Встроенный поиск в Visual Studio
Файловый менеджер
Поисковые движки
OpenGrok
DocFetcher
Регулярные выражения
18/64
Поисковый движок по исходному коду
Модули
Модуль индексации исходного кода
Веб-приложение для поиска и навигации по коду
Индексирует папку с кодом в файловой системе
Веб-приложение работает под Apache
Написан на Java
Исходный код открыт, использование бесплатно
Откуда скачать
Как установить под Windows
19/64
Зачем использовать OpenGrok?
Гибкий поиск
Быстрый поиск
Наглядный поиск
Ограничения
Не работает с кириллицей
Можно использовать DocFetcher
Нет интеграции с Visual Studio
20/64
Где мы?
Введение
Поиск кода
Перебором
По ключевым словам
По классификаторам
По стеку
Общие советы
Понимание кода
Примеры
21/64
Что такое классификатор?
Wikipedia:
Классификатор – систематизированный
перечень наименованных объектов.
22/64
Инструменты поиска
по классификаторам
ReSharper
Go to Everything
Visual Studio
Solution Explorer
Class View
Object Browser
OpenGrok
Definition
Файловый менеджер
Структура файлов и папок
23/64
Когда применять классификаторы
Мы хорошо знакомы с системой
Знаем соглашения об именах
Знаем структуру классов, файлов и папок
Известно название класса, функции и т. д.
24/64
Где мы?
Введение
Поиск кода
Перебором
По ключевым словам
По классификаторам
По стеку
Общие советы
Понимание кода
Примеры
25/64
Поиск по стеку
Исследование стека
ReSharper – Stack Traces
Включение прерывания по ошибке
Exception Breaker
Какая функция вызывается, когда я нажимаю
на кнопку (выполняю другое действие)?
Веб-приложения – Fiddler
Расставить точки останова во всех методах
класса
26/64
Где мы?
Введение
Поиск кода
Перебором
По ключевым словам
По классификаторам
По стеку
Общие советы
Понимание кода
Примеры
28/64
Общие советы
Начинать с самого простого
Найти чуть больше или чуть меньше
Общаться с командой
Читать документацию
Вспомнить, что уже известно
Перед добавлением новой функции найти
существующую и использовать ее как шаблон
29/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
31/64
Без чтения кода
Запустить на исполнение
Прочитать документацию
Пообщаться с командой или пользователями
32/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
33/64
Черный ящик
Угадать по имени
Прочитать описание и комментарии
Какой тип возвращает функция?
Какие принимает параметры?
Изучить использование (в том числе тесты)
Какие действия пользователя сюда приводят?
Что пользователь получает в результате
выполнения функции?
34/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
36/64
Белый ящик
Читаем как можно меньше
Чтобы понять код, не надо читать его весь
Читаем в определенном порядке
От последовательности чтения зависит
скорость понимания
37/64
Чтение «вглубь»
Вначале читаем код первого уровня
Затем – второго и т. д.
Инструмент – C# outline
38/64
Чтение «от ключевых мест»
Возвращаем (получаем) результат
Присваиваем значения переменным
Делаем вывод в файл, на экран и т. д.
Инструмент – RockMargin
39/64
Чтение от простого к сложному
Вначале понять простейшие фрагменты
Затем переходить к более сложным
40/64
Чтение шаблонов
Виды шаблонов
Общеиспользуемые
Специфичные
Читать как «слова», без «разбора букв»
41/64
Чтение при рецензировании кода
Просмотреть названия всех файлов
Понять, в каких файлах – ключевые
изменения
Начинать чтение с ключевых изменений
42/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
43/64
Рефакторинг
Переименования
Разделение длинных функций
Законы де Моргана
!(a && b) = (!a) || (!b)
!(a || b) = (!a) && (!b)
Инструмент
ReSharper
45/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
46/64
Структура кода
ReSharper – File Structure
Visual Studio – Member
Общая структура – RockMargin
50/64
Где мы?
Введение
Поиск кода
Понимание кода
Без чтения кода
Чтение «черного ящика»
Чтение «белого ящика»
Улучшение кода
Общая картина
Общие советы
Примеры
51/64
Общие советы
Вспомнить, что уже известно
Держать в голове цель чтения кода
Знать соглашения об именах
Общаться с коллегами
Использовать точки останова
Смотреть в лог системы контроля версий,
баг-трекер
52/64
Где мы?
Введение
Поиск кода
Понимание кода
Примеры
Добавить загрузку из буфера
по пути к файлу
Добавить распознавание текста
Добавить захват окна по расписанию
54/64
Добавить загрузку из буфера
по пути к файлу
Пользователь копирует в буфер
путь к файлу
Хочет, чтобы ShareX загрузил в Интернет
файл, путь к которому скопирован в буфер
55/64
Где мы?
Введение
Поиск кода
Понимание кода
Примеры
Добавить загрузку из буфера
по пути к файлу
Добавить распознавание текста
Добавить захват окна по расписанию
56/64
Добавить распознавание текста
Пользователь захватывает изображение
на экране
Хочет, чтобы ShareX
Распознал текст на захваченном изображении
Скопировал распознанный текст
в буфер обмена
57/64
Где мы?
Введение
Поиск кода
Понимание кода
Примеры
Добавить загрузку из буфера
по пути к файлу
Добавить распознавание текста
Добавить захват окна по расписанию
58/64
Добавить захват окна по расписанию
Пользователь хочет, чтобы ShareX
захватывал изображение в некотором окне
по расписанию
59/64
О чем не поговорили на семинаре?
Проблемные области для понимания
Издатель-подписчик
Многопоточная обработка
Обратная инженерия (Reverse Engineering)
Поиск во внешних базах исходного кода
60/64
Инструменты
Для поиска кода
OpenGrok: скачать, установить на Windows
DocFetcher
Fiddler
Exception Breaker
Для чтения кода
C# outline
RockMargin
Универсальные
Visual Studio
ReSharper
61/64
Книги
Диомидис Спинеллис
«Анализ программного кода на примере проектов Open Source»
Грег Хогланд, Гари Мак-Гроу
«Взлом программ: анализ и примеры кода»
Майкл К. Физерс
«Эффективная работа с унаследованным кодом»
62/64
Статьи
Как улучшить свою способность понимать
прочитанный текст?
How do you dive into large code bases?
63/64