软件工程 |耦合和内聚
简介:软件开发生命周期中设计阶段的目的是为 SRS(软件需求规范)文档中给出的问题提供解决方案。设计阶段的输出是软件设计文档(SDD)。
基本上,设计是一个两部分的迭代过程。第一部分是概念设计,它告诉客户系统将做什么。其次是技术设计,允许系统构建者了解解决客户问题所需的实际硬件和软件。
系统的概念设计:
- 用简单的语言编写,即客户可以理解的语言。
- 关于系统特性的详细说明。
- 描述系统的功能。
- 它独立于实现。
- 与需求文档相关联。
系统技术设计:
- 硬件组件和设计。
- 软件组件的功能和层次结构。
- 软件架构
- 网络架构
- 数据结构和数据流。
- 系统的 I/O 组件。
- 显示界面。
模块化:模块化是将软件系统划分为多个独立模块的过程,每个模块独立工作。模块化在软件工程中有很多优点。其中一些如下所示:
- 系统易于理解。
- 系统维护简单。
- 一个模块可以根据需要多次使用。无需一次又一次地写。
耦合:耦合是模块之间相互依赖程度的度量。一个好的软件将具有低耦合。
联轴器类型:
- 数据耦合:如果模块之间的依赖关系是基于它们仅通过传递数据进行通信的事实,则称这些模块是数据耦合的。在数据耦合中,组件之间相互独立,通过数据进行通信。模块通信不包含流浪数据。示例——客户计费系统。
- 标记耦合在标记耦合中,完整的数据结构从一个模块传递到另一个模块。因此,它涉及到流浪数据。由于效率因素,这可能是必要的——这个选择是由有见地的设计师做出的,而不是懒惰的程序员。
- 控制耦合:如果模块通过传递控制信息进行通信,则称它们是控制耦合的。如果参数指示完全不同的行为可能会很糟糕,如果参数允许分解和重用功能则很好。示例 - 将比较函数作为参数的排序函数。
- 外部耦合:在外部耦合中,模块依赖于正在开发的软件或特定类型硬件之外的其他模块。 Ex-协议、外部文件、设备格式等
- 公共耦合:模块具有共享数据,例如全局数据结构。全局数据的变化意味着回溯到所有访问该数据的模块以评估变化的影响。因此,它存在模块重用困难、数据访问控制能力下降、可维护性降低等缺点。
- 内容耦合:在内容耦合中,一个模块可以修改另一个模块的数据,或者控制流从一个模块传递到另一个模块。这是最糟糕的耦合形式,应该避免。
内聚力:内聚力是衡量模块元素在功能上相关程度的指标。它是指向执行单个任务的所有元素包含在组件中的程度。基本上,内聚力是将模块保持在一起的内部粘合剂。一个好的软件设计将具有很高的凝聚力。
凝聚力的类型:
- 功能凝聚力:单个计算的每个基本元素都包含在组件中。功能凝聚力执行任务和功能。这是一个理想的情况。
- 顺序内聚:一个元素输出一些数据,这些数据成为其他元素的输入,即部分之间的数据流。它自然地出现在函数式编程语言中。
- 沟通凝聚力:两个元素对相同的输入数据进行操作或对相同的输出数据做出贡献。示例 - 更新数据库中的记录并将其发送到打印机。
- 程序凝聚力:程序凝聚力的要素确保了执行的顺序。动作仍然是弱连接的,不太可能被重用。 Ex-计算学生GPA,打印学生记录,计算累积GPA,打印累积GPA。
- 时间凝聚力:元素通过所涉及的时间相关联。一个模块与时间凝聚力相连,所有任务必须在同一时间跨度内执行。该内聚包含用于初始化系统所有部分的代码。许多不同的活动都发生在单位时间内。
- 逻辑凝聚力:元素在逻辑上相关而不是功能上。 Ex- A 组件从磁带、磁盘和网络读取输入。这些函数的所有代码都在同一个组件中。操作是相关的,但功能有很大不同。
- 巧合的凝聚力:元素不相关(不相关)。除了在源代码中的位置之外,这些元素没有概念上的关系。这是偶然的,也是最糟糕的凝聚力形式。打印下一行并反转单个组件中字符串的字符。