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

2023-09-20 16:57:30

在这里插入图片描述

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

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

典型例题 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)适配器模式

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

更多推荐

Altera&Xilinx公司FPGA简介

Intel/Altera公司Intel/Altera系列FPGA简介-知乎(zhihu.com)AlteraFPGA提供了多种可配置嵌入式SRAM、高速收发器、高速I/O、逻辑模块以及布线。其内置知识产权(IP)结合优秀的软件工具,缩短了FPGA开发时间,降低了功耗和成本。AlteraFPGA非常适合从大批量应用到目前

Windows驱动开发(一)第一个驱动程序

首先我们需要了解,在操作系统中,是分两种权限的,一种是内核态,我们也称为0环,一种是用户态,称之为3环。而在我们的电脑中,驱动程序是运行在内核态的,这意味着和操作系统内核是在同一权限的,而普通的应用程序的权限是最低的。高权限谁不想拥有呢,因此驱动程序是很有必要了解与学习的。比如我们熟知的防病毒软件,游戏保护等,现在都在

线性代数的本质(九)——二次型与合同

文章目录二次型与合同二次型与标准型二次型的分类度量矩阵与合同二次型与合同二次型与标准型Grant:二次型研究的是二次曲面在不同基下的坐标变换由解析几何的知识,我们了解到二次函数的一次项和常数项只是对函数图像进行平移,并不会改变图形的形状和大小。以一元二次函数为例而二次函数的二次项控制函数图像的大小和形状。以二元二次函数

性能测试之使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等)都可以使用该工具。但我并不鼓励这样做,我们应该根据当前所处的情况,基于被测对象、时间及成本考虑,采用最合适的

卓越领先!安全狗入选2023年福建省互联网综合实力50强

近日,福建省互联网协会在2023年东南科技论坛——智能算力助力数字经济产业融合发展论坛上正式发布2023年福建省互联网综合实力前50家企业最终评定结果。作为国内云原生安全领导厂商,安全狗凭借突出的竞争力和市场表现入选综合实力50强。厦门服云信息科技有限公司(品牌名:安全狗)成立于2013年,致力于提供云安全、(云)数据

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

什么是命名空间:命名空间是一个为Python中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python本身以Python字典的形式维护一个命名空间。让我们看一个例子,计算机中的目录文件系统结构。不用说,可以有多个目录,每个目录中都有一个同名的文件。但是,只要指定文件的绝对路径,就可以根据需要定向到该文件。实时的

利用免费的敏捷研发管理工具管理端到端敏捷研发流程

Leangoo领歌是Scrum中文网(scrum.cn)旗下的一款永久免费的敏捷研发管理工具。Leangoo领歌覆盖了敏捷研发全流程,它提供端到端敏捷研发管理解决方案,包括小型团队敏捷开发,规模化敏捷SAFe,ScrumofScrums大规模敏捷,涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。提供了不同视

【Rust 基础篇】Rust 声明宏:代码生成的魔法

导言Rust是一门以安全性和性能著称的系统级编程语言,它提供了强大的宏系统,使得开发者可以在编译期间生成代码,实现元编程(Metaprogramming)。宏是Rust中的一种特殊函数,它可以接受代码片段作为输入,并根据需要生成代码片段作为输出。本篇博客将深入探讨Rust中的声明宏,包括声明宏的定义、声明宏的特点、声明

【Rust 基础篇】Rust高级函数:函数作为参数与返回值

导言Rust是一门以安全性、并发性和性能著称的系统级编程语言。在Rust中,函数是一等公民,这意味着函数可以像其他数据类型一样被传递、作为参数传递给其他函数,也可以作为返回值返回。这使得Rust具有强大的高级函数(Higher-OrderFunctions)特性,可以写出更加简洁、灵活和功能强大的代码。本篇博客将深入探

基于微信小程序的医院预约挂号系统,附源码、数据库

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌1简介Java基于小程序的医院预约挂号小程序系统主要功能可以分为后台管理功能和前台的小程序展示功能,主要功能如下,后台管理包括,对医生信息管理,医生的预

怎么实现批量文本txt转音频wav

随着人工智能技术的不断发展,语音合成技术也得到了广泛应用。其中,文本转语音(Text-to-Speech,TTS)技术是语音合成技术中的重要一环。在过去的几年中,深度学习网络在TTS领域取得了显著的进展,并已经有一些成熟的方案可供使用。本文介绍了一种使用深度学习网络的本地化TTS方案,具有空间占用较大、运行速度较慢的缺

热文推荐