Как вы понимаете большой кусок кода?

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

Можете ли вы предоставить некоторые общие методы для просмотра и понимания огромного кода продукта (в частности, С++)?

Ответ 1

Запустите его через doxygen. Это создаст html-документацию, которая будет полезна, даже если код не имеет надлежащих комментариев в стиле doxygen.

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

Ответ 2

Используйте каждый доступный вам метод (без особого приоритета):

  • Используйте сам продукт и понимайте, что он делает.
  • Обратитесь к разработчикам, которые поддерживали его или ранее работали с ним
  • Отлаживайте его и смотрите, как потоки данных и как взаимодействуют классы ( "когда я нажимаю эту кнопку, что именно происходит, кто несет ответственность?" )
  • Посмотрите на диаграммы архитектуры, UML или классов
  • Один из моих фаворитов: создайте собственные диаграммы иерархии классов, взаимодействия классов, общий поток управления, компоненты высокого уровня, взаимодействия между процессами и DLL, время жизни и управление объектами.
  • Если они не полностью устарели, прочитайте спецификации dev/test/user (хорошо сочетается С# 1)
  • Прочитайте документацию по нему

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

Ответ 3

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

  • Не торопитесь. Часто это больше похоже на целую серию гештальт-сдвигов, чем на однолинейное, постепенное понимание. Поэтому будьте терпеливы.

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

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

  • Найдите наставника. Путеводитель по джунглям неоценим.

Ответ 4

Я думаю, что уже было несколько хороших отзывов. Мой 2c стоит...

Не уверен, что вы классный (10 KLOC, 1000 KLOC, 10000 KLOC и т.д.), но можно надеяться, что это будет разбито каким-то образом и не будет монолитной одиночной программой. Возможно, у вашего руководства есть некоторые указания, по которым "модуль (ы)" вы, скорее всего, будете проводить время в данный момент. Надеюсь, это поможет устранить проблему.

Во-первых, прежде чем пытаться понять код, попробуйте понять продукт. Что оно делает? Тогда как это делается? С чем это связано? Тогда как он взаимодействует? и т.д...

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

Я также согласен с вышесказанным в плане создания некоторых диаграмм для себя, если вы не можете найти уже существующих. А потом поделитесь ими, возможно, с командой/продуктом wiki? Мне любопытно, почему существующая доко не очень помогает. Как правило, это потому, что этот тип doco был сформирован из ранних понятий, и продукт больше не имеет сходства, но если это не так, то что вы можете внести в эту проблему. Предполагается, что, когда вы сегодня, кто-то еще будет достаточно коротким, и вы в идеальном положении, чтобы знать, что не хватает нужного doco!

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