软考高级-系统架构设计师案例专题三:系统开发基础

设计模式

  • 创建型模式:负责对象创建,封装创建逻辑,控制对象生成过程。

  • 结构型模式:处理类或对象的组合,通过优化结构 提升系统扩展性。

  • 行为型模式:协调对象间 ++交互与职责分配++ ,规范对象++行为逻辑++。

  1. 抽象工厂模式:**一个工厂负责造同一品牌/系列的配套产品(**比如海尔工厂造海尔电视+冰箱),不用分开找多个"厂"。

  2. 构建器模式:按固定步骤(比如做奶茶先选茶底再调糖),一步步拼出你要的定制化复杂东西,细节随便改。 构建与表示分离

  3. 原型模式:拿已有的东西当模板(比如填好的入职表),直接复制出新的,不用从零开始造,省时间。在不了解 要创建对象的具体类和细节的时候

  4. 单例模式:全系统只准有一个(比如公司公章、家里总电表),大家都用这一个,多了会乱套。


  1. 适配器模式:给不兼容的两个东西加个"转换头"(比如Type-C转3.5mm接头),让它们能一起用,不用换原东西。

  2. 桥接模式:把两个会独立变的部分(比如遥控器功能、电视品牌)拆开,用"桥"灵活组合,避免重复造很多同款。

  3. 组合模式**:把"整体"(比如文件夹)和"部分"(比如文件)当同一个东西,用同样方式操作**(比如都能删、都能看大小)。

  4. 装饰模式:给原东西"穿外套" (比如手机加防摔壳、咖啡加奶),动态加功能还不改变东西本身,还能叠着加。

  5. 外观模式:找个**"总管家"(比如装修公司、扫码付款按钮),帮你搞定一堆复杂步骤**,不用自己对接每一个环节。 (对外提供 "统一简单的接口",把内部复杂的子系统交互藏起来,降低用户使用难度。)

  6. 享元模式:重复的东西只造一个模板(比如共享单车、微信图标),大家共用,不重复创建,省资源。

  7. 代理模式:找个"代言人"(比如租房中介、代购)替你做事,还帮你加额外控制(比如筛选房子、清关),原对象不用改。代理对象替原对象处理交互,同时可添加 "权限控制、日志记录、额外验证" 等功能,保护原对象。


行为型模式共11种,核心是协调对象间交互、规范行为逻辑,用生活例子讲清楚每种核心作用:

  1. 观察者模式:像公众号和粉丝------公众号(被观察)发文章,所有关注的粉丝(观察者)自动收到通知,解耦"通知者"和"接收者"。

  2. 策略模式:出门选交通------公交、打车、骑车是不同"策略",想快就选打车,想省钱选公交,换策略不用改出门的核心逻辑。

  3. 模板方法模式:做奶茶------固定步骤(煮茶→加奶)是"模板",但加珍珠还是椰果(可变部分)可自定义,固定流程+灵活细节。

  4. 迭代器模式:翻书找内容------不管书是胶装还是线装(内部结构),用手指(迭代器)逐页翻,不用关心书的装订方式,统一遍历。

  5. 命令模式:遥控器控电视------按"开机键"(命令),电视(执行者)执行开机,把"请求"封装成命令,遥控器和电视不用直接绑定。

  6. 职责链模式:报销审批------员工→部门经理→财务,金额小经理批,大了传给财务,每个环节"能处理就处理,处理不了传下家"。

  7. 备忘录模式:游戏存档------打到BOSS前存档(备忘录),死了读档回到之前状态,保存对象状态方便恢复。

  8. 状态模式:电梯运行------开门时不能上行,运行时不能开门,电梯"状态"变了,能做的"行为"也变,状态决定行为。

  9. 访问者模式:游客逛博物馆------游客(访问者)看瓷器、书画(元素),展品"接受"游客参观,分离"访问者"和"被访问的事物"。

  10. 中介者模式:租房中介------租客和房东不用直接沟通,全靠中介传话,减少对象间的复杂依赖,中介当"中间协调人"。

  11. 解释器模式:翻译英文句子------按语法规则(解释器)把英文(表达式)翻译成中文,适合处理有固定语法的场景(如公式计算)。

09年

试题二

某公司拟开发一个商业情报处理系统,使公司能够及时针对市场环境的变化及时调整发展战略,以获取最大的商业利益。项目组经过讨论,决定采用结构化分析和设计方法。在系统分析阶段,为了更好地对情报数据处理流程及其与外部角色的关联进行建模,项目组成员分别给出了自己的设计思路:

(1) 小张提出先构建系统流程图(SystemFlowcharts),以便更精确地反映系统的业务处理过程及数据的输入和输出。

(2) 小李提出先构建系统数据流图(Data Flow Diagrams),来展现系统的处理过程和定义业务功能边界,并给出了情报分类子系统的0层和1层数据流图,后者如下图所示。

项目组经讨论确定以数据流图作为本阶段的建模手段。工程师老王详细说明了流程图和数据流图之间的区别与联系,并指出了上图所示数据流图中存在的错误。

【问题1】(11分)

流程图和数据流图是软件系统分析设计中常用的两种手段,请用300字以内文字简要说明流程图与数据流图的含义及其区别,并说明项目组为何确定采用数据流图作为建模手段。

好的,这是一道关于系统分析与设计的经典试题。我们来逐一解答。

【问题1】流程图与数据流图的含义、区别及选型原因

一、含义
  1. 流程图 (Flowchart)

    1. 含义 :流程图是一种用于描述系统内控制逻辑 和操作执行顺序 的图形化工具。它更关注的是++"如何做"和"何时做"++的问题。
  2. 数据流图 (Data Flow Diagram, DFD)

    1. 含义 :数据流图是一种从数据传递 和加工 的角度,它由外部实体、加工、数据流和数据存储四个部分组成,核心是++描述"数据在哪里产生、经历了什么变换、流向何处"++。它更关注的是"做什么"的问题.
