20250427-作 

题目

软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决问题。分解得越细,模块数量也就越多,设计者需要考虑模块之间的耦合度。

请围绕“论软件设计方法及其应用”论题,依次从以下三个方面进行论述。
1.概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。
2.详细阐述有哪些不同的软件设计方法,并说明每种方法的适用场景。
3.详细说明你所参与的软件开发项目中,使用了哪种软件设计方法,具体实施效果如何。


摘要

    某省预约挂号系统以下简称预约挂号系统,是我司自主研发集众多医疗功能于一体,旨为提高医疗服务体验,随着用户量的逐年攀升,系统面临着性能瓶颈和可用性的严重挑战,为保证系统持续稳定的运行下去,我司决定2023年3月正式启动对预约挂号系统的升级工作,我担任系统架构设计师,主要工作对系统架构的整体设计。软件设计方法有很多,例如给予构件的软件开发、原型开发方法和敏捷开发方法等,因项目是小团队开发,项目只有一年的工期开发过程需要简单化以节省时间,又因我司是医疗企业管理的标杆每周使用40小时工作制,根据这些特点我们采用了敏捷的开发方法,并在设计时通过沟通、简单、反馈和勇气这4个核心要求设计了整个预约挂号系统的开发规约。最后系统成功完成开发,也轻松应对名医抢号时期要求的高性能和可用性,得到了领导和组员的高度认可。

背景

    随着信息化时代的到来,各大医院纷纷拥抱线上系统,我司顺应时代潮流开发了一款集预约挂号、体检预约、报告查询和名医抢号等众多功能于一体,旨提高医疗服务质量和患者体验,为患者提供一个一站式、便捷化的医疗服务系统。然而,随着用户基数的逐年攀升,系统面临者性能瓶颈和可用性的严峻挑战,为了保证医疗服务项目的进一步提升,我司毅然决定2023年3月开始对预约挂号系统进行全面的升级工作,我担任系统架构设计师,主要的工作涵盖了系统架构的整体设计、技术栈的精准选型和各个核心阶段的评审工作。在软件设计方法的应用方面我司也采用了不少方法,如构件化开发方法、原型开发方法和敏捷开发方法等,结合我们项目有小团队开发、工期短需要简化流程和每周的40小时工作制,很适合敏捷开发方法,我们通过对系统自顶向下递归细化的方法设计出了具体的构件,然后每个构件通过敏捷开发方法从沟通、简单、反馈和勇气等4个方面设计构件的开发和实现的流程,大大加快了项目的进度,项目也如期的圆满完成。

理论

    我们经常使用的软件开发方法有构件化的开发方法、原型开发方法和敏捷开发方法等,他们的应用场景如下。
    构件化开发方法是一个将项目自顶向下的方式递归细化出合适的构件,然后通过自底向上的方式组装这些构件形成系统。主要的应用场景是:1)系统的模块化程度要求较高,要求高内聚和低耦合。2)注重每个构件的独立性,独立开发、独立部署等。3)根据业务构件选择不同的技术实现方案,灵活开发。
    原型化开发方法是专门应对系统需求不明确的场景,根据开发原型与用户、产品人员等需求提供者探讨需求,并逐步确定需求的流程。主要的应用场景是:1)原型方法根据使用的方式提供了抛弃式原型和演化试原型,可以应对需求未知时和需求方向确定需要确定细节的场景。根据功能方式提供了水平原型和垂直原型,水平原型即静态原型需要快速产出原型的场景,垂直原型即动态原型主要应用是逐步演化成系统或者需要清晰的表达产品交互动作的场景。
    敏捷开发方法是一个注重开发效率、以人为本、循序渐进的开发方法,其有注重沟通、简单设计、即时反馈和应对项目变更的勇气等特点,还提出了很多核心的工作流来指导开发,如结对编程、现场客户、小型发布等等。主要应用的场景:1)需要快速迭代得到一个可运行版本场景。2)想通过发布的功能及时纠正系统功能的缺陷和规避风险的场景。3)测试驱动开发的场景。4)客户能参实时的参与到项目开发中的场景。

