Top Banner
16 апреля 2014 года Поиск и чтение унаследованного кода Игорь Шаталкин Разработчик .NET
64

Поиск и чтение унаследованного кода

Jul 18, 2015

Download

Software

CUSTIS
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Поиск и чтение унаследованного кода

16 апреля 2014 года

Поиск и чтение

унаследованного кода

Игорь Шаталкин

Разработчик .NET

Page 2: Поиск и чтение унаследованного кода

Давайте познакомимся

Образование

Программирование – увлечение с детства

С 2011 года в IT-отрасли

Менеджер по продажам

Программист

Аналитик

2/64

Page 3: Поиск и чтение унаследованного кода

О компании

Проектирование Заказная разработка

Бережное внедрение Масштабных IT-систем

3/64

Page 4: Поиск и чтение унаследованного кода

План

Введение

Поиск кода

Понимание кода

Примеры

4/64

Page 5: Поиск и чтение унаследованного кода

Почему важно уметь искать

и читать код?

Дэйв Томас, Диомидис Спинеллис

Чтение кода – повседневное занятие

программиста

90% ошибок можно устранить

при чтении кода

Нас часто учат писать код,

но редко – читать код

Чтобы что-то написать, нужно прочитать

Зачем изобретать велосипед?

5/64

Page 6: Поиск и чтение унаследованного кода

Задачи работы с кодом

Исправление и доработка кода

Поиск примеров

Найти шаблон для новой функции

Делал ли так кто-то раньше?

Рецензирование

6/64

Page 7: Поиск и чтение унаследованного кода

Работа с артефактами

7/64

Семинар Дениса Гаврилова

«Практики командной работы:

о пользе письменных артефактов»

(CUSTIS, октябрь 2014)

Page 8: Поиск и чтение унаследованного кода

Концепции и инструменты

Концепции – универсальны

Инструменты

C# (.NET)

Visual Studio

ReSharper

Бесплатные инструменты

Универсальные инструменты

8/64

Page 9: Поиск и чтение унаследованного кода

Примеры

C#

ShareX

9/64

Page 10: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Примеры

10/64

Page 11: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Перебором

По ключевым словам

По классификаторам

По стеку

Общие советы

Понимание кода

Примеры

11/64

Page 12: Поиск и чтение унаследованного кода

Что такое перебор?

Последовательный просмотр

пользовательских форм

файлов с исходным кодом

12/64

Page 13: Поиск и чтение унаследованного кода

Когда применять перебор

Задача поиска размыта

Мы плохо знакомы с системой

13/64

Page 14: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Перебором

По ключевым словам

По классификаторам

По стеку

Общие советы

Понимание кода

Примеры

14/64

Page 15: Поиск и чтение унаследованного кода

Что такое ключевое слово?

Словарь «Исследовательская

деятельность»:

Ключевое слово – слово

или словосочетание из текста документа

или запроса, несущее существенную

смысловую нагрузку с точки зрения

информационного поиска.

15/64

Page 16: Поиск и чтение унаследованного кода

Стратегии поиска

по ключевым словам

Подбирать редкие ключевые слова

Сначала найти много, а затем сузить поиск

Стремиться найти хотя бы что-то,

а не именно то, что нужно

16/64

Page 17: Поиск и чтение унаследованного кода

Откуда брать ключевые слова?

Описание задачи

Экранная форма и действия пользователя

Номер ошибки

Текст ошибки или сообщения

SQL-запрос и т. д.

17/64

Page 18: Поиск и чтение унаследованного кода

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

по ключевым словам

Встроенный поиск в Visual Studio

Файловый менеджер

Поисковые движки

OpenGrok

DocFetcher

Регулярные выражения

18/64

Page 19: Поиск и чтение унаследованного кода

Поисковый движок по исходному коду

Модули

Модуль индексации исходного кода

Веб-приложение для поиска и навигации по коду

Индексирует папку с кодом в файловой системе

Веб-приложение работает под Apache

Написан на Java

Исходный код открыт, использование бесплатно

Откуда скачать

Как установить под Windows

19/64

