Обратное проектирование плохо документированной Java из источника

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

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

Он использует собственный скрипт сборки Perl, для работы которого требуется тысяча модулей из CPAN, и я не знаю Perl. Обратный инжиниринг в UML потерпел неудачу, кроме как с Doxygen, и это ограничивается только диаграммами наследования и графами вызовов.

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

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

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

Есть ли какие-нибудь книги, которые могут мне помочь, и я подхожу к этому с правильной точки зрения? Должен ли я нанять работника по контракту, который знает Perl и JMX, чтобы помочь мне?

3 ответа

Книга Майкла Фезерса "Эффективная работа с устаревшим кодом", вероятно, поможет вам больше всего, что мы можем вам здесь рассказать.

Тем не менее, самое важное, что вам нужно прояснить для себя (и из вашего вопроса звучит так, будто это не совсем понятно), это: какова ваша цель? Чего вы хотите достичь с помощью этой кодовой базы?

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

В этом случае я бы попытался понять только те варианты использования системы, которые вам необходимо изменить; следуйте вызовам методов через код (возможно, с использованием отладчика в работающей системе), чтобы увидеть, какие части задействованы. Сделайте это для нескольких разных вариантов использования, и вы начнете видеть шаблоны, затем документируете их и постепенно объединяете их в высокоуровневое изображение системы.

Если это Java-код, то глубокий обратный инжиниринг был бы очень полезен. См. Документацию по адресу: http://www.ejb3.org/jar_file_reverse/jar_file_reverse.html

Этот инструмент может помочь вам.

Или, если устаревшая система написана плохо, это может привести к огромному нечитаемому беспорядку, но я надеюсь, что это поможет.

Другие вопросы по тегам