二、主要区别

|-----------|--------------------------|---------------------------------|
| 对比维度 | ​​流程图 (Flowchart)​​ | ​​数据流图 (DFD)​​ |
| ​​核心关注点​​ | ​​控制流​​(操作的顺序、分支、循环) | ​​数据流​​(数据的流动、变换、存储) |
| ​​描述重点​​ | 详细描述​​具体的处理逻辑​​和​​执行过程​​ | 描绘系统的​​功能框架​​和​​数据加工过程​​ |
| ​​时序性​​ | ​​强时序性​​,步骤有严格的先后顺序 | ​​弱时序性​​,只关心数据的输入输出和加工,不强调加工的顺序 |
| ​​组成元素​​ | 起止框、处理框、判断框、流向线等 | ​​外部实体、过程、数据流、数据存储​​ |
| ​​应用层级​​ | 常用于详细设计阶段,描述模块或算法的内部逻辑 | 常用于需求分析阶段,描述系统整体功能边界和数据流程 |

项目组选择数据流图作为建模手段是合理且正确的,主要原因如下:

  1. 阶段目标契合:系统分析阶段的核心目标是定义"做什么",即明确系统的功能与数据需求,而非具体实现逻辑。数据流图能清晰描述系统功能、数据流动及存储,完美契合此目标。

  2. 结构化设计基础:数据流图采用自顶向下、逐层分解的方法,是结构化分析与设计的核心工具,能为后续的系统设计提供清晰依据。

综上所述,数据流图适用于分析阶段定义系统功能与数据流,而流程图更适用于后续详细设计阶段描述模块内部逻辑,因此项目组的决策是正确的。

两者的区别主要包括:

(1) 数据流图中的处理过程可并行;流程图在某个时间点只能处于一个处理过程。

(2) 数据流图展现系统的数据流;流程图展现系统的控制流。

(3) 数据流图适用于系统分析中的逻辑建模阶段;流程图适用于系统设计中的物理建模阶段。

【问题2】(6分)

请分析指出上图所示的数据流图中存在的错误及其原因,并针对1层数据流图绘制出情报分类子系统的0层数据流图。

错误1:分类训练加工只有输入没有输出。,是"黑洞"

错误2:分类处理加工只有输出没有输入。是"奇迹"

(3) "规则文件"数据流:外部实体没有经过加工处理,直接到数据存储;

(4) "配置信息"数据流:外部实体之间没有加工处理,存在直接数据流。

数据流图中常见的错误分为两种类型:一类是语法错误,包括外部实体之间、数据存储之间或外部实体与数据存储之间不经过加工而存在直接数据流;另一类是逻辑错误,包括数据黑洞(只有输入没有产生输出)、灰洞(输入不足以产生输出)和无输入。

· "分类训练"加工属于数据黑洞错误;

· "分类处理"加工属于无输入错误;

· "规则文件"和"配置信息"数据流属于语法错误。

【问题3】(8分)

高质量的数据流图是可读的、内部一致的并能够准确表示系统需求。请用300字以内文字说明在设计高质量的数据流图时应考虑的三个原则。

好的,在设计高质量的数据流图(DFD)时,应遵循以下三个核心原则:

  1. 父图与子图的平衡原则:在数据流图的层次结构中,子图必须严格地与其父图中的相应过程(加工)保持平衡。即父图中某个过程的输入流和输出流必须与子图中的所有输入流和输出流完全一致。

  2. 数据守恒原则(或称输入/输出匹配):每个过程(加工)必须有输入流,也必须产生输出流。同时,要避免出现"黑洞"(只有输入没有输出)、"奇迹"(只有输出没有输入)和"灰洞"(输入不足以产生输出)等逻辑错误。

  3. 命名与标注的精确性原则:所有组件(过程、数据流、数据存储、外部实体)的名称必须含义明确、无二义性,并能准确反映其功能或内容。


12年

试题四

【说明】

某软件企业为影音产品销售公司W开发一套在线销售系统,以提升服务的质量和效率。项目组经过讨论后决定釆用面向对象方法开发该系统。在设计建模阶段需要满足以下设计要求:

  1. W公司经常进行促销活动。根据不同的条件(如订单总额、商品数量、产品种类等),公司可以提供百分比折扣或现金减免等多种促销方式供提交订单的用户选择。实现每种促销活动的代码量很大,且会随促销策略不同经常修改。系统设计中需要考虑现有的促销和新的促销,而不用经常地重写控制器类代码。策略模式:定义一系列算法把它们一个个封装起来,并且使它们之间可以相互替换,从而让算法可以独立于使用它的用户而变化。将不同的促销方式封装起来,根据不同的条件而替换(选择不同的促销方式),同时修改促销方式无需修改控制器类代码,满足系统需求。

(2) 该在线销售系统需要计算每个订单的税率,不同商品的税率及计算方式会有所区别。所以W公司决定在系统中直接调用不同商品供应商提供的税率计算类,但每个供应商的类提供了不同的调用方法。系统设计中需要考虑如果公司更换了供应商,应该尽可能少地在系统中修改或创建新类。适配器模式:将一个类的接口转换为用户希望得到的另一种接口,它使原本不相容的接口可以协同工作。该模式可以将每个供应商的类提供的不同的调用方法接口转换为系统可以直接调用的接口,使得不同商品供应商提供的税率计算类可以相互之间协同工作,满足系统需求。

