dastapov: (Default)
[personal profile] dastapov
Умные люди придумали много разных формальных нотаций для моделирования процессов и систем (например, UML и IDEFx) . Другие умные люди написали гору софта, который призван облегчать работу по созданию этих самых моделей в выбранной нотации.

Казалось бы, выбирай нотацию, подбирай софт поудобнее - и вперед, рисовать схемы по захвату мирового господства. Да вот незадача - софт подобрать не так-то и легко. Он либо настолько простой и одноклеточный, что через 5 минут ты начинаешь упираться в его ограничения на каждом шагу и биться головой об стену, либо такой сложно-наворочено-всесторонний, что через полтора часа после запуска ты обнаруживаешь, что добраться до собственно моделирования процессов не так уж и легко. Сначала надо закончить создание оргструктуры организации (поскольку создавать актеров на ходу нельзя, а можно только выбирать уже описаных), заполнить базу глоссария (поскольку программа не допускает использования незнакомых аббревиатур), сложить в правильные места еще 65535 безумно ценных кусочков метаданных, и, опять-таки, постараться не убиться головой об стену.

Возьмем, к примеру, рисование sequence diagram. Если не злоупотреблять строгим следованием канонам UML - то замечательная нотация для описания бизнес- и технических процессов, позволяющая легко показывать временные зависимости и последовательности действий. Я люблю рисовать sequence diagram-ы на бумаги, но в скором времени мне предстоит нарисовать несколько десятков диаграмм в электронном виде.

"Ага!", - подумал я, - "самое время разжиться инструментом".

Несколько дней расслабленных поисков показали, что счастья нет. Либо приходится руками расставлять все элементы диаграммы (привет, Visio!), содрогаясь от одной только мысли о том, что "вот сюда надо будет вставить еще одно сообщение, сюда - объектик, а все остальное подвинуть вниз и вправо", либо же софт будет делать "все красиво", но при условии, что вы продадите душу и тело той методологии моделирования, которая реализована в софте, и будете использовать ее на всю катушку. То есть, например, вы должны будете строго следовать UML, а софт будет за этим следить. И на диаграмме у вас могут быть только объекты (вот в это диалоговое окошко впишите имя класса, тип наследования, предков, партийность и национальность), а посылаемые ими сообщения должны быть явно описаны в виде методов этих объектов (пожалуйста, вот сюда - сигнатурку метода, а сюда пишите код), т.д. и т.п.

Есть, конечно, редкие исключения, но они и стоят соответственно, и, опять-таки, не без изъяна.

И тут я решил вернуться к старой-старой идее сделать себе свой лунный модуль, с блэк-джеком и ш инструмент. И сделал. Теперь буду хвалиться :)

Что умеет инструмент? Инструмент умеет генерировать диаграмму из текстового описания. Слева - пример описания, справа - результат. Как видно, сущности/актеры были автоматически упорядочены так, чтобы уменьшить длину стрелочек и повысить читаемость.

a -> b: catch a ball!
b -> c: i'll pass it along
c: what to do next?
c -> a: lets throw it back again
a: not fair!
a -> c: find someone else!
c -> d: ok, here you go
d: zZzZzZzZzzz.....


Синтаксис, думаю, в формальном описании не нуждается - все должно быть понятно и так :)

На самом деле, генерацией картинки занимается сторонняя программа - "dot" из пакета утилит для рисования графов GraphViz, а моя утилита (названная "flow2dot") просто готовит для нее текстовое описание того, что надо нарисовать.

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

Во-вторых, можно пользоваться препроцессором (m4 или стандартным cpp) и выносить общие части диаграм во включаемые файлы.

В-третьих, можно использовать grep для поиска нужных диаграм и sed/perl для их массового редактирования (вы никогда не пробовали исправить опечатку в одну букву в десятке диаграмм, нарисованных в Visio?).

Короче говоря, мне нравится :)

Если вам тоже нравится - берите, пользуйтесь. Код лежит по адресу http://adept.linux.kiev.ua/repos/flow2dot/ , при наличии клиента darcs его можно вытянуть оттуда командой "darcs get http://adept.linux.kiev.ua/repos/flow2dot/".

Код на Haskell, уж не обессудьте :)
Page 1 of 3 << [1] [2] [3] >>

(no subject)

Date: 2007-10-11 09:40 pm (UTC)
From: [identity profile] adews.livejournal.com
Ничего не могу с собой поделать, нравятся мне тихие сумашедшие, думающие на языках типа хаскела, луа, или даже эрланга. На блаженных мир держится, чтобы всяким плюсанутым сишникам пусто не было. Если слишком заумно,- это я так длинно выразил своё "уважаю" ;-)

(no subject)

Date: 2007-10-11 09:58 pm (UTC)
From: [identity profile] angry-elf.livejournal.com
плюсадин

(no subject)

Date: 2007-10-11 10:17 pm (UTC)
From: [identity profile] fester-ua.livejournal.com
J, J забыл.

(no subject)

Date: 2007-10-11 10:17 pm (UTC)
From: [identity profile] fester-ua.livejournal.com
Зашибись штука.

(no subject)

Date: 2007-10-11 10:19 pm (UTC)

(no subject)

Date: 2007-10-11 10:21 pm (UTC)
From: [identity profile] fenikso.livejournal.com
Прикольно :) Из юзабилити, я бы предложил ещё paging добавить, если нету - чтобы можно было делать нарезать частями 1-10, 11-20, etc.

(no subject)

Date: 2007-10-11 10:30 pm (UTC)
From: [identity profile] bacek.livejournal.com
Есть такая штука http://www.mcternan.me.uk/mscgen/. И у неё есть огромный плюс - интеграция с doxygen. Ну и он такой же простой, как 7 копеек.

