每当我开始处理足够复杂的项目时,我无法立即将其全部保留在脑海中,我想概述应用程序应该如何工作......我通常在文本编辑器中修改这样的东西:
# 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不会解析它,不是因为我把它作为代码中的注释包含在内)。
我想知道你们是怎么做到的。是否有任何工具可用于概述程序的流程?你如何描述复杂的项目,以便在编写代码时你可以专注于代码而不是所有小块的设计/架构?
答案 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)
答案 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)
我喜欢保持这种流程,因为它保持文档记录良好,定义明确且易于解释,更不用说,它只是一个很好的过程。如果您不确定这些是什么,请查看我的answer in here提供更多信息,以及一些链接。
答案 8 :(得分:0)
我建议使用UML 设计时可以有多种深度。如果你使用UML足够远,大多数UML应用程序都可以为你自动生成代码的基本框架。
通常我依赖于松散的UML,生成用例,用例图,类图,组件图,并且已经开始更多地使用序列图。
根据项目白板或记事本的工作原理,但对于合理大小和时间的项目,我会使用ArgoUML完成所有工作 我过去很喜欢StarUML,但它只是Win32,现在对我来说没用了。
关于这个主题的一本好书是 应用UML和模式:面向对象的分析和设计与迭代开发简介(第3版) - [978-0131489066]
我不得不接受一个大学课程,这个课程做了一个简单的教学UML的工作,但保留了它并且从那以后读了一两次。
这也值得一试:学习UML 2.0 - O'Reilly - [978-0596009823]