2010-10-06 3 views
36

У меня есть приложение, написанное на Java. In хранится в нескольких файлах. Он использует разные классы с разными методами. Код большой и сложный. Я думаю, что было бы легче понять код, если бы у меня была графическая модель кода (какой-то ориентированный граф). Существуют ли некоторые стандартные методы визуализации кода. Я думаю об использовании UML (не уверен, что это правильный выбор). Кто-нибудь может мне что-нибудь посоветовать?Как мне визуализировать структуру моего кода?

ДОБАВЛЕНО:

Я считаю две возможности:

  1. Создание графика с помощью рук (явно).
  2. Создание графика в автоматическом режиме. Например, чтобы использовать некоторые инструменты, которые читают доступный код и генерируют некоторый график, описывающий структуру кода.

ДОБАВЛЕНО 2:

Было бы неплохо иметь что-то бесплатно.

+4

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

ответ

19

Самый важный инструмент, который вы должны использовать ваш мозг, и это бесплатно.

Нет причин, по которым вы должны использовать какой-либо стандартный метод визуализации, и вы можете использовать любой материал, который вам нравится. Бумага, доска, фотошоп, visio, powerpoint, блокнот: все это может быть эффективным.Нарисуйте диаграмму классов, объектов, методов, свойств, переменных - все, что вы считаете полезным для просмотра, чтобы понять приложение. Аудитория - это не только другие члены вашей команды, но и сами. Создавайте диаграммы, которые вам полезны для быстрого изучения. Оставьте их вокруг своего рабочего пространства и регулярно смотрите на них, чтобы напомнить себе об общей архитектуре системы, когда вы ее создаете.

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

+12

не согласны с общим настроением, но будут иметь проблемы с «[UML ] ... существует для людей, которые не могут взять на себя личную ответственность за документирование без стандартов ». UML обеспечивает общий графический синтаксис. Использование стандартного синтаксиса экономит ненужное изобретение собственного и объясняет его другим сторонам. Он не подходит во всех случаях и не должен быть рабски соблюден. Но предположить, что это обращение за безответственностью, неверно. – sfinnie

+3

Это не проблема UML. он думает, что автоматическое создание диаграмм достаточно, это неправильно. – duffymo

+1

Есть много причин, по которым люди не могут взять на себя личную ответственность за документацию без стандартов. Безответственность - одна из них, но я думаю, что недостаток опыта гораздо более распространен. –

3

JUDE Community UML используется, чтобы иметь возможность импортировать Java, но это уже не так. Это хороший бесплатный инструмент.

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

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

+1

Это правда, когда я в последний раз пытался создать UML из кода .. приведенные диаграммы слишком сложны для понимания. Легче понять код напрямую. – Reddy

+0

Вот почему я не очень люблю UML или обратную инженерию. Диаграммы нередко создают себя. – duffymo

+1

Я полностью согласен с вами, поэтому важно иметь возможность перемещаться внутри модели. В инструментах UML отображается только диаграмма классов, в которой вы не можете перемещаться. То, что мне нравится, - это перетащить класс и посмотреть на его взаимодействие, выбрав зависимости show show, показать ассоциацию, уметь скрыть их, а затем посмотреть на что-то еще. Это всегда одна и та же диаграмма, но вы можете скрыть размер класса, скрыть отсеки и т. Д., И очень очень большой код будет хорошо виден. Теперь, когда я использую EclipseUML Omondo, я могу это сделать, и моя работа в моей компании лучше, потому что мой код лучше. –

9

Вы пробовали Google CodePro Analytix?

он может, например, зависимости отображения и свободен (скриншот из cod.google.com):

Screenshot from Google

+2