Page 20: Поиск и чтение унаследованного кода

Зачем использовать OpenGrok?

Гибкий поиск

Быстрый поиск

Наглядный поиск

Ограничения

Не работает с кириллицей

Можно использовать DocFetcher

Нет интеграции с Visual Studio

20/64

Page 21: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Перебором

По ключевым словам

По классификаторам

По стеку

Общие советы

Понимание кода

Примеры

21/64

Page 22: Поиск и чтение унаследованного кода

Что такое классификатор?

Wikipedia:

Классификатор – систематизированный

перечень наименованных объектов.

22/64

Page 23: Поиск и чтение унаследованного кода

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

по классификаторам

ReSharper

Go to Everything

Visual Studio

Solution Explorer

Class View

Object Browser

OpenGrok

Definition

Файловый менеджер

Структура файлов и папок

23/64

Page 24: Поиск и чтение унаследованного кода

Когда применять классификаторы

Мы хорошо знакомы с системой

Знаем соглашения об именах

Знаем структуру классов, файлов и папок

Известно название класса, функции и т. д.

24/64

Page 25: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Перебором

По ключевым словам

По классификаторам

По стеку

Общие советы

Понимание кода

Примеры

25/64

Page 26: Поиск и чтение унаследованного кода

Поиск по стеку

Исследование стека

ReSharper – Stack Traces

Включение прерывания по ошибке

Exception Breaker

Какая функция вызывается, когда я нажимаю

на кнопку (выполняю другое действие)?

Веб-приложения – Fiddler

Расставить точки останова во всех методах

класса

26/64

Page 27: Поиск и чтение унаследованного кода

Когда применять поиск по стеку

Стек известен

Стек можно получить

27/64

Page 28: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Перебором

По ключевым словам

По классификаторам

По стеку

Общие советы

Понимание кода

Примеры

28/64

Page 29: Поиск и чтение унаследованного кода

Общие советы

Начинать с самого простого

Найти чуть больше или чуть меньше

Общаться с командой

Читать документацию

Вспомнить, что уже известно

Перед добавлением новой функции найти

существующую и использовать ее как шаблон

29/64

Page 30: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Примеры

30/64

Page 31: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

31/64

Page 32: Поиск и чтение унаследованного кода

Без чтения кода

Запустить на исполнение

Прочитать документацию

Пообщаться с командой или пользователями

32/64

Page 33: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

33/64

Page 34: Поиск и чтение унаследованного кода

Черный ящик

Угадать по имени

Прочитать описание и комментарии

Какой тип возвращает функция?

Какие принимает параметры?

Изучить использование (в том числе тесты)

Какие действия пользователя сюда приводят?

Что пользователь получает в результате

выполнения функции?

34/64

Page 35: Поиск и чтение унаследованного кода

Черный ящик: инструменты

ReSharper

Inspect This

Find Usages

Visual Studio

Call Hierarchy

35/64

Page 36: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

36/64

Page 37: Поиск и чтение унаследованного кода

Белый ящик

Читаем как можно меньше

Чтобы понять код, не надо читать его весь

Читаем в определенном порядке

От последовательности чтения зависит

скорость понимания

37/64

Page 38: Поиск и чтение унаследованного кода

Чтение «вглубь»

Вначале читаем код первого уровня

Затем – второго и т. д.

Инструмент – C# outline

38/64

Page 39: Поиск и чтение унаследованного кода

Чтение «от ключевых мест»

Возвращаем (получаем) результат

Присваиваем значения переменным

Делаем вывод в файл, на экран и т. д.

Инструмент – RockMargin

39/64

Page 40: Поиск и чтение унаследованного кода

Чтение от простого к сложному

Вначале понять простейшие фрагменты

Затем переходить к более сложным

40/64

Page 41: Поиск и чтение унаследованного кода

Чтение шаблонов

Виды шаблонов

Общеиспользуемые

Специфичные

Читать как «слова», без «разбора букв»

41/64

Page 42: Поиск и чтение унаследованного кода

Чтение при рецензировании кода

Просмотреть названия всех файлов

Понять, в каких файлах – ключевые

