NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
[TOC] ## 要点 1. 别名: 面向功能的软件开发方法,面向数据流的软件开发方法 1. 结构化开发方法的准则 分解与抽象、模块独立性、信息隐蔽 1. 特点 1. 面向数据流 2. 自顶向下分解 3. 图形化表达 4. 独立性强 2. 三个不同的阶段 1. 架构化分析(SA): 1. 数据流图: 数据流,处理,数据存储,外部项 2. 数据字典,结构化语言,判定表 2. 结构化设计(SD): 1. 模块构造: 信息隐藏与抽象,模块化, 耦合 , 内聚 2. 系统结构图: 1. 图形工具程序流程图,NS流程图,PAD 图 2. 表格工具 3. 语言工具 , 伪码(P D L) 3. 结构化编程(SP): 把这个划分为若干结构,进行编程开发,在组合成一个整体,降低出错 4. 数据库设计(ER图): 需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施和运行维护 结构化语言描述:需要有输入和输出 用户登录处理 ``` 输入:消息内容、接收方ID、发送方ID 输出:消息投递结果(成功/失败) IF 发送方状态 = “在线” THEN 构造消息包(含时间戳、签名、消息体) IF 接收方在线 THEN 将消息直接发送至接收方会话进程 回执“消息已送达” ELSE 将消息存入离线消息表 回执“接收方离线,消息已存储” ENDIF ELSE 回执“发送失败:用户离线” ENDIF ``` 各个工具的使用阶段 | 阶段 | 任务 | 使用工具 | 举例 | | ------ | --------------------------------------- | ------------- | ----------------------------------- | | 系统功能分析 | 描述“用户登录”、“消息发送”、“好友管理”等功能之间的关系 | **数据流图(DFD)** | 画出外部实体(用户、服务器)与内部过程(验证、消息存储)之间的箭头关系 | | 模块划分 | 将“消息发送”进一步拆分为“格式化消息”、“验证接收方”、“发送消息”等子过程 | **层次化DFD** | 每个子过程再画出数据输入输出 | | 过程逻辑说明 | 详细描述“验证接收方”内部怎么判断、怎么处理错误 | **结构化语言** | 用 IF / THEN / ELSE / WHILE 表示逻辑 | | 复杂判断 | 若“消息优先级、用户状态、网络状态”等多条件交叉 | **判定表/判定树** | 清晰表示多条件决策 | **考点** 1. 分析顶层数据流图 | 外部实体 | 数据流 | 加工(主过程) | 数据存储 | | --- | --- | --- | --- | | 用户(Qt客户端),移动端, | 发送消息、上传文件 | **即时通讯核心处理** | 消息库、文件库、用户库 | | 管理员(PHP后台) | 配置规则、导入组织架构 | | 规则库、日志库 | | 服务器 | 处理消息和文件,| | 处理逻辑,存储数据 | | 第三方系统 | 接口导入用户 | | | 2. 分析第一层数据流图 | 子过程 | 输入 | 输出 | 对应C++服务 | | --- | --- | --- | --- | | 1\. 登录认证 | 用户凭据 | 会话Token | 登录服务 | | 2\. 消息路由 | 消息+目标ID | 路由指令 | 单聊/群组服务 | | 3\. 内容检测 | 原始消息/文件 | 检测结果+过滤后内容 | 状态服务器(敏感词) | | 4\. 持久化存储 | 消息/文件 | 存储确认 | 数据库模块(MySQL/金仓/达梦) | | 5\. 状态同步 | 在线状态 | 推送通知 | 状态服务器 | | 6\. 文件传输 | 文件块 | 传输进度+存储路径 | 文件服务 | 3. 模块结构图 ``` 即时通讯系统 ├── 客户端层(Qt) ├── 接入层 │ ├── 登录服务 │ └── API服务(与PHP通信) ├── 业务层 │ ├── 单聊服务 │ ├── 群组服务 │ ├── 文件服务 │ └── 状态服务器 ├── 数据层 │ ├── MySQL/Oracle/金仓/达梦 │ └── 文件存储(本地/NAS) └── 支撑层 ├── 消息队列(进程通信) └── 看门狗服务(监控重启) ``` 4. 编程 5. E-R图数据库设计 1. 确定所有的实体集合。 1. 选择每个实体集应该包含的属性。 1. 确定实体集之间的联系。 1. 确定实体集的关键字,用下画线在属性上表明关键字的属性组合。 1. 确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n 来表示联系的类型。 ## 论结构化分析方法在即时通讯系统中的应用 ## 摘要 随着企业内部沟通协作需求的不断增加,即时通讯系统已成为信息化办公的核心支撑平台。本文以我公司开发的内网即时通讯系统为例,论述了在系统开发中采用\*\*结构化分析方法(Structured Analysis,SA)\*\*的设计思想与实践。该系统主要用于实现文字消息、文件传输、权限控制、单点登录及组织架构管理等功能,支持国产数据库(如金仓、达梦)及国产操作系统(如UOS、银河麒麟),具备较强的可移植性与安全性。 在项目中,我作为系统架构设计师,负责总体结构设计、模块划分及数据流分析。通过使用结构化分析方法,对系统进行了清晰的功能分解与数据建模,采用自顶向下的分析思路设计了登录、群组、文件、状态、组织架构等核心模块。实践表明,该方法有效提升了系统的可理解性与可维护性,为后续模块化开发与性能优化提供了坚实基础。 * * * ## 正文 ### 一、项目概述 本项目是一套可在内网部署的即时通讯系统,旨在为企业提供安全、稳定、高效的内部沟通平台。系统包括服务端、桌面端、移动端及管理后台。服务端采用 C++ 实现,后台管理采用 PHP 技术,桌面端使用 Qt 框架开发。系统支持多种数据库(MySQL、Oracle、金仓、达梦),同时兼容国产化 CPU 与操作系统。 我在该项目中担任系统架构设计师,主要负责系统的**需求分析、模块划分、数据流建模与接口设计**。项目开发团队采用典型的**结构化分析与设计方法(SADT)**,通过功能分解、数据流图(DFD)及数据字典等手段,使系统功能与数据关系更加清晰,降低了复杂性。 * * * ### 二、结构化分析方法的应用过程 #### (一)需求分析阶段 在项目初期,我们通过用户访谈和文档分析明确了系统的主要需求: 1. 支持用户间即时消息与文件传输; 2. 支持单点登录与组织架构同步; 3. 具备消息敏感词检测与日志审计功能; 4. 具备横向扩展能力与国产化适配要求。 针对这些需求,我组织团队绘制了**顶层数据流图(Level 0 DFD)**,将系统功能划分为五个主要子系统: * 用户登录认证子系统 * 会话与消息管理子系统 * 文件传输子系统 * 组织架构管理子系统 * 审计与安全控制子系统 通过自顶向下的分解,使每个子系统的输入、处理、输出均有明确定义,为后续的功能设计奠定基础。 #### (二)逻辑结构设计阶段 在逻辑设计中,我们以数据流为中心,分析了系统内主要的数据项及其流转路径。例如,消息发送的数据流从客户端输入,经由消息服务模块进行内容检查与路由转发,最终到达目标用户的在线会话。 我编制了**数据字典(Data Dictionary)**,定义了包括用户信息、消息包、群组结构、文件元数据等 40 余项关键数据。通过这一方法,系统开发人员能够在统一的语义下进行编码,避免了接口理解偏差。 此外,在模块划分方面,我依据结构化方法的“高内聚、低耦合”原则,将系统分解为以下核心功能块: * **登录服务**:负责身份验证、令牌签发与状态维护。 * **群组服务**:负责群组的创建、成员管理与消息分发。 * **文件服务**:实现大文件分块传输与断点续传机制。 * **状态服务器**:维护用户在线状态,支撑“消息已读/未读”功能。 * **API 网关服务**:为 Web 管理端提供统一访问接口。 #### (三)物理结构设计与实现 在物理设计阶段,我将逻辑模型映射为可部署架构。系统采用**分层结构设计**: * 表示层:Qt 客户端与 Web 管理界面; * 业务逻辑层:C++ 实现的服务进程; * 数据层:MySQL/达梦数据库及 Redis 缓存; * 通信层:基于 TCP 长连接与消息队列(MQ)的异步通信机制。 系统通过消息队列解耦模块之间的依赖关系,提高并发处理能力。同时,通过结构化分析明确的模块边界,使得系统在国产化适配与安全审计扩展时,无需大幅修改核心代码。 * * * ### 三、结构化分析方法带来的收益 通过在即时通讯系统开发中应用结构化分析方法,项目取得了以下成果: 1. **需求清晰可追踪**:从顶层 DFD 到详细模块设计,层层对应,使系统的需求与实现保持一致。 2. **架构可扩展性强**:模块接口独立,支持不同数据库、不同平台间的移植与扩展。 3. **开发协同效率提升**:数据字典与接口定义减少了沟通成本,团队间接口一致性显著提高。 4. **维护与升级便利**:后续在引入消息审计、智能客服等功能时,只需增加对应模块,无需重构核心框架。 * * * ### 四、结论 结构化分析方法强调系统的整体性、逻辑性和层次性,对于大型企业级即时通讯系统的开发具有重要指导意义。通过自顶向下的功能分解和数据建模,可以在需求复杂、模块众多的情况下保持系统结构清晰、接口明确。 在本项目的实践中,该方法帮助我们实现了高内聚、低耦合的模块化设计,提高了系统的可靠性与可维护性。未来,结合面向对象的分析与建模方法,可进一步提升即时通讯系统的灵活性与可重用性,使其更好地服务于企业数字化转型需求。