Лучший способ ознакомиться с унаследованной кодовой базой - PullRequest
20 голосов
/ 18 октября 2008

Stacker Никто не спрашивал о самой шокирующей вещи, которую находят новые программисты, когда они входят в поле .

Очень высоко в списке - влияние наследования кодовой базы, с которой нужно быстро познакомиться. Это может быть шоком, когда вы вдруг обнаружите, что обязаны поддерживать N строк кода, которые были сведены вместе для того, кто знает, как долго, и не хватает времени, чтобы начать вносить свой вклад.

Как эффективно использовать все эти новые данные? Что облегчает этот переход? Является ли единственное реальное решение, которое уже внесло свой вклад в достаточное количество проектов с открытым исходным кодом, чтобы шок прошел?

Это также относится к опытным программистам. Какие методы вы используете, чтобы облегчить переход на новую кодовую базу?

Я добавил к этому тег Community-Building, потому что я также хотел бы услышать некоторые военные истории об этих переходах. Не стесняйтесь поделиться тем, как вы справились с особенно напряженной кривой обучения.

Ответы [ 14 ]

13 голосов
/ 18 октября 2008

Pencil & Notebook (не отвлекайтесь, пытаясь создать незапрошенное решение)

  • Делайте заметки по ходу работы и каждый час занимайте час, чтобы прочитать и упорядочить записи предыдущих недель

  • с большими кодовыми базами первые впечатления могут быть обманчивыми, а проблемы, как правило, быстро перестраиваются, пока вы знакомитесь.

  • Помните, что проблемы из вашей последней рабочей среды не обязательно являются действительными или уместными в вашей новой среде. Остерегайтесь предвзятых понятий.

  • Заметки / замечания, которые вы сделаете, помогут вам быстро узнать, какие вопросы и кого задавать. Надеюсь, вы собрали имена всех официальных (и неофициальных) заинтересованных сторон.

11 голосов
/ 18 октября 2008

Один из лучших способов познакомиться с унаследованным кодом - запачкать руки. Начните с исправления нескольких простых ошибок и перейдите к более сложным. Это согреет вас к коду лучше, чем систематическая проверка кода.

Если есть документ с требованиями или функциональной спецификацией (который, мы надеемся, актуален), вы должны прочитать его.

Если есть высокоуровневый или подробный проектный документ (который, мы надеемся, актуален), вам , вероятно, следует прочитать его.

Еще один хороший способ - организовать сеанс «передачи информации» с людьми, которые знакомы с кодом, где они представляют презентацию проекта высокого уровня, а также проводят обзор важных / хитрых частей код.

9 голосов
/ 18 октября 2008

Написать юнит-тесты. Вы найдете бородавки быстрее и будете увереннее, когда придет время менять код.

2 голосов
/ 18 октября 2008

Мои шаги будут:

1.) Настройте рабочее пространство / проект исходного кода (или любого другого хорошего браузера исходного кода, который вы используете) со всеми исходными файлами заголовков в базе кода. Брови на более высоком уровне от самой верхней функции (основной) до самой нижней функции. Во время просмотра кода продолжайте делать заметки на бумажном / или текстовом документе, отслеживая поток вызовов функций. Не вдавайтесь в подробности реализации функций на этом этапе, оставьте это для последующих итераций. На этом этапе отслеживайте, какие аргументы передаются в функции, возвращаются значения, как инициализируются передаваемые в аргументы аргументы, как изменяется значение набора этих аргументов, как используются возвращаемые значения?

2.) После одной итерации шага 1.) После чего у вас есть некоторый уровень кода и структур данных, используемых в базе кода, настройте MSVC (или любой другой соответствующий проект компилятора в соответствии с языком программирования базы кода). ), скомпилируйте код, выполните с допустимым контрольным примером и выполните один шаг по коду снова от основного до последнего уровня функции. Между вызовами функций продолжайте помечать значения переданных, возвращенных переменных, взятых различных путей кода, избегать различных путей кода и т. Д.

