【软考架构】需求工程中,系统分析与设计的结构化方法

结构化方法诞生于20世纪70年代,是为了应对当时日益复杂的软件系统开发挑战(如“软件危机”)而提出的。它强调系统性、规范性、分解和抽象,目标是提高软件开发的效率、质量和可维护性,降低复杂性

核心思想:

  1. 自顶向下,逐步求精: 从系统最宏观、最抽象的整体视图开始,逐步分解成更小、更具体、更容易理解和实现的模块或过程。
  2. 功能分解: 将复杂的系统视为一系列功能的集合。分析的核心是理解“系统做什么”,设计则是将这些功能分解、组织并分配到具体的模块中。
  3. 数据与功能分离: 明确区分系统中的数据(是什么)和功能/过程(对数据做什么)。数据通常用数据模型(如ER图)描述,功能用过程模型(如数据流图)描述。
  4. 模块化: 系统被分解成一组相对独立、高内聚、低耦合的模块。每个模块负责一个明确定义的功能子集。
  5. 使用图形化建模工具: 大量使用标准化的图表(如数据流图、结构图、实体关系图、状态转换图等)来可视化地描述系统的不同方面(功能、数据、状态),取代或补充大量的文字描述,提高沟通效率和清晰度。
  6. 形式化或半形式化的规范: 强调使用清晰、无歧义、相对标准的符号和规则来描述需求和设计。
  7. 关注逻辑模型与物理模型:
    • 逻辑模型: 描述系统“做什么”,独立于具体的技术实现(如硬件、软件平台、数据库管理系统)。这是分析和需求规格说明阶段的核心产出。
    • 物理模型: 描述系统“如何实现”,即逻辑模型在特定技术环境下的具体实现方案。这是设计阶段的核心产出。

结构化方法的核心阶段与技术:

结构化方法通常贯穿整个系统开发生命周期(SDLC),尤其是在分析(SA - Structured Analysis)和设计(SD - Structured Design)阶段最为突出。

  1. 结构化分析:

    • 目标: 理解用户需求,定义系统“做什么”,建立系统的逻辑模型。
    • 主要技术与工具:
      • 数据流图: 描述数据在系统中的流动、处理、存储。是SA的核心工具。包含:外部实体、过程、数据流、数据存储。
      • 数据字典: 定义DFD中出现的所有数据流、数据存储和数据项(元素)的精确含义、组成、格式、取值范围等。是系统数据的中央仓库。
      • 实体关系图: 描述系统中的关键数据实体、实体属性以及实体之间的关系。用于建立数据模型(逻辑数据库设计的基础)。
      • 过程规格说明: 详细描述DFD中最底层(不可再分)过程的处理逻辑。常用工具包括:结构化英语(伪码)、判定表、判定树。
      • 状态转换图: 对于具有明显状态变化的系统(如实时控制系统),描述系统状态、引起状态转换的事件以及状态转换时执行的动作。
  2. 结构化设计:

    • 目标: 将分析阶段得到的逻辑模型转化为具体的、可实现的物理模型,即系统“如何做”。重点是设计软件结构。
    • 主要技术与工具:
      • 结构图: SD的核心工具。描述程序的模块层次结构、模块间的调用关系以及模块间传递的数据(参数)。
      • 设计原则:
        • 模块化: 将大系统分解成小模块。
        • 耦合: 衡量模块间相互依赖的程度。目标是低耦合(模块间联系尽可能少且简单)。
        • 内聚: 衡量一个模块内部各元素(语句、数据)结合的紧密程度。目标是高内聚(模块内元素共同完成一个单一、明确的功能)。
      • 从DFD到结构图的转换: 有特定的策略(如变换分析、事务分析)将DFD映射为初步的结构图。
      • 数据设计: 基于ER图,设计物理数据库结构(表、字段、索引、关系)。

结构化方法的主要流派/代表:

  • Yourdon/DeMarco 方法: 非常强调DFD和数据字典,是结构化分析最经典的代表。
  • Gane & Sarson 方法: 另一种广泛使用的结构化分析方法,DFD符号与Yourdon略有不同。
  • Jackson 系统开发方法: 强调数据结构对程序结构的主导作用。
  • 结构化分析与设计技术: 由Douglas Ross提出,使用更丰富的图形符号集(活动图、数据图等)。

结构化方法的优点:

  1. 降低复杂性: 通过分解将大问题转化为小问题,易于理解和处理。
  2. 提高清晰度与可理解性: 图形化模型直观、标准,便于不同角色(用户、分析师、设计师、程序员)之间的沟通和验证。
  3. 强调文档化: 产生详尽的、标准化的文档,有利于知识传递、维护和审计。
  4. 支持自顶向下开发: 便于早期识别主要问题和架构。
  5. 设计原则明确: 耦合和内聚等原则为设计高质量软件提供了具体指导。
  6. 适用于数据处理密集型系统: 在处理以数据流和转换为主的系统(如传统业务信息系统)方面非常有效。

