【新版】系统架构设计师 - 案例分析 - 系统维护与设计模式

news2024/9/30 9:29:42

在这里插入图片描述

个人总结,仅供参考,欢迎加好友一起讨论

文章目录

  • 架构 - 案例分析 - 系统维护与设计模式
  • 典型例题 1
  • 典型例题 2

架构 - 案例分析 - 系统维护与设计模式

典型例题 1

某企业两年前自主研发的消防集中控制软件系统在市场上取得了较好的业绩,目前已成功应用到国内外众多企业用户的消防管理控制系统中。该软件系统通过不同型号消防控制器连接各种消防器件,实现集中式消防告警信息显示与控制。日前该软件系统的系统维护主管组织召开会议,对近期收集到的该软件系统的如下维护申请进行了讨论:

(1)将系统目前的专用报表功能改成通用报表生成功能,以适应未来用户可能提出的报表格式变化需求;

(2)在界面语言中增加德文支持,以满足新增的两个德国企业用户的使用要求;

(3)修正系统在与控制器通信时由于硬件网络故障导致的与控制器之间的连接失效,而控制器后续无法重新连接的问题;

(4)完成因某已支持型号消防控制器通信协议改变而导致的相应软件修改;

(5)增加与某新型号消防控制器的互连通信功能,以支持在后续推广过程中与该型号消防控制器进行互连;

(6)修正用户报告的由于系统从Win7平台迁移到最新发布的Win8平台而导致的部分显示功能失效的问题;

(7)修正用户报告的系统自动切换消防平面图形时部分器件位置显示错误的问题;

(8)改进系统历史消防告警记录的检索算法,以提高系统在处理大量消防报警记录时的效率;

(9)将系统目前针对某一特定数据库管理系统的数据库访问方式改成基于数据源的通用数据库访问方式,以适应用户可能提出的使用其它数据库管理系统的需求。

【问题1】

软件维护的内容通常分为正确性维护、适应性维护、完善性维护以及预防性维护四类,请用300字以内文字说明这4类软件维护内容的特点与区别。

参考答案:

(1)改正性维护。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就称为改正性维护。

(2)适应性维护。在使用过程中,外部环境(新的硬、软件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就称为适应性维护。

(3)完善性维护。在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动称为完善性维护。

(4)预防性维护。这是指预先提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。通常,预防性维护可定义为“把今天的方法学用于昨天的系统以满足明天的需要”。也就是说,采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编码和测试。

【问题2】

请根据不同类型软件维护的特点,将上述(1)~(9)的维护申请填入下表相应的类别中。

在这里插入图片描述

参考答案:

(1):(3)(7)

(2):(4)(6)

(3):(2)(5)(8)

(7):(1)(9)

【问题3】

对于软件维护申请的处理,首先需要确定维护工作的类型,不同类型的维护工作,其处理流程往往不同,下图是区分不同维护类型的典型处理流程,请将上表中代表维护类型的序号(1)~(4)填入下图的(a)~(d)。

在这里插入图片描述

参考答案:

(a):(2)

(b):(3)

(c):(4)

(d):(1)

【问题4】

在讨论第(4)项维护工作的方案时,项目组发现与相应的消防控制器通信的子模块重用了企业之前淘汰的某款软件中实现相应功能的源代码,而现有技术人员没有参加过该代码的开发工作,并且重用的这部分代码开发不规范,其数据和代码结构设计都很差,相应的文档极不完整,维护记录也很简略。针对上述情况,项目组一致认为在原有代码基础上进行修改维护难度很大,因此决定采用软件工程的方法对该子模块进行重新设计、编码和测试,请从可行性和该模块后续可维护性两个方面简要分析采取这种方案的原因。

参考答案:

目前的模块无文档,且已属于淘汰模块,重新开发比修改维护成本更低、效果更好,同时有利于后期的维护)(一方面是开发人员对新开发的模块有很高的熟悉程度,另一方面新开发会有完善的文档)。

典型例题 2

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

