您使用哪些工具来概述项目?

时间:2009-09-17 03:28:41

标签: language-agnostic outlining outliner

每当我开始处理足够复杂的项目时,我无法立即将其全部保留在脑海中,我想概述应用程序应该如何工作......我通常在文本编辑器中修改这样的东西:

# 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

等等(注意:这是注释所以SO不会解析它,不是因为我把它作为代码中的注释包含在内)。

我想知道你们是怎么做到的。是否有任何工具可用于概述程序的流程?你如何描述复杂的项目,以便在编写代码时你可以专注于代码而不是所有小块的设计/架构?

9 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

Emacs M-x outline-mode

或者,纸。

P.S。这是一个严肃的答案。

答案 2 :(得分:1)

基本上你要做的是以Given-When-Then格式提取信息和用例。参考http://wiki.github.com/aslakhellesoy/cucumber/given-when-then。这种方法解决了这两个问题

  • 理解领域和边缘案例
  • 概述解决方案,以便您知道除了从哪里开始之外的下一步工作

答案 3 :(得分:0)

与文档相关的任何内容: Wiki,wiki和更多wiki! 易于阅读和最重要,任何人都可以轻松更新。

我最喜欢的一个:Trac(不仅仅是维基)

答案 4 :(得分:0)

  

是否有任何工具可以概述程序的流程?

您的最高评论(“运行程序”)可以使用“流程图”表示。

您的底层评论(“后台服务”)可以使用“数据流图”表示。

我不使用流程图(我发现它们与相应的伪代码/文本相比没有增加值,正如你所写的那样),但我确实喜欢数据流图来显示顶层视图系统(即数据存储/格式/位置,以及数据处理阶段/ IO)。然而,数据流图早于UML,因此在'net。

上对它们的描述并不多

答案 5 :(得分:0)

我喜欢sequence diagrams OO领域的任何内容。有几种不错的方法可以创建序列图,而无需花费所有时间来推动多边形。

首先,有一些在线序列图生成器采用文本输入。例如,请参阅WebSequenceDiagrams.com

还有一个很好的Java based tool,它需要文本输入并创建图表。这非常适合集成到构建过程中,因为它可以直接从ant调用。

答案 6 :(得分:0)

如果事情很复杂我喜欢图片,但我倾向于在纸上手工制作,所以我可以更好地想象它。白板非常适合这种情况。

我将大型或复杂的应用程序拆分为较小的部分,然后将它们设计在纸上,这样我就能更好地理解各部分之间的流程。

一旦我完成了部件之间的流程,那么我可以更好地分别设计每个部件,因为每个部件都是它自己的子系统,所以如果我愿意,我可以更改语言或平台。

此时,我只是开始研究应用程序,并且一次只能处理一个子系统,即使子系统可能需要分解,直到我有一个部分可以保留在我脑海中。

答案 7 :(得分:0)

  1. 用例
  2. 活动图
  3. 序列图
  4. State Machine Diagrams
  5. Class Diagrams
  6. 数据库图
  7. 最后,完成这些工作并将项目定义得很好后,进入Microsoft Project。
  8. 我喜欢保持这种流程,因为它保持文档记录良好,定义明确且易于解释,更不用说,它只是一个很好的过程。如果您不确定这些是什么,请查看我的answer in here提供更多信息,以及一些链接。

答案 8 :(得分:0)

我建议使用UML 设计时可以有多种深度。如果你使用UML足够远,大多数UML应用程序都可以为你自动生成代码的基本框架。

通常我依赖于松散的UML,生成用例,用例图,类图,组件图,并且已经开始更多地使用序列图。

根据项目白板或记事本的工作原理,但对于合理大小和时间的项目,我会使用ArgoUML完成所有工作 我过去很喜欢StarUML,但它只是Win32,现在对我来说没用了。

关于这个主题的一本好书是 应用UML和模式:面向对象的分析和设计与迭代开发简介(第3版) - [978-0131489066]

我不得不接受一个大学课程,这个课程做了一个简单的教学UML的工作,但保留了它并且从那以后读了一两次。

这也值得一试:学习UML 2.0 - O'Reilly - [978-0596009823]