一、总体设计概述
总体设计又称概要设计,是软件工程设计阶段的第一步,其核心任务是回答"系统怎么做"的问题——即确定系统的总体结构、模块划分、接口关系和数据结构,而不涉及每个模块内部的详细算法。
总体设计的基本流程可以概括为:
需求分析文档 → 系统方案设计 → 软件结构设计 → 数据库设计 → 接口设计 → 编写总体设计说明书 → 评审
下面结合新闻管理系统(一个典型的Web应用,支持新闻发布、审核、浏览、评论、分类管理等功能)逐一说明每个步骤。
二、步骤1:系统方案设计(确定总体方案)
具体做法
确定系统边界:明确哪些功能由本系统完成,哪些由外部系统承担。
选择系统架构风格:如B/S架构、C/S架构、微服务、分层架构等。
确定技术路线:开发语言、框架、数据库、中间件、部署方式。
确定系统运行环境:服务器、客户端、网络要求。
权衡候选方案:从成本、性能、可维护性、可扩展性等维度比较,选出最优方案。
新闻管理系统举例
系统边界:本系统负责新闻的采编、审核、发布、浏览、评论;用户认证可对接统一身份认证平台;图片存储可对接对象存储服务。
架构风格:采用 B/S 架构 + 分层架构(表现层、业务逻辑层、数据访问层)。
技术路线:前端 Vue.js,后端 Spring Boot,数据库 MySQL,缓存 Redis,部署于 Tomcat + Nginx。
运行环境:服务器 Linux CentOS,客户端支持主流浏览器。
方案权衡:单体分层架构开发快、成本低,适合中小规模新闻系统;若未来需要高并发,可演进为微服务。
输出:系统方案说明书(含架构图、技术选型表)。
三、步骤2:软件结构设计(模块划分)
具体做法
功能分解:将系统总功能自顶向下逐层分解为若干子功能。
模块化:每个子功能对应一个模块,遵循高内聚、低耦合原则。
确定模块层次:用结构图(SC图)或层次图(H图)表示模块调用关系。
优化模块结构:检查扇入扇出、深度宽度是否合理,消除重复功能。
模块命名与编号:为每个模块分配唯一标识,便于后续追踪。
新闻管理系统举例
顶层分解(第一层):
新闻管理系统
├── 用户管理子系统
├── 新闻采编子系统
├── 新闻发布子系统
├── 新闻浏览子系统
├── 评论管理子系统
└── 系统管理子系统
第二层分解(以新闻采编子系统为例):
新闻采编子系统
├── 新闻录入模块
├── 新闻编辑模块
├── 新闻删除模块
├── 新闻查询模块
└── 新闻审核提交模块
第三层分解(以新闻录入模块为例):
新闻录入模块
├── 标题录入
├── 正文编辑
├── 图片上传
├── 分类选择
└── 保存草稿
结构图示例(文字描述):
新闻管理系统
/ | | \
用户管理 采编 发布 浏览
|
┌─────┼─────┐
录入 编辑 查询
|
┌───┼───┬───┐
标题 正文 图片 分类
模块说明表(部分):
| 模块编号 | 模块名称 | 功能 | 输入 | 输出 | 调用模块 |
|---|---|---|---|---|---|
| M1 | 用户管理 | 用户注册/登录/权限 | 用户信息 | 登录状态 | M1.1, M1.2 |
| M2 | 新闻采编 | 新闻录入编辑 | 新闻内容 | 新闻记录 | M2.1~M2.5 |
| M3 | 新闻发布 | 审核后发布 | 新闻ID | 发布状态 | M3.1, M3.2 |
输出:软件结构图 + 模块说明书。
四、步骤3:数据库设计(数据结构设计)
具体做法
概念设计:用E-R图描述实体、属性、联系。
逻辑设计:将E-R图转换为关系模式(表结构),确定主键、外键。
规范化:至少达到3NF,消除冗余和异常。
物理设计:确定索引、存储引擎、分区策略。
编写数据字典:字段名、类型、长度、约束、说明。
新闻管理系统举例
E-R图核心实体:
用户(用户ID、用户名、密码、角色)
新闻(新闻ID、标题、正文、分类ID、作者ID、状态、发布时间)
分类(分类ID、分类名)
评论(评论ID、新闻ID、用户ID、内容、时间)
关系模式:
用户(UserID, UserName, Password, Role)
分类(CategoryID, CategoryName)
新闻(NewsID, Title, Content, CategoryID, AuthorID, Status, PublishTime)
评论(CommentID, NewsID, UserID, Content, CommentTime)
数据字典(新闻表部分):
| 字段名 | 类型 | 长度 | 约束 | 说明 |
|---|---|---|---|---|
| NewsID | INT | 11 | 主键 | 新闻编号 |
| Title | VARCHAR | 200 | 非空 | 标题 |
| Content | TEXT | — | 非空 | 正文 |
| CategoryID | INT | 11 | 外键 | 分类 |
| AuthorID | INT | 11 | 外键 | 作者 |
| Status | TINYINT | 1 | 默认0 | 0草稿/1待审/2已发布 |
| PublishTime | DATETIME | — | — | 发布时间 |
输出:E-R图 + 关系模式 + 数据字典。
五、步骤4:接口设计
具体做法
外部接口:系统与用户、外部系统的交互方式(UI、API、文件格式)。
内部接口:模块之间的调用约定(函数签名、参数、返回值)。
用户界面设计:页面布局、导航结构、交互流程。
通信协议:HTTP/REST、消息队列、RPC等。
新闻管理系统举例
外部接口:
用户界面:Web页面(首页、新闻详情页、后台管理页)。
对外API:
GET /api/news?category=1返回JSON新闻列表。第三方:调用对象存储API上传图片。
内部接口(模块调用约定):
// 新闻录入模块调用数据访问模块
int insertNews(News news); // 返回新新闻ID,失败返回-1
// 新闻发布模块调用审核模块
boolean approveNews(int newsID, int auditorID);
UI设计:首页 → 分类导航 → 新闻列表 → 新闻详情 → 评论框;后台:登录 → 新闻管理 → 录入/编辑 → 提交审核。
输出:接口规格说明书 + 界面原型。
六、步骤5:编写总体设计说明书
具体做法
将上述所有内容整理成规范文档,通常包括:
引言(目的、范围、术语)
系统总体方案(架构图、技术选型)
软件结构设计(结构图、模块说明)
数据库设计(E-R图、表结构、数据字典)
接口设计(外部/内部接口、UI)
运行设计(部署图、运行流程)
出错处理与安全设计
评审与附录
新闻管理系统举例
说明书目录示例:
1. 引言
2. 总体方案(B/S分层架构图、技术栈)
3. 软件结构(6大子系统结构图 + 模块表)
4. 数据库设计(E-R图 + 4张表 + 数据字典)
5. 接口设计(REST API列表 + 页面流程图)
6. 运行设计(Nginx+Tomcat+MySQL部署图)
7. 安全设计(SQL注入防护、XSS过滤、权限控制)
输出:总体设计说明书(评审通过后作为详细设计依据)。
七、步骤6:设计评审
具体做法
组织评审会(开发、测试、需求方参加)。
检查:需求覆盖性、模块合理性、接口一致性、数据库规范性。
记录问题并整改。
评审通过后基线化,进入详细设计阶段。
新闻管理系统举例
评审要点:
是否覆盖了"新闻发布、审核、评论"全部需求?
模块划分是否高内聚低耦合?(如"审核"独立成模块)
新闻表与评论表的外键关系是否正确?
API接口是否满足前端调用需求?
八、总结
| 步骤 | 核心任务 | 新闻管理系统产出 |
|---|---|---|
| 1. 方案设计 | 定架构、技术路线 | B/S分层架构、Spring Boot+Vue |
| 2. 结构设计 | 模块划分 | 6大子系统 + 结构图 + 模块表 |
| 3. 数据库设计 | 数据结构 | E-R图 + 4张表 + 数据字典 |
| 4. 接口设计 | 内外接口 | REST API + 页面流程 |
| 5. 编写说明书 | 文档化 | 总体设计说明书 |
| 6. 评审 | 质量把关 | 评审记录 + 基线 |
总体设计的本质是"自顶向下、逐步细化、模块化、抽象化"