3.) Повторяйте шаги 1) и 2) итеративно до тех пор, пока вы не освоитесь, до того момента, когда вы сможете изменить какой-то код / ​​добавить некоторый код / ​​найти ошибку в существующем коде / исправить ошибку!

-AD

1 голос
/ 21 марта 2014

Другая процедура ...

После прочтения Энди Ханта "Прагматическое мышление и обучение - рефакторинг вашей посуды" (который не касается этого напрямую), я взял несколько советов, которые, возможно, стоит упомянуть:

Наблюдать за поведением:

Если есть пользовательский интерфейс, тем лучше. Используйте приложение и получите ментальную карту отношений (например, ссылки, модалы и т. Д.). Посмотрите на HTTP-запрос, если он помогает, но не придавайте ему особого значения - вы просто хотите легкого дружеского знакомства с приложением.

Подтверждение структуры папки:

Еще раз, это свет. Просто посмотрите, что и где принадлежит, и надейтесь, что структура достаточно семантическая - отсюда всегда можно получить информацию верхнего уровня.

Анализ стеков вызовов, сверху вниз:

Просмотрите список на бумаге или другом носителе, но постарайтесь не набирать его - это задействует разные части вашего мозга (если нужно, создайте его из Legos) - вызовы функций, объекты и переменные, которые ближе всего к верхнему уровню в первую очередь. Посмотрите на константы и модули, убедитесь, что вы не погрузитесь в мелкозернистые функции, если можете помочь.

MindMap It!:

Возможно, самый важный шаг. Создайте очень черновик черновика вашего текущего понимания кода. Убедитесь, что вы быстро пробежали по карте ума. Это позволяет равномерно распределить различные части вашего мозга (в основном R-Mode), чтобы иметь право голоса на карте.

  1. Создание облаков, ящиков и т. Д. Где бы вы ни изначально не думали, что они должны идти на бумаге. Не стесняйтесь обозначать поля с синтаксическими символами (например, «F» -функция, «f» -закрытие, «C» -константа, «V»-Global Var, «V» низкоуровневой переменной и т. Д.). Используйте стрелки: входящий массив для аргументов, исходящий для возвратов или что более естественно для вас.
  2. Начните рисовать соединения, чтобы обозначить отношения. Это нормально, если выглядит грязно - это первый черновик.
  3. Сделайте быстрый грубый пересмотр. Его слишком сложно читать, сделайте еще одну быструю организацию, но не делайте больше одной ревизии.

Откройте отладчик:

  1. Подтвердить или аннулировать любые представления, которые вы имели после сопоставления. Отслеживание переменных, аргументов, возвратов и т. Д.
  2. Отслеживание HTTP-запросов и т. Д., Чтобы понять, откуда поступают данные. Посмотрите на сами заголовки, но не углубляйтесь в детали тела запроса.

MindMap Again!:

Теперь вы должны иметь представление о большинстве функций верхнего уровня.

  1. Создайте новый MindMap, в котором есть все, что вы пропустили в первом. С этим вы можете потратить больше времени и даже добавить относительно мелких деталей - но не бойтесь того, с какими предыдущими понятиями они могут конфликтовать.
  2. Сравните эту карту с вашей последней и устраните все вопросы, которые у вас были раньше, запишите новые вопросы и запишите противоречивые перспективы.
  3. Пересмотрите эту карту, если она слишком туманная. Изменяйте столько, сколько хотите, но сводите изменения к минимуму.

Притворись не своим кодом:

Если вы можете выразить это механически, сделайте это. Наиболее важной частью этого является создание метафоры для поведения приложения и / или небольших частей кода. Думайте о смешных вещах, серьезно. Если это было животное, монстр, звезда, робот. Какой это было бы. Если бы это было в Star Trek, для чего бы они его использовали. Подумайте о многих вещах, чтобы взвесить это.

Синтез по анализу:

