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, уж не обессудьте :)

(no subject)

Date: 2007-10-13 06:23 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Ну, как раз на два листа A4 landscape-ом и поместилось. Вполне можно и охватить взглядом, и нормально обсудить. Всяко лучше, чем просто текст писать, или как-то по-другому рисовать.

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