2009-09-17 2 views
2

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

# Program is run 
#  check to see if database exists 
#   create database 
#    complain on error, exit 
#  ensure database is writable 
#   complain to user, exit 
#  check to see if we have stored user credentials 
#   present dialog asking for credentials 
#    verify credentials and reshow dialog if they're invalid 
#  show currently stored data 
#  start up background thread to check for new data 
#   update displayed data if new data becomes available 
#  ... 
# 
# Background service 
#  Every 15min update data from server 
#  Every 24 hours do a full sync w/ server 

Et cetera (примечание: это комментарий, поэтому SO не будет анализировать его, а не потому, что я включаю его в качестве комментариев в код).

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

ответ

0

За все, что связано с документацией: Wikis, wikis и еще wikis! Легко читается и, самое главное, легко обновляется.

Мой любимый один: Trac (гораздо больше, чем просто вики в любом случае)

+0

И как бы вы использовать это для описания потока? Не могли бы вы привести пример? –

1

Emacs M-х outline-mode

Или, бумаги.

p.s. это серьезный ответ.

+0

Как это отличается от того, что я дал в примере в вопросе? –

+0

Это инструмент, который поддерживает запись и навигацию по контурам. –

+0

Если вы собираетесь использовать Emacs, я бы использовал режим org-mode, а не outline-mode. Это намного удобнее. –

0

Есть ли инструменты для изложения потока программы?

Ваши лучшие комментарии («Программа запущена») могут быть выражены с использованием «блок-схемы».

Ваши нижние комментарии («Фоновая служба») могут быть выражены с помощью «диаграммы потока данных».

Я не использую блок-схемы (я не считаю, что они добавляют значение по сравнению с соответствующим псевдокодом/текстом, как вы его написали), но мне нравятся диаграммы потоков данных для отображения верхнего уровня системы (т. е. хранилища данных/форматы/местоположения и этапы обработки данных/IO). Однако диаграммы потоков данных предшествуют UML, поэтому их описания в сети не так много.

+0

Мне нравится идея использования блок-схем (над текстом), потому что вы можете делать что-то вроде того, что некоторые вещи ссылаются на результат по-настоящему очевидным образом. Просто каждый инструмент, который я когда-либо использовал для их создания, занимает слишком много времени для использования. –

0

Мне нравится sequence diagrams для чего-либо в области ОО. Существует несколько хороших способов создания диаграмм последовательности, не тратя все время на то, чтобы полигоны шлифовать.

Во-первых, есть некоторые генераторы последовательности последовательности, которые принимают текстовый ввод. Например, см. WebSequenceDiagrams.com.

Существует также красивый Java based tool, который принимает текстовый ввод и создает диаграммы. Это хорошо подходит для интеграции в ваш процесс сборки, потому что его можно вызвать непосредственно из муравья.

+0

Я просто играл с WSD. Может быть, я что-то не хватает, но я сделал [это один] (http://www.websequencediagrams.com/?lz=bG9vcCBvbmNlIGV2ZXJ5IDE1bWluCiAgICBBbGFybS0-U2VydmljZTogcHJvY2VzcyEAGAUADwctPldlYjogQW55dGhpbmcgbmV3PwA4BVdlYi0AMQtyZXNwb25zZQBUBWFsdAAICSBpcyBZZXMAbAUARhJHaXZlIG1lIG5ldyBzdHVmZiBzaW5jZSB0aW1lIFgALAlXZWIAVBgAXBQARQkAbQkAeQVub3RlIG92ZXIAgVUIOiBzdG9yZQABMGUgdXBkYXRlZACBIgUAgVEJZWxzZSBlcnJvcgBWIXRyeSBhZ2FpbiBpbiBYADgPbmQAgxkFAEoFAIFJDW8AgjwJAHghaXQAgRIHAIECEwBlK2VuZAoKZW5k&s=roundgreen), и потребовалось больше кода, чем просто с помощью текста и не кажется, предлагают любые преимущества. –

0

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

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

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

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

+0

Я тоже использую эту доску, но редактирование сложного рабочего процесса может раздражать. –

+0

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

0
  1. Прецеденты
  2. Активность Диаграммы
  3. Диаграммы последовательностей
  4. диаграммы машины состояний
  5. Диаграммы классов
  6. базы данных Диаграммы
  7. Наконец, после того, как те сделаны и проект ищет хорошо определенные , в Microsoft Project.

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

2

Я использую GraphViz, если мне нужно набросать такие простые диаграммы - язык DOT является легким и очень отличается, когда я сравниваю версии диаграмм.

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

Я также добавил blog post с zoomed-out diagram, который показывает большой поток программы, чтобы дать представление о том, как поток GraphViz может быть составлен. У меня нет времени, чтобы запутать весь текст, поэтому просто поместите его там, как изображение с низким разрешением, чтобы создать впечатление архитектуры, не имея возможности увеличить изображение, чтобы увидеть читаемые детали.

Эта диаграмма была составлена ​​вручную после кучи grepping, чтобы получить запуск. Чтобы не слишком много насмехаться, вот несколько выдержек текста DOT, который генерирует диаграмму.

digraph windows { 
rankdir=LR 
label="Windows Invoked\nby controls and menu items" 
node[fontsize=12] 

/* ENTRY POINTS */ 
wndMainMenu[shape=box color=red fontcolor=red] 
DEFAULT_WINDOW[LABEL="DEFAULT\NWINDOW" shape=box color=red fontcolor=red] 


/* WINDOWS */ 
node[shape=box color=black fontcolor=black style=solid] 
App 
wndAddBill [label="Add Payable\nwndAddBill"] 
wndAddCustomer [label="Add a Customer\nwndAddCustomer"] 

... 

/* WINDOW INVOCATION */ 
node[shape=oval color=blue fontcolor=blue style=normal] 
edge[fontsize=10 style=normal color=blue fontcolor=blue] 

wndPayBills_bvlNewBill -> wndAddBill 
wndAddCustomer -> wndAddCustomer_save001 
wndManageDrivers_bvlNewCustomer -> wndAddCustomer 

alt text http://www.aussiedesignedsoftware.com/img/WindowLaunchesZoomedOut.png

0

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

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

В зависимости от проекта работает доска или блокнот, но для проекта разумного размера и времени я сделаю все, используя ArgoUML Я наслаждался StarUML в прошлом, но это только Win32, который теперь бесполезен для меня.

Большая книга на эту тему Применяя UML и шаблоны: Введение в объектно-ориентированный анализ и проектирование и итерационный развития (третье издание) - [978-0131489066]

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

Это также стоит проверить: Изучение UML 2.0 - O'Reilly - [978-0596009823]

1

В основном то, что вы пытаетесь сделать, это извлечь информацию и прецеденты в формате «Дано-когда-Тогда». см. http://wiki.github.com/aslakhellesoy/cucumber/given-when-then. Такой подход позволил решить обе проблемы.

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