当我们使用UML时,何时不使用?

Nya*_*baa 4 uml modeling

我们知道UML是统一的建模语言.那么它可以模拟任何类型的软件(如Linux内核,开放式办公室,任何Web应用程序等)吗?或者只能建模使用面向对象语言(Java,c ++等)的软件?

我认为建模是找出软件的好方法.如果我们不使用UML进行建模,我们可以使用哪些其他建模方法?

你知道什么样的建模方法用于大型开源项目(Linux内核,Openoffice.org,Firefox,Apache http,MySQL,Eclipse,VIM等),我们在哪里可以找到它们的建模文档?

谢谢任何答案!

Vic*_*let 5

UML首先是一个沟通工具,它可以帮助您将想法传达给团队中的其他人(或将来三个月),并且应该根据您表达的任何内容的容易程度进行评估. .

由于与语言无关,UML不能用于表达使用给定API或模块的预期的,惯用的方式,但这是设计的一个重要部分:忽略它往往最终会得到准确模拟底层问题的代码,但需要数十行样板代码与之交互.

此外,UML无法轻松捕获算法所依赖的数据结构的某些特定属性.例如,红黑树更容易用小树状草图表示,"这是一个红黑树"或"这不是红黑树,因为"描述,而不是相应的UML类图.

最后,语言可能有未在UML优雅派代表参加所有功能 - 在有他们的任何语言,例如,目的CAML模块函子,或倒闭.


Per*_*DBA 5

语境

好问题,但大问题。首先是一些具体情况,具体是主要的失败,然后是具体的答案。

