作者:luckygao翻译 来源:sdmagazine.com
http://www.csai.cn 2006年2月20日
无论你遵从的是重量级的方法,比如EnterpriseUnifiedProcess(EUP),还是轻量级的开发过程,如ExtremeProgramming(XP),建模在软件开发中都是不可或缺的。但不幸的是其中充斥着各种谬误与迷思。这来自于各个方面,有从理论家错误的研究、数十年来信息技术领域内的文化沉积、软件工具开发商天花乱坠半的市场宣传以及象ObjectManagementGroup(OMG)和IEEE这类组织的标准。这个月,我要揭示建模中的误区,指出其相应的事实真相。
误区一:建模就等于是写文档
这很可能是其中最具破坏力的一条,因为开发人员可以此为借口而完全放弃建模。许多优秀的软件开发人员会说他们不想把时间浪费在这些“无用的“文档上。他们沉溺于编码之中,制造着一些脆弱而劣质的系统。另外,甚至于许多尽责的开发人员现在也认为建模是一件讨厌的事,而不愿去学习相应的建模技术。
事实分析:“模型”与“文档”这二者在概念上是风马牛不相及的—你可以拥有一个不是文档的模型和不是模型的文档。一幅设计图就是一个模型,而不论是被画在餐巾纸的背面,或写在一块白板上,或在ClassResponsibilityCollaboration(CRC)卡片中,还是根据记录在报纸和便签纸上的流程图而生成的一个粗略的用户界面原型。虽然这些都不能说是文档,但他们却都是有价值的模型。
建模很象是作计划:作计划的价值在于计划编制的过程中,而非计划本身;价值体现在建模的活动中,而非模型本身。实际上,模型不是你系统中的一部分正式的文档,而且在完成它们的使命后可以被丢掉。你会发现值得保留的只有很少的模型,而且它一定是非常完美。
误区二:从开始阶段你可以考虑到所有的一切
这种说法流行于二十世纪七十年代到八十年代早期,现今的许多经理都是在那个时候学习的软件开发。对这一点的迷信会导致在前期投入可观的时间去对所有的一切建模以期把所有一切都弄正确,试图在编码开始前就“冻结”所有的需求(见误区四),以致于患上“分析期麻痹症”–要等到模型非常完美之后才敢向前进。基于这个观点,项目组开发了大量的文档,而不是他们真正想要得到的—开发满足需要的软件。
事实分析:怎么才能走出这个误区呢?首先,你必须认识到你不能考虑到所有的细枝末节。第二,认识到编码员可能会对建模者的工作不以为然(这是可能的,事实上建模者所作的工作在实际价值中只占很少的部分),他们或许会说模型没有反应出真实的情况。第三,认识到不管你的最初所作的规格说明书有多好,但注定代码会很快地与之失去同步,即便是你自己建模自己编码。一个基本的道理就是代码永远只会和代码保持一致。第四,认识到迭代法(小规模地建模,编一些代码,做一些测试,可能还会做一个小的工作版本)是软件开发的准则。它是现代重量级的软件开发过程(如EUP),以及轻量级(如XP)的基本原理。
误区三:建模意味着需要一个重量级的软件开发过程
走入这个误区(经常与误区一有联系)的项目组常常是连建模都彻底地放弃了,应为这样的软件开发过程对他们来说太复杂太沉重了。这不亚于一场天灾。
事实分析:你可以用一种轻灵的方式取而代之。关于用简单的工具进行简单地建模的详细内容可参看AgileModeling(AM)。而且,你可以丢弃你的模型当使命完之后,同样也可以很基本的方式进行建模(比如,从办公桌起来,来到白板前就开始构略草图)。只要你愿意,你就可以轻松地建模。
误区四:必须“冻结”需求
这个要求常常来自高级经理,他们确切地想知道他们从这个项目组能得到什么东西。这样的好处就是在开发周期的早期确定下需求,就可以确切地知道所要的是一个什么样的东西;缺点就是他们可能没有得到实际上所需要的(不全或错误的需求,译者)。
事实分析:变化总会发生的。由于优先级的变化和逐渐对系统有了更进一步的理解,都会引起需求的变化。与冻结需求相反,估计项目成功的风险,尽量去接受变化而且相应地采取行动,就象XP所建议的一样。
误区五:设计是不可更改的
如同误区四,要求每一个开发人员必须严格遵从“设计“,导致开发人员为了符合“设计“而作了错误的事情或以错误的方式作正确的事情。或者是简单地忽略了设计,否定了所有设计可能带来的好处。冻结了设计,你就不能从在项目进程中所学到知识进一步获益。另外一个很大的趋势就是开发出大量的文档而不是实际的软件,使用面向文档的CASE工具而不是能给项目带来实际价值的面向应用的工具。
事实分析:事实上,设计会经常根据开发人员和数据库管理员的反馈进行修改,因为他们是最接近实际应用的人,通常他们对技术环境的理解要好于建模者。我们必须的面对这样一个事实:人无完人,他们所作的工作也不可能尽善尽美。难道您真的想将一个并不完善的设计固定下来而不再去修改其中的错误吗?另外,如果需求并没有被冻结,其实就意味着你不能冻结你的设计,因为任何需求的修改势必影响设计。对之,正确的态度是:只要你的代码还在改动,涉及就没完。
误区六:必须使用CASE工具
建模常常被认为是一项复杂的工作,因此需要大量地使用CASE工具辅助进行。
事实分析:是的,建模可以是很复杂的。但你完全可以建立一个有效而简单的模型表述其中关键的信息,而不是将一些无关紧要的细节包括进来。
比如,我经常使用UML建立模型来表示类、它们的属性及一些关键的业务操作,但并不画出属性的存取操作(get和set),以及维护与其它类关系的框架代码,或者其他一些琐碎的实现细节。我通过建模寻找解决问题的方法,让我和我的同事能继续前进去实现这个模型。以这样灵活的方式,大多数情况下我并不需要一个CASE工具来支持建模工作,一块白板,或者一台数字相机足以。这样,我就不用花时间去评估CASE工具,不用去和工具供应商讨论许可证的问题,也免去了人员培训开销。CASE工具只有当它能体现最佳性价比时(相对你自己的情况而言),才值得购买。大多数情况下,我都能不用它而达到目的(完成建模)。我经常使用的工具有Together/J(http://www.togethersoft.com/)–因为它能产生数目可观的Java框架代码;还有ERWin(http://www.cai.com/)--因为它能规划数据库。这两个工具真正地帮助我实现了软件开发的目的–制造满足用户要求的软件。但我绝大多数得建模工作仍然使用的是简单的工具,而不是CASE工具。
误区七:建模是在浪费时间
许多新手都这样认为,这主要是因为他们所接受的教育仅仅局限于如何编写代码,对于完整的开发流程鲜有接触。而且他们的经验也仅限于如何实现代码,就如初级程序员。他们放弃了提高效率和学习技能的机会,这些技能能够使他们很容易地适应不同的项目或组织。他们应该为此感到羞愧。
事实分析:在大多数情况下,在开始编码之前画一个草图、开发一个粗率的原型或者制作一些索引卡片都能提高你的生产效率。高效的开发者在编码之前都要进行建模工作。另外,建模是一种很好的在项目组成员与项目负责人之间沟通途径。你们在这个过程中探讨问题,从而对所要的是一个什么样的东西可以得到更好的理解,涉及到该项目中的每个成员也可得到对该项目有一个从分的了解。
误区八:数据模型(DataModel)就是一切
许多组织基于数据模型就蹒跚启动新的开发工作,也许正如你所在的组织:IT部门对于数据有非常严格的规定,控制着你的开发项目;或者你以前的数据库是一团糟,别无选择。
事实分析:数据模型是一个重要的但不是最重要的建模,它最好是建立在另外的模型之上。(参见“ExtremeModeling”,ThinkingObjectively,Nov.2000)。这即使在象数据仓库这类面向数据的项目中也如此。如果没有很好的理解用户是如何使用该数据仓库的(在数据模型中没有表示出来),这些项目经常是以可悲的失败而告终。你可以使用的模型有很多–使用案例(usecases),业务规则(businessrules),activitydiagrams,类图(classdiagrams),componentdiagrams,用户界面流程图(userinterfaceflowdiagrams)和CRC,等等。数据模型仅仅是其中的一种。每种模型都有其长处和短处,应该正确地使用。
误区九:所有的开发人员都知道如何建模
我们现在面临照这样一个严重的问题:许多不是开发人员的人,包括高级经理和用户,不知道软件是如何建成的。其结果,他们不能够区分开熟练的开发者和一般的程序员(当然也分不清高级程序员和一般程序员),他们想当然地认为所有的开发人员都具备从头到尾开发整个系统的技能。
事实分析:这肯定是不正确的。建模的技能,是只有当一个开发者通过学习它,并经过长期的实践才能够掌握。一些非常聪明的程序员常常相信自己无所不能,毕竟他们终究只是程序员。正因为这样的狂妄自大,他们承当的一些任务是他们根本就没有相应的技能去完成的。软件开发是如此的复杂,单单一个人是很难具备所有的技能去成功地进行开发,甚至也不可能去配置有一定复杂程度的系统。开发这应该有自知之明,明白他们自己的弱点,学无止境。通过互相取长补短,建模者可从程序员身上学到一项技术的具体细节,程序员也可从建模者那里学到有价值的设计和体系结构的技术。我个人认为所有的人,包括我自己,都是新手。
AgileModeling
通过理解和避开建模的误区,你能够是得你自己、你的项目组和你的组织更加有效地进行软件开发。在揭示这些普遍存在误区的过程中,我已经表述了AgileModeling(AM)的许多原则。AgileModeling以前叫做ExtremeModeling(XM)。我希望我所给于你的是精神上的食粮。
在此我要感谢BlueprintTechnologies(http://www.blueprinttech.com)的DougSmith,Evanetics(http://www.evanetics.com)的GaryEvans,以及在AgileModeling邮件列表(可访问http://www.agilemodeling.com加入)中对本文做出贡献的人们。我同样要感谢MartinFowler,RonJeffries和其他一些XP社区中成员,因为我想我已经融入了一些他们的观点。
建模十条原则
仅有数据模型对于现代软件是不够的。
接收变化,并且允许你的模型能够随着时间进行改进。你不能冻结它们,然后就期待着成功。
模型并不一定就是文档,文档也不一定就是模型。
大多数的模型可能也应该被丢弃。
只有代码才能与代码保持真正的同步。
一些简单的工具,比如白板,就完全足以应付大多数得建模工作。
思考,然后再编码。
你总能从别人身上学到东西。
建模可以用一种轻盈的方式。
设计直到代码发布以后才算完成。
分享到:
相关推荐
然而,UML建模实践中存在一些常见的误区,这些误区可能导致建模效率低下或者误解建模的本质。 误区一:建模等于写文档。这种观念将建模等同于传统的文档编写,认为建模是繁琐且无用的。实际上,建模的核心价值在于...
5. **最佳实践**:分享如何有效地使用UML,避免常见的建模误区。 **学习UML与软件建模的经典教程,对于软件开发人员来说至关重要,因为它可以帮助他们更清晰地表达和理解复杂系统的设计,提高团队间的沟通效率,...
本节将深入探讨这两个概念以及相关的建模误区。 首先,Rational Unified Process(RUP)是一种软件开发框架,它强调迭代和增量式开发。RUP的时间维包括阶段、迭代和里程碑,而内容维涉及工作流、角色、活动和工件。...
9. **最佳实践**:书中将分享UML建模的最佳实践,包括如何编写清晰的模型文档,如何进行有效的模型评审,以及如何避免常见的建模误区。 总之,《Business Modeling with UML, Business Patterns at Work》是一本...
它可能包含了一些最佳实践和实例,帮助读者避免常见的建模误区。 **UML2.0规范中文版.pdf** 这是官方UML2.0规范的中文翻译版,对于深入理解UML2.0的标准和语义非常有帮助。通过阅读此文档,读者可以了解到UML2.0的...
10. **最佳实践**:学习UML的最佳实践,如何时使用哪种图,如何有效地沟通和协作,以及如何避免常见的建模误区。 总之,《软件工程UML标准教程》不仅提供了一套完整的UML知识体系,还包含了丰富的实例和实践指导,...
此外,软件的使用不当或者过度依赖也是常见误区,忽视了结果的合理性和对实际的贴合度。在论文写作上,摘要的精炼、优缺点的阐述以及参考文献的规范引用也是需要注意的地方。 写好数学建模论文至关重要,因为它不仅...
10. 经验分享:“Secrets of the MCM.pdf”、“在讲 2002 MCM -B.ppt”等可能是前辈的经验分享,包含了比赛策略、常见误区等实用信息,有助于参赛者避免陷阱,提高成功率。 11. 题目解析:“第一讲;2002MCM-A题讲解...
解题指南则提供了官方对于问题的理解和解答建议,有助于参赛者避免走入误区。 利用这份资源,学生可以提前熟悉比赛流程,提升团队合作能力,锻炼快速学习和问题解决的能力。同时,它也有助于提升学生的数学素养,...
8. **竞赛策略**:解读比赛规则,分享如何选题、如何快速进入状态、如何避免常见误区等实用策略。 通过研读这套《数学建模》清华大学参考资料,参赛者不仅能掌握数学建模的基本技能,还能提升创新思维、问题解决...
6. **最佳实践指南**:可能包含业界专家的经验分享,指导如何有效地进行软件建模,避免常见的陷阱和误区。 通过这些资料,学习者不仅可以掌握UML和ROSE的基本使用,还能了解到软件建模的最佳实践,从而在实际工作中...
通过这些点评,我们可以学习如何评估一个模型的合理性,如何批判性思考,以及如何在建模过程中避免常见的误区。 此外,这些论文还涉及了建模过程的各个环节,包括问题定义、模型假设、模型构建、求解过程、结果分析...
解 模型求解是数学建模论文的核心...在竞赛中,要避免认为模型比论文重要或者只追求论文表面的华丽,这些都是常见的误区。通过深入理解数模竞赛论文的评阅标准和结构,能够更好地准备和撰写出高质量的数学建模论文。
这些经验分享有助于参赛者避免常见误区,提升竞赛表现。 总之,《1998 汪国强 数学建模优秀案例选编》是一本集实用性和启发性于一体的书籍,无论你是初学者还是资深研究者,都能从中受益匪浅,深化对数学建模的理解...
总的来说,这份《数学建模与数学实验(补充及程序)》资源为学习者提供了一个宝贵的实践平台,不仅可以校正理论学习中的误区,还通过实际的编程练习帮助他们将理论知识转化为解决实际问题的能力。对于希望在数学建模...
例如,很多CAD程序拥有参数化设计、实体建模、渲染和分析等高级功能,但用户可能会仅限于使用绘图和基础建模工具。 3. **忽略行业更新和最佳实践**:随着技术的快速进步,CAD软件及其应用领域不断演变。用户若忽视...
在仿真方面,Vivado提供了HLS(High-Level Synthesis)工具,可以进行行为级建模和验证。但是,不少用户在编写测试平台和进行功能验证时遇到困难。此教程会解释如何构建高效的测试平台,进行有效的功能和时序仿真。 ...
尽管用例建模在理论上看起来简单直观,但在实际应用中却经常遇到各种挑战和误区。本文将基于文献资料和实践经验,深入探讨用例建模过程中常见的问题及其解决方案。 #### 二、用例技术概述 ##### 2.1 用例的概念 ...