изменения

Начинать чтение с ключевых изменений

42/64

Page 43: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

43/64

Page 44: Поиск и чтение унаследованного кода

Расстановка отступов

44/64

Page 45: Поиск и чтение унаследованного кода

Рефакторинг

Переименования

Разделение длинных функций

Законы де Моргана

!(a && b) = (!a) || (!b)

!(a || b) = (!a) && (!b)

Инструмент

ReSharper

45/64

Page 46: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

46/64

Page 47: Поиск и чтение унаследованного кода

Чтение вызываемых функций

ReSharper – Inspect This

Visual Studio – View Call Hierarchy

47/64

Page 48: Поиск и чтение унаследованного кода

Диаграммы

Существующие

Новые

Автоматические

SQL

Диаграммы классов

Ручные

48/64

Page 49: Поиск и чтение унаследованного кода

Быстрые переходы

Закреплять вкладки

Делать закладки

Делать записи от руки

49/64

Page 50: Поиск и чтение унаследованного кода

Структура кода

ReSharper – File Structure

Visual Studio – Member

Общая структура – RockMargin

50/64

Page 51: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Без чтения кода

Чтение «черного ящика»

Чтение «белого ящика»

Улучшение кода

Общая картина

Общие советы

Примеры

51/64

Page 52: Поиск и чтение унаследованного кода

Общие советы

Вспомнить, что уже известно

Держать в голове цель чтения кода

Знать соглашения об именах

Общаться с коллегами

Использовать точки останова

Смотреть в лог системы контроля версий,

баг-трекер

52/64

Page 53: Поиск и чтение унаследованного кода

Перерыв

53/64

Page 54: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Примеры

Добавить загрузку из буфера

по пути к файлу

Добавить распознавание текста

Добавить захват окна по расписанию

54/64

Page 55: Поиск и чтение унаследованного кода

Добавить загрузку из буфера

по пути к файлу

Пользователь копирует в буфер

путь к файлу

Хочет, чтобы ShareX загрузил в Интернет

файл, путь к которому скопирован в буфер

55/64

Page 56: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Примеры

Добавить загрузку из буфера

по пути к файлу

Добавить распознавание текста

Добавить захват окна по расписанию

56/64

Page 57: Поиск и чтение унаследованного кода

Добавить распознавание текста

Пользователь захватывает изображение

на экране

Хочет, чтобы ShareX

Распознал текст на захваченном изображении

Скопировал распознанный текст

в буфер обмена

57/64

Page 58: Поиск и чтение унаследованного кода

Где мы?

Введение

Поиск кода

Понимание кода

Примеры

Добавить загрузку из буфера

по пути к файлу

Добавить распознавание текста

Добавить захват окна по расписанию

58/64

Page 59: Поиск и чтение унаследованного кода

Добавить захват окна по расписанию

Пользователь хочет, чтобы ShareX

захватывал изображение в некотором окне

по расписанию

59/64

Page 60: Поиск и чтение унаследованного кода

О чем не поговорили на семинаре?

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

Издатель-подписчик

Многопоточная обработка

Обратная инженерия (Reverse Engineering)

Поиск во внешних базах исходного кода

60/64

Page 61: Поиск и чтение унаследованного кода

Инструменты

Для поиска кода

OpenGrok: скачать, установить на Windows

DocFetcher

Fiddler

Exception Breaker

Для чтения кода

C# outline

RockMargin

Универсальные

Visual Studio

ReSharper

61/64

Page 62: Поиск и чтение унаследованного кода

Книги

Диомидис Спинеллис

«Анализ программного кода на примере проектов Open Source»

Грег Хогланд, Гари Мак-Гроу

«Взлом программ: анализ и примеры кода»

Майкл К. Физерс

«Эффективная работа с унаследованным кодом»

62/64

Page 63: Поиск и чтение унаследованного кода

Статьи

Как улучшить свою способность понимать

прочитанный текст?

How do you dive into large code bases?

63/64

Page 64: Поиск и чтение унаследованного кода

Спасибо!

Вопросы?

64/64

Игорь Шаталкин

[email protected]