向下滚动到UML *重大失败,如果您想跳过上下文

  1. UML只是新手。是的,当然还不如敏捷。但与以前相比是新的。

  2. 首先了解一些内容可能会有所帮助。我们使用模型,建模技术和符号已有40年了。他们很多。最常见的不是最合适或最成功的(在技术和目的上);它恰好是广告和“销售最多”的广告。

  3. 重新建模的第二个标准是,它是团队之间(不同技能集)以及团队与用户之间进行交流的工具。当一个团队使用一组符号而另一组使用另一组符号时,或者当符号对必须批准功能定义并为项目提供资金的用户无意义时,它变得愚蠢。

  4. 我们使用建造桥梁的标准,以使它们不会倒塌(至少在发达国家);确保购买者和供应商在绘制标准螺栓的符号时的意思相同;而且我们以相同的方式在IT中使用标准。

    • 传达每个符号的明确含义
    • 完整(如果它是数据模型,则关系不丢失)
    • 传达设计的复杂性和微妙性(非标准符号和图表无法做到)。
  5. 关于标准的一句话。在过去的20年中,IT行业严重恶化。我们有许多不合格且未经培训的人员从事技术工作。因此,在较小的公司中存在一种松散和天真的现象。甚至“标准”一词也已被劫持。人们松散地谈论“行业标准”:实际上没有这样的东西,它们只是意味着行业中最常见的事物。那是惯例,而不是标准。

  6. 标准由国际标准机构制定。没有一个供应商。由于MS从未遵守标准,因此他们创建了单一供应商反标准,并试图以这种方式垄断行业(非法,这就是美国司法部能够很容易地将它们分开的原因。)

    • MS可能是最常见的PC或PC应用程序软件(即使Windows通过了Windows也不是OS),但它在任何方面,形状或形式上都不是标准的。
    • 回复(4)MS闻名于世,他提出了至少20种(我知道)用于“建模”数据库的工具,每种产品和版本都不同。每个都有不同的可爱符号集;但它们都不是标准的
    • 作为对策,SQL是由IEC / ISO和最近由ANSI标识的标准。
    • Sybase,DB2和MSQL SQL Server符合SQL标准(Oracle则不遵守,即使它们声明符合)。
    • 免费软件“ SQL”均不符合SQL标准
  7. 一个标准还是所有的“标准”?是的,MS的计算机方法,购买了我们的设备,您会很高兴的。如果没有,您只需要购买更多我们的设备。极端是愚蠢的。IT的每个主题领域都已经存在了很长一段时间,这是一个专门领域,需要专门的资格和技能。一个好的Data Modeller可能会使程序员变得可怕,反之亦然。您不希望妇科医师擅长剖腹产手术。

    • 因此,正如标准机构数十年来所认可的那样,标准是特定于主题领域的
    • 此外,标准已标准化。这意味着一个主题领域中的标准与任何其他适用主题领域中的标准集成在一起
    • 通过引用(不重复全文)
    • 这允许每个标准在自己的道路上发展和进步,同时保持对其他标准的引用

    • 标准是公共领域,它们是免费的(您可能必须为印刷本支付印刷价)

  8. 另一个原因所有主题领域的一个“标准”永远都行不通,这种严重不足的原因当然是Maslow的Hammer,(如果您不愿意单击链接,请确保已阅读最后一句话)。对于只在工具箱中装有锤子的人来说,每个问题都像钉子。UML的作者以及当今的Fowlers和Amblers都用锤子完成所有任务。“数据库”是钉子;建筑是钉子。

  9. 供应商或财团也没有制定标准,因为它们没有监管控制权或授权来对提交的文件盖章。大多数这样的财团向自己提出意见,没有透明度或同行评审或监督。

    • UML可能很棒而丰富,而所有这些(其他人一无所知),OMG可能是一个伟大的财团,但是OMG不是国际标准组织,而完整的UML(14个模型)也不是标准。
    • 支持一个财团
    • 它尚未被任何国际标准机构接受
    • 被ISO识别为标准的部分仅是对象类建模部分
    • 它存在于自己的宇宙中,与宇宙的其余部分分开
    • 他们希望您认为这是一个成熟的标准,所以他们到处使用这个词
    • 归根结底,这是关于销售产品的
    • 很像MS
  10. 除了ObjectClass Modeling部分之外,AFAIK不是UML标准,其他部分没有ISO / IEC / ANSI / NIST标识。这有两个原因。

    重新(6)。在孵化UML 之前很久就存在几种不同的建模标准,每种标准都专门针对其主题领域。作者没有像任何合格的技术人员那样扩展现有的标准建模技术,而是创建了一个全新的模型。在这些主题领域中的每个领域,UML都不接近提供标准的效用;不符合标准要求;无法识别或传达全部含义。

    例。鉴于建模数据和建模软件是完全不同的科学,具有不同的规则,并且数据库被设计为独立于使用它的任何软件,因此使用OO概念或UML对“数据库”进行建模是愚蠢的。OMG将要您执行哪个操作,并说明UML可以执行。只需检查SO上相同问题的数量即可,其中OO类型受此确切问题困扰。

    • 首先,它不会是任何形式,形式的数据库。它只是一个数据存储位置。您将没有关系数据库的能力,速度或完整性。

    • 其次,顺序是倒退的。数据不变。程序会(经常)执行操作,因此,如果在对数据建模之后对对象进行建模,则不会发生任何变化。但是,如果在对象之后对数据进行建模,则您将花费​​一生的时间来改变两者,即前后移动。

    • 第三,UML可能适合于定义数据位置以“持久”存储数据,但是完全不足以定义关系数据库的元素。由于已有30年的关系数据库建模标准提供了完整的定义,因此使用它会更好。

    • 重新(7)。它尝试做所有事情。首先,由于其在主题领域的不足,因此没有合理的机会取代既定标准。其次,它遭受了各行各业杰克,没有问题的主人

    • 当然,OMG有14 种不同的 UML模型,可以用2到4个标准模型覆盖。为不同的目的使用那么多不同的模型会带来一系列额外的问题。

    • 需要明确的是,UML不会替代任何东西。OO相对较新。它仅为项目的OO部分提供OO建模。

  11. 最后,UML专为面向对象而设计。除了OO。好像整个宇宙都是OO,没有其他东西存在。即使是顽固的COBOL程序员也不会眨眼。这是谁一无所知OO类型中一种很常见的,悲伤的态度其它有关系统和IT,它是由像Martin Fowler的白痴,谁写OO这种方式产生的。这就是OO限于小型项目的原因,以及OO类型在OO之外的任何其他项目上失败的原因,因为它们不愿深入了解任何其他主题领域。以及为什么在过去的15年中可能有30种面向对象的“数据库”产品,以及为什么所有这些产品都失败了。

    • 例。Fowler首先会教您如何创建和实现不完整的类,并将它们“持久化”到“数据库”中。如果这样做不起作用,则您必须购买下一本书,以通过添加更多定义来弄清楚如何纠正它们(嗯,毫不奇怪)。当您意识到要对它们进行大量的改正,而实际上却是相似的改正时,您必须购买下一本书,以弄清楚如何“重构”类,使改正自动化,并确保已全部应用同时到相关位置。而且每次,您也必须“重构”“数据库”。适合没有其他知识的OO类型。

    • 对于不“购买”禽类零件的IT专业人员,他们在OO之外具有一定的知识和深度,可以产生定义,这样我们就不会浪费时间或金钱来重新定义,重构和重新实现。我们定义和构建一次,然后根据需要进行改进。

    • 并且我们将软件保持规范化,因此不需要“重构”,我们只需扩展类和方法即可。仅当初始结构具有结构时,才有可能。

    • 由于我们对关系数据库进行规范化和建模,因此尽管应用程序可以不断变化和增长,但我们永远不需要“重构”数据库。重新实现代码非常昂贵。重新实现大型数据库的成本令人望而却步。专业人士应避免这种情况。

  12. 之所以如此受欢迎,是因为这些天来,人们已经接受过MS生活方法方面的培训(任何人都可以是程序员,不需要任何资格,只要您相信即可),并且在OO / UML中,他们看到了神奇的子弹(现在,有了这个闪亮的新锤子,您也可以构建任何东西)。蛇油推销员。不要开枪射击,但事实是,没有魔术子弹,您需要的不仅仅是锤子来建造任何东西,而且还需要放在硬地里。