(1)W公司经常进行促销活动。根据不同的条件(如订单总额、商品数量、产品种类等),公司可以提供百分比折扣或现金减免等多种促销方式供提交订单的用户选择。实现每种促销活动的代码量很大,且会随促销策略的不同经常修改。系统设计中需要考虑现有的促销和新的促销,而不用经常地重写控制器类代码。

(2)该在线销售系统需要计算每个订单的税率,不同商品的税率及计算方式会有所区别。所以W公司
决定在系统中直接调用不同商品供应商提供的税率计算类,但每个供应商的类提供了不同的调用方法。系统设计中需要考虑如果公司更换了供应商,应该尽可能少地在系统中修改或创建新类。

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

【问题1】

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

参考答案:

创建型模式主要用于创建对象,为设计类实例化新对象提供指南。

结构型模式主要用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南。

行为型模式主要用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南。

【问题2】

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

参考答案:

创建型模式:构造器模式、原型模式。

结构型模式:适配器模式、外观模式、代理模式。

行为型模式:命令模式、中介模式、状态模式和策略模式。

【问题3】

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

参考答案:

(1)策略模式

解决方案:在具有公共接口的独立类中定义每个计算。可以利用该模式创建各种促销类,它们从同一个超类继承。每个类都有相同名称的标准接口方法,用于根据订单编号计算将要折扣的金额总数。计算每个促销的内部代码对促销类来说完全不同。

(2)适配器模式

解决方案:增加一个类作为适配器,转换类的接口到客户端类期望的另一个接口。实现一个适配器类,这个类为系统的其他部分提供了一个不变的方法供调用,为了集成不同商品供应商提供的税率计算类,编写一个适配器类的子类,包含调用购买类所需的代码。该子类将系统的调用映射到某个供应商的税率计算类。如果要更换供应商,那么只需要写一个新的适配器子类,其他保持不变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hash表】出现次数最多的单词-力扣 819

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

GE WESDAC D20ME 模拟输入电子模块

GE WESDAC D20ME 是一款模拟输入电子模块,通常用于工业自动化和控制系统中,用于采集模拟信号和传感器数据。以下是该模块的一些主要产品功能: 模拟输入通道:WESDAC D20ME 模块通常具有多个模拟输入通道,用于接收模拟信…

NI SCXI-1127 伺服驱动模块

NI SCXI-1127 伺服驱动模块是 National Instruments(NI)生产的一种用于伺服控制系统的模块。以下是该模块的一些主要产品功能: 伺服控制:SCXI-1127 模块专门设计用于伺服控制应用。它可以接受控制信号并驱动伺服电机以实现精确的位…

playwright的安装与使用

一、安装 所有安装严格按照指定版本,不然可能会报错,为啥报错我也不知道 1、准备环境 win10(playwright好像不支持win7 python2) 2、 安装python3.7.9(这个是为了兼容robot) https://www.python.org/do…

Spring实例化源码解析之BeanFacotryPostProcessor和BeanDefinitionRegistryPostProcessor(一)

invokeBeanFactoryPostProcessors 前言 AbstractApplicationContext类的refresh方法是spring实例化流程的开始。本章主要是介绍invokeBeanFactoryPostProcessors(beanFactory)方法,对其内部源码进行详细分析。接下来就来看看这句简单的代码后面具体做了什么。Spri…

9月第3周榜单丨哔哩哔哩飞瓜数据B站UP主排行榜发布!

飞瓜轻数发布2023年9月11日-9月17日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能…

每日一题~二叉搜索树中的插入操作

题目链接:701. 二叉搜索树中的插入操作 - 力扣(LeetCode) 题目描述: 思路分析:由题可知,题目的要求是给我们一个二叉搜索树和一个 val,将这个 val 插入到二叉搜索树中,并且这个树仍…

新型BI解决方案:SaaS BI,在浏览器上分析数据

在当今数字化时代,企业需要处理海量数据以制定精确的业务策略。然而,传统BI工具的繁琐安装和配置过程,让许多企业望而却步。幸运的是,一种新型的商业智能(BI)解决方案——SaaS BI系统,解决了这个…

