Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проанализировать большую программу? 
:(
    Опции темы
Dims
Дата 19.1.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



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

Вопрос: каким способом и какими средствами лучше проанализировать, как это всё работает?
PM MAIL   Вверх
diablero
Дата 19.1.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Если необходимо детально разобраться в приложении, то необходимо восстанавливать(создавать) архитектуру, воспользовавшись каким-нибудь UML редактором. Строить use-case модель, модель данных и т.д.


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Mazzi
Дата 19.1.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



На чём написана? На яве?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
AntonSaburov
Дата 19.1.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Приложение какое - GUI ? WEB ? Просто для каждого варианта надо смотреть разные структуры, конфиги и прочая.
PM MAIL WWW ICQ   Вверх
Akeem
Дата 19.1.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Цитата

Если необходимо детально разобраться в приложении, то необходимо восстанавливать(создавать) архитектуру, воспользовавшись каким-нибудь UML редактором. Строить use-case модель, модель данных и т.д.


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



--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
fixxer
Дата 19.1.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Reverse Engeneering также есть в NetBeans UML плагине


--------------------
user posted image
PM MAIL ICQ   Вверх
AntonSaburov
Дата 19.1.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



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

PM MAIL WWW ICQ   Вверх
diablero
Дата 20.1.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Цитата(AntonSaburov @  19.1.2009,  19:38 Найти цитируемый пост)
По-моему UML диаграмма толком ничего не скажет о логике работы - все равно надо смотреть код. 
Проще всего найти контроллер, который реагирует на действия пользователя и смотреть реализацию команд.


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

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





--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Rickert
Дата 20.1.2009, 10:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Да вообщем-то вопрос насущный: получили проект, до этого кем-то левой пяткой писанный - надо разбираться. А как?
Я с таким столкнулся впервые на своём текущем проекте. Есть немалый движок сайта, коробочного типа, написанный на C#, xslt, html, javascript, php - причём ничего из этого раньше не знал. Как разбираться? Попробовал смотреть исходник - глухо.
Считаю что лучшим выходом является начать реализацию текущих задач. Начинаешь что-то добавлять, втыкаешься откуда ноги растут, запоминаешь и так по-немногу, по-тихоньку разгребаешь завалы smile 
ИМХО


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
diablero
Дата 20.1.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Цитата(Rickert @  20.1.2009,  10:15 Найти цитируемый пост)
Считаю что лучшим выходом является начать реализацию текущих задач. Начинаешь что-то добавлять, втыкаешься откуда ноги растут, запоминаешь и так по-немногу, по-тихоньку разгребаешь завалы  


Этот весь процесс нигде не фиксируется, человек увольняется, и повторяется все сначала smile

Цитата(Rickert @  20.1.2009,  10:15 Найти цитируемый пост)
Да вообщем-то вопрос насущный: получили проект, до этого кем-то левой пяткой писанный - надо разбираться. А как?


В итоге,  следующая контора, которой он достанется, будет говорить о нем также. И где-то он загнется.
ИМХО 



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Rickert
Дата 20.1.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Цитата(diablero @  20.1.2009,  10:45 Найти цитируемый пост)
Этот весь процесс нигде не фиксируется, человек увольняется, и повторяется все сначала 

Потому что программа должна документироваться и комментироваться изначально!


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
AntonSaburov
Дата 20.1.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(diablero @  20.1.2009,  09:55 Найти цитируемый пост)
Это применимо только для маленьких приложений (как по коду, так и по юскейзам.)
С большим приложением такое не проканает. Вы в нем без восстановления архитектурного документа не разберетесь. 

И что даст вам диаграмма классов ? Особенно если этих классов несколько тысяч. Также никто не мешает просто смотреть код и видеть кто является родоначальником.

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

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

Основным документов является набор UseCase, которые reverse engineering не дает.

Ну узнаете вы что есть какая-то иерархия классов и что дальше ? Вы все равно не знаете зачем она. 


Я конечно не претендую, но как я подхожу к изучению больших проектов.
1. Узнаю общее назначение системы, если есть хоть какое-то описание.
2. Запускаю, чтобы можно было исследовать его как пользователю. Собираю список функциональных возможностей. Попутно можно узнать, как все собирается, какие логи и куда пишуться. Запустить систему - большое дело. Теперь можно легко найти точку входа и раскручивать.
3. Нахожу контроллеры (т.е. места, куда приходит запрос от пользователя) и иду по логике выполнения запроса. В подавляющем большинстве приложение строится очень просто - команда от пользователя обрабатывается по какой-то цепочке и выдается ответ. Во время анализа цепочки можно выявить некоторые зависимости между классами и таблицами в базе. 
Вот эту цепочку я и накладываю на каждый пункт из списка функциональностей из п. 2.

Естьконечн и иные варианты, но их обычно гораздо меньше.

И уже зная основную архитектуру реализации каждого UseCase можно спокойно их исправлять и добавлять новые.

По идее все.

PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 21.1.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Во какую штуку нашел - разговор с Никлаусом Виртом (который Паскаль написал) - http://alenacpp.blogspot.com/2005/09/blog-post_21.html

"Как вы относитесь к UML?
Я не поклонник UML. Эти графики годятся только для выражения небольших идей."
PM MAIL WWW ICQ   Вверх
Dims
Дата 21.1.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



Я попробовал сперва UML. Во-первых, StarUML, во-вторых генератор в NetBeans и JBuilder. Особого смысла я не обнаружил. Программа попросту загоняет всех членов в квадратик.  Во-первых, не факт, что это более наглядно, во-вторых, мне все члены и не нужны, только основные.

Я подумал, что было бы хорошо иметь систему, которая бы позволяла самому составлять джавадоки, в том числе в ситуации, когда нет исходника (а есть только jar). По сути всё равно придётся всё класть в голову и всё, что нужно -- это сделать надписи на русском языке в важнейших местах.

Пока думаю так.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.