Фон

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

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

Эта проблема

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

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

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

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

Решение

Итак, что вы собираетесь делать, когда столкнетесь с совершенно новой кодовой базой?

Сбор требований обычно является первым этапом любого большого проекта, и разговор с потенциальными пользователями системы всегда является важной частью этого. Чтобы исправить программу, вам сначала нужно понять проблемы, которые она пытается решить. Обычно есть причина, почему все делается определенным образом. Помнить. Работа с чужим кодом - это норма, а не исключение, и важная часть этого - стать экспертом и выяснить, как работали другие программисты. Приняв их стиль, продолжая их работу, вы также упростите последующему процессу подражания.

Изучение масштабов

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

Разрушение вещей

Итак, как нам начать разбирать вещи? Один из методов, который настоятельно рекомендует сообщество, - это установить точку останова на методах, которые вызывают поведение, которое вас беспокоит. Если изменение строки кода вызывает неожиданные изменения в других местах, установите точку останова на этой строке и посмотрите, что произойдет. У вас есть много информации о состоянии выполнения после достижения точки останова. Точки останова останавливают выполнение кода в определенной строке, и оттуда вы можете увидеть из трассировки стека, как код попал туда. Используйте функции step into и step out, чтобы увидеть, что делают разные методы и как события распространяются в приложении. Это научит вас кое-чему о структуре кодовой базы.

Закладки

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

Вы можете ознакомиться с расширением VS Code Bookmark здесь.

Написание и понимание тестов

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

Чем больше таких вы создадите, тем больше у вас будет уверенности в том, что добавленный код не сломает что-то еще.

Резюме

  • Начните со сбора информации о том, какие проблемы должна решать программа и какой стиль кода следует адаптировать.
  • Не тратьте все свое время на выяснение того, как все работает с самого начала. Сузьте вещи до того, что вы действительно можете обработать.
  • Пошаговое описание поведения, которое вас беспокоит, с помощью отладчика. Трассировка стека содержит много информации о том, как события распространяются в приложении.
  • Хотя тестирование проводится редко, оно действует как замечательный инструмент для документирования и является хорошим введением в новую кодовую базу.

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

Только не тратьте все свое время на объяснение своих проблем резиновой уточке. Люди будут думать, что ты ненормальный 😉