`
ruilin215
  • 浏览: 1105597 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论
阅读更多
作者: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建模的误区UML建模的误区

    UML建模的误区UML建模的误区UML建模的误区UML建模的误区

    CAD软件使用中的几个误区.pdf

    CAD软件使用中的几个误区.pdf

    数学建模方法:蚁群算法

    蚁群算法求解问题时易产生的误区及对策 用双向收敛蚁群算法解作业车间调度问题 物流配送路径安排问题的混合蚁群算法 求解TSP问题的模式学习并行蚁群算法 基于蚁群算法的三维空间机器人路径规划 蚁群优化算法及其...

    Agile敏捷建模思想

    10建模的误区本文来自敏捷中国站点译者:林星原文出处:www.AgileModeling.com英文原文版权由ScottW.Ambler拥有OriginaltextiscopyrightedbyScottW.Ambler敏捷建模的价值观AM的价值观包括了XP的四个价值观:沟通、...

    大数据时代和Hadoop时代的维度建模和Kimball数据集市

    有一个常见的误区,数据建模的目的是用ER图来设计物理数据库,实际上远不仅如此。数据建模代表了企业业务流程的复杂度,记录了重要的业务规则和概念,并有助于规范企业的关键术语。它清晰地阐述、协助企业揭示商业...

    两类常见计量模型的建模与误区分析――以江西城镇消费数据为例 (2010年)

    利用江西省1985-2008年城镇消费收入数据,建立了绝对收入模型与ARIMA模型,分别进行了较为详 细的模型建立与误区分析,得到了一些具有启发性的结论,解决了一些实际建模操作上遇到的棘手问题。

    需求建模和表述的技术

    本文来自于博客园,本文通过对建模技术的描述,从分解,提炼和消除矛盾进行需求分析。需求分析最常见的误会是需求分析可以将需求做出成为方案,这是最大的误区,需求应该是还原业务,应该以业务为线索,换句话说就是...

    论文研究-灰色关联度分析在变量筛选应用中的误区.pdf

    论文研究-灰色关联度分析在变量筛选应用中的误区.pdf, 探讨了多元回归建模中灰色关联度分析应用于变量筛选时存在的问题及其原因 ;结合实例阐明 ,GM(1 ,n )模型本身无法...

    高职院校园林CAD课程教学中存在的误区及解决措施.pdf

    高职院校园林CAD课程教学中存在的误区及解决措施.pdf

    棱镜门引发热议:如何走出三维CAD信息安全误区.pdf

    棱镜门引发热议:如何走出三维CAD信息安全误区.pdf

    论文研究-缓冲算子的光滑性.pdf

    针对人们对缓冲算子提高建模精度原因的认识误区,提出了缓冲算子光滑性的概念,给出了缓冲算子能否提高序列光滑性的判别条件,分别研究了弱化缓冲算子和强化缓冲 算子的光滑...

    论文研究-CTCS-3列控系统RBC切换的形式化建模、分析与验证.pdf

    针对影响RBC切换质量的列车速度、RBC切换时间等诸因素, 以及澄清对RBC交接协议安全性在认识上的一些误区, 利用随机Petri网形式化描述工具, 建立了CTCS-3列控系统RBC切换模型。通过理论分析和仿真实验, 验证了不同...

    ERwin教程小汇总

    erwin是一个数据库关系实体模型(ER Model)设计工具,与Power...8.建模的误区.txt 9.如何使用ERwin进行基于Mysql的数据库设计 .txt 10.数据库范例.txt 11.数据库建模.ppt 12.数据库设计过程.doc 13.数据库设计指南.doc

    ERWin教程、帮助文档

    与微软的Vision相比,erwin只能设计er model,而且设计界面选项较多,相对...建模的误区.txt 如何使用ERwin进行基于Mysql的数据库设计 .txt 使用ERwin进行MYsql数据库设计.doc 使用ERwin设计数据库.txt 数据库范例.txt

    中国敏捷实践中的误区

    我们都鼓励短迭代,两周比四周能得到更快的反馈,两周迭代比四周迭代更有效打破前面提到的老习惯,而要达到两周迭代,就必需要适当的实践配合,用户故事纵向划分、敏捷建模、测试驱动开发、持续集成、验收测试驱动...

    2023年跨界融合创新应用合作发展大会(公开)PPT汇总(23份).zip

    从实景三维建模到数字孪生建模 地表水力侵蚀过程及其虚拟模型 地理信息赋能智慧水利建设的路径思考 数字孪生底座赋能水利四预 数字孪生水利工程关键技术研发与实践应用 数字孪生中轴线 三、多维感知-时空信息赋能...

Global site tag (gtag.js) - Google Analytics