实践

    预约挂号系统的整个开发周期为项目定义阶段、需求分析与设计阶段、具体实现阶段、运行维护阶段和客户评价阶段,根据小团队开发、需要简单设计、每周40小时的工作制等特点,我们选择使用敏捷开发模型,敏捷开发模型适合复杂的项目管理,我们在分析和设计阶段选择使用自顶向下逐层的划分业务,形成机构服务、用户服务、订单服务、支付服务、公共服务和三方医院对接服务,我们利用敏捷开发方法的沟通、简单、反馈和勇气逐个设计每个服务,下面说一下机构服务的是如何应用的,效果如何。
    沟通方面,在这一方法我们主要采用频繁的会议沟通模式,由于我们是工作是不同地点办公的场景,所以我们使用了某知名企业的线上会议软件,我们有每日晨会和周会两种模式,1)晨会:每天对机构服务的开发进度进行汇报,说明昨天的工作内容和今天要进行的工作,由于是小团队,所以开会时间短效率很高。2)周会:总结一周的工作进度和经验的分享。例如,经验分享方面,我们的机构服务原名是医院服务,就是通过在周会的经验分享中与医院代表沟通时由医院代表提出机构这一名词,发现很适用,能很好的诠释医院类,以及其包括的科室和医生类的总称呼,与领导汇报后改名机构服务。
    简单设计,在简单设计方面我们通过复用设计和简化开发流程两个阶段体现。1)复用设计:由于本次重构项目时间紧急,所以我们比较注重系统复用和机会复用阶段的设计,我们编写了复用计划主要包括了文档、构件和程序复用规约等等。例如:机构服务涉及用户查询医院、科室和医生,源系统采用ES搜索引擎存储三者名称并进行分词,重构系统继续使用ES作为存储方式,并对ES进行了安全方面的考量升级了ES的版本,还增加更多从用户习惯功能中收集来的常用搜索词汇也配置到了ES中,这些都是通过复用得来。2)简化开发流程:在设计机构服务时,对不能复用的功能进行简化设计,例如:新设计的功能,我们采用查看概要设计整理接口。比如:名医抢号功能的优化,首先,在概要设计时只使用序列图表示其流程、描述需要使用缓存提高性能、增加多台部署提高可用性等。然后,再由开发人员根据概要设计中模型和要求编写代码,每个逻辑快需要添加清晰的注释,使用代码即详细设计的策略。
    快速反馈,我们采用了随时会议的方式,在开发机构服务时难免会遇到敏感点、权衡点、风险点等系统的非功能性需求需要及时确认,我们提出及时沟通的模式,在不能及时沟通时也要采用预约模式,以达到快速解决问题的结果。
    勇气,我们在勇气方面采用小版本迭代的思想,以月为单位发布小版本,每月月初进行评估功能点。例如:没上线一次会进行工作总结和组织茶话会经验分享,以提高组员完成整个系统的信心,并在季度考核中提供旅游和聚餐等活动使开发人员面对挑战意志力更坚定。

结尾

    得益于敏捷开发方法的使用,2024年3月顺利完成了系统的上线工作,经过了一个月的精心推广,又吸引了大批量的用户,且系统在后面的名医抢号功能中表现出色,轻松应对高并发和万级的用户请求量,目前系统已经深度对接了11个市的500多家医院,项目组成员和领导都给予了高度的认可。但是,在开发初期,项目组新成员存在对敏捷开发方法理解有模糊之处,这一度阻碍了项目进度的顺利推进,针对这一问题,我们快速行动,通过项目组间人员的灵活调配完美解决了这一短板,同时我也吸取了教训。下一步,我们准备对预约挂号系统进行全面的迁移工作,通过这次的实施,我们对此次迁移工作充满信息,并且以更高的要求和标准来完成此次迁移。这次项目升级我对敏捷开发方法有了更深刻的认识,我的知识和经验得到了显著的提升,我也将更加努力提升自己,让自己在架构师之路上走的更远。

总结
1.实践部分一定要结合项目举例子,总结多一点例子。
    例如:
        沟通:晨会、周会、日报、周报、用户参与。周会讲经验:机构服务的机构由来。
        简单:复用、代码即详细设计(Swagger自动生成API文档)、编码格式统一(接口、实现类)、命名规范、持续集成持续部署(Jenkins、docker)。
        反馈:直接询问、电话联系、线上会议,解决权衡点、风险点,或者阻碍进度的问题。
        勇气:小型发布、集体代码、计划、聚餐、团建。
2.性能、可用性
    提到就要解决:
        性能:缓存、负载均衡、并发机制、资源调度。读写分离
        可用性:心跳、监控、冗余、事物。主备。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 自定义ComboBox,实现下拉框文本颜色设置

最近在做项目中遇到需求,在下拉框中,文本需要设置不同的颜色,遂网上了解了一番后,得出以下代码,可以完美实现效果,现分享出来! 1.实现效果 2.自定义类 colorcombobox.h #ifndef COLORCOMBOBOX…

【时间戳】

在编程竞赛和高效数据处理场景中,时间戳技巧是一种极其高效的标记方法,常用于避免频繁清空数组或 map,提高算法运行效率。本文将从定义、应用场景、模板代码、技巧细节等方面系统整理时间戳的使用方式。 一、时间戳技巧是什么? 时…

json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig)

有一次爬虫遇到了json的字符串响应对象 然后转为json对象 报这个错误 raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)", json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0) 意思是叫…

python训练day43 复习日

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader, random_split import matplotlib.pyplot as plt import numpy as np# 设置中文字体支持,避免绘图时中文…

C++11 lambda

前言 在Cpp11以前,为了把函数当作对象调用,可以使用C中的函数指针类型,也可以使用Cpp98的仿函数。 但二者都不是很好用,函数指针 return_type (*name)(parameters)的长相就令人望而却步,仿函数将一个函数重载为一个类…

【国产化-K8s】混合架构的 K8s + KubeSphere 部署指南

本文由 KubeSphere 社区贡献者 天行1st 编写。本文为作者实践总结。本文记录了在信创环境中基于混合架构(x86 与 ARM64)部署 Kubernetes 和 KubeSphere 的实践过程,覆盖多种国产 CPU 和操作系统,具有一定的参考价值。 环境涉及软…