UML•重大失败

这些是UML作为“标准”的主要失败之处。这意味着图表和“方法”的特定离散问题,而不是使用后将产生的最终问题。

  1. 一个符号
    一个矩形代表几乎所有事物。

    • 与14种不同类型的图表相关的部分。虽然标准对数据不同的符号,VS流程,VS GUI等。由于存在那些项目没有固定集需要确定的事情(14种类型的东西),每个人都实现了被他们认为事情是,或更糟糕的是,他们所知道的是什么,这很少。

    • 一个人不知道一个人在看什么生物,或者完整性水平是什么。

  2. 很少的次要符号
    由于它试图为每个人做所有事情,并试图对大型和小型项目进行“建模”,因此有许多次要符号。

    • 事实上,太多的(如果你明白我上面所述),应该有各自的14种绘制的一些小符号,而且应该要求,否则就不是一个标准,它是松散和软盘。

    • 但是,次要符号太少了。在正常使用中,每个人都会发明自己的一些次要符号,以填补UML符号中的空白。结果当然是可怕的:每个项目团队都有各种其他的次要符号,这些符号不在UML中,因此在项目外无法理解。与标准目的完全相反。

    • 总体而言,结果(不限于一个项目团队)是太多的次要符号,其中有数百个次要符号,其中一些表示相同的事物,而其他的则表示略有(重要)不同的事物。

      我从200开始停止计数。

与真正的标准相比,以上两点导致对象(事物)的文档中完全缺少“定义”,这正是标准所期望的。在标准的第一条标准下,这是完全失败的:*首先,最重要的是,它是一种交流工具。为了理解UML“模型”,必须将其放在一边并与作者手动通信。

最后,但最重要的是...


  1. 在设计之前没有构成/分解分析的功能,我们需要分析(作为一门科学)应用程序应该做什么,然后才能设计(作为一门科学)实施程序。(不幸的是,这些天,未经训练的人们将自己投入到设计阶段,因为他们不知道该应用程序是什么,因为他们没有分析该应用程序,这毫无头绪。保证了灾难。)

    分析阶段和设计阶段都需要具备查看应用程序所包含功能的能力:

    • 在不同的层次:
      一。从10,000米开始:几乎看不到整个范围……但是所有界面,[缩小]或
      b。1,000米或
      c。1米:查看所有细节(小范围放大)。
      这意味着可以将应用程序分解为功能,首先是大型组件,然后再分解为较小的组件,直到定义了最小的或原子的组件(单个Object或Function()或Stored Proc或Subroutine)为止。

    • 为Analysis提供了一个完整的建模阶段,然后使您有信心继续进行下一阶段...

    • 这样就可以提供Design,现在可以将对象和物品进行归一化和组织成一组合法的Function了。规范化的代码意味着没有功能重复。

