Как анализировать открытый исходный код без (или с недостаточной) документацией?

Я получил открытый исходный код, около 15 мб. Я хочу понять основной алгоритм, используемый там. Я начал анализировать каждую часть этого кода, но я думаю, что это займет много времени. Существуют ли какие-либо подходы к упрощению процесса? Раньше я этого не делал, поэтому это мой первый опыт.

Этот, может быть, кто-то знает: https://launchpad.net/cuneiform-linux

Ответ 1

Так как это код на С++, вы можете найти Source Navigator.

Ответ 2

Используйте Doxygen. Он создает легко просматриваемую перекрестную ссылку на базу кода в HTML. И он также может создавать диаграммы зависимости/класса (если код OOP).

Для кода не требуется специально отформатированных комментариев. Хотя это и помогает, Doxygen достаточно умен, чтобы самостоятельно разбирать код и составлять фигуру. Мне больше всего нравится возможность щелкнуть любое имя функции, переменную, класс и т.д. И мгновенно перейти к месту, где она объявлена, определена и отобразить список всех мест, где она используется. Раньше я использовал Doxygen, чтобы пожевать некоторые довольно большие базы кода (например, исходный код PHP), и это сэкономило мне много времени.

Вы также можете настроить Eclipse CDT и импортировать все исходные файлы в проект и получить аналогичный браузер. Хотя, некоторые вещи, такие как индекс функции/класса, недоступны в этом случае.

Ответ 3

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

Ответ 4

Профилирование кода покажет вам, какие подпрограммы важны. Посмотрите на верхний и нижний 5% по количеству вызовов.

Ответ 5

Добавьте ссылку на проект с открытым исходным кодом в своем вопросе: -)

Возможно, другие знают это или знают альтернативы.

Ответ 6

Первое, что я хотел бы сделать, это выяснить, каковы основные точки входа. Большинство программ имеют довольно стандартный формат: во-первых, проверка ввода (убедитесь, что вы получили правильное количество и тип входов). Во-вторых, предварительная обработка/подготовка (открытие файлов, выделение буферов, инициализация структур данных). В-третьих, они делают то, что они делают, основная процедура обработки. После этого он обычно выводит и очищает. Конечно, они могут быть перемешаны (проверка ввода может включать открытие входного файла), возможно, ужасно; как рутина fileAccessible(char *fileName), которая открывает файл, разбивает заголовок, создает экземпляр синтаксического анализатора и инициализирует лексер, читая первый символ и помещая его в таблицу сканера. К счастью, большинство проектов с открытым исходным кодом не перепутались, но вы должны быть готовы ко всему.