项目组架构师决定采用设计模式来满足上述设计要求,并确定从当前已经熟练掌握的设计模式中进行选择,这些设计模式包括:适配器模式(Adapter)、构造器模式(Builder)、命令模式(Command)、外观模式(Facade)、中介模式(Mediator)、原型模 式(Prototype)、代理模式(Proxy)、状态模式(State)和策略模式(Strategy)等。

【问题1】

设计模式按照其应用模式可以分为三类:创建型、结构型和行为型,请用200字以内文字说明三者的作用。

  • 创建型模式:负责对象创建,封装创建逻辑,控制对象生成过程。

  • 结构型模式:处理类或对象的组合,通过优化结构 提升系统扩展性。

  • 行为型模式:协调对象间++交互与职责分配++ ,规范对象++行为逻辑++。

。

【问题2】

请将项目组已经掌握的设计模式按照其作用分别归类到创建型、结构型和行为型模式中。

适配器模式(Adapter)2、

构造器模式(Builder)1、

命令模式(Command)、3

外观模式(Facade)、2

中介模式(Mediator)、3

原型模 式(Prototype)1、

代理模式(Proxy)、2

状态模式(State)3

策略模式(Strategy)3

【问题3】

针对题目中所提出的设计要求(1)和(2),项目组应该分别选择何种设计模式? 请分别用200字以内文字说明具体的解决方案。

考到了设计模式,只要会背即可。


13年

试题二(理解题意)

某软件公司拟开发一套电子商务系统,王工作为项目组负责人负责编制项目计划。由于该企业业务发展需要,CEO急于启动电子商务系统,要求王工尽快准备一份拟开发系统的时间和成本估算报告。

项目组经过讨论后,确定出与项目相关的任务如表2-1所示。其中,根据项目组开发经验,分别给出了正常工作及加班赶工两种情况下所需的时间和费用。

【问题1】

请用400字以内文字说明王工拟编制的项目计划中应包括哪些内容。(背诵)

王工在接到任务后开始项目计划的编制工作,编制的计划应包括:

(1) 项目总计划(包括范围计划、工作范围定义、活动定义、资源需求、资源计划、活动排序、费用估算、进度计划及费用计划)》

(2) 项目辅助计划(质量计划、沟通计划、人力资源计划、风险计划、采购计划)。

可以结合"公司官网改版项目"这个贴近日常的场景来记忆,把抽象的计划内容对应到具体工作中,更容易关联背诵:

  1. 项目总计划:得先明确"改什么"(范围计划:确定首页重构、新增用户留言模块、优化新闻列表)→ 拆成具体模块(工作范围定义:前端页面、后端接口、数据库适配3大模块)→ 再拆小任务(活动定义:设计首页原型、切图、写登录接口等)→ 想"需要啥"(资源需求:2名前端、1名后端、Figma设计工具、云服务器)→ 安排"谁用啥、啥时候用"(资源计划:设计师第1-2周用Figma,开发第3-6周用服务器)→ 排顺序(活动排序:先设计→再开发→最后测试)→ 算钱(费用估算:人力费5万、工具费5千)→ 定时间(进度计划:总工期8周,设计2周、开发3周、测试2周、上线1周)→ 分预算(费用计划:设计阶段1.5万、开发阶段3万)。

  2. 项目辅助计划:保证质量(质量计划:官网兼容主流浏览器、加载速度≤3秒)→ 怎么沟通(沟通计划:每周1次例会,用企业微信同步进度)→ 明确分工(人力资源计划:张工做前端、李工做后端、赵工管测试)→ 防风险(风险计划:预判"需求变更",提前留1周缓冲期)→ 买东西(采购计划:采购第三方短信服务用于用户留言通知)。

通过这个具体项目,能快速对应到每个计划模块,避免死记硬背。

【问题2】

请根据表2-1,分别给出正常工作和最短工期两种情况下完成此项目所需的时间和费用。

正常 41天 74200

最短 27天 91600

【问题3】(理解了这种说法和做法,还是很简单的)

如果项目在系统调研阶段用了7天时间才完成,公司要求尽量控制成本,王工可在后续任务中采取什么措施来保证项目能按照正常工作进度完成?

系统调研原计划4天现在7天,多花了3天,那么其他地方就得少3天,以确保正常工作进度。

但是又要控制成本,所以看如何少三天最便宜:所有B和I赶工:多花1300元即可

【问题4】

如果企业CEO想在34天后系统上线,王工应该采取什么措施来满足这一要求?这种情况下完成项目所需的费用是多少?

在A B,I,H 赶工.79700元


14年:

试题二

【说明】

某公司正在研发一套新的库存管理系统。系统中一个关键事件是接收供应商供货。项目组系统分析员小王花了大量时间在仓库观察了整个事件的处理过程,并开发出该过程所执行活动的列表:供应商发送货物和商品清单,公司收到商品后执行收货处理,包括卸载商品、确定收到了订单上的商品、处理与供应商的分歧等。对于已有商品,调整其库存信息,对于新采购的商品,在库存中添加新的商品记录。收货完成后,系统执行入库处理,将商品放到仓库对应的货架上。在付款处理活动中,自动生成应付账款信息,如果查询到该供应商有待付款记录,则进行合并付款,付款完成后消除应付账款记录。最后,仓库管理员根据最新的库存商品,调整出货信息。

小王根据自己观察的过程创建了该事件的1层数据流图,如图 2-1 所示。

【问题1】

请用300以内文字说明数据流图(Data Flow Diagram)的基本元素及其作用。

数据流图基本元素是:外部实体,加工,数据存储,数据流。

数据流:由一组固定成分的数据组成,表示数据的流向。

加工:描述了输入数据流到输出数据流之间的变换。

数据存储:用来存储数据。

外部实体:是指存在于软件系统之外的人员或组织,是系统所需数据的发源地以及系统产生数据的归宿地。

