第1题(案例题):阅读以下关于软件架构设计与评估的叙述,回答问题1和问题2。
【说明】某公司拟开发一套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程,采用自助方式进行智能应用设计、实现与部署,并可以开发新算法组件加入平台中。在需求分析与架构设计阶段,公司提出的需求和质量属性描述如下:
(a)平台用户分为算法工程师、软件工程师和管理员等三种角色,不同角色的功能界面有所不同;
(b)平台应该具备数据库保护措施,能够预防核心数据库被非授权用户访问;
(c)平台支持分布式部署,当主站点断电后,应在20秒内将请求重定向到备用站点;
(d)平台支持初学者和高级用户两种界面操作模式,用户可以根据自己的情况灵活选择合适的模:式;
(e)平台主站点宕机后,需要在15秒内发现错误并启用备用系统;
(f)在正常负载情况下,机器学习流程从提交到开始执行,时间间隔不大于5秒;
(g)平台支持硬件扩容与升级,能够在3人·天内完成所有部署与测试工作;
(h)平台需要对用户的所有操作过程进行详细记录,便于审计工作;
(i)平台部署后,针对界面风格的修改需要在3人·天内完成;
(j)在正常负载情况下,平台应在0.5秒内对用户的界面操作请求进行响应;
(k)平台应该与目前国内外主流的机器学习应用开发平台的界面风格保持一致;
(I)平台提供机器学习算法的远程调试功能,支持算法工程师进行远程调试。
在对平台需求、质量属性描述和架构特性进行分析的基础上,公司的架构师给出了三种候选的架构设计方案,公司目前正在组织相关专家对平台架构进行评估。
【问题1】(9分)在架构评估过程中,质量属性效用树(utilitytree)是对系统质量属性进行识别和优先级排序的重要工具。请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题中的(a)-(1)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台的效用树。