结构化方法的局限性:

  1. 对需求变化的适应性较差: 相对刚性,需求变更可能引起文档和设计的大量修改(瀑布模型的通病)。
  2. 数据和功能分离的割裂: 现实世界中的对象往往同时包含数据和操作数据的行为。结构化方法将两者分离建模,有时不能很好地映射现实。
  3. 对用户界面和交互密集型系统支持较弱: 早期结构化方法较少关注用户体验和人机交互设计。
  4. 可重用性支持有限: 主要关注特定系统的功能分解,对通用组件复用的支持不如面向对象方法。
  5. 可能产生“分析瘫痪”: 在大型复杂项目中,过度强调前期详尽的文档和建模可能导致项目进度缓慢。
  6. 与面向对象思维的差异: 现代软件开发主流是面向对象,结构化方法的思维模式与之不同,学习和转换有一定成本。

结构化方法与面向对象方法的对比:

特性结构化方法面向对象方法
核心概念功能、过程、数据流、模块对象、类、属性、方法、继承、多态
分解方式功能分解对象分解
数据与功能分离封装在对象内部
关注点“做什么” (功能)“谁做什么” (对象职责)
建模工具DFD, ERD, 结构图用例图, 类图, 时序图, 状态图等
适应性对稳定需求较好,变更成本较高对需求变化适应性更好
重用性模块级重用类级、组件级、模式级重用
典型适用数据处理系统,事务处理交互复杂系统,GUI应用,分布式系统

总结:

结构化方法是软件工程发展史上的重要里程碑。它提供了一套系统化、规范化的分析和设计框架,通过自顶向下分解、功能视角、数据和过程分离、图形化建模以及强调模块化设计原则,显著提高了软件开发的规范性和可控性。虽然在应对快速变化的需求和构建高度交互的系统方面不如面向对象方法灵活,但其核心思想(如分解、模块化、低耦合高内聚)仍然是现代软件设计的基石。理解结构化方法对于掌握软件工程的基础原理、阅读遗留系统文档以及在某些特定场景(如优化核心算法模块、设计底层服务)下进行设计仍然具有重要价值。它是学习更现代方法(如面向对象、面向服务)的重要基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92972.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA常用资源之IO概述

目录 一、前言 二、I/O资源 2.1 I/O端口资源 2.1.1 IOB 2.1.2 ILOGIC/OLOGIC 2.2 ZHOLD 2.3 IDDR/ODDR 2.4 IDELAY 2.5 ISERDES/OSERDES 2.6 IO Logic Resource连接 2.7 Device示意图 三、工程示例 3.1 工程代码 3.2 Device结果 一、前言 FPGA芯片从内部结构看主…

密集遮挡场景识别率↑31%!陌讯轻量化部署方案在智慧零售的实战解析

一、零售业痛点:当技术遇上客流洪流据《2024智慧零售技术白皮书》统计,高峰期超市顾客密度超3人/㎡时,​​目标漏检率高达48%​​。核心挑战包括:​​动态遮挡​​:购物车/货架造成的持续性目标截断​​计算瓶颈​​&a…

力扣(O(1) 时间插入、删除和获取随机元素)

一、题目分析(一)功能需求 我们需要实现 RandomizedSet 类,包含以下功能: RandomizedSet():初始化数据结构。bool insert(int val):当元素 val 不存在时,插入该元素并返回 true;若已…

前端开发的面试自我介绍与准备

前端面试自我介绍不知道怎么说的,直接参考下面的模板,然后换成你的经历 自我介绍控制在1分钟左右,千万不要说的太久,面试官会烦的,但是又不好意思打断你 切记面试是人和人面对面的交流,要有,面试…

10、系统规划与分析

一、系统规划步骤系统规划步骤对现有系统进行初步调查分析和确定系统目标分析子系统的组成和基本功能拟定系统的实施方案拟定系统的可行性研究指定系统建设方案系统规划阶段的产出物:可行性研究报告、系统设计任务书。习题1、拟定系统的实施方案是在系统规划阶段完成…

Nginx学习笔记(六)—— Nginx反向代理

📚Nginx学习笔记(六)—— Nginx反向代理 📌 一、反向代理核心概念 本质原理: #mermaid-svg-UkFRDp2Ut7MK5T2N {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

三伍微电子GSR2406 IoT FEM 2.4G PA 射频前端模组芯片