【问题2】

数据流图在绘制过程中可能出现多种语法错误,请分析上图所示数据流图中哪些地方有错误,并分别说明错误的类型。

(一共4个)

库存清单未经加工处理直接到达A2仓库管理员

P5.3调整出货有输入没有输出(黑洞)

P5.4付款处理有输出没有输入(奇迹)

D2付款记录这个数据存储没有输出的数据流

【问题3】

系统建模过程中为了保证数据模型和过程模型的一致性,需要通过数据-过程-CRUD矩阵来实现数据模型和过程模型的同步,请在表 2-1 所示CRUD矩阵(1)~(5)中填入相关操作。以该系统为主体视角

比如:(1)我是系统,++供应商发送货物和商品清单++ ,我要++确定收到了订单上的商品,++所以我需要看一眼。R,也就是核对收到的货物以及附带的货物清单

(2)我是系统,我要给供应商付钱,++如果查询到该供应商有待付款记录++,我就付钱。那么我需要查一下。R

12不容易想到

(1) R

(2) R

(3) CRU

(4) RU

(5) CRUD


15年

试题二

【说明】

某公司拟研制一款高空监视无人直升机,该无人机采用遥控一自主复合型控制实现垂直升降。该直升机飞行控制系统由机上部分和地面部分组成,机上部分主要包括无线电传输设备、飞控计算机、导航设备等,地面部分包括遥控操纵设备、无线电传输设备以及地面综合控制计算机等。其主要工作原理是地面综合控制计算机负责发送相应指令,飞控计算机按照预定程序实现相应功能。经过需求分析,对该无人直升机控制系统纵向控制基本功能整理如下:

(a)飞控计算机加电后,应完成系统初始化,飞机进入准备起飞状态;

(b)在准备起飞状态中等待地面综合控制计算机发送起飞指令,飞控计算机接收到起飞指令后,进入垂直起飞状态;

(c)垂直起飞过程中如果飞控计算机发现飞机飞行异常,飞行控制系统应转入无线电遥控飞行状态,地面综合控制计算机发送遥控指令;

(d)垂直起飞达到预定起飞高度后,飞机应进入高度保持状态;

(e)飞控计算机在收到地面综合控制计算机发送的目标高度后,飞机应进入垂直升降状态,接近目标高度;垂直升降过程中出现飞机飞行异常,控制系统应转入无线电遥控飞行;

(f)飞机到达目标高度后,应进入高度保持状态,完成相应的任务;

(g)飞机在接到地面综合控制计算机发送的任务执行结束指令后,进入飞机降落状态;

(h)飞机降落过程中如果出现飞机飞行异常,控制系统应转入无线电遥控飞行;

(i)飞机降落到指定着陆高度后,进入飞机着陆状态,应按照预定着陆算法,进行着陆;

(j)无线电遥控飞行中,地面综合控制计算机发送着陆指令,飞机进入着陆状态,应按照预定着陆算法,进行着陆。

【问题1】

状态图和活动图是软件系统设计建模中常用的两种手段,请用200字以内文字简要说明状态图和活动图的含义及其区别。

状态图主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随的动作(action)。

活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的转移可能需要事件的触发)。

区别:状态图以 "对象" 为中心,核心是状态与事件;活动图以 "流程" 为中心,核心是活动与协作,更侧重流程设计与优化。

状态图展现一个状态机,表示单个对象在不同用例中的行为。以对象为中心,核心是状态与事件。

活动图是一种特殊的状态图,表示系统中活动的流程。以流程为中心,核心是活动与协作。


16年

试题二

阅读以下关于软件系统建模的叙述,在答题纸上回答问题1至问题3。

【说明】

某软件公司计划开发一套教学管理系统,用于为高校提供教学管理服务。该教学管理系统基本的需求包括:

(1)系统用户必须成功登录到系统后才能使用系统的各项功能服务;

(2)管理员(Registrar)使用该系统管理学校(University)、系(Department)、教师(Lecturer)、学生(Student)和课程(Course)等教学基础信息;

(3)学生使用系统选择并注册课程,必须通过所选课程的考试才能获得学分;如果考试不及格,必须参加补考,通过后才能获得课程学分;

(4)教师使用该系统选择所要教的课程,并从系统获得选择该课程的学生名单;

(5)管理员使用系统生成课程课表,维护系统所需的有关课程、学生和教师的信息;

(6)每个月到了月底系统会通过打印机打印学生的考勤信息。

项目组经过分析和讨论,决定采用面向对象开发技术对系统各项需求建模。

【问题1】(7分)

用例建模用来描述待开发系统的功能需求,主要元素是用例和参与者。请根据题目所述需求,说明教学服务系统中有哪些参与者。

【参考答案】

学生、教师、管理员、时间、打印机。

【试题解析】

参与者是指系统以外的,需要使用系统或与系统交互的事物,包括:人或组织、设备、外部系统等。在本题中,较为容易识别的参与者包括:学生、教师、管理员,比较隐晦的参与者包括:时间、打印机。

【问题2】(7分)

用例是对系统行为的动态描述,用例获取是需求分析阶段的主要任务之一。请指出在面向对象系统建模中,用例之间的关系有哪几种类型?对题目所述教学服务系统的需求建模时, "登录系统"用例与"注册课程"用例之间、"参加考试"用例与"参加补考"用例之间的关系分别属于哪种类型?

用例之间的关系包括:包含、扩展、泛化。

"登录系统"用例与"注册课程"用例之间的关系为:包含关系。

"参加考试"用例与"参加补考"用例之间的关系为:扩展关系。(存疑,我觉得是泛化)

【问题3】(11分)

