EA: Автогенерация sequence-диаграмм - трассировка сервиса и веб-сервера.(Прочитано 14077 раз)
Добрый день.
Возникли сложности с автогенерацией диаграмм последовательностей по зафиксированному стеку трассировки. Может быть кто-нибудь сможет помочь в этом деле?

Ситуация следующая: у меня есть некоторая система, состоящая из сервиса, взаимодействующего с БД, и веб-сервера, предоставляющего интерфейс для пользователя. Сам сервис написан на C#, веб-сервер - asp.net.
Вся эта прелесть с помощью реверсивного инжиниринга была перенесена в EA, где мы ее компилируем, запускаем и трассируем.

Но! Я не могу одновременно запустить трассировку и сервиса и веб-сервера - либо я запускаю веб-сервер из-под Visual Studio или с помощью iis'а и аттачусь к нему в EA (настройка package build script -> Debug : attach); либо я запускаю из-под EA сам сервис (настройка package build script -> Debug : Application (enter path) = D:\Example.exe).

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

Соответственно вопрос: можно ли как-то запускать из-под EA одновременно и сервис и веб-сервер? Или существуют какие-то настройки, которых я не нашла, позволяющие фиксировать все методы, а не только некоторые? Или существует какое-то третье решение данной проблемы?


« Последнее редактирование: 27 Августа 2008, 12:39:10 от Yoli »



Добрый день, Yoli.

К сожалению я даже не понял в чем проблематика, более того вижу, что Вы демонстрируете какие-то возможности ЕА, которые мною лично еще не познаны.

Возникли сложности с автогенерацией диаграмм последовательностей по зафиксированному стеку трассировки. Может быть кто-нибудь сможет помочь в этом деле?
А что такое фиксированный стек трассировки и с помощью чего можно выполнять автогенерацию диаграммы последовательности?

Да, а не пробывали Вы задать свой вопрос на форуме: http://sparxsystems.com/cgi-bin/yabb/YaBB.cgi

Вся эта прелесть с помощью реверсивного инжиниринга была перенесена в EA, где мы ее компилируем, запускаем и трассируем.
Как это компилируем в ЕА? Может Вы имеете в виду компилируете в некотором внешнем средстве? Вы используете какие-то аддинсы или чистый стандартный ЕА? А версия?
« Последнее редактирование: 26 Августа 2008, 14:27:10 от Galogen »



Да, возможно я не совсем четко обрисовала ситуацию.

Функционал, который я использую - это возможности по, что называется, "build and run" в EA :)

Разумеется, компилирую я не при помощи самого EA, а просто вызываю из-под него MSBuild.exe с указанием соответствующего солюшна. Это настраивается в package build scripts во вкладке build.
Версия EA - 7.1.831 Corporate Edition.

Цитировать
А что такое фиксированный стек трассировки и с помощью чего можно выполнять автогенерацию диаграммы последовательности?
Не фиксированный стек трассировки, а просто стек трассировки :). То есть, во время дебага программы есть возможность фиксировать, что и как выполняется, какие методы вызываются, какие сборки и классы используются. А уже сам EA автоматически строит диаграмму последовательности по имеющимся данным.
Если ранее вы не сталкивались с этой функцией, то рекомендую в ознакомительных целях посмотреть пару презентаций на сайте самого спаркса: http://www.sparxsystems.com/resources/demos/ в категории Code Engineering and the Debug Workbench. Там довольно наглядно все демонстрируется.

На форуме сайта свой вопрос я еще не задавала, хотя и планировала сделать это в ближайшее время.



Спасибо, Yoli. Вы затронули интересный аспект использования ЕА. Я думаю нужно его изучить досконально. Иначе как же отвечать на вопросы.

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

Устройте небольшой ликбез для быстрого погружения в тему?



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

Могу рассказать предысторию - из серии "А на фига это надо?".
Задача автогенерации диаграмм последовательностей возникла от того, что мы столкнулись с ситуацией, когда у нас есть программа, но по ней нет никакой внятной документации. Причем прежде всего - технического характера.
Поэтому во многих сложных процессах приходится разбираться практически на коленках, просто тупо изучая код. Это бывает довольно трудоемко и не всегда удается до конца понять, что же происходит на уровне взаимодействия сервиса и веб-сервера.
Построение диаграмм сильно упростило бы задачу создания технической документации для разработчиков.
Но, как следует из моего первого сообщения, мы столкнулись с некоторыми сложностями.

Что я могу сказать об этом функционале в принципе? - Он довольно прост в использовании, не требует специальных знаний и навыков ни uml, ни EA. Диаграмма строится автоматически, вы можете по своему усмотрению выбирать, какие классы и вызовы должны в нее войти. Причем это можно сделать как до построения диаграммы, так и после - работая уже не со стеком трассировки, а с самой диаграммой (она полностью доступна для редактирования).
Трассировать можно как в автоматическом режиме - в этом случае будет зафиксирована вся ветвь (к примеру, отработан весь метод, включая все вызываемые из него методы), так и вручную - следуя по коду пошагово. Можно с помощью breakpoint'ов обозначить кусок кода, который надо трассировать.

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



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



Приведу в качестве примера листинг трассируемого на веб-сервере кода (режим debug'а через attach).
using Common.Facade;
using Common.Auxiliary;
...
public partial class SaveCurrentBranch : System.Web.UI.Page
{
     ...
     private IFacade _FacadeMain
     { get {...} }
     ...
     
     protected void Page_Load(object sender, EventArgs e)
     {
            ...
            //IFacade - класс из сборки Common.Facade
            IFacade facade = _FacadeMain; // (1) _FacadeMain - свойство класса SaveCurrentBranch
            if (null == facade)
                return;

            bool canSwitchBranch = false;
            string login = Util.GetCurrentAccountName(); // (2) статичный метод сборки Common.Auxiliary

            bool isUser = false;
            int currentBranchId = Util.NO_ID;
            string branchUri = null;

            try
            {
                bool isDirection = false;
                isUser = facade.UserIsInCurrentBranch(out currentBranchId, out isDirection); // (3) метод экземпляра класса
                if (isUser)
                {...}
            }
            catch (Exception ex)
            {...}
            ...
     }
}
При трассировки метода Page_Load мы наблюдаем следующую картину:
(1) фиксируется и полностью трассируется вызов "локального" свойства _FacadeMain.
(2) фиксируется и полностью трассируется вызов статичного метода класса Util сборки Common.Auxiliary - Util.GetCurrentAccountName();
(3) не фиксируется в принципе вызов метода экземпляра класса IFacade (сборка Common.Facade)  - facade.UserIsInCurrentBranch(...);
Причем дело не в сборках, поскольку статичные методы классов из той же сборки Common.Facade фиксируются и трассируются нормально.

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



Зер гут.

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



Зер гут.

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

Спасибо большое!
Буду весьма признательна, если вы отправите мою "проблему" в спарковскую техподдержку. На их форуме мне пока ничего так и не ответили... :(

Как вам будет удобно, чтобы я выложила перевод сюда или может быть дадите свой мейл, чтобы не было сложностей с прикреплением файлов трассировки и диаграммы? Можете просто сразу написать на мой, если вариант с мейлом вас устраивает - olka.ko at gmail.com



olka.ko at gmail.com
отправил Вам письмо




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19