Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

CUSTIS
April 16, 2015

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

Открытый семинар для студентов в компании CUSTIS (16 апреля 2015 года).
Лектор: Игорь Шаталкин, разработчик .NET.

CUSTIS

April 16, 2015
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. Давайте познакомимся  Образование  Программирование – увлечение с детства

     С 2011 года в IT-отрасли  Менеджер по продажам  Программист  Аналитик 2/64
  2. Почему важно уметь искать и читать код?  Дэйв Томас,

    Диомидис Спинеллис  Чтение кода – повседневное занятие программиста  90% ошибок можно устранить при чтении кода  Нас часто учат писать код, но редко – читать код  Чтобы что-то написать, нужно прочитать  Зачем изобретать велосипед? 5/64
  3. Задачи работы с кодом  Исправление и доработка кода 

    Поиск примеров  Найти шаблон для новой функции  Делал ли так кто-то раньше?  Рецензирование 6/64
  4. Концепции и инструменты  Концепции – универсальны  Инструменты 

    C# (.NET)  Visual Studio  ReSharper  Бесплатные инструменты  Универсальные инструменты 8/64
  5. Где мы?  Введение  Поиск кода  Перебором 

    По ключевым словам  По классификаторам  По стеку  Общие советы  Понимание кода  Примеры 11/64
  6. Где мы?  Введение  Поиск кода  Перебором 

    По ключевым словам  По классификаторам  По стеку  Общие советы  Понимание кода  Примеры 14/64
  7. Что такое ключевое слово? Словарь «Исследовательская деятельность»: Ключевое слово –

    слово или словосочетание из текста документа или запроса, несущее существенную смысловую нагрузку с точки зрения информационного поиска. 15/64
  8. Стратегии поиска по ключевым словам  Подбирать редкие ключевые слова

     Сначала найти много, а затем сузить поиск  Стремиться найти хотя бы что-то, а не именно то, что нужно 16/64
  9. Откуда брать ключевые слова?  Описание задачи  Экранная форма

    и действия пользователя  Номер ошибки  Текст ошибки или сообщения  SQL-запрос и т. д. 17/64
  10. Инструменты поиска по ключевым словам  Встроенный поиск в Visual

    Studio  Файловый менеджер  Поисковые движки  OpenGrok  DocFetcher  Регулярные выражения 18/64
  11.  Поисковый движок по исходному коду  Модули  Модуль

    индексации исходного кода  Веб-приложение для поиска и навигации по коду  Индексирует папку с кодом в файловой системе  Веб-приложение работает под Apache  Написан на Java  Исходный код открыт, использование бесплатно  Откуда скачать  Как установить под Windows 19/64
  12.  Зачем использовать OpenGrok?  Гибкий поиск  Быстрый поиск

     Наглядный поиск  Ограничения  Не работает с кириллицей  Можно использовать DocFetcher  Нет интеграции с Visual Studio 20/64
  13. Где мы?  Введение  Поиск кода  Перебором 

    По ключевым словам  По классификаторам  По стеку  Общие советы  Понимание кода  Примеры 21/64
  14. Инструменты поиска по классификаторам  ReSharper  Go to Everything

     Visual Studio  Solution Explorer  Class View  Object Browser  OpenGrok  Definition  Файловый менеджер  Структура файлов и папок 23/64
  15. Когда применять классификаторы  Мы хорошо знакомы с системой 

    Знаем соглашения об именах  Знаем структуру классов, файлов и папок  Известно название класса, функции и т. д. 24/64
  16. Где мы?  Введение  Поиск кода  Перебором 

    По ключевым словам  По классификаторам  По стеку  Общие советы  Понимание кода  Примеры 25/64
  17. Поиск по стеку  Исследование стека  ReSharper – Stack

    Traces  Включение прерывания по ошибке  Exception Breaker  Какая функция вызывается, когда я нажимаю на кнопку (выполняю другое действие)?  Веб-приложения – Fiddler  Расставить точки останова во всех методах класса 26/64
  18. Где мы?  Введение  Поиск кода  Перебором 

    По ключевым словам  По классификаторам  По стеку  Общие советы  Понимание кода  Примеры 28/64
  19. Общие советы  Начинать с самого простого  Найти чуть

    больше или чуть меньше  Общаться с командой  Читать документацию  Вспомнить, что уже известно  Перед добавлением новой функции найти существующую и использовать ее как шаблон 29/64
  20. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 31/64
  21. Без чтения кода  Запустить на исполнение  Прочитать документацию

     Пообщаться с командой или пользователями 32/64
  22. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 33/64
  23. Черный ящик  Угадать по имени  Прочитать описание и

    комментарии  Какой тип возвращает функция?  Какие принимает параметры?  Изучить использование (в том числе тесты)  Какие действия пользователя сюда приводят?  Что пользователь получает в результате выполнения функции? 34/64
  24. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 36/64
  25. Белый ящик  Читаем как можно меньше  Чтобы понять

    код, не надо читать его весь  Читаем в определенном порядке  От последовательности чтения зависит скорость понимания 37/64
  26. Чтение «вглубь»  Вначале читаем код первого уровня  Затем

    – второго и т. д.  Инструмент – C# outline 38/64
  27. Чтение «от ключевых мест»  Возвращаем (получаем) результат  Присваиваем

    значения переменным  Делаем вывод в файл, на экран и т. д.  Инструмент – RockMargin 39/64
  28. Чтение при рецензировании кода  Просмотреть названия всех файлов 

    Понять, в каких файлах – ключевые изменения  Начинать чтение с ключевых изменений 42/64
  29. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 43/64
  30. Рефакторинг  Переименования  Разделение длинных функций  Законы де

    Моргана  !(a && b) = (!a) || (!b)  !(a || b) = (!a) && (!b)  Инструмент  ReSharper 45/64
  31. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 46/64
  32. Структура кода  ReSharper – File Structure  Visual Studio

    – Member  Общая структура – RockMargin 50/64
  33. Где мы?  Введение  Поиск кода  Понимание кода

     Без чтения кода  Чтение «черного ящика»  Чтение «белого ящика»  Улучшение кода  Общая картина  Общие советы  Примеры 51/64
  34. Общие советы  Вспомнить, что уже известно  Держать в

    голове цель чтения кода  Знать соглашения об именах  Общаться с коллегами  Использовать точки останова  Смотреть в лог системы контроля версий, баг-трекер 52/64
  35. Где мы?  Введение  Поиск кода  Понимание кода

     Примеры  Добавить загрузку из буфера по пути к файлу  Добавить распознавание текста  Добавить захват окна по расписанию 54/64
  36. Добавить загрузку из буфера по пути к файлу  Пользователь

    копирует в буфер путь к файлу  Хочет, чтобы ShareX загрузил в Интернет файл, путь к которому скопирован в буфер 55/64
  37. Где мы?  Введение  Поиск кода  Понимание кода

     Примеры  Добавить загрузку из буфера по пути к файлу  Добавить распознавание текста  Добавить захват окна по расписанию 56/64
  38. Добавить распознавание текста  Пользователь захватывает изображение на экране 

    Хочет, чтобы ShareX  Распознал текст на захваченном изображении  Скопировал распознанный текст в буфер обмена 57/64
  39. Где мы?  Введение  Поиск кода  Понимание кода

     Примеры  Добавить загрузку из буфера по пути к файлу  Добавить распознавание текста  Добавить захват окна по расписанию 58/64
  40. Добавить захват окна по расписанию  Пользователь хочет, чтобы ShareX

    захватывал изображение в некотором окне по расписанию 59/64
  41. О чем не поговорили на семинаре?  Проблемные области для

    понимания  Издатель-подписчик  Многопоточная обработка  Обратная инженерия (Reverse Engineering)  Поиск во внешних базах исходного кода 60/64
  42. Инструменты  Для поиска кода  OpenGrok: скачать, установить на

    Windows  DocFetcher  Fiddler  Exception Breaker  Для чтения кода  C# outline  RockMargin  Универсальные  Visual Studio  ReSharper 61/64
  43. Книги  Диомидис Спинеллис «Анализ программного кода на примере проектов

    Open Source»  Грег Хогланд, Гари Мак-Гроу «Взлом программ: анализ и примеры кода»  Майкл К. Физерс «Эффективная работа с унаследованным кодом» 62/64