类图主要用来描述系统的静态结构,是组件图和配置图的基础。请指出在面向对象系统建模中,类之间的关系有哪几种类型?对题目所述教学服务系统的需求建模时,类University与类Student之间、类University和类Department之间、类Student和类Course之间的关系分别属于哪种类型?

【参考答案】

类之间的关系包括:关联、聚合、组合、依赖、泛化(继承)、实现(可写可不写,因为实现是接口与类之间的关系,而接口是一种特殊的类)。

类University与类Student之间的关系是:聚合关系。(生命周期不同)

类University与类Department之间的关系是:组合关系。(生命周期相同)

类Student与类Course之间的关系是:关联关系(多对多)。

1和2一眼就是整体-部分的关系不是组合就是聚合,聚合弱组合强。

【试题解析】

依赖关系:一个事物发生变化影响另一个事物。

泛化关系:特殊/一般关系。

关联关系:描述了一组链,链是对象之间的连接。(多对多)

聚合关系:整体与部分生命周期不同。

组合关系:整体与部分生命周期相同。

实现关系:接口与类之间的关系。


18年

试题二

阅读以下关于软件系统建模的叙述,在答题纸上回答问题 1 至问题 3。

【说明】

某公司欲建设一个房屋租赁服务系统,统一管理房主和租赁者的信息,提供快捷的租赁服务。本系统的主要功能描述如下:

  1. 登记房主信息。记录房主的姓名、住址、身份证号和联系电话等信息,并写入房主信息文件。

  2. 登记房屋信息。记录房屋的地址、房屋类型(如平房、带阳台的楼房、独立式住宅等)、楼层、租金及房屋状态(待租赁、已出租)等信息,并写入房屋信息文件。一名房主可以在系统中登记多套待租赁的房屋。

  3. 登记租赁者信息。记录租赁者的个人信息,包括:姓名、性别、住址、身份证号和电话号码等,并写入租赁者信息文件。

  4. 安排看房。已经登记在系统中的租赁者,可以从待租赁房屋列表中查询待租赁房屋信息。租赁者可以提出看房请求,系统安排租赁者看房。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。

  5. 收取手续费。房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用。

  6. 变更房屋状态。当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件。

【问题 1】(12 分)

若采用结构化方法对房屋租赁服务系统进行分析,得到如图 2-1 所示的顶层DFD。使用题干中给出的词语,给出图 2-1 中外部实体 E1~E2、加工 P1~P6 以及数据存储 D1~D4 的名称。

E1房主 E2租赁者

P: 1登记房主信息 2登记房屋信息 3登记租赁者信息 4查询待租赁房屋信息 5安排看房 6记录房屋状态

D: 1房主信息文件 2租赁者信息文件。 3待租赁房屋列表 4看房记录文件

【问题 2】(5 分)

若采用信息工程(Information Engineering)方法对房屋租赁服务系统进行分析,得到如图 2-2 所示的 ERD。请给出图 2-2 中实体(1)~ (5)的名称。

1房主 2房屋 3系统 4 租赁者 5看房记录

【问题 3】 (8 分)

