有多种使用UML的方法。马丁·福勒(Martin Fowler)调用了这些UML模式,并确定了以下四种:UML为Notes,UML为Sketch,UML作为Blueprint,以及UML作为编程语言。
UML作为一种编程语言从未真正起飞。在该领域有一些工作使用不同的名称进行命名,例如“ 模型驱动的体系结构”或“基于模型的软件工程”。通过这种方法,您可以创建软件系统的高度详细的模型,并从这些模型中生成代码。在某些用例中,此方法很有用,但不适用于通用软件,特别是不适用于有能力提供支持此方法的工具的大型公司。这也是一个耗时的过程-我可以为一个类键入代码,而不是创建实现它所需的所有图形模型更快。
作为蓝图的UML通常表示“大型设计”项目。当然不是必须的。该模型也可以针对特定增量进行完整描述。但想法是,花费时间来创建UML模型形式的设计,然后将其移交给某人以转换为代码。阐明了所有细节,并且代码转换趋向于更加机械化。
作为草图的UML和作为注释的UML本质上相似,但是根据使用时间的不同而有所不同。将UML用作草绘意味着您将使用UML表示法草绘设计,但是这些图可能并不完整,但将重点放在您需要与他人进行交流的设计的特定方面。UML as Notes类似,但是模型是在代码之后创建的,以帮助理解代码库。
当您考虑这一点时,我认为以上所有内容对于任何一种建模符号都是正确的。您可以将其应用于实体关系图,IDEF图,业务流程建模表示法等。无论采用哪种建模表示法,都可以选择何时应用(作为规格之前,作为替代表示)以及多少细节(关键方面的全部细节)。
另一方面是开源文化。
通常,开源项目是从解决个人(或今天的公司)所遇到的问题开始的。如果是由个人启动的,则开发人员的数量为1。在这种情况下,通信开销非常低,几乎没有必要就要求和设计进行交流。在一家公司中,可能会有一个小团队。在这种情况下,您可能需要传达设计可能性并讨论取舍。但是,一旦做出了设计决策,就需要随着代码库随时间的变化而维护模型或将其丢弃。用敏捷建模术语,“连续记录”并维护“单一信息源”。
简短地说,有人认为代码是设计,而模型只是设计的替代视图。杰克·里夫斯(Jack Reeves)撰写了三篇关于代码作为设计的文章,并且在C2 Wiki上也进行了讨论,讨论了源代码是设计,设计是源代码以及源代码和建模的思想。如果您坚持这种信念(我愿意),那么源代码就是现实,应该存在任何图来理解代码,更重要的是,其背后的原因是代码的本质。
就像您提到的那样,一个成功的开源项目在全球都有贡献者。这些贡献者往往在为软件提供动力的技术上具有技术能力,并且很可能也是该软件的用户。参与人员可以像阅读模型一样轻松地阅读源代码,并且可以使用工具(IDE和逆向工程工具)来理解代码(如果需要,可以包括生成模型)。他们还可以自己创建流程草图。
在Fowler描述的四种模式中,我认为您不会找到使用建模语言作为编程语言或蓝图的开源项目或任何地方的很多项目。这样就可以将注释和草图用于UML。注释将由贡献者为贡献者创建,因此您可能找不到在任何地方上传的笔记。随着代码变得更加完整,草图的价值将降低,并且可能不会得到维护,因为这将使贡献者付出更多的努力。
许多开源项目没有可用的模型,因为它没有增加价值。但是,这并不意味着模型不是由项目早期的某个人创建的,也不意味着个人没有创建自己的系统模型。维护设计信息的一个源(源代码)只是时间更有效。
如果您想找人交换设计信息,我建议您查看供稿人使用的任何类型的论坛或邮件列表。这些论坛和邮件列表通常用作项目的设计文档。您可能找不到正式的UML,但在那里可能找到某种形式的设计信息和模型的图形表示。您还可以进入项目的聊天室或其他交流渠道-如果您看到人们在谈论设计决策,则他们可能正在与图形模型进行交流。但是它们很可能不会成为存储库的一部分,因为一旦达到了通信目的,它们就不会有价值。