戴口罩 目标检测数据集-12000张

今天要介绍的数据集则是戴口罩 目标检测数据集: 数据集名称:戴口罩 目标检测数据集 数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):以…

面试常谈的Binder理解,每个人都不一样~

面试官提了一个问题,我们来看看 😎、😨 和 🤔️ 三位同学的表现如何吧 😎 自认为无所不知,水平已达应用开发天花板,目前月薪 10k 面试官️:谈谈你对 binder 的理解 😎&a…

Topaz Photo AI for Mac 图像智能ai降噪工具

Topaz Photo AI是一款基于人工智能技术的图像编辑软件,它可以帮助用户提升照片质量,使外观更加清晰锐利。这款软件不仅可作为独立的软件使用,也可作为Photoshop的插件,以及能在Lightroom Classic、Capture One中调用。 Topaz Pho…

【Android】关于Activity的onSaveInstanceState生命周期

最近笔者求职时面试一家大厂,被问到Activity的生命周期,其中面试官着重问了onSaveInstanceState的调用是在onStop之前还是之后,本人当时有点蒙圈,之前也没有关注它到底是在OnStop之前还是之后。 但是这个方法在什么时候调用的重要…

Centos7原生hadoop环境,搭建Impala集群和负载均衡配置

Centos7原生hadoop环境,搭建Impala集群和负载均衡配置 impala介绍 Impala集群包含一个Catalog Server (Catalogd)、一个Statestore Server (Statestored) 和若干个Impala Daemon (Impalad)。Catalogd主要负责元数据的获取和DDL的执行,Statestored主要负…

电商领域五强对比:Amazon、eBay、Wish、Target、Newegg,谁更胜一筹?(测评补单)

随着互联网的快速发展,电子商务成为了现代消费的主要方式。在众多电商平台中,Amazon、eBay、Wish、Target、Newegg是备受瞩目的电商巨头。它们在全球范围内拥有庞大的用户群体,提供了丰富的商品选择和便捷的购物体验。本文将对这些电商平台进…

Python网页信息爬取脚本

文章目录 获取整个页面所有源码筛选出源码中图片地址将图片下载到本地完整脚本 获取整个页面所有源码 该步骤可以用requests模块实现,分为下面步骤: 定义一个URL 地址; 发送HTTP 请求; 处理HTTP 响应。 下面代码定义了一个get_Html方法&…

jenkins中添加sonnarqube与OWASP Dependency-Check

jenkins jenkins离线插件地址: http://updates.jenkins-ci.org/download/plugins https://updates.jenkins.io/download/plugins https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins 国内linux 安装jdk11 文档: https://blog.51cto.co…

流量狂飙!暴涨2000万播放成B站创作标杆

“民以食为天”,美食品类内容是人们日常生活所需延伸出来的一个内容版块,用户浏览量大、众多内容创作者并驱争先,一直到今天,所有人有目共睹美食内容是如何在“内卷”。 饶是如此赛道拥挤的美食圈,也有众多创作者不断…

java字符串压缩和字符串解压

java字符串压缩和字符串解压 运行效果 java工具类 CompressUtil.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.apache.commons.codec.binary.Base64;import java.io.BufferedReader; import java.io.Byte…

【LeetCode-中等题】116. 填充每个节点的下一个右侧节点指针

文章目录 题目方法一:直接让每层不是最后一个的节点指向此时队首元素方法二:用list记录下每层的节点 然后再做链接 题目 方法一:直接让每层不是最后一个的节点指向此时队首元素 class Solution {public Node connect(Node root) {if(root nu…

健身完全手册

文章目录 饮食完全手册摄入总量日内分配来源和配餐方法专题&错误 训练完全手册训练分化动作模式胸背手肩腿臀腹训练计划 减脂完全手册胸肌训练(原理动作计划饮食)健身训练的分化、动作、配重体态大师 饮食完全手册 参考视频:&#x1f4a…