Теперь вы хотите увидеть не «что», а «как». Любые низкоуровневые детали, которые через вас для петли могут быть извлечены и помещены в стерильную среду (вы контролируете ее входы). Какие результаты вы получаете. Является ли система более сложной, чем вы думали изначально? Simpler? Нужны ли улучшения?

Внеси что-нибудь, чувак!:

Написать тест, исправить ошибку, прокомментировать ее, абстрагировать ее. У вас должно быть достаточно возможностей, чтобы начать вносить небольшие взносы, и FAILING IS OK:) ! Обратите внимание на любые изменения, внесенные вами в коммиты, чат, электронную почту. Если вы сделали что-то подлое, вы, ребята, можете поймать это до того, как оно поступит в производство - если что-то неправильно , это отличный способ заставить товарища по команде прояснить ситуацию для вас. Обычно слушание разговора с товарищем по команде многое прояснит, что привело к столкновению MindMaps.

В двух словах, самое важное, что нужно сделать, это использовать нисходящий способ задействовать как можно больше различных частей вашего мозга. Это может даже помочь закрыть ноутбук и, если это возможно, повернуть лицо к окну. Исследования показали, что соблюдение крайнего срока приводит к возникновению «похмелья под давлением» в течение ~ 2,5 дней после крайнего срока, поэтому именно такие сроки лучше всего использовать в пятницу. Итак, БУДЬТЕ РЕЛАКСИРОВАННЫМ, НЕТ ВРЕМЕНИ, И ТЕПЕРЬ ОБЕСПЕЧИВАЙТЕ СЕБЯ СРЕДОЙ, КОТОРЫЙ БЕЗОПАСНЫ, ЧТОБЫ СДЕЛАТЬ В Большая часть этого может быть довольно спеша, пока вы не приступите к деталям. Убедитесь, что вы не обходите понимание тем высокого уровня.

Надеюсь, это поможет и вам:)

1 голос
/ 08 июня 2013

Я сталкивался с этой проблемой много раз. Я закончил писать в блоге об общем процессе изучения новой кодовой базы: http://www.larsavery.com/blog/a-process-for-learning-a-new-codebase/

1 голос
/ 18 октября 2008

Постарайтесь понять бизнес-логику кода. Как только вы узнаете, почему код был написан в первую очередь, и что он должен делать, вы можете начать читать его или, как кто-то сказал, просто исправлять несколько ошибок тут и там

1 голос
/ 18 октября 2008

Пользователи vi и emacs могут использовать теги. Теги содержатся в файле (обычно он называется TAGS). Вы генерируете один или несколько файлов тегов с помощью команды (etags для emacs vtags для vi). Затем мы редактируем исходный код и видим сбивающую с толку функцию или переменную, загружаем файл тегов, и он доставит вас туда, где объявлена ​​функция (не достаточно совершенная, но достаточно хорошая). Я на самом деле написал несколько макросов, которые позволяют перемещаться по источнику с помощью Alt-курсора, вроде как popd и pushd во многих разновидностях UNIX.

BubbaT

1 голос
/ 18 октября 2008

Старайтесь понять код, исправляя в нем ошибки. Исправьте или поддержите документацию. Не изменяйте комментарии в самом коде, это может привести к появлению новых ошибок.

В нашей работе, вообще говоря, мы не вносим изменений в производственный код без уважительной причины. Это включает косметические изменения; даже они могут вносить ошибки.

Независимо от того, насколько отвратительным кажется фрагмент кода, не поддавайтесь искушению переписать его, если у вас нет исправления или другого изменения. Если вы обнаружили ошибку (или возможную ошибку) при чтении кода, пытаясь его изучить, запишите ошибку для последующей сортировки, но не пытайтесь ее исправить.

1 голос
/ 18 октября 2008

Просмотрите основные библиотеки и прочитайте описания функций. Если это C / C ++, это означает только заголовки. Документируйте все, что вы не понимаете.

В последний раз, когда я делал это, один из комментариев, который я вставил, был «Этот класс никогда не используется».

...