“斗争”的系统和方法的复杂性

一种或另一种方式,我们都设计和实现系统。 无论是软件系统,基础架构还是平台解决方案。 作为这项工作的一部分,我们一直面临着“复杂系统”的概念。 作为这篇文章的一部分,我想分享我对系统复杂性及其“挣扎”的看法。


让我们从定义系统开始。 我喜欢系统体系结构书中给出的定义 复杂系统的策略与产品开发 。 翻译听起来像这样:


系统是一组组件及其关系。 整个系统的功能大于其各个组件的功能之和。

这是一个非常重要的定义。 它建议系统应该产生“效用”。 如果与组成它的组件相比,该系统未提供“实用性”的增加,则可能不是非常必要。


您可以问自己的下一个问题是什么是“复杂系统”。 您可以谈论很多事情,但是我认为很难调用一个系统,它很难用您的思想进行评估,难以使用,难以理解,难以记住该系统中发生的所有交互。


在这里,对于我们(作为工程师)来说,拥有一种机制来衡量这种复杂性很重要。 作为这种机制的基础, 麻省理工学院的家伙们建议使用众所周知的“魔术数字七加减二”。 有关于此主题的原始研究 ,以及有关HabréTED演讲的文章 。 简而言之,所有这些研究的思想是一个人的“工作记忆”可以同时容纳并处理有限数量的不同对象。 在这里,“各种”对象的概念非常重要,因为大脑通过对对象进行分组来应对复杂性。 例如,可以记住相同种类或类型的对象之间的连接作为一个连接。 或者,更清楚地说-您无需想象一个由不同颜色的混合球组成的堆的系统。 只需将它们组合在脑海中,说有五个红色的球,七个黄色和三个蓝色的球。 这简化了系统的工作,将对象的数量从15个减少到3个。 因此,在复杂性评估的背景下,我们谈论的是无法分组的不同对象,即原子。


最后,对工作内存容量有不同的估计。 有人说四个物体,有人-大约五个,有人-大约七个。 在我的推理中,我将坚持经典的方法- “七加二”


根据这些估计,可以说,如果很难使用一个系统来将其组件和通信保留在内存中,那么显然,它会超过相同的容量限制,即“七个加减两个”。 这又意味着该“神奇数字七”可以用作系统复杂性的基本估计。 我认为,到目前为止,以下临时定义具有生命权:


复杂系统是由7 + -2原子成分及其不同比例的键组成的系统。

处理复杂性的经典方法


现在,让我们简要回顾一下在设计阶段处理复杂性的经典方法或工具。 它们很少:抽象,分解,层次和层次分解。


  • 抽象 -一种方法,可让您突出显示系统或子系统的主要功能并隐藏其内容
  • 分解 -将系统分为较小的块或组件的一种方式
  • 层次结构是一种将系统划分为多个级别的方法,其中级别在结构中具有特定位置,并且位于另一个之上
  • 分层分解 -结合了分层和分解的方法

所有这些工具最终都旨在简化我们系统的各个子系统,以便在与每个独立的单元一起工作时,它整体上“适合头部”。


这是怎么回事


这些东西给我们什么? 简而言之,该想法是使用各种方法将一组非结构化的系统组件转换为一种结构形式。 而且,记住魔术七,我们可以说分解中的每个块都不应包含超过七个正/负两个元素。 否则,对这种块进行详细检查,将很难控制。


另一方面,如果我们有一个包含大量块的系统,这些块划分为多个层次级别,则此类级别的数量最好不超过七个(正负两个)。 作为说明,我想带一张来自“系统工程基础知识”的幻灯片。 从幻灯片中可以看到,系统的复杂性随着分解级别的增加而增加。


复杂度计算


因此,可以通过以下论文大致描述系统设计的正确过程:


不要构建复杂的系统。 构建具有必要复杂性级别的系统。

文学作品


Source: https://habr.com/ru/post/zh-CN425807/


All Articles