【问题2】(16分)针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道过滤器(pipe-and-filter)的架构风格,王工则建议采用隐式调用(implicitinvocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适采用哪种架构风格。
【问题1解答】(1)性能(2)可修改性(3)(e)可用性(4)(j)性能(5)(h)安全性 (6)(i)可修改性
【问题2解答】解释器:机器学习流程的灵活性更高,可扩展性更强。因为解释器风格可以通过自定义流程规则及配套的流程解释引擎开发,进行动态解析,做到用户层面的流程完全自定义,而不需要修改代码。所以无论是修改已有的业务流程,还是扩展不同的角色,创建新的角色流程都非常便利。
管道过滤器:灵活性:组件与组件之间的连接需要标准的接口定义和数据格式,灵活性受到限制。可扩展能力较弱,新算法可以作为新的过滤器加入系统,但每个过滤器之间的数据兼容性要求较高,扩展可能会到遇到接口适配问题。因为管道过滤器把数据的处理职能做成过滤器,把数据的传递做成管道,此时如果流程不发生变化,可以通过这种方式实现,一旦流程发生变化,或是扩展功能,需要对过滤器进行调整适配,或流程在程序层面重建,此时必须修改代码。
隐式调用:灵活性:通过事件驱动机制实现组件之间的松耦合交互,虽然灵活调用,但是流程控制依赖于事件触发,无法完成像解释器架构那样清晰定义复杂流程。算法可扩展性:新算法组件可以通过订阅事件的方式集成,扩展性好,但是事件驱动的复杂性增加了系统设计难度,尤其复杂流程的场景下。隐式调用强调通过间接的方式进行调用,如事件机制,要完成某个动作时先触发事件,事件与相关动作相关联,无法保证事件调用的顺序。
综合比较与分析,该系统更适合解释器风格。
第2题(案例题):阅读以下关于软件系统设计与建模的叙述,回答问题1至问题3。
【说明】某医院拟委托软件公司开发一套预约挂号管理系统,以便为患者提供更好的就医体验,为医院提供更加科学的预约管理。本系统的主要功能描述如下:(a)注册登录,(b)信息浏览,(c)账号管理,(d)预约挂号,(e)查询与取消预约,(f)号源管理,(g)报告查询,(h)预约管理,(i)报表管理和(j)信用管理等。
【问题1】(6分)若采用面向对象方法对预约挂号管理系统进行分析,得到如图2-1所示的用例图。请将合适的参与者名称填入图2-1中的(1)和(2)处,使用题干给出的功能描述(a).完善用例(3)~(12)的名称

【问题2】(10分)预约人员(患者)登录系统后发起预约挂号请求,进入预约界面。进行预约挂号时使用数据库访问类获取医生的相关信息,在数据库中调用医生列表,并调取医生出诊表,将医生出诊时段反馈到预约界面,并显示给预约人员;预约:人员选择医生及就诊时间后确认预约,系统反馈预约结果,并向用户显示是否预约成功。采用面向对象方法对预约挂号过程进行分析,得到如图2-2所示的顺序图,使用题干中给出的描述,完善图2-2中对象(1),及消息(2)~(4)的名称,请简要说明在述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。

【问题3】(9分)采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?
【问题1解答】(1)预约人员(患者)(2)医院管理人员(3)(a)注册登录(4)~(8)(b)信息浏览(c)账号管理(d)预约挂号(e)查询与取消预约(g)报告查询(9)~(12) (f)号源管理(h)预约管理(i)报表管理()信用管理注意:(4)~(8)的顺序是可变;(9)~(12)的顺序也是可变。
【问题2解答】(2)预约挂号请求(3)显示医生可预约时段(4)显示预约是否成功顺序图强调的是对象交互的时间次序。协作图强调的是对象之间的组织结构。
【问题3解答】对象模型用于描述系统数据结构;动态模型用于描述系统控制结构,功能模型用于描述系统功能。这3种模型都涉及数据、控制和操作等共同概念,但侧重点不同,从不同侧面反馈了系统的实质性内容,综合起来全面地反馈了对目标系统的需求。
功能模型指明了系统应该“做什么”;动态模型明确规定了什么时候做;对象模型定义了做事情的实体。对象模型,动态模型和功能模型均可用于软件的需求分析。
第3题(案例题)嵌入式略
第4题(案例题):阅读以下关于数据库设计的叙述,回答问题1至问题3。
【说明】某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务。该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis)的混合架构实现。经过规范化设计之后,该系统的部分数据库表结构如下所示。供应商(供应商ID,供应商名称,联系方式,供应:商地址);药品(药品ID,药品名称,药品型号,药品价格,供应商ID);药品库存(药品ID,当前库存数量);订单(订单号码,药品ID,供应商!D,药品数量,订单金额)
【问题1】(9分)在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系表过于细分,造成了大量的多表关联查询,影响了性能。例如当查询商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查询性能。修改后的药品关系结构为:药品(药品ID,药品名称,药品型号,药品价格,供应商ID,供应商名称,当前库存数量);请用200字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信一息应该采用哪种反规范化设计方法。
【问题2】(9分)王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法并说明该系统应该采用哪种方法。
【问题3】(7分)该系统采用了Redis来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成Redis和MySQL的数据实时同问题。(1)Redis的数据类型包括String、Hash、List、Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。
【问题1解答】常见的反规划技术:
(1)增加冗余列:增加冗余列是指多个表中具有相同的列,它常用来查询时避免连接操作。
(2)增加派生列:增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,加快查询速度。
(3)重新组表:重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接,而提高性能。
(4)分割表:有时对表做分割可以提高性能。
用户查询商品信息应该采用:增加冗余列。
【问题2解答】针对反规范化数据不一致问题,采用的方案:
(1)触发器数据同步
(2)应用程序数据同步
(3)批处理同步。
本系统应该采用应用程序同步或者触发器数据同步方式。
【问题3解答】
(1)热销药品排名适合使用:ZSet,即有序集合类型。
(2)实时同步方案,先查询缓存,查不到再从DB查询,并保存到缓存;更新缓存时先更新数据库,再将缓存设置过期。
第5题(案例题):阅读以下关于Web系统架构设计的叙述,回答问题1至问题3。
【说明】某公司拟开发一个智能家居管理系统,该系统的主要功能需求如下:1)用户可使用该系统客户端实现对家居设备的控制,且家居设备可向客户端反馈实时状态;2)支持家居设备数据的实时存储和查询;3)基于用户数据,挖掘用户生活习惯,向用户提供家居设备智能化使用建议。基于上述需求,该公司组建了项目组,在项目会议上,张工给出了基于家庭网关的传统智能家居管理系统的设计思路,李工给出了基于云平台的智能家居系统的设计思路。经过深入讨论,公司决定采用李工的设计思路。
【问题1】(8分)请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组择李工设计思路的原因。
【问题2】(12分)请从下面给出的(a)~(i)中进行选择,补充完善图5-1中空(1)~(6)处的内容,协助李工完成该系统的架构设计方案。