IDEF0和SSADM具有完整的成分-分解。大型应用程序在许多页面上使用树结构(该应用程序是)进行建模,每个页面仅显示该Level上的相关内容。(除此之外,如果它是一个OO客户端,那么这是不能跳过的,我们可能只有这些对象的UML图。

使用UML的结果是,您一无所获

  • 无法进行分析。太好了,对于那些不知道分析是一门科学的人来说,它是任何严肃项目的第一阶段。

  • 没有真正的设计是可能的。太好了,对于那些不知道设计是一门科学的人来说,步骤与平台有关,等等。这是任何重要项目的第二阶段。人们直接进入“设计”其OO对象的过程,就好像那是宇宙的中心一样。他们甚至试图通过这些热闹的生物来控制其数据完整性。

除了不被设计之外,该应用最终还是一个巨大的整体,具有大量的代码重复。一个笑话,以真正的工程师。


回答

  1. 首先,请确保为您的工具包购买了一些工具,并始终使用正确的工具来完成工作。

  2. OO是个好主意,UML可能是建模对象类的好技术,但它完全不足以建模其他任何事物或与用户进行通信。唯一会给人留下深刻印象的用户是那些自称为“技术” 并且没有见过任何建模标准的用户(即,他们没有参考点,并且容易受到影响)。

  3. 充其量,使用准确的单词,UML是用于建模对象类且与OO类型相关的标准(即,在任何其他主题领域中都没有专门技能)。就像在其中一样,我发现它不能传达现代对象类和复杂方法的所有控制和微妙之处,因此我必须在UML图中添加符号以使其完整。

    • 对于仅由OO类型建模和实施的小型项目而言,它就足够了。

    • 我看不出什么是“统一的”,更多的是反标准的。除了14个UML模型中的另一个模型之外,它什么都没有集成。

  4. 我们没有使用UML将人员放在月球上,也没有为常规的太空飞行或战斗机建造航天飞机。我们使用以下标准做到了这一点。发达国家的银行和金融机构(我的职责范围)和政府部门要求(要求)标准。按照(6),它们都相互集成在一起:

    • IDEF1用于信息建模
    • 用于关系数据库建模的 IDEF1X
    • 用于功能建模的 IDEF0
    • SSADM(Gane和Sarson的原始书,而不是其他人创建的书本),尤其是函数建模的数据流程图。对于不需要高定义IDEF0的非技术用户或项目来说,它非常有用。

    并且,为了传达各种细节,请确保在项目的相关阶段显示线框,屏幕截图,状态图和序列图。

    当然,对于建模对象类,如果这是一项需要特殊建模技术的重大任务,请使用UML或其他任何方法。

  5. 在大型项目中,界限,技能和职责的明确分离很重要。我们需要大师级建筑团队。千斤顶将无法生存。银行不会花钱逐步开发软件原型,而是按固定预算工作,而像我公司这样的供应商则按固定价格/固定交付合同工作。这就意味着在编码之前要进行定义(这些天不是规范)。

    在我所有的大型项目中,OO团队仅在其团队内部使用UML,并且使用了很长时间,并且从未在团队外部发布过。作为架构师,我最终从他们的UML 代码中绘制了他们的类图,只是为了获取文档并签字(非常便宜的绘图工具上非常快速,不需要“ UML建模软件”)。不需要“用例”等,因为该内容已经(在编写代码之前)以更容易理解的形式(在SSADM / IDEF0和页面布局中)交付。状态转换和顺序图,网络图,总体体系结构图,全部使用了适用的标准,并且比它们替代的UML图更完整。

  6. 仔细想想,我最近所有的项目都是第二代,完全重新实现了“纯OO”项目,这些项目向Magick承诺了,因为它们都是失败的,“数据库”已经瘫痪,审计员拒绝了它们。重写仅针对每个主题领域使用了适当的科学,并符合标准。科学中没有魔力。结果是每个区域100%的成功率是100%,而不是每个区域100%的成功率是20%。通常使用完全相同的OO个人。