(1)信息工程方法中的"实体(entity)" 与面向对象方法中的"类(class)"之间有哪些不同之处?

  1. 核心定位不同 :实体(entity)是信息工程中数据建模 的核心,类(class)是面向对象方法中对象模板,

  2. 组成要素不同 :实体仅包含属性 和与其他实体的**"关系"** ;类除属性外,还必须包含方法。

  3. 作用场景不同 :实体用于需求分析、数据建模阶段 ;类用于系统设计、编码阶段(直接映射代码中的类定义)。。

  4. 实例形态不同:实体的实例是"数据记录",仅承载数据;类的实例是"对象"(,兼具数据状态(属性值)和行为能力(调用方法)。

简要:实体用于数据建模,而类用于面向对象建模。实体只有属性,而类有属性和操作。

(2)在面向对象方法中通常采用用例(Use Case)来捕获系统的功能需求。用例可以按照不同的层次来进行划分,其中的Essential Use Cases 和 Real Use Cases 有哪些区别?

在面向对象方法中,Essential Use Cases (抽象用例)和 Real Use Cases(真实用例)是捕获功能需求的两种不同层次的用例,它们的区别如下:

|-----------|--------------------------------|--------------------------------|
| ​​对比维度​​ | ​​Essential Use Cases (抽象用例)​​ | ​​Real Use Cases (真实用例)​​ |
| ​​抽象层次​​ | 高层次、抽象化 | 低层次、详细化 |
| ​​关注点​​ | 用户的意图与系统的核心职责,关注"​​是什么​​" | 具体的交互过程、用户界面和技术细节,关注"​​如何实现​​" |
| ​​技术依赖性​​ | ​​平台无关​​,不涉及具体实现技术 | ​​平台相关​​,包含具体的技术和实现细节 |
| ​​目标人群​​ | 业务利益相关者、需求分析人员 | 开发人员、测试人员、UI/UX设计师 |
| ​​主要目的​​ | 捕捉核心需求和用户目标,作为沟通和理解的基础 | 提供详细的系统实现蓝图,指导开发、测试和设计 |
| ​​表述方式​​ | 使用简单的意图语言(如"用户搜索书籍") | 使用详细的步骤化描述(如"用户输入关键词并点击搜索按钮") |

简单来说,Essential Use Cases 更侧重于定义系统"应该做什么",是业务导向的;而 Real Use Cases 则具体定义了系统"如何实现",是技术导向的。抽象用例通常在需求分析初期创建,而真实用例则是在设计阶段从抽象用例细化而来,并加入了具体的实现细节。

示例对比(以"在线购物支付"为例):

  • Essential Use Cases(完成支付):用户向系统提供待支付订单标识→系统返回订单金额与商品信息→用户确认支付并提供支付凭证(如账号、密码)→系统验证凭证并确认支付→系统向用户反馈支付结果。

  • Real Use Cases(APP端微信支付):用户打开购物APP→点击"我的订单"→选择"待支付"订单→点击"微信支付"按钮→系统跳转至微信APP支付页面→用户点击"确认支付"并完成人脸识别→微信返回"支付成功"结果→购物APP显示"支付成功"弹窗并更新订单状态。


19年:

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某软件企业为快餐店开发一套在线订餐管理系统,主要功能包括:

(1)在线订餐:已注册客户通过网络在线选择快餐店所提供的餐品种类和数量后++提交订单++,系统显示订单费用供客户确认,客户确认后支付订单所列各项费用。

(2)厨房备餐:厨房接收到客户已付款订单后按照订单餐品列表选择各类食材进行餐品加工。

(3)食材采购:当快餐店某类食材低于特定数量时自动向供应商发起采购信息,包括食材类型和数量,供应商接收到采购信息后按照要求将食材送至快餐店并提交已采购的食材信息,系统自动更新食材库存。

(4)生成报表:每个周末和月末,快餐店经理会自动收到系统生成的统计报表,报表中详细列出了本周或本月订单的统计信息以及库存食材的统计信息。

现采用数据流图对上述订餐管理系统进行分析与设计,系统未完成的0层数据流图如图2-1所示。

【问题1】(8分)

根据订餐管理系统功能说明,请在图2-1所示数据流图中给出外部实体E1~E4和加工P1~P4的具体名称。

E1客户 2厨房 3快餐店经理 4供应商

P1在线订餐 2厨房备餐 3生成报表 4食材采购

【问题2】(8分)

根据数据流图规范和订餐管理系统功能说明,请说明在图2-1中需要补充哪些数据流可以构造出完整的0层数据流图。

D1-P3:订单的统计信息 P3-E3:统计报表

【问题3】(9分)(考过!!原题)

根据数据流图的含义,请说明数据流图和系统流程图之间有哪些方面的区别。

含义 :数据流图是一种从数据传递 和加工的角度,它由外部实体、加工、数据流和数据存储四个部分组成,核心是描述"数据在哪里产生、经历了什么变换、流向何处"。它更关注的是"做什么"的问题.

区别:

1.流程图更关注控制流,例如操作的顺序、分支、循环。数据流图关注的是数据流,例如数据的变换流动。

2.流程图描述具体的处理逻辑和执行过程,数据流图描述数据加工过程。

3.流程图具有强时序性,数据流图具有弱时序性

|-----------|--------------------------|---------------------------------|
| 对比维度 | ​​流程图 (Flowchart)​​ | ​​数据流图 (DFD)​​ |
| ​​核心关注点​​ | ​​控制流​​(操作的顺序、分支、循环) | ​​数据流​​(数据的流动、变换、存储) |
| ​​描述重点​​ | 详细描述​​具体的处理逻辑​​和​​执行过程​​ | 描绘数据加工过程​​ |
| ​​时序性​​ | ​​强时序性​​,步骤有严格的先后顺序 | ​​弱时序性​​,只关心数据的输入输出和加工,不强调加工的顺序 |
| ​​组成元素​​ | 起止框、处理框、判断框、流向线等 | ​​外部实体、过程、数据流、数据存储​​ |
| ​​应用层级​​ | 常用于详细设计阶段,描述模块或算法的内部逻辑 | 常用于需求分析阶段,描述系统整体功能边界和数据流程 |


21年

试题二(25 分)

阅读以下关于软件系统设计与建模的叙述,在答题纸上回答问题 1 至问题 3。

【说明】

某医院拟委托软件公司开发一套预约挂号管理系统,以便为患者提供更好的就医体验,为医院提供更加科学的预约管理。本系统的主要功能描述如下:(a)注册登录 都,(b)信息浏览 患者,(c)账号管理 管理员,(d)预约挂号 患者,(e)查询与取消预约 患者,(f)号源管理 管理员,(g)报告查询 患者,(h)预约管理管理员,(i)报表管理管理员,(j)信用管理管理员等。

【问题 1】(6 分)送分

若采用面向对象方法对预约挂号管理系统进行分析,得到如图 2 - 1 所示的用例图。请将合适的参与者名称填入图 2 - 1 中的(1)和(2)处,使用题干给出的功能描述(a)~(j),完善用例(3)~(12)的名称,将正确答案填在答题纸上。

1系统管理员 2患者

【问题 2】(10 分)

预约人员(患者)登录系统后发起预约挂号请求,进入预约界面。进行预约挂号时使用数据库访问类获取医生的相关信息,在数据库中调用医生列表,并调取医生出诊时段表,将医生出诊时段反馈到预约界面,并显示给预约人员;预约人员选择医生及就诊时间后确认预约,系统反馈预约结果,并向用户显示是否预约成功。

采用面向对象方法对预约挂号过程进行分析,得到如图 2-2 所示的顺序图,使用题干中给出的描述,完善图 2-2 中对象(1),及消息(2)-(4)的名称,将正确答案填在答题纸上,请简要说明在描述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。1:患者 2发起预约挂号请求 3显示给预约人员医生可预约时段 4显示是否预约成功

协作图:强调参与交互的对象组织。

顺序图:描述了以时间顺序组织的对象之间的交互活动。

顺序图更强调时间顺序,具有严格的时序性,协作图强调参与交互的对象组织架构。

【问题 3】(9 分)

采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3 种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

  • 对象模型:描述系统静态结构,包括对象、类、属性、操作及类之间的关联(如继承、聚合等 ),用类图表示,回答 "++系统由什么组成++"。

  • 动态模型:描述对象间的交互行为和状态变化,用状态图、顺序图等表示,回答 "++对象如何随时间交互++"。

  • 功能模型:描述系统功能及数据处理流程,用用例图、数据流图等表示,回答 "++系统要做什么++"。

上述模型均可用于软件的需求分析。


22年

试题二(共 25 分)

阅读以下关于软件系统设计与建模的叙述,在答题纸上回答问题1至问题3。

【说明】

煤炭生产是国民经济发展的主要领域之一,其煤矿的安全非常重要。某能源企业拟开发一套煤矿建设项目安全预警系统,以保护煤矿建设项目从业人员生命安全。本系统的主要功能包括如下(a)~(h)所述。

(a)项目信息维护

(b)影响因素录入5

(c)关联事故录入

(d)安全评价得分4

(e)项目指标预警分析 6

(f)项目指标填报 1

(g)项目指标审核 2

(h)项目指标确认 3

【问题 1】(9 分)

王工根据煤矿建设项目安全预警系统的功能要求,设计完成了系统的数据流图,如图 2-1 所示。请使用题干中描述的功能(a)~(h),补充完善空(1)~(6)处的内容,并简要介绍数据流图在分层细化过程中遵循的数据平衡原则。

应遵循:1.父图中的数据流在子图中都可以找到 2一个加工必须有输入数据流和输出数据流,且输入数据流要足够以至于可以产生输出数据流(避免灰洞)。

【问题 2】(9 分)

请根据【问题 1】中数据流图表示的相关信息,补充完善煤矿建设项目安全预警系统总体 ER 图(见图 2 - 2)中实体(1) - (6)的具体内容,将正确答案填在答题纸上。

3:项目指标 2:项目经理 1:项目管理员 4:项目信息 5:管理事故 6:影响因数

【问题 3】(7 分)

在结构化分析和设计过程中,数据流图和数据字典是常用的技术手段,请用 200 字以内的文字简要说明它们在软件需求分析和设计阶段的作用。

数据流图是一种从数据传递和加工 的角度描述,包含实体,加工,数据流和数据存储,描述了系统中的数据"从哪来,经历了什么变换,流向哪里",常用于需求分析阶段,描述系统++整体功能边界和数据流程++。在设计阶段,为模块划分提供依据。

数据字典是对数据流图中数据项、数据流、数据存储等各类数据元素进行详细定义与说明的集合,用于精确描述系统的数据信息。在需求分析阶段,数据字典详细定义了各类元素数据,++消除歧义++ 保障需求准确。在设计阶段,为数据库设计和模块间的数据交互提供++规范++。


23年

第一问:请说明UML用例图定义,SysmL建模的需求图的定义,并说明两者之间的区别。

类图:静态图,为系统的静态设计视图,展现了++一组对象,接口,协作++和它们之间的关系。

对象图:静态图,展现了某一时刻一组对象和它们之间的关系,为类图的某一快照。

用例图:静态图,展现了一组用例,参与者以及它们之间的关系。用例图中的参与者是人,硬件,或其他系统。;用例是参与者完成的一系列操作,用例之间的关系有:扩展,包含,泛化(继承)。

SysML(系统建模语言)的需求图,用于 结构化捕获、组织和追溯复杂系统的需求 (覆盖软件、硬件、流程等多维度),核心是 各类需求 及 需求间的关系 ,支持 ++需求 "定义 - 分解 - 追溯 - 验证"++ 的全生命周期管控。

  1. 两者区别

|-------|-----------------|--------------------------------|
| 维度 | UML 用例图 | SysML 需求图 |
| 定位 | 面向软件系统,聚焦功能交互场景 | 面向复杂系统(软 / 硬件等多维度),聚焦需求全生命周期管理 |
| 核心焦点 | 参与者与用例的交互场景 | 需求本身的定义、分解与追溯 |
| 非功能需求 | 无原生支持(需外部文档补充) | 原生支持(可直接表达性能、约束等需求) |
| 追溯能力 | 追溯性弱(需外部关联) | 原生支持全链路追溯(需求→设计→测试等) |

序列图:即顺序图,动态图,是场景的图形化表示,描述了++以时间顺序组织++ 的对象之间的的交互活动。

通信图:动态图,即协作图,强调参与交互的对象的组织。

状态图:动态图,展现了一个状态机,描述了单个对象在多个用例中的行为。

活动图:动态图,是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程。

构件图(组件图):静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。

部署图:静态图,为系统静态部署视图,展现了物理模块的节点分布。

类图:静态图,为系统的静态设计视图,展现了一组对象,接口和协作之间的关系。

对象图:静态图,为某一时刻一组对象之间的关系,为类图的某一快照

用例图:静态图,描述了用例和参与者之间的关系,参与者是指人,硬件或其他系统,用例是指参与者完成的一系列操作。用例与用例之间的关系是:包含扩展泛化(继承)。

序列图:又称顺序图,以时间顺序描述一组对象的交互作用。

通信图:动态图,又称为协作图。描述了参与交互的对象的组织

状态图:动态图,展现了一个状态机,描述了一个对象在多个用例的行为

活动图:动态图,是一组特殊的状态图,展示了一组活动从开始到结束的流程

构件图:静态图,为系统的静态实现视图,展现了一组构件之间的组织和依赖

部署图:静态图,系统的静态部署视图,展现了物理模块的节点分布。


24年5月

1.讲解一下UML时序图三种消息及其概念。

1. 同步消息 (Synchronous Message)

核心概念:发送者将控制权传递给接收者,然后停止自身活动,等待接收者完成处理并返回控制。

典型场景:

  • 用户登录系统时,前端向后端发送登录请求并等待响应

  • 数据库查询操作,应用程序发送查询请求并等待结果返回

  • 服务间调用,如订单服务调用库存服务查询库存

考试重点:同步消息代表了"阻塞式调用",是典型的同步交互模式,常用于需要即时响应的场景。

2. 异步消息 (Asynchronous Message)

核心概念:发送者发送消息后立即继续执行自身操作,不等待接收者的响应或处理结果。

关键特点:

  • 发送者与接收者并行工作,互不影响

  • 发送者不关心接收者何时处理消息

  • 适用于需要高吞吐量、低延迟的场景

典型场景:

  • 系统日志记录:应用记录日志后立即继续执行,不等待日志写入完成

  • 消息队列处理:发送消息到队列后立即返回,不等待消费者处理

  • 通知服务:发送短信或邮件后立即返回,不等待发送结果

考试重点:异步消息代表了"非阻塞式调用",是分布式系统中提高吞吐量的重要机制。

3. 返回消息 (Return Message)

核心概念:表示从方法调用返回的结果,是同步消息的后续响应。

关键特点:

  • 通常与同步消息配对出现

  • 表示接收者处理完成并返回结果给发送者

  • 用虚线表示,箭头指向发送者

典型场景:

  • 同步调用返回结果:当同步消息发送后,接收方处理完成返回结果

  • API响应:客户端发送请求后,服务端返回HTTP响应

  • 服务调用返回:订单服务调用支付服务后,支付服务返回支付结果

考试重点:返回消息是同步交互的完整闭环,表示"调用-处理-返回"的全过程,而异步消息不需要返回。

2.系统分析设计中时序图和协作图两种交互图的选取原则。

这个问题很关键,选对交互图能让需求或设计的表达更精准,核心原则是:突出"时间顺序"优先选时序图,突出"对象关联"优先选协作图,二者均用于描述对象间交互,但侧重点完全不同。

一、时序图的适用场景

时序图(Sequence Diagram)以时间轴为核心,清晰展示对象间消息发送的先后顺序,适合以下场景:

  1. 需明确展示交互步骤的先后逻辑,例如用户登录流程中"输入账号→后台验证→返回结果→输入密码→二次验证→登录成功"的线性步骤。

  2. 需体现消息的时间属性,包括同步/异步通信、时间间隔(如"发送订单后5秒内接收支付回调")或超时逻辑。

  3. 交互对象少、流程线性且无复杂交叉关联,例如"APP端→API网关→用户服务"的三层简单调用。

二、协作图的适用场景

协作图(Collaboration Diagram)以对象关联为核心,用连接线展示对象间的交互关系,适合以下场景:

  1. 需突出多对象的协作网络,例如订单支付流程中"订单对象、支付对象、库存对象、日志对象"的多向交互关系(谁依赖谁、谁给谁发消息)。

  2. 交互对象多且存在交叉关联,例如电商下单场景中,"用户""购物车""商品""优惠券""地址"5个对象的复杂交互,需清晰体现对象间的连接而非步骤顺序。

  3. 需强调"协作上下文",即说明"完成某功能需要哪些对象参与",而非"这些对象按什么顺序操作",例如梳理"商品秒杀"功能的参与对象及交互关系。

三、关键选取维度对比

通过以下维度可快速判断该选哪种图:

|--------|-----------------------|----------------------------|
| 选取维度 | 时序图(Sequence Diagram) | 协作图(Collaboration Diagram) |
| 核心关注点 | 消息的时间顺序 | 对象的关联关系 |
| 可视化核心 | 垂直时间轴 + 水平消息流 | 对象节点 + 节点间的连接线 |
| 对象数量适配 | 适合3-5个对象的简单交互 | 适合5个以上对象的复杂协作 |
| 核心价值 | 让读者快速看懂"先做什么,后做什么" | 让读者快速看懂"谁和谁在交互" |


UML时序图中表示条件分支序列片段有哪些?

在UML时序图中,序列片段(Combined Fragment) 用于表示复杂的交互逻辑,其中涉及条件分支的主要有以下两种核心片段,以及辅助的默认分支标识,具体如下:

1. alt 片段(Alternative,互斥分支)

含义 :表示多个互斥的条件分支,类似编程语言中的 if-else if-else 结构,仅当某个分支的条件满足时执行该分支,且分支之间互斥(最多执行一个)。

示例:

用户登录时,"账号存在"则验证密码,"账号不存在"则提示注册,用 alt 片段表示:

复制代码

+-------------------alt-------------------+ | [账号存在] [账号不存在] | | 客户端→服务端:验证密码 服务端→客户端:提示注册 | +-----------------------------------------+

2. opt 片段(Optional,可选分支)

含义 :表示一个可选的序列,类似 if 结构(无 else),仅当条件满足时执行,不满足则跳过该片段。

示例:

订单支付时,"用户使用优惠券"则额外调用优惠券服务,否则直接支付,用 opt 片段表示:

复制代码

+------------------opt------------------+ | [用户选择优惠券] | | 客户端→优惠券服务:验证优惠券有效性 | +---------------------------------------+ 客户端→支付服务:发起支付

补充:else 作为默认分支

else 本身不是独立片段,而是 alt 片段中用于表示"所有条件均不满足时执行"的默认分支,需配合 alt 使用,标注为 [else],且一个 alt 中最多只能有一个 else 分支。

核心区别与选取

  • 当存在 多个互斥条件(需判断"二选一"或"多选一")时,用 alt;

  • 当仅需判断 单个条件是否执行(无互斥分支,不满足则跳过)时,用 opt。

这两种片段是时序图中表达条件分支逻辑的核心工具,需根据分支数量和互斥性选择使用。


相关推荐
小lu飞1 小时前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
无心水5 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd5 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Zhao-Jichao8 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李8 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga10 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd10 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白11 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李12 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao14 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记