遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。
教材参考《软件工程导论(第六版)》
一、系统流程图
1.初识系统流程图
- 系统流程图是概括地描绘物理系统的传统工具。
- 它用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。
- 它表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。
- 可视化系统架构:展示系统的输入、处理、存储和输出(IPOS模型)。
- 明确数据流向:标注数据在组件间的传递路径和方向。
- 识别关键节点:如用户交互、决策点、外部系统接口等。
- 辅助沟通与设计:促进团队协作,发现潜在设计缺陷。
2.符号
3.画法
3.1. 明确系统边界与目标
定义部件:确定系统包含哪些模块(如前端、后端、数据库)和排除哪些外部系统。部件:包括程序、文档、数据库、人工过程等
明确目标:是描述用户登录流程,还是订单处理逻辑?需聚焦核心功能。
示例:电商系统中,系统边界可能包括用户界面、支付网关、库存数据库,而物流跟踪可能作为外部系统。
3.2. 识别关键组件与参与者
输入源:用户、传感器、外部API等。
处理单元:业务逻辑层、算法模块、微服务。
数据存储:数据库(MySQL)、缓存(Redis)、文件系统。
输出目标:用户界面、报表生成、第三方系统。
参与者:用户角色(普通用户、管理员)、外部服务(短信网关)。
3.3. 绘制数据流动路径
箭头表示流向:使用单向/双向箭头,标注数据内容(如“订单请求”)。
处理步骤:用矩形框表示操作(如“验证用户信息”)。
决策点:菱形符号表示条件分支(如“密码正确?→是/否”)。
并行处理:分叉箭头表示多线程或异步任务。
3.4. 标注关键细节
数据格式:如JSON请求、SQL查询结果。
协议与接口:REST API、WebSocket、gRPC。
异常处理:用红色箭头标注错误流向(如“支付失败→重试机制”)。
3.5. 使用标准化符号
常用符号:
矩形:处理步骤(Process)
菱形:判断(Decision)
平行四边形:输入/输出(I/O)
圆柱形:数据库(Database)
圆形:连接符(跨页流程跳转)
3.6. 分层细化与抽象
首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能;然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。
顶层流程图:展示系统级交互(如用户→服务器→数据库)。
子流程图:对复杂模块展开(如“支付流程”细分为风控检查、扣款、通知)。
避免过度复杂:单页流程图建议不超过15个节点。
4.实例
4.1初步分析
程序输入,程序内部操作,外部对象,程序输出
题目一:机票预订系统
1、系统简介:
航空公司为给旅客乘机提供方便,需开发一个机票预定系统。各旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入到该系统,系统为旅客安排航班。当旅客交付了预定金后,系统印出取票通知和帐单给旅客,旅客在飞机起飞的前一天凭取票通知和帐单交款取票,系统核对无误即印出机票给旅客。此外航空公司为随时掌握各航向飞机的乘载情况,需定期进行查询统计,以便适当调整。
2、技术要求及限定条件
(1)在分析系统功能时要考虑有关证件的合法性验证(如身份证、取票通知、交款发票等)。
(2)对于本系统还应补充以下功能:
1)旅客延误了取票时间的处理
2)班机取消后的处理
3)旅客临时更改机票班次的处理
第一层:核心功能
第二层:核心功能扩展后
二、数据流图(Data Flow Diagram, DFD)
1.初识数据流程图
数据流图(DFD)是一种可视化工具,用于描述系统中数据的流动、处理、存储和外部实体之间的交互。它强调数据如何被处理,而非控制逻辑。
2.符号
- 外部实体(External Entity):矩形或正方体,表示与系统交互的人或外部系统(如用户、银行)。
- 处理过程(Process):圆角矩形或圆形,表示对数据的操作(如“验证订单”“生成报告”)。
- 数据流(Data Flow):箭头,表示数据的方向(如“订单信息”)。
- 数据存储(Data Store):平行线,表示存储介质(如数据库、文件)。
3.数据流图画法
3.1、从问题描述中提取数据流图的 4 种成分
(1)数据的源点 / 终点
(2)处理
(3)数据流
(4)数据存储
数据的源点 / 终点 处理 数据流 数据存储
题目一:机票预订系统
1、系统简介:
航空公司为给旅客乘机提供方便,需开发一个机票预定系统。各旅行社把预定机票的旅客信息(旅客信息数据库)(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入到该系统,系统为旅客安排航班(航班信息)(航班信息数据库)。当旅客交付了预定金后,系统印出取票通知和帐单(取票通知和账单)给旅客,旅客在飞机起飞的前一天凭取票通知和帐单交款取票,系统核对(异常信息)无误即印出机票(机票)给旅客。此外航空公司为随时掌握各航向飞机的乘载情况,需定期进行查询统计(查询统计报表),以便适当调整。
2、技术要求及限定条件
(1)在分析系统功能时要考虑有关证件的合法性验证(如身份证、取票通知、交款发票等)。
(2)对于本系统还应补充以下功能:(异常报告)
1)旅客延误了取票时间的处理
2)班机取消后的处理
3)旅客临时更改机票班次的处理
(3)系统的外部项,至少包含三个:旅客、旅行社和航空公司。
3.2画出基本数据流图
由若干个数据源点/终点和一个处理组成
3.3 细化核心功能
识别核心处理过程:将系统拆分为3~6个主要处理过程。
连接数据流与存储:标注处理过程之间的数据流,并关联数据存储。
细化时注意:
(1)当进一步分解涉及如何具体的实现一个功能时就不应该再分解了。
(2)当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入输出数据流必须相同。
(3)注意对处理进行编号的方法。
三、数据字典
1、数据字典的基本概念
定义:数据字典是一个集中存储系统数据定义的仓库,详细记录每个数据项的名称、含义、来源、格式、关联关系等元数据。
目的:
消除数据定义的歧义。
统一团队对数据的理解。
为系统设计(如数据库设计、接口设计)提供基础。
数据字典内容
组成部分 | 描述 |
---|---|
数据流 | 描述数据在系统中的流动路径。 |
数据项 | 数据的最小单位。 |
数据存储 | 系统中数据的存储位置。 |
处理逻辑 | 通过其他工具(如IPO图)描述,记录数据处理的输入、过程和输出。 |
2、如何去定义数据(自顶向下)
数据组成方式(三种基本类型):
1、顺序 以确定次序连接两个或多个分量;
2、选择 从两个或多个可能的元素中选取一个;
3、重复 即把指定的分量重复零次或多次。
符号 | 名称 | 含义 | 示例 |
---|---|---|---|
= |
等价于(定义为) | 表示左侧与右侧等价,或左侧被定义为右侧内容。 | 姓名 = 字符串 → 姓名字段定义为字符串类型。 |
+ |
和(连接) | 连接两个分量,表示二者共同组成一个整体。 | 姓名 + 地址 → 姓名和地址组合成一个结构。 |
[ ] |
或(选择) | 从方括号内的多个分量中选择一个,通常用 ` | ` 分隔选项。 |
{ } |
重复 | 重复花括号内的分量,可用上下限标注重复次数(如 {数据}₁…₅ 表示重复1~5次)。 |
{订单项}₁…ₙ → 订单项可重复1到多次。 |
( ) |
可选 | 圆括号内的分量是可选内容,可有可无。 | (备注) → 备注信息可选填写。 |
3、数据字典的实现步骤
3.1、识别数据元素:
从数据流图(DFD)中提取数据流、存储和外部实体。
3.2、定义数据结构:
使用顺序、选择、重复、可选组合元素。
订单 = 订单ID + 旅客身份证号 + {机票ID + 数量} + 预定金+总价
旅客信息 = 姓名+性别+工作单位+身份证号码+旅行时间+旅行目的地
3.3、标注符号与规则:
明确数据类型、长度、取值范围及业务规则。
订单ID:CHAR(12),规则为“日期+4位随机码”。
性别:ENUM('男', '女'),默认值'男'。
3.4、验证完整性:
检查所有数据流是否被定义,避免孤立元素。
确保数据字典与DFD逻辑一致。
4、例子
四、 成本效益分析方法
1、贴现未来现金流
原因:货币时间价值(今天的1元比未来的1元更值钱)。
贴现公式:
PV:现值(Present Value)
FV:未来值(Future Value)
r:贴现率、利率(如5%)
t:时间(年)
2、投资回收期
定义
投资回收期是指从项目开始投资到累计经济效益等于初始投资成本所需的时间。时间越短,项目回本越快,风险越低。
计算方法
- 步骤1:列出每年的累计经济效益(现金流入)。
- 步骤2:找到累计经济效益首次超过初始投资的年份。
- 步骤3:用以下公式计算精确回收期:回收期=完全覆盖前一年份+下一年的经济效益剩余未收回金额
示例(修改库存清单系统)
初始投资:5000元
各年累计经济效益:
年份 年经济效益(元) 累计经济效益(元) 1 - -5000(初始投资) 2 4225.12 -774.88(5000 - 4225.12) 3 1779.45 1004.57(-774.88 + 1779.45) 计算:
回收期=2+774.88/1779.45≈2.44年
到第2年末,仍有 774.88元未收回;第3年可收回1779.45元。
特点
- 优点:简单直观,关注资金流动性。
- 缺点:忽略时间价值和回收期后的收益。
3、纯收入(Net Income)
定义
纯收入是项目整个生命周期内累计经济效益的现值减去初始投资。若纯收入≤0,项目不值得投资。
计算方法
示例(修改库存清单系统)
- 累计经济效益现值:9011.94元
- 初始投资:5000元
- 纯收入:9011.94−5000=4011.94元
- 结论:纯收入为正,项目值得投资。
特点
- 优点:考虑资金时间价值和总利润。
- 缺点:依赖折现率准确性,需预测长期现金流。
4、投资回收率(Return on Investment, ROI)
定义
投资回收率是使项目累计经济效益现值等于初始投资的折现率。类似于“内部收益率(IRR)”,用于比较不同投资机会。
计算方法
建立方程:
解方程:通过试算法或财务工具求解 j。
示例(修改库存清单系统)
- 初始投资:5000元
- 系统寿命:5年
- 各年经济效益(假设已给出折现数据):
通过方程求解,得出投资回收率 j≈41%∼42%。
五、ER图
1、ER图的基本概念
ER图(Entity-Relationship Diagram) 是用于描述现实世界中数据及其关系的可视化工具,核心元素包括:
实体(Entity):现实中的独立对象(如旅客)。
属性(Attribute):实体的特征(如旅客姓名)。
关系(Relationship):实体之间的关联(如旅客“预定”机票)。
2、符号
3、绘制ER图的步骤
分析
实体、属性、关系
题目一:机票预订系统
1、系统简介:
航空公司(名称,公司代号)为给旅客乘机提供方便,需开发一个机票预定系统。各旅行社(名称,旅行社代号)把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入到该系统,系统为旅客安排航班(航班号)。当旅客交付了预定金后,系统印出取票通知和帐单(总价,旅客身份证号,订单号,航班号)给旅客,旅客在飞机起飞的前一天凭取票通知和帐单交款取票,系统核对无误即印出机票(航班号,旅客身份证号)给旅客。此外航空公司为随时掌握各航向飞机的乘载情况,需定期进行查询统计(查询统计表(日期,编号)),以便适当调整。
2、技术要求及限定条件
(1)在分析系统功能时要考虑有关证件的合法性验证(如身份证、取票通知、交款发票等)。
(2)对于本系统还应补充以下功能:
1)旅客延误了取票时间的处理
2)班机取消后的处理
3)旅客临时更改机票班次的处理
(3)系统的外部项,至少包含三个:旅客、旅行社和航空公司。
步骤1:确定实体(Entities)
方法:从需求中识别系统中的核心对象。
步骤2:定义实体属性(Attributes)
方法:为每个实体分配描述其特征的属性,并标注主键(唯一标识符)。
步骤3:识别实体间的关系(Relationships)
方法:分析实体之间的交互行为。
步骤4:确定关系的基数(Cardinality)
基数类型:
1:1(一对一):如一个学生对应一个学籍档案。
1:N(一对多):如一个教师教授多门课程。
M:N(多对多):如多个学生选修多门课程。
步骤5:绘制ER图
图形符号:
实体:矩形框
属性:椭圆(主键用下划线标记)
关系:菱形
基数:连线上的数字或符号(如“1”、“N”)
4、例子
六、状态转换图
1. 基本概念
- 状态(State):系统在某一时刻的条件或状况,用圆角矩形表示。
- 初始状态:实心圆点(●),表示系统起点。
- 终止状态:圆圈套实心点(Ⓞ),表示系统终点。
- 转换(Transition):状态间的变化,用带箭头直线表示。
- 事件(Event):触发转换的条件,如用户操作、时间到等。
- 动作(Action):转换发生时执行的操作,如发送通知。
- 监护条件(Guard Condition):决定是否允许转换的布尔条件,用
[条件]
表示。
2.符号
活动表语法与事件表达式总结表
类别 | 要素 | 语法格式 | 说明 | 示例 |
---|---|---|---|---|
活动表 | 状态内部动作 | 描述状态内部的行为(进入、退出、持续动作)。 | ||
- entry |
entry/动作表达式 |
进入状态时自动执行的动作。 | entry/启动传感器 |
|
- exit |
exit/动作表达式 |
退出状态时自动执行的动作。 | exit/保存数据 |
|
- do |
do/动作表达式 |
处于该状态时持续执行的动作(直到状态退出)。 | do/监控温度 |
|
事件表达式 | 状态转换逻辑 | 描述触发状态转换的条件、事件及动作。 | ||
- 触发事件 | 事件名(参数) |
触发状态转换的事件名称,参数可选。 | 点击按钮(x,y) |
|
- 守卫条件 | [布尔表达式] |
仅当条件为真时允许转换。 | [余额≥订单总额] |
|
- 动作表达式 | /动作表达式 |
转换发生时执行的具体操作。 | /发送通知 |
|
完整格式 | 事件名(参数)[守卫条件]/动作表达式 |
当事件发生且守卫条件满足时,执行动作并转换状态。 | 支付(金额)[余额≥0]/更新库存 |
核心规则与说明
活动表(状态内部动作)
- 仅与状态本身相关,不涉及状态转换。
- 执行顺序:
exit
(旧状态退出)→ 动作表达式(转换中) →entry
(新状态进入)。 - 标准事件优先级:
entry
和exit
无条件自动触发,无需外部事件或守卫条件。
事件表达式(状态转换逻辑)
- 驱动状态之间的跳转,需明确触发条件。
- 守卫条件:
- 若与事件同时存在(如
事件[条件]/动作
),需两者均满足才触发。 - 若省略事件(如
[条件]/动作
),则条件为真时自动触发。
- 若与事件同时存在(如
- 参数传递:事件可携带参数供动作表达式使用(如
支付(100)
)。
3.绘制步骤
步骤1:确定所有可能的状态
- 列出系统生命周期中的关键状态。
步骤2:定义初始和终止状态
- 初始状态:系统启动时的默认状态。
- 终止状态(可选):系统结束时的状态。
步骤3:识别状态间的转换
- 每个转换需明确:
- 触发事件(如“支付成功”)。
- 监护条件(如
[余额充足]
)。 - 执行动作(如“发送确认邮件”)。
步骤4:绘制图形化表示
- 使用标准符号连接状态和转换。
- 转换标注格式:
事件[条件]/动作
。 - 示例:
支付成功[金额≥0]/发送发票
- 转换标注格式:
4.例子
题目:电话系统状态转换流程
1. 初始状态:闲置(Idle)
触发条件:无操作时,系统保持闲置状态。
转换事件:用户拿起听筒。
2. 拨号音状态(Dial Tone)
触发条件:用户拨号(输入数字)。
有效号码:系统验证号码有效后,进入拨通中状态,并尝试接通(
do/试接通
)。无效号码:系统进入断线状态,播放错误提示(
do/播放信息
)。
超时处理:若用户未拨号且计时器超时(
timer=0
),系统返回闲置状态。动作:系统进入拨号音状态,并开始播放拨号音(
do/响拨号音
)。
3. 拨通中状态(Trying)
触发条件:号码有效且未被占用。
接通成功:系统进入振铃状态,并触发对方振铃(
do/振铃
)。占线:若对方线路忙,系统进入断线状态,播放忙音(
do/响忙音
)。
4. 振铃状态(Ringing)
触发条件:对方电话开始振铃。
对方接听:当受话人回话,系统进入通话状态。
对方未接听:若振铃超时,系统返回断线状态。
5. 通话状态(Connected)
触发条件:双方接通。
操作:双方正常通话。
结束条件:
用户挂断:任意一方挂断电话,系统进入断线状态。
对方挂断:若受话人挂断,系统同样进入断线状态。
6. 断线状态(Disconnected)
动作:系统终止通话,清理资源(如释放线路)。
返回闲置:自动或手动(用户挂机)后,系统回到闲置状态。
异常与特殊处理
超时机制:
拨号音状态下用户无操作超时,或振铃未接听超时,均触发断线。
占线与忙音:
对方线路占用时直接播放忙音,强制结束流程。
无效号码处理:
输入错误号码时,系统主动断线并提示用户。
七、