(a)Wi-Fi(b)蓝牙(c)驱动程序(d)数据库(e)家庭网关(f)云平台(g)微服务(h)用户终端(i)鸿蒙(j)TCP/IP
【问题1解答】网关管理:云平台更强,可以实现远程网关管理,可以对不同地点的多种设备进行统一管理,管理能力更强。
数据处理:云平台的海量存储空间,高性能和灵活的拓展功能,为基于用户数据的智能预测和决策方法提供了更好的支持。
系统性能:数据存在云上数据库中,通信效率更高,同时云也有更强的数据处理能力,所以会更高效。
家庭网关的独立管理,一旦网关被售出,后期难以进行系统升级。
【问题2解答】(1)(h)用户终端 (2)(i)鸿蒙系统 (3)(f)云平台 (4)(d)数据库
(5)家庭网关 (6)(c)驱动程序
【问题3解答】该系统应该采用TCP协议,这样才能保障用户终端和服务端之间的双向可靠通信。TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议,在建立连接时有3次握手,通信时有回应机制,所以丢了包,能重传以保障通信可靠。UDP是一种面向无连接的传输层通信协议,丢了包不会重传,所以不能保障通信可靠性。
相关知识补充
1.1不规范化关系模式的问题 插入异常:还未确定供应商有哪些产品,只想添加一个供应商的地址信息,则会产生产品与价格为空的记录
删除异常:当删除一个供应商的货物时,地址信息也会被删除
修改异常:当修改一个供应商的地址,需要将多条数据同时更新,没更新,则数据产生不一致问题
数据冗余:关系模式中多次重复记录了同一个供应商地址
1.2 规范化及存在问题
实际是对数据表的不断拆分,达到更高的规范程度。
问题:系统中大量查询不能通过单表完成,需要将多表连接,拆的越多,查询性能就越低
1.3 反规范化
规范化设计后,数据库设计者希望希望不规范化来提高性能,这种规范化设计的回退方法为反规范化方法
方法:增加派生性冗余列、增加冗余列、重新组表、水平分割表
优点:提升统计,查询效率
缺点:增加了数据冗余,浪费存储空间,增删改操作效率低,可能会导致数据不一致。水平分割:需要总数据时,效率低;可能需要动态选择分割后的表,增加程序复杂度。

1.4 反规范数据不一致解决方案
触发器数据同步,应用程序数据同步,批处理数据同步
2.1通信图(协作图)
是一种交互图,强调对象之间存在消息收发关系,强调对象协作,而不专门突出这些消息发送的时间顺序
强调对象间的结构关系,展示对象如何再空间上连接适合观察对象间的拓扑结构和协作关系
2.2顺序图(序列图)
用于描述对象之间交互的动态行为的交互图,特别关注消息传递的时间顺序。
是一种交互图,强调对象之间消息发送的顺序,
2.2.1消息类型
同步消息:调用方法并等待返回
异步消息:发送不等待返回
返回消息:方法返回
自调用消息/自关联消息:对象自身调用自己的方法
2.2.2顺序图中常见的几种元素:
(1)对象(Object),对象是系统中具有特定职责和行为的实体。
(2)生命线(Lifeline),生命线表示对象在交互过程中存在的时间线。
(3)激活(Activation)/ 控制焦点(Focus of Control),激活表示对象正在执行某个动作或处于活动状态的时间段。
(4)消息(Message),消息是对象之间传递的信息,用于触发接收对象的动作或状态变化。
(5)交互片段(Interaction Fragment),交互片段用于表示顺序图中的一组特殊交互,如循环、条件分支等。
2.2.3组合片段
时序图表示条件分支序列片段有哪些:
可选片段:关键字opt,表示一种单条件分支
条件片段:关键字alt,表示一种多条件分支
并行片段:关键字par,表示片段内有两个或更多的并行子片段
循环片段:关键字loop,表示一个循环
中断片段:关键字break,表示一个含有监护条件的子片段
