Ответ 1
Так как это код на С++, вы можете найти Source Navigator.
Я получил открытый исходный код, около 15 мб. Я хочу понять основной алгоритм, используемый там. Я начал анализировать каждую часть этого кода, но я думаю, что это займет много времени. Существуют ли какие-либо подходы к упрощению процесса? Раньше я этого не делал, поэтому это мой первый опыт.
Этот, может быть, кто-то знает: https://launchpad.net/cuneiform-linux
Так как это код на С++, вы можете найти Source Navigator.
Используйте Doxygen. Он создает легко просматриваемую перекрестную ссылку на базу кода в HTML. И он также может создавать диаграммы зависимости/класса (если код OOP).
Для кода не требуется специально отформатированных комментариев. Хотя это и помогает, Doxygen достаточно умен, чтобы самостоятельно разбирать код и составлять фигуру. Мне больше всего нравится возможность щелкнуть любое имя функции, переменную, класс и т.д. И мгновенно перейти к месту, где она объявлена, определена и отобразить список всех мест, где она используется. Раньше я использовал Doxygen, чтобы пожевать некоторые довольно большие базы кода (например, исходный код PHP), и это сэкономило мне много времени.
Вы также можете настроить Eclipse CDT и импортировать все исходные файлы в проект и получить аналогичный браузер. Хотя, некоторые вещи, такие как индекс функции/класса, недоступны в этом случае.
Как вы идете, добавьте в документацию. Если повезет больше, люди будут делать то же самое, и между вами вы доводите уровень документации до требуемого. Это то, что есть с открытым исходным кодом.
Профилирование кода покажет вам, какие подпрограммы важны. Посмотрите на верхний и нижний 5% по количеству вызовов.
Добавьте ссылку на проект с открытым исходным кодом в своем вопросе: -)
Возможно, другие знают это или знают альтернативы.
Первое, что я хотел бы сделать, это выяснить, каковы основные точки входа. Большинство программ имеют довольно стандартный формат: во-первых, проверка ввода (убедитесь, что вы получили правильное количество и тип входов). Во-вторых, предварительная обработка/подготовка (открытие файлов, выделение буферов, инициализация структур данных). В-третьих, они делают то, что они делают, основная процедура обработки. После этого он обычно выводит и очищает. Конечно, они могут быть перемешаны (проверка ввода может включать открытие входного файла), возможно, ужасно; как рутина fileAccessible(char *fileName)
, которая открывает файл, разбивает заголовок, создает экземпляр синтаксического анализатора и инициализирует лексер, читая первый символ и помещая его в таблицу сканера. К счастью, большинство проектов с открытым исходным кодом не перепутались, но вы должны быть готовы ко всему.