Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Анализ кода является важной составляющей процесса разработки. При чтении чужих исходников не нужно торопиться, задавать много вопросов автору кода и разбивать код на понятные фрагменты.
Чтение чужого кода – это прекрасная возможность для постановки вопросов, погружения в окружающий код и документацию. Но часто исходники бывают слишком запутанными.
Из своего опыта разработчики компании DST Global взяли на вооружение несколько стратегий, которые позволяют осуществлять эффективный анализ даже такого кода.
Снижение риска
При анализе сконцентрируйтесь на тех местах кода, которые изменяют важные данные. Это позволит понять логику автора, усовершенствовать код или изменить его, не нарушая структуры.
Акцент на тестировании
Тесты могут стать отправной точкой для понимания запутанного набора изменений. Они предоставляют базовую информацию о принципах, которыми руководствовался автор. Если тестирование пройдет хорошо, это придаст уверенности при работе с кодом, в котором вы плохо разбираетесь.
Делайте предположения
Разбирая чужой код, оставляйте свои комментарии с предположениями о том, за что отвечает тот или иной фрагмент. Это значительно ускорит процесс анализа.
Подобные комментарии также помогут автору посмотреть на созданный им код чужими глазами.
Не забывайте оставлять комментарии во фрагментах кода, с которыми вы не смогли разобраться. Признание в том, что вы чего-то не понимаете, является хорошим сигналом.
Анализ на понятном уровне
Можно вручную проверить работу кода в привычной для вас среде разработки. Но даже если вы не сможете полностью понять код, все равно прочтите его до конца. Благодаря этому вы обнаружите классические ошибки, которые допустил автор.
Давайте поговорим подробнее!
Эти подходы помогают разработчикам компании DST Global (dstglobal.ru) при анализе кода, а также наладить обратную связь с авторами исходников. Если у вас есть свои методы анализа, поделитесь ими в комментариях.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117
Задать вопрос по почте
Немаловажным аспектом снижения риска (если это пользовательское приложение) нужно начинать с опроса собственно пользователей, которые принимают решения на основании данного приложении. Пользователи могут использовать информацию, получаемую из приложения по совершенно неочевидному и непредсказуемому алгоритму. Алгоритму, «исторически сложившемуся», сложившемуся в том числе благодаря изначальным изъянам в приложении, которые вы почините, тем самым поломав работу системы
Читатель может не осознавать, что видит на экране труд нескольких разработчиков. Возможно, они спорили во время кодинга, и он дался им нелегко. Возможно, разработчикам потребовались недели, чтобы выдать код, который обходит недокументированные ограничения. Читатель имеет дело с законченным продуктом и даже не догадывается, что стоит за многократно выверенными строками кода.
Рано или поздно у разработчика наступает момент, когда ему предстоит читать чужой код. Например, когда программисту нужно изменить или обновить существующий код, провести код-ревью, разобраться в работе программного интерфейса. Для этого нужно знать, как читать и понимать чужой код. Это умение полезно и тем, кому только предстоит освоиться в кодовой базе. Разберемся, на что обратить внимание при чтении чужого кода, чтобы понять его и, возможно, чему-то научиться.
Как правильно читать код
Научитесь проводить «раскопки» в коде
При первом знакомстве с серьезной кодовой базой вы будете ощущать себя не разработчиком, а археологом, частным сыщиком или исследователем религиозных книг. Вам придется проводить «раскопки» в чужом коде, чтобы понять, как он создавался.
Если вы работаете над кодовой базой, в которой разработчики использовали контроль версий, то у вас есть доступ к метаданным. Изучите следующие команды для Git, чтобы узнать, как изменялся код (они подойдут и для SVN):
git blame
С помощью этой команды вы узнаете имя автора кода, дату последних изменений и хэш коммита (зафиксированного изменения в коде) для каждой строки. Так можно найти историю кода и понять, какой именно код был внесен в репозиторий, как это было сделано и по какой причине. Если это возможно, познакомьтесь с авторами кода: они постараются ответить на ваши вопросы.
Читая код, убедитесь, что вы понимаете, где он начинает выполняться и что происходит в процессе его запуска. Посмотрите, какие файлы подключаются, какие классы используются, какие опции конфига устанавливаются. Скорее всего, вы будете постоянно сталкиваться с ними во всей кодовой базе.
Некоторые модули могут выделяться из остального кода и иметь очень общее назначение. Выполните git blame и посмотрите, какие части основного файла недавно изменяли. Так вы узнаете проблемы, которые решала команда в последнее время. Возможно, разработчики долго пытались наладить библиотеку, которая не слишком хорошо работала. Может, там просто шаблонный код, который нужно регулярно обновлять.
Попробуйте найти примеры таких выделяющихся модулей в других частях кода, чтобы узнать, как и когда они используются. Это поможет вам понять место и роль модулей в основном приложении.
git log и git grep
Используйте команду git log, чтобы увидеть историю коммитов по всему репозиторию. Команда git grep поможет вам найти в коммитах конкретный текст, например, название функции someFunction: git log | grep someFunction -C 3. Последние флаги покажут вам найденные выражения с тремя строками окружающего контекста.
Также git log может показать вам историю отдельного файла. Чтобы ее посмотреть, используйте флаг -p: git log -p index.js. Обращайте внимание на имена авторов коммитов, чтобы знать, кому в будущем адресовать вопросы.
Переключайтесь между коммитами и изучайте историю кода
Вы можете переключиться на любой коммит и запустить проект так, будто этот коммит был последним. Как правило, это делают для того, чтобы выявить сложно отслеживаемую проблему. Также коммиты переключают, чтобы увидеть историю кода.
Если проект хранится на GitHub или подобном сервисе, вы можете узнать много нового, читая пулл-реквесты и код-ревью. Обращайте внимание на тикеты — карточки-задачи для отслеживания работы над багами, внедрения функций. Читайте обсуждения в тикетах: там могут быть «болевые точки», с которыми вы можете столкнуться в будущем, поэтому лучше иметь представление о них заранее.
Читайте спецификации
Specs или спецификации — это новые комментарии к коду. Читайте unit specs, чтобы выяснить предназначение функций, модулей и возможные пограничные случаи (edge-cases), которые они обрабатывают.
Также читайте интеграционные спецификации, чтобы понять, как пользователи будут взаимодействовать с вашим приложением и какие процессы оно поддерживает.
Воспринимайте комментарии как подсказки
Если в процессе изучения кода вы наткнулись на непонятную функцию и прочли комментарий к ней, который еще больше вас запутал — возможно, он просто устарел. Держите это в голове: если комментарий к функции давно не обновлялся, вероятно, она исчезла уже много месяцев назад, и кроме вас это никто не заметил.
Обращайте внимание на стиль написания кода
Читая чужой код, посмотрите, соблюдены ли стандарты его оформления, есть ли именования, пробелы, скобки. Обратите внимание на общий уровень абстракции кода. Если у него много уровней абстракции, то вам следует их использовать и в своем коде.
Если вы хорошо провели «раскопки», то нашли момент, когда один из разработчиков решил абстрагировать часть кода. Вспомните, как код выглядел до этого изменения и задумайтесь, что с ним стало после выноса на новый уровень абстракции.
Работая над проектом, посмотрите, какие конструкции используют разработчики из вашей команды. Если они отдают предпочтение циклам, а не функции map, то и вам следует их использовать. Если вам не нравится стиль оформления кода в проекте, обсудите это с командой — это лучше, чем смешивать разные стили в одном файле. Хороший код выглядит так, будто он написан одним человеком.
Избавляйтесь от «мусора» в коде
Пока вы читаете код, вам могут встретиться функции и целые файлы, которые разработчики никогда не используют, и комментарии, на которые никто не отвечал несколько лет. Не тратьте на разбор всего этого много времени — избавьтесь от «мусора». Если этот код все еще нужен, кто-нибудь отметит это на код-ревью. Удалив ненужное, вы сбережете силы и время того, кто будет читать этот код после вас.