三伍微电子GSR2406 IoT FEM 2.4G PA 射频前端模组芯片规格书Product Description The GSR2406 is a high-performance, fully integrated RF front-end module (FEM) designed for Zigbee technology, Thread, and Bluetooth (including low energy) applications. The GSR2406…

开发避坑指南(24):RocketMQ磁盘空间告急异常处理,CODE 14 “service not available“解决方案

异常信息 Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.94 CQ: 0.94 INDEX: 0.94, maybe your broker machine memory too small.异常背景 一个项目里面用到了rocketmq&#x…

开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界

文章目录前言【视频教程】1.安装Docker2.本地部署SafeLine3.使用SafeLine4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Uptime Kuma公网地址前言 当个人或企业站点上线后面临的首要威胁往往来自网络攻击——据统计,超过60%的Web应用漏洞利用尝试在流量到达…

Mac M1探索AnythingLLM+SearXNG

SearXNG 能聚合来自多达 200 多个搜索服务,可私有化部署,并提供了灵活自定义选项。 AnythingLLMSearXNG,刚好能解决AnythingLLM因为网络限制导致web search不可用的问题。 1 安装docker 下载mac m1版本的docker并安装。 https://docs.dock…

模式设计:策略模式及其应用场景

简介 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态选择算法或行为。核心思想是将算法封装成独立的类(策略),使它们可以相互替换,让算法的变化独立于使用它的客户端。 核心思想 解耦:将算法的定义与使用分离。每个算法封装起来,使它们可以互…

Squash Merge(压缩合并)和Rebase Merge(变基合并)介绍

文章目录**1. Squash Merge(压缩合并)****定义****操作步骤****特点****优点****缺点****2. Rebase Merge(变基合并)****定义****操作步骤****特点****优点****缺点****3. 对比总结****4. 选择建议****5. 示例场景****Squash Merg…

Linux编程 —— framebuffer

一、framebuffer概念framebuffer:帧缓冲,帧缓存技术Linux内核专门为图形化显示提供的一套应用程序接口。二、基本操作步骤1. 打开显示设备(/dev/fb0) 2. 获取显示设备相关参数(分辨率,像素格式)---》ioctl 3. 建立显存…

文件编辑html

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件行内容编辑器</title><script src&…

具有熔断能力和活性探测的服务负载均衡解决方案

一、整体架构设计 1.核心组件 负载均衡器&#xff1a;负责选择可用的服务节点健康检查器&#xff1a;定期检测服务节点的可用性服务节点管理&#xff1a;维护所有可用节点的状态信息 2.负载均衡策略 轮询(Round Robin)随机(Random)加权轮询(Weighted Round Robin)最少连接(Leas…

技术演进中的开发沉思-62 DELPHI VCL系列:VCL下的设计模式

今天聊聊设计模式&#xff0c;当然这个章节目前仅限于DELPHI VCL,因为接下来梳理的Factory/Factory Method、Bootstrap 和 ForEach 这三种设计样例&#xff0c;看似独立&#xff0c;却在实际开发中相互配合&#xff0c;共同构建起高效、灵活的程序架构。在 DELPHI VCL 开发的技…

Docker 101:面向初学者的综合教程

掌握 Docker 已成为软件开发中的一项关键技能。本教程探讨了容器化的世界&#xff0c;包括其核心概念、优缺点&#xff0c;以及开始使用容器化的分步指南。 无论是 Docker 的新手&#xff0c;还是希望复习基础知识的更有经验的开发人员&#xff0c;本指南都能满足需求。 什么…

RTOS YAFFS

在 YAFFS (Yet Another Flash File System) 的语境中&#xff0c;“Check Point” 并不是一个标准的、核心的官方术语。它更可能是对 YAFFS 关键机制 Summary 或 Checkpointing 功能的非正式表述或理解偏差。其核心含义是指 YAFFS 在特定时刻保存文件系统关键元数据的状态&…

【SpringBoot系列-02】自动配置机制源码剖析

【SpringBoot系列-02】自动配置机制源码剖析 咱们天天用Spring Boot&#xff0c;一个SpringBootApplication注解扔进去&#xff0c;啥配置都不用写&#xff0c;项目就跑起来了。你有没有过这种疑惑&#xff1a;那些DispatcherServlet、DataSource是从哪冒出来的&#xff1f;今天…

51单片机-51单片机最小系统

本章概述思维导图&#xff1a;51单片机最小系统51单片机最小系统是51系列单片机&#xff08;如AT89C51、STC89C52等&#xff09;能够独立工作的最简电路配置&#xff0c;它为单片机提供了运行所需的基本条件。51单片机最小系统板是嵌入式系统开发的基础平台&#xff0c;集成了单…