bob*_*205 33 uml design-patterns
我目前正在上学,对于我的高级项目,我们不得不花费1/3的时间来为我们的项目做UML图和其他繁琐的文档.
这包括很多设计和规划尚未发生的未来问题.
出于某种原因,这似乎是鼓励过度设计.我花了最后一小时写这样的东西.
"连接到服务器 - 连接到服务器.前提条件:不存在服务器连接.后置条件 - 连接现在存在".
我宁愿做编码而不是做这个废话.我意识到这个设计工作有它的位置,但多少钱?我知道这不是防止在诸如Enterprise Arch之类的工具中进行设计的绝对证据,但是我在这里.
我教授这些课程的教授设计了他的项目.应用程序中可能发生的每件事都已记录在案.他没有自己编码,而是利用这个"完美无瑕的文件"将海外工作和暑假期间的学生分开.
所有这些设计产生的应用程序都是可怕的.这是我见过的最糟糕的应用程序之一,任何人都可以告诉你它已被过度设计.
SO有经验的编码社区对此主题有什么看法?在项目之前设计很多是因为"设计文档这么说"而通过强制做出决策而制作糟糕的程序吗?
非常感谢您提供的任何见解.如果我知道这一切都是有充分理由的话,我会感觉更好"浪费"我的时间.我非常愿意事先做一些设计工作,但我觉得我的教授期望在编写任何代码之前做出很多工程决策.
编辑:关于这个主题的有趣的slashdot文章. http://books.slashdot.org/story/09/11/16/1448204/Becoming-Agile
Bre*_*ton 43
我不想作为一个破纪录(我最近一直在使用这个引用),但John Gall的引用与软件构建的许多方面非常相关.(即使他在谈论生物系统)
"一个复杂的系统,它的工作原理是总是发现已经从工作的简单系统进化逆命题也似乎是真的:从头永远不会奏效,并且不能进行工作设计一个复杂的系统,你必须重新开始,开始有一个简单的工作系统."
也就是说,如果你正在设计,那么首先要设计一些小而且可实现的东西.一个巨大复杂的前端设计注定要失败.
你可以通过将它们分解成更小的部分来处理巨大的任务.构建您能想到的最小可能的工作.不要马上解决整个问题.
其中的一个大的复杂的设计可能会注定失败的原因是,它是解决可能是一个邪恶的问题,或者一些其他类的无法解决的问题的问题,在这个问题的子均是互斥的.如果没有某种工作实验作为子问题可解决性的证据,那些事先很难被发现.
我在这个问题上看到的大多数证据似乎都预测,前期设计越大,它就越有可能超出预算而且可能无法解决任何问题.总之,设计neccessary,但你的目标应该是保持它作为小而简单越好,记住,由于一些因素,你在实际的编码阶段碰上你的第20稿可能会失败.
Cha*_*ana 15
这是很主观的,但恕我直言,才足以使在适当的整体系统架构应该是什么样一个相当不错的猜测,但设计不应该停止,(甚至慢明显),在这一点上,它应该继续贯穿发展,应该鼓励和启动开发重构,因为持续设计可以解释领域模型分析,设计和开发模型之间的不一致.无论您是在开发之前还是在开发过程中进行所有设计,您的教授所教授的概念(和工具)在设计过程中都是非常宝贵的.
您的教授所做的事听起来像是瀑布式软件设计生命周期(SDLC)过程的经典案例.其主要的失败并不是建设阶段(编码)被延迟,但是在编码开始时这种设计或多或少地停止了(因为瀑布方法所产生的改变的障碍).
一些幽默的发生在此可以找到这里.
Rob*_*lls 15
天儿真好,
这在很大程度上取决于项目的性质.
我曾参与过新系统替代现有系统的项目,绝大部分时间都花在收集现有系统的行为以建立需求上.
这个阶段,然后是设计阶段,花了将近18个月.编码大约需要四个月的日历.在努力方面它更多,但最终结果是一个客户喜欢的稳定系统.
哦,顺便说一下,这是一个替代现有的空中交通管制系统,德国空中交通管制系统,所以他们只有一个月预定的评估期三个月后把它活是一项了不起的成就,我我非常自豪.
我认为这个项目的大型评估和设计阶段是最好的方法.
编辑:该系统位于卡尔斯鲁厄的航路空中交通管制中心,由DFS(德国版的FAA)运营.现有的雷达处理系统将被雷神公司取代,但主系统的交付延迟了.因此,DFS决定将控制器位置升级到新系统的位置,但暂时将它们附加到现有的ATC处理系统.因此,Karlsruhe AdvancedDisplay System或KADS项目的名称.随着整个控制室的更换,在现有的ATC中心后面建造了一个全新的机翼.
有一个强制性的需求收集阶段,团队在现场与构建现有系统的软件工程师一起工作.
他们记录:
然后由DFS签署这些要求并开始设计阶段.这持续了大约一个月,而几个部分是原型,并确定了最佳解决方案.与实现并行的是测试设计阶段,其中所有需求都被追溯到代码并且具有相关联的测试.
然后编码和测试开始了几次交付,约.十,完成,每个都有一个相关的测试和验收阶段.Scrum方法之前有一个名称,因为我们选择了在阶段开始时进入每个"发布"阶段的工作块.最终交付准时按预算进行.
DFS旨在与现有系统并行运行新系统三个月,以便他们可以评估新系统的性能和稳定性.完全转移到新系统是一个"全有或全无"的提议.他们不得不用旧的雷达线换去旧的电话开关装置,之后没有回头路.
因此,对于德国ATC服务部门来说,他们会对系统非常满意,这对我们来说是一个很大的帮助!
BTW在需求阶段出现的旧软件工程师的数量,并说我们没有工作,因为没有编写代码是非常有趣的.绝对证明了旧的"裤子座位"方法,当你看一些代码时就很明显了.( - :
HTH
干杯,
这是上个世纪,如此学术化.
通常情况下,至少在我的经验中,无论你如何努力设计,你都会遗漏一些技术限制,在系统的不同部分之间有某些联系.也是设计的起点 - 要求总是远远不是一成不变的.
通常,为了验证您的设计,您实际上需要进行一些编码 - 原型等.更新的开发过程方法 - 对于一个人而言,只要说你需要尽可能多的设计就可以开始编码.
这并不是说你可以在没有清楚地了解你的目标的情况下急于编码,但过度使用它真的很糟糕
正式的学术培训通常(据我所知)在实际生产编码开始之前(不包括原型设计)将重点放在设计和其他一些东西上.
这是有道理的,你没有把它弄好(或几乎正确),你会被搞砸.
然而在实践中,很少有时间和资源的奢侈.更糟糕的是,非技术人员(特别是那些人)希望看到事物(UI,原型)确实感到安全,并取得了进展.
对我来说,这是关于平衡,不同的组织将不得不画出自己的路线,拿出最佳实践.也根据项目/资源等的性质而有所不同.
关于UML,这里有一些关于SO的有趣帖子:
UML是否实用?
UML仍被视为记录软件设计的可行方式吗?
在设计新代码和算法时我应该使用UML吗?
如果你没有用UML设计,那么你设计的是什么?