设计策略


自上而下的策略

自上而下的策略使用模块化方法来开发系统的设计。之所以如此称呼,是因为它从顶部或最高级别的模块开始,向最低级别的模块移动。

在该技术中,识别用于开发软件的最高级别模块或主模块。根据每个模块执行的任务,主模块被分为几个更小、更简单的子模块或段。然后,每个子模块进一步细分为下一个较低级别的几个子模块。将每个模块划分为多个子模块的过程一直持续到无法识别出无法进一步细分的最低级别模块为止。

自顶向下

自下而上的策略

自下而上的策略遵循模块化方法来开发系统的设计。之所以如此称呼,是因为它从最底层或最基本的级别模块开始,向最高级别的模块移动。

在这种技术中,

  • 确定了最基本或最低级别的模块。

  • 然后,根据每个模块执行的功能将这些模块组合在一起,形成下一个更高级别的模块。

  • 然后,这些模块进一步组合形成下一个更高级别的模块。

  • 将几个较简单的模块分组以形成更高级别模块的过程一直持续到实现系统开发过程的主要模块为止。

自下而上

结构化设计

结构化设计是一种基于数据流的方法,有助于识别开发系统的输入和输出。结构化设计的主要目标是最大限度地降低程序的复杂性并提高程序的模块化程度。结构化设计还有助于描述系统的功能方面。

在结构化设计中,系统规范是借助 DFD 以图形方式表示软件开发中涉及的数据流和流程序列的基础。开发出软件系统的 DFD 后,下一步是开发结构图。

结构化设计

模块化

结构化设计将程序划分为小的、独立的模块。它们以自上而下的方式组织,详细信息显示在底部。

因此,结构化设计使用一种称为模块化或分解的方法来最小化复杂性,并通过将问题细分为更小的部分来管理问题。

优点

  • 首先测试关键接口。
  • 它提供抽象。
  • 它允许多个程序员同时工作。
  • 它允许代码重用。
  • 它提供控制并提高士气。
  • 它使识别结构变得更容易。

结构化图表

结构化图表是设计模块化、自上而下系统的推荐工具,它定义了系统开发的各个模块以及每个模块之间的关系。它显示了系统模块及其之间的关系。

它由图表组成,图表由代表模块的矩形框、连接箭头或线条组成。

  • 控制模块- 它是指导较低级别模块(称为从属模块)的较高级别模块。

  • 库模块- 它是一个可重用的模块,可以从图表中的多个点调用。

图表

我们有两种不同的方法来设计结构化图表 -

  • 以变​​换为中心的结构化图表- 当所有交易都遵循相同路径时使用它们。

  • 以交易为中心的结构化图表- 当所有交易不遵循相同路径时使用它们。

使用结构流程图的目的

  • 鼓励自上而下的设计。

  • 支持模块的概念并确定适当的模块。

  • 显示系统的规模和复杂性。

  • 确定每个功能中易于识别的功能和模块的数量。

  • 描述每个可识别的功能是否是一个可管理的实体,或者是否应该分解为更小的组件。

影响系统复杂性的因素

要开发出高质量的系统软件,就必须开发出好的设计。因此,系统开发设计时主要关注的是软件设计的质量。高质量的软件设计可以最大限度地减少软件开发的复杂性和成本支出。

与系统开发相关、有助于确定系统复杂性的两个重要概念是耦合内聚

耦合

耦合是组件独立性的度量。它定义了系统开发的每个模块彼此之间的依赖程度。实际上,这意味着系统中模块之间的耦合越强,系统的实施和维护就越困难。

每个模块都应该与其他模块有简单、干净的接口,并且模块之间应该共享最少数量的数据元素。

高耦合

这些类型的系统与相互依赖的程序单元互连。一个子系统的更改会对另一子系统产生很大影响。

高度耦合

低耦合

这些类型的系统由独立或几乎独立的组件组成。一个子系统的更改不会影响任何其他子系统。

低耦合

耦合措施

  • 内容耦合- 当一个组件实际修改另一个组件时,被修改的组件完全依赖于修改一个组件。

  • 公共耦合- 通过组织系统设计来减少耦合量,以便可以从公共数据存储访问数据。

  • 控制耦合- 当一个组件传递参数来控制另一组件的活动时。

  • 标记耦合- 当使用数据结构将信息从一个组件传递到另一个组件时。

  • 数据耦合- 当仅传递数据时,组件通过这种耦合连接。

凝聚

内聚力是其组成部分之间关系的紧密程度的度量。它定义了模块组件之间的依赖程度。在实践中,这意味着系统设计者必须确保 -

  • 他们不会将重要的流程分割成碎片化的模块。

  • 它们不会将 DFD 上表示为进程的不相关进程收集到无意义的模块中。

最好的模块是那些功能上具有凝聚力的模块。最糟糕的模块是那些恰好具有内聚性的模块。

最差的凝聚力

巧合内聚存在于一个与另一个部件无关的部件中。

  • 逻辑内聚- 将多个逻辑相关的函数或数据元素放置在同一组件中的位置。

  • 时间内聚- 当用于初始化系统或设置变量的组件按顺序执行多个功能时,但这些功能通过所涉及的时间相关。

  • 程序内聚- 当函数在组件中分组在一起只是为了确保这个顺序时。

  • 顺序内聚- 当组件的一个部分的输出是其下一部分的输入时。