利用python实现NBA数据可视化

大家好,今天我们利用python爬取NBA球星每年的比赛数据并进行可视化展示。主要用到三个模块:xpath、matplotlib。其中xpth负责爬取网站上的信息。Matplotlib是Python开发人员常用的Python绘图库,可以用来绘制各种2D图形,具有绘图质…

基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现

摘要 本研究针对传统医疗预约与诊断流程中存在的效率低下、信息不透明、患者等待时间长等问题,设计并实现了一个基于 SpringBootJSP 的医疗预约与诊断系统。系统采用 B/S 架构,整合了用户管理、科室管理、医生排班、预约挂号、在线问诊、检查检验、诊断…

2025.6.27总结

最近工作又开始内耗了,一位同事的转岗直接让我破防了,明明他工作干得很不错,会得又多,性格又好,我还经常请教他业务上的问题。我和他的关系并不算太好,但他加入其他部门,竟然让我有些不舍&#…

详解HashMap底层原理

核心数据结构&#xff1a;数组 链表 / 红黑树 HashMap 的底层核心是一个 Node<K,V>[] table 数组&#xff08;通常称为 桶数组 或 哈希桶数组&#xff09;。这个数组的每个元素称为一个 桶。 Node<K,V> (链表节点)&#xff1a; 这是存储键值对的基本单位&#xf…

历史项目依赖库Bugfix技巧-类覆盖

在项目维护过程中&#xff0c;我们可能会遇到历史项目依赖的第三方库出现BUG而需要修复的情况&#xff0c;而这些第三方库可能来源于公司自主开发或开源项目&#xff0c;但由于各种原因&#xff0c;这些库可能已无人维护。 此时&#xff0c;解决这个问题有三个办法 1、基于源…

多模态大型语言模型最新综述

多模态大型语言模型&#xff08;Multimodal Large Language Models&#xff0c;MLLMs&#xff09;已迅速发展&#xff0c;超越了文本生成的范畴&#xff0c;如今能够覆盖图像、音乐、视频、人类动作以及三维物体等多种输出模态。它们通过在统一架构下将语言与其他感知模态整合&…

使用ASIO的协程实现高并发服务器

使用ASIO的协程实现高并发服务器 在 C 网络编程领域&#xff0c;Asio 库提供了两种主要的异步编程范式&#xff1a;传统的回调模式和基于协程的现代模式&#xff0c;传统的回调模式大家都很清楚&#xff0c;这里不多做介绍&#xff0c;本文主要介绍基于协程的模式&#xff0c;…

OpenCV——轮廓检测

轮廓检测 一、轮廓检测二、轮廓的层级三、轮廓的特征3.1、轮廓面积3.2、轮廓周长3.3、边界矩形3.4、最小外接圆3.5、近似轮廓3.6、凸包 一、轮廓检测 轮廓可以简单的描述为具有相同颜色或灰度的连续点连在一起的一条曲线&#xff0c;轮廓通畅会显示出图像中物体的形状。关于轮…

高等概率论题解-心得笔记【15】

文章目录 拓扑参考文献 拓扑 参考文献 《测度论基础与高等概率论》

Windows 10关闭自动更新功能

Windows 10关闭自动更新功能&#xff0c;大家是不是经常用下面的几个步骤&#xff1a; 1、禁用Windows Update服务&#xff1b; 2、在组策略里关闭Win10自动更新相关服务&#xff1b; 3、禁用任务计划里边的Win10自动更新&#xff1b; 4、在注册表中关闭Win10自动更新&…

[Meetily后端框架] 配置指南 | 后端API网关 | API文档体系

链接: https://github.com/Zackriya-Solutions/meeting-minutes docs&#xff1a;会议纪要管理系统 本项目是一个专门用于**处理会议记录**的后端系统。 系统接收会议文本内容&#xff0c;利用先进的AI模型自动识别关键信息&#xff0c;包括行动项、决策内容以及截止期限。 处…

Flink2.0 配置 historyserver

Flink2.0 配置 historyserver 主要是去修改config.yaml配置文件 主要修改的点有两个 网上很多文档都是写的只配置一个 都是坑啊 historyserver :历史服务器 运行 Flink job 的集群一旦停止(例如yarn模式&#xff0c;程序一旦停止&#xff0c;集群也就关闭了)&#xff0c;只能去…

LLM的训练过程

一般而言&#xff0c;训练一个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。 1.预训练 Pretrain&#xff0c;即预训练&#xff0c;是训练 LLM 最核心也是工程量最大的第一步。LLM 的预训练和传统预训练模型非常类似&#xff0c;同样是使用海量无监督文本对随…

用 AI + Canvas 生成图形、动画与图表

摘要 随着人工智能&#xff08;AI&#xff09;技术与 Web 可视化的结合&#xff0c;前端开发者可以通过自然语言生成复杂的图表、动画和交互式画布&#xff0c;极大地提升了开发效率和用户体验。本文作为《AI 前端&#xff1a;构建智能化 Web 应用的未来》专栏的第七篇&#…