論軟件設計方法及其應用

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 應用的未來》專欄的第七篇&#…