面条化代码与模型的成因及对策

本文将阐述导致代码或模型变得像意大利面般混乱的原因及应对策略。

原因

最近,我越来越常被问及关于意大利面代码和意大利面模型的建议。

产生意大利面代码和意大利面模型的主要原因在于软件设计者试图将软件需求规格与实现(代码或模型)直接对应的设计方法。软件需求规格在制定时,往往未能充分考虑软件架构结构及组件间接口(特别是全局变量等公共变量)的设计。

结果,需求规格的变更容易波及整个代码,导致模块间依赖关系复杂化,可读性和可维护性下降,从而形成“意大利面代码/意大利面模型”。

为防止此类问题,必须在设计规则中明确规定:需求规格书的发布者或软件设计者中的一方,应承担考虑软件架构及组件间接口变量的责任。

意大利面代码和意大利面模型不仅会降低可维护性和可移植性,还会导致设计效率和质量下降。

原因:

  • 软件架构及组件间接口变量的架构设计存在不足
  • 组件间接口变量相关的软件需求规格设计规则尚未完善
  • 组件间接口变量相关的软件设计阶段设计规则尚未完善
  • 软件架构及组件间接口变量相关的教育与宣传不足

对策方案

现提出以下对策。此外,尚有其他有效方法可供参考,敬请一并考虑。

对策方案:

  1. 组件接收部及发送部的引入
    如下图所示,在每个组件中设置「Receive部」和「Send部」。
    – Receive部:将值从组件间接口变量复制到组件内部局部变量。
    – Send部:将组件内部局部变量的值复制到组件间接口变量。
    – 每个组件内部的处理应通过局部变量或组件静态变量完成。
  2. 明确载于软件需求规格说明书
    在软件需求规格说明书中,明确定义组件间接口变量。在软件需求规格说明书中,明确定义组件间接口变量。
  3. 软件设计阶段的应用
    在软件设计中,需以上述“Receive部/Send部”结构为前提进行设计。
  4. 设计规则·教育的实施
    对「Receive部/Send部」的设计方针及运行规则进行教育与宣传,确保全体设计人员统一执行。

下图是针对对策1和对策3采取措施的示例。

OSS-ECAL Chinese
error: 内容受保护 !