Как вы понимаете большой кусок кода?
Я новый студент колледжа, который только начал свою работу. В моем периоде нарастания времени мне нужно узнать много кода продукта. Есть некоторые документы по дизайну, но они не очень помогают.
Можете ли вы предоставить некоторые общие методы для просмотра и понимания огромного кода продукта (в частности, С++)?
Ответы
Ответ 1
Запустите его через doxygen. Это создаст html-документацию, которая будет полезна, даже если код не имеет надлежащих комментариев в стиле doxygen.
Еще один хороший совет - проверить модульные тесты, если они есть. Если нет единичных тестов, хороший способ понять код - написать свои собственные модульные тесты. Усилия сделать это будут платить за себя много раз.
Ответ 2
Используйте каждый доступный вам метод (без особого приоритета):
- Используйте сам продукт и понимайте, что он делает.
- Обратитесь к разработчикам, которые поддерживали его или ранее работали с ним
- Отлаживайте его и смотрите, как потоки данных и как взаимодействуют классы ( "когда я нажимаю эту кнопку, что именно происходит, кто несет ответственность?" )
- Посмотрите на диаграммы архитектуры, UML или классов
- Один из моих фаворитов: создайте собственные диаграммы иерархии классов, взаимодействия классов, общий поток управления, компоненты высокого уровня, взаимодействия между процессами и DLL, время жизни и управление объектами.
- Если они не полностью устарели, прочитайте спецификации dev/test/user (хорошо сочетается С# 1)
- Прочитайте документацию по нему
Больше всего: быть цепким и настойчивым. Если вы не выполняете работу, не ждите ее понимания. Если вы ничего не понимаете, копайте и копайте, пока не сделаете это. Программное обеспечение не является магии, это просто тяжелая работа:)
Ответ 3
Некоторые люди скажут вам начать с структур данных, но в большой системе, даже не очень полезной большую часть времени. Я могу представить четыре основных момента:
-
Не торопитесь. Часто это больше похоже на целую серию гештальт-сдвигов, чем на однолинейное, постепенное понимание. Поэтому будьте терпеливы.
-
Независимо от того, насколько это важно, вы должны быть в состоянии поставить точку останова и пройти ее в отладчике. Даже в большой, сложной многопоточной системе вы можете пройтись и посмотреть, что происходит.
-
Попросите ошибки и начните их исправлять, независимо от того, насколько они сумасшедшие. Это похоже на то, чтобы броситься в чужую страну; вы в конце концов соберете язык.
-
Найдите наставника. Путеводитель по джунглям неоценим.
Ответ 4
Я думаю, что уже было несколько хороших отзывов. Мой 2c стоит...
Не уверен, что вы классный (10 KLOC, 1000 KLOC, 10000 KLOC и т.д.), но можно надеяться, что это будет разбито каким-то образом и не будет монолитной одиночной программой. Возможно, у вашего руководства есть некоторые указания, по которым "модуль (ы)" вы, скорее всего, будете проводить время в данный момент. Надеюсь, это поможет устранить проблему.
Во-первых, прежде чем пытаться понять код, попробуйте понять продукт. Что оно делает? Тогда как это делается? С чем это связано? Тогда как он взаимодействует? и т.д...
Когда вы попадаете в код, сначала попытайтесь понять дизайн и философию высокого уровня и работайте над широтой перед глубиной. Я согласен с некоторыми из вышеперечисленных исправлений некоторых ошибок, но я также настоятельно рекомендую вам продолжать получать дескрипцию на высоком уровне, даже если вам нужно вдаваться в подробности, чтобы исправить некоторые ошибки.
Я также согласен с вышесказанным в плане создания некоторых диаграмм для себя, если вы не можете найти уже существующих. А потом поделитесь ими, возможно, с командой/продуктом wiki? Мне любопытно, почему существующая доко не очень помогает. Как правило, это потому, что этот тип doco был сформирован из ранних понятий, и продукт больше не имеет сходства, но если это не так, то что вы можете внести в эту проблему. Предполагается, что, когда вы сегодня, кто-то еще будет достаточно коротким, и вы в идеальном положении, чтобы знать, что не хватает нужного doco!
Если продукт действительно "огромен", тогда вы должны признать, что никогда не сможете удержать все это в своей голове, поэтому лучше всего вы можете быть достаточно знакомы, чтобы знать, с чего начать (приходит вернуться к пониманию продукта и приблизиться к ширине кода вначале).
Ответ 5
Это, очевидно, довольно распространенный вопрос, и он похож на этот (и связанные с ним вопросы): Как быстро понять дизайн и поток кода любого продукта?
Прокатите некоторые из этих ответов/комментариев, для начала. Иначе мы просто повторим их.:)