А если возможностей не хватает, то http://sdedit.sourceforge.net/index.html Quick Sequence Diagram Editor. Там уже и группировки, и мультитрединг и т.п.

еще вариант

Date: 2007-10-11 11:11 pm (UTC)
From: [identity profile] nadezhniy.livejournal.com
http://www.spinellis.gr/sw/umlgraph/

(no subject)

Date: 2007-10-12 02:56 am (UTC)
From: [identity profile] kmmbvnr.livejournal.com
http://www.spinellis.gr/sw/umlgraph/doc/indexw.html - крути ниже, где-то с с середины страницы описывается рисование sequence diagram с помощью gnu plotutils.

(no subject)

Date: 2007-10-12 03:49 am (UTC)
From: [identity profile] helge9210.livejournal.com
Ну и как всегда не забываем, что у пакета Graphviz периодически встречаются родовые травмы в области использования шрифтов для кириллического текста.

Из последних травм вспоминается:
1) Необходимость откатиться на предыдущую относительно Debian Unstable версию Graphviz из-за желания последней версии использовать только встроенный шрифт Times (без кириллицы).
2) Необходимость использования цепочки dot > файл svg > Inkscape > файл PostScript для получения файла PostScript с правильными шрифтами и кириллицей.

(no subject)

Date: 2007-10-12 04:15 am (UTC)
From: [identity profile] sdfgh153.livejournal.com
Чудесная штука! Спасибо.

(no subject)

Date: 2007-10-12 05:43 am (UTC)
From: [identity profile] http://users.livejournal.com/_1313/
Как видно, сущности/актеры были автоматически упорядочены так, чтобы уменьшить длину стрелочек и повысить читаемость.

по-моему, если поменять местами a и d, или выстроить в порядке a c b d, то суммарная длина стрелочек уменьшится на две "единицы"

(no subject)

Date: 2007-10-12 06:48 am (UTC)
From: [identity profile] alexott.livejournal.com
кстати, если прижмет и надо будет пользоваться чем-то интерактивным - советую поиграться с sybase powerdesigner - я в свое время им активно пользовался почти 2 года для моделирования БД, проектирования софта и т.п. - у него богатые средства генерации выходных данных по диаграммам, так что можно писать свое, если понадобится.
а для БД там вообще немерянные возможности, к тому же он знает разные варианты БД, например Оракл, и пользователю дает только те возможности, которые поддерживаются выбранной версией - например, сегментирование и т.п.

(no subject)

Date: 2007-10-12 08:54 am (UTC)
From: [identity profile] dolyenyov.livejournal.com
Надо на hackage выложить...

(no subject)

Date: 2007-10-12 09:51 am (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
есть, кстати, ещё вариант: воспользоваться Functional MetaPost'ом, если тебе сами графы не особо нужны. Правда он корявый немного (устарел) и его надо чуть проапдейтить.

да, поддерживаю идею про hackage.

(no subject)

Date: 2007-10-12 10:04 am (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Ну, там не полный перебор, а эвристика, и как и любая эвристика, она не всегда находит самое оптимальное решение. Так, good enough. Все лучше, чем самому руками расставлять. Особенно, если шагов в процессе - штук 40, а актеров больше десятка.

(no subject)

Date: 2007-10-12 12:50 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/flow2dot-0.2

:)

(no subject)

Date: 2007-10-12 12:52 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Мне нужны не столько графы, сколько алгоритмы автоматического layout-а + все остальные возможности по кастомизации результата, которые предлагает dot.

На hackage - положил, вон выше в комментах ссылка.

(no subject)

Date: 2007-10-12 12:58 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
1)У меня наираспоследний graphviz из unstable (2.12-4+b1), все замечательно - использует любые шрифты, какие скажешь (генерю PNG)

2)А вот это не проверял, по причине, указаной выше :)

(no subject)

Date: 2007-10-12 01:04 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Мне не понравилось:
1)необходимость объявлять вручную все объекты и париться деталями презентации (вон, в примере на той же странице - нафига нужен step()?)
2)Плохо с поддержкой русского
3)В синтаксис явно вытащены понятия объекта и сообщения, что мешает сосредоточиться на описании, если у тебя не объекты, а, например, актеры и системы.

Re: еще вариант

Date: 2007-10-12 01:05 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Вон, в следующем комментарии мои впечатления.

(no subject)

Date: 2007-10-12 01:12 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Угу, я на mscgen посматривал. Мне не понравилось: 1)малое кол-во ручек для настройки вывода; 2)не поддерживает русский ваааще.

А sdedit - уж больно "низкоуровневый". Мне все больше актеры и системы нужны, а не объекты, сообщения и треды. Лично мне тяжело писать "клиент:банк.оплатитьСчет" (кстати, как сюда тиснуть пробел?).


(no subject)

Date: 2007-10-12 01:13 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
И то, и другое можно получить при помощи dot на этапе генерации картинки. Примера не приведу, но в доке по dot их есть достаточное кол-во.

(no subject)

Date: 2007-10-12 02:59 pm (UTC)
From: [identity profile] dewfy.livejournal.com
А ведь где-то есть стандарт на XML описание Sequence диаграм. И к этому можно было бы применить XSL и получить, напр. SVG

(no subject)

Date: 2007-10-12 03:02 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Осталось только найти этот XSL ...


Я даже уверен, что есть стандарт XML на описание Ваще Всего. Потом берешь нужный XLS - и вуаля! Готовый результат ...
Page 1 of 3 << [1] [2] [3] >>

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags