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.性能、可用性
? ? 提到就要解決:
? ? ? ? 性能:緩存、負載均衡、并發機制、資源調度。讀寫分離
? ? ? ? 可用性:心跳、監控、冗余、事物。主備。