В идеальном мире весь код, написанный данным разработчиком, будет хорошо документирован, хорошо структурирован и всесторонне протестирован, как с помощью автоматических инструментов, таких как модульные тесты, так и сценариев сценариев использования, которые пользователь просматривает, чтобы убедиться, что вы получите ожидаемый результат.
Тем не менее, первое, что вы узнаете, мы не живем в идеальном мире!
Многие разработчики не документируют свой код должным образом, если они вообще смешивают бизнес-логику с несвязанным кодом, и единственный тест, который они проводят, - это быстрый прогон того, что они ожидают от нормального варианта использования.
При работе с кодом, подобным этому, первое, что вам нужно сделать, это установить, что он должен делать. Если есть комментарии, они могут дать вам подсказки, но не рассчитывайте на это. По моему опыту, многие программисты не умеют объяснять себя, и даже если они оставляют комментарии, они могут быть бессмысленными. Однако, если вы не единственный программист в компании, кто-то наверняка должен иметь хотя бы базовое представление о том, для чего предназначен код и для чего он предназначен. Поспрашивать!
Если у вас есть юнит-тесты, они сделают вашу жизнь намного проще. Если вы этого не сделаете, то часть изучения кодовой базы может включать написание модульных тестов для кода, который уже существует. Обычно это не считается хорошей практикой, потому что если вы пишете модульные тесты, чтобы соответствовать существующему коду, вы в конечном итоге получите модульные тесты, которые думают, что код работает как есть (они будут написаны, чтобы предположить, что поведение, которое на самом деле является ошибкой) правильно), но по крайней мере это дает вам базовый уровень. Если позже вы обнаружите, что какое-то поведение, которое, по вашему мнению, было правильным, на самом деле неверно, вы можете изменить модульный тест, чтобы проверить, что является ожидаемым результатом, а не результатом, который дает код. После того, как вы пройдете модульное тестирование, вы можете вносить изменения и оценивать, какие побочные эффекты имеют любые сделанные вами изменения.
Наконец, лучший ресурс, который вы имеете, когда имеете дело с недокументированным фрагментом кода, - это спросить конечных пользователей. Они могут ничего не знать о коде, но они знают, что они хотят, чтобы приложение делало. Сбор требований - это первая стадия в любом проекте, и важной частью этого всегда является общение с потенциальными пользователями разрабатываемой системы. Просто подумайте об этом, как о стадии захвата требований для нового проекта, который, как оказалось, уже построен.
Помните, что даже хорошо написанный и хорошо документированный код может быть сложным для постороннего понимания. Код по сути является выражением того, как человек, который написал его, думал в то время, и у каждого свой уникальный мыслительный процесс. Вам нужно научиться быть немного терпеливым и быть детективом. Трудно войти в мыслительный процесс другого человека, но это важный навык для программиста, выполняющего обслуживание существующего кода. Поскольку большая часть кода (около 70%) связана с поддержанием существующего кода, это важный навык, который необходимо освоить.
О, и теперь, когда вы увидели боль, которую может причинить плохо документированный, непроверенный и беспорядочный код, вы не будете делать это со следующим бедным разработчиком, верно? :) Учитесь на ошибках вашего предшественника, хорошо комментируйте свой код, убедитесь, что у каждого модуля есть четко определенная ответственность, которой он придерживается, и убедитесь, что у вас есть полный набор модульных тестов, которые вы либо пишете первыми (для методологий TDD), либо по крайней мере, наряду с разрабатываемым кодом.