Ссылка на этой странице сломана. Я добавляю правильную ссылку: [Руководство пользователя CodePro Analytix] (https://developers.google.com/java-dev-tools/codepro/doc/) –

3

Вот не UML-инструмент, который имеет очень приятные функции визуализации.

Вы можете сопоставить строки кода для каждого класса/метода с цветами/стороной длины прямоугольников. Вы также можете показать зависимости между классами.

http://www.moosetechnology.org/

Хорошая вещь, вы можете использовать Smalltalk сценариев для отображения того, что вам нужно: http://www.moosetechnology.org/docs/faq/JavaModelManipulation

Здесь вы можете увидеть, как такая визуализация выглядит следующим образом: http://www.moosetechnology.org/tools/moosejee/casestudy

23

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

Вы обычно хотите, чтобы думать о выполнении этого в ряде способов:

  1. Используйте свой мозг: Кто-то говорил об этом - нет никакой замены на самом деле пытается понять код базы. Возможно, вам придется снять заметки и вернуться к ней позже. Могут ли инструменты помочь? Определенно. Но не ожидайте, что они сделают для вас большую часть работы.
  2. Найти документацию и поговорить с сотрудниками: Нет лучшего способа, чем источник, описывающий основные концепции в кодовой базе. Если вы можете найти кого-то, кто поможет вам, возьмите ручку и бумагу, идите к нему и возьмите много заметок. Сколько может быть ошибка другого человека? В начале - насколько это практично для вашей работы, но не слишком мало.
  3. Подумайте о инструментах: Если вы новичок в части проекта, вы будете потратить значительное количество времени на понимание кода, поэтому посмотрите, какую помощь вы можете получить автоматически. Есть хорошие инструменты и плохие инструменты. Попытайтесь выяснить, какие инструменты имеют возможности, которые могут быть вам полезны в первую очередь. Как я уже упоминал выше, средний инструмент UML больше ориентируется на моделирование и, похоже, не подходит вам.
  4. Время и стоимость: Конечно, бесплатно. Но если бесплатный инструмент не используется многими людьми, возможно, этот инструмент не работает.Есть много инструментов, которые были созданы так же, как и исследование того, что можно было сделать, но они не очень полезны и поэтому просто становятся доступными бесплатно в надежде, что кто-то еще примет его. Еще один способ подумать об этом, решить, сколько стоит ваше время - может быть, стоит потратить день или два, чтобы получить инструмент для работы за вас.

Однажды, держать их в виду при переходе, пытаясь понять проект:

  1. Миля High View: Многоуровневый архитектурная схема может быть очень полезно знать, как основные понятия в проекте связаны друг с другом. Такие инструменты, как Lattix и Architexa может быть действительно полезным здесь.
  2. The Core: попытайтесь выяснить, как работает код в отношении основных концепций .. Здесь полезны диаграммы классов. Ручная работа работает достаточно часто, но инструменты могут не только ускорить процесс, но и помочь вам сохранить и поделиться такими диаграммами. Я думаю, AgileJ и Architexa Ваши лучшие ставки здесь, но ваш средний инструмент UML часто может быть достаточно хорошим.
  3. Ключа использования:: Я бы предложил отслеживать по крайней мере один ключевой случай для вашего приложения. Вероятно, вы можете получить наиболее важные варианты использования от кого-либо из вашей команды, и вмешательство в это будет действительно полезно. Большинство IDE действительно полезны здесь. Если вы попробуете их рисовать, то диаграммы последовательности наиболее подходят. Для инструментов здесь я думаю MaintainJ, JDeveloper и Architexa ваши лучшие ставки здесь.

Примечание: Я основатель Architexa - мы строим инструменты, чтобы помочь вам understand and document Java code, но я старался быть беспристрастным выше. Мое намерение состоит в том, чтобы предложить инструменты и варианты, учитывая, что это то, на чем я сосредоточился, как часть моей кандидатуры.

+0

Все упомянутые инструменты предназначены для Eclipse. Речь идет о визуализации java. – destenson

12

Он хранится в нескольких файлах. Он использует разные классы с разными методами. Код большой и сложный.

Все Java код, написанный за пределами школы, как это, в частности, для нового разработчика, начиная от проекта.

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

Не пытайтесь понять целое приложение

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

Поверьте мне, когда я это скажу - разработчики с более чем 10-летним опытом надежного кодирования могут не понимать, как определенные части приложения работают даже после работы над одним и тем же проектом более года (при условии, что они не являются оригинальными разработчиками). Они могут не понимать, как работает аутентификация или как работает управление транзакциями в приложении. Я говорю о типичных корпоративных приложениях с классами 1000-2000 и использую разные структуры.

Два важных навыков, необходимых для поддержания больших приложений

Тогда как они выживают и платят большие деньги? Опытные разработчики обычно понимают, что они делают; смысл, если они исправят ошибку, они найдут местоположение ошибки, затем исправьте ее и убедитесь, что она не сломает остальную часть приложения. Если им нужно улучшить функцию или добавить новую функцию, большую часть времени им просто нужно подражать существующей функции, которая делает аналогичную вещь.

Есть два важных навыка, которые помогают им сделать это.

  1. Они могут анализировать влияние изменений (изменений), которые они выполняют при исправлении ошибки. Сначала они обнаруживают проблему, меняют код и проверяют его, чтобы убедиться, что он работает. Затем, потому что они хорошо знают язык Java и «достаточно хорошо», они могут определить, не сломает ли он какие-либо другие части приложения. Если нет, они сделаны.

  2. Я сказал, что им просто нужно подражать, чтобы улучшить приложение. Чтобы эффективно имитировать, нужно хорошо знать Java и хорошо понимать рамки. Например, когда они добавляют новый класс Action Struts и добавляют в конфигурацию xml, они сначала найдут подобную функцию, попытаются следить за потоком этой функции и понять, как она работает. Возможно, им придется настроить немного конфигурации (например, данные «формы» находятся в «запросе», чем в области «сеанс»). Но если они хорошо знают рамки, они могут легко это сделать.

Суть, вам не нужно, чтобы понять, что все классы 2000 делают, чтобы исправить ошибку или улучшить приложение. Просто поймите, что нужно.

Фокус на доставку непосредственного значения

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

Итак, чтобы сделать жизнь проще для всех, доставить что-то. Не ходите с отношением, которое вам нужно, чтобы понять все приложение, чтобы доставить что-то ценное. Это совершенно неверно. Добавление небольшой и локализованной проверки Javascript может быть очень ценным для бизнеса, и когда вы его доставляете, менеджер чувствует облегчение, что у него есть определенная ценность для его денег. Более того, это дает вам время для чтения спортивных новостей.

По прошествии времени и после доставки 5 небольших исправлений вы начнете медленно понимать архитектуру. Не стоит недооценивать время, необходимое для понимания каждого аспекта приложения. Дайте 3-4 дня, чтобы понять аутентификацию. Может быть 2-3 дня, чтобы понять управление транзакциями. Это действительно зависит от приложения и вашего предыдущего опыта в аналогичных приложениях, но я просто даю оценку шара. Украдите время между фиксацией дефектов. Не просите об этом времени.

Когда вы что-то понимаете, пишете заметки или рисуете диаграмму модели/последовательности/данных.

Диаграммы

Хааа ... это я так долго упомянуть диаграммы :). Я начал с раскрытия, что я являюсь автором MaintainJ, инструмента, который генерирует графики последовательности выполнения. Позвольте мне рассказать вам, как это может вам помочь.

Большая часть обслуживания - найти источник проблемы или понять, как работает функция.

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

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

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

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

Два предостережений к моему аргументу выше

  1. Я упомянул, что добавление кода является менее рискованным, чем изменение существующего кода. Поскольку вы хотите избежать изменения, у вас может возникнуть соблазн просто скопировать существующий метод и добавить к нему, а не изменять существующий код. Сопротивляйтесь этому искушению. Все приложения имеют определенную структуру или «единообразие». Не разрушайте его с помощью плохих методов, таких как дублирование кода. Вы должны знать, когда вы отклоняетесь от «единообразия». Попросите старшего разработчика проекта рассмотреть изменения. Если вы должны сделать что-то, что не соответствует соглашениям, по крайней мере, убедитесь, что оно локально для небольшого класса (частный метод в классе 200 строк не разрушит эстетику приложения).

  2. Если вы следуете описанному выше подходу, хотя вы можете много лет прожить в отрасли, вы рискуете не понимать архитектуры приложений, что в долгосрочной перспективе не очень хорошо. Этого можно избежать, работая над большими изменениями или просто меньше времени на Facebook. Потратьте время, чтобы понять архитектуру, когда вы немного свободны и документируете ее для других разработчиков.

Заключение

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

+0

хорошая информация, полезные вещи. – weaveoftheride

+1

Извините, слишком много избыточной информации и как эссе. SO также должен убедиться, что ответы, как и вопросы, являются конкретными. – oneworld

+0

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

0

Некоторые большие инструменты я использую -

StarUML (позволяет код на диаграмме преобразования)

MS Visio

XMind (очень очень полезно для обзора системы)

Ручка и бумага !

1

Вы можете использовать инструмент JArchitect, довольно полный инструмент для визуализации структуры кода с помощью dependency graph и просматривать исходный код, как базу данных, используя CQlinq. JArchitect является бесплатным для open source contributors

Смежные вопросы