📜  软件工程|软件设计原理

📅  最后修改于: 2021-01-10 02:52:38             🧑  作者: Mango

软件设计原理

软件设计原则涉及提供有效处理设计过程复杂性的方法。有效地管理复杂性不仅将减少设计所需的工作量,而且可以减少设计期间引入错误的范围。

以下是软件设计的原则

问题划分

对于小问题,我们可以立即处理整个问题,但对于重大问题,则可以将问题分为若干部分并加以解决,这意味着将问题分成多个较小的部分,以便可以分别捕获每个部分。

对于软件设计,目标是将问题分为可管理的部分。

问题分区的好处

  • 软件易于理解
  • 软件变得简单
  • 软件易于测试
  • 软件易于修改
  • 软件易于维护
  • 软件易于扩展

这些部分不能完全彼此独立,因为它们一起构成了系统。他们必须合作并沟通以解决问题。这种通信增加了复杂性。

注意:随着分区数量的增加=分区成本和复杂性增加

抽象化

抽象是一种工具,使设计人员可以在抽象级别考虑组件,而不必担心实现的内部细节。抽象可用于现有元素以及正在设计的组件。

这里,有两种常见的抽象机制

  • 功能抽象
  • 数据抽象

功能抽象

  • 模块由其执行的方法指定。
  • 该算法的细节来完成的功能是不是该函数的用户可见。

功能抽象是面向功能的设计方法的基础。

数据抽象

数据用户看不到数据元素的详细信息。数据抽象构成了面向对象设计方法的基础。

模块化

模块化规定了将软件划分为不同的模块,这些模块以不同的方式命名和寻址,并在以后集成以获得完整的功能软件。它是唯一允许程序在智力上可管理的属性。由于大量的参考变量,控制路径,全局变量等,单个大型程序难以理解和阅读。

模块化系统的理想属性是:

  • 每个模块都是定义明确的系统,可以与其他应用程序一起使用。
  • 每个模块都有单个指定的目标。
  • 可以分别编译模块并将其保存在库中。
  • 模块应该比构建更容易使用。
  • 模块从外部比内部简单。

模块化的优点和缺点

在本主题中,我们将讨论模块化的各种优点和缺点。

模块化优势

模块化有几个优点

  • 它允许大型程序由几个或不同的人编写
  • 它鼓励创建常用例程,以将其放置在库中并由其他程序使用。
  • 它简化了将大型程序加载到主存储器中的覆盖过程。
  • 它提供了更多的检查点来衡量进度。
  • 它提供了用于完整测试的框架,使测试更易于访问
  • 它产生了设计良好且更具可读性的程序。

模块化的缺点

模块化有几个缺点

  • 执行时间可能(但不一定)更长
  • 存储大小可能(但不确定)增加了
  • 编译和加载时间可能会更长
  • 模块间的通讯问题可能会增加
  • 需要更多的链接,运行时间可能更长,必须编写更多的源代码行,并且必须完成更多的文档编制

模块化设计

模块化设计通过允许系统各个部分的并行开发,降低了设计复杂度,并实现了更轻松,更快速的实现。我们将在本节中详细讨论模块化设计的不同部分:

1.功能独立性:功能独立性是通过开发仅执行一种任务且不会与其他模块过度交互的功能来实现的。独立性很重要,因为它使实现更容易访问和更快。独立的模块更易于维护,测试和减少错误传播,并且也可以在其他程序中重用。因此,功能独立性是确保软件质量的良好设计功能。

它使用两个条件来度量:

  • 内聚力:它测量模块的相对函数强度。
  • 耦合:它测量模块之间的相对相互依赖性。

2.信息隐藏:信息隐藏的基础表明,模块可以通过相互保护的设计决策来表征,即换句话说,应指定模块,以使包含在模块中的数据对于其他模块而言是不可访问的需要此类信息。

当需要在测试期间以及随后的软件维护期间进行修改时,使用信息隐藏作为模块化系统的设计标准将提供最大的好处。这是因为由于大多数数据和过程对软件的其他部分都是隐藏的,因此在修改过程中引入的无意错误不太可能传播到软件内的不同位置。

设计策略

好的系统设计策略是以易于开发的方式组织程序模块,后者也易于更改。结构化的设计方法可帮助开发人员处理程序的大小和复杂性。分析师会为开发人员提供有关如何组成代码以及如何将代码段组合在一起以形成程序的说明。

要设计系统,有两种可能的方法:

  • 自上而下的方法
  • 自下而上的方法

1.自上而下的方法:此方法首先确定主要组件,然后将其分解为更详细的子组件。

2.自下而上的方法:自下而上的方法从较低的细节开始,然后向上移到层次结构,如图2所示。这种方法适用于现有系统。