地圖與項(xiàng)目落地全流程)
很多同學(xué)都會(huì)被結(jié)構(gòu)化方法、OOA、UML、設(shè)計(jì)模式、Scrum、ABSD、ATAM 這一堆概念繞暈它們有的像方法有的像工具有的管項(xiàng)目節(jié)奏有的管代碼設(shè)計(jì)常常被放在一起考卻根本不在同一個(gè)維度上。很多資料要么零散羅列概念要么錯(cuò)誤地把不同層級(jí)的內(nèi)容強(qiáng)行并列反而越看越亂。本文就把這些核心概念按「從思想到工具、從宏觀到微觀」梳理成清晰的六層體系再結(jié)合真實(shí)項(xiàng)目全流程講清每個(gè)階段到底用什么、為什么用一次性理清所有關(guān)系。一、先澄清一個(gè)核心誤區(qū)它們從來不是并列關(guān)系這些概念分屬軟件工程的不同維度、不同粒度、不同階段本質(zhì)是「分層嵌套 正交配合」的關(guān)系有的是底層指導(dǎo)思想范型貫穿整個(gè)項(xiàng)目生命周期有的是項(xiàng)目管理流程和技術(shù)實(shí)現(xiàn)完全無關(guān)有的是宏觀架構(gòu)方法有的是微觀代碼經(jīng)驗(yàn)還有的只是表達(dá)工具服務(wù)于上層的設(shè)計(jì)方法。把它們放在同一層級(jí)對(duì)比就像把 “烹飪菜系”“上菜流程”“炒鍋”“菜譜” 放在一起比較本質(zhì)是維度混淆。二、六層知識(shí)體系從「道」到「器」逐層拆解我們可以把所有概念歸入六層體系越往上越抽象、越全局越往下越具體、越落地。第一層底層開發(fā)范型 —— 決定你「用什么視角拆解系統(tǒng)」定位最核心的方法論底層屬于「道」的層面貫穿需求、設(shè)計(jì)、編碼全生命周期決定了整個(gè)團(tuán)隊(duì)看待系統(tǒng)的核心視角。核心概念結(jié)構(gòu)化方法面向過程、面向?qū)ο蠓椒∣O、面向服務(wù)方法SOA、面向切面編程AOP等。核心說明結(jié)構(gòu)化方法是一整套完整體系核心是「自頂向下、逐層分解」以數(shù)據(jù)流為核心把系統(tǒng)拆成一個(gè)個(gè)功能模塊包含結(jié)構(gòu)化分析SA、結(jié)構(gòu)化設(shè)計(jì)SD、結(jié)構(gòu)化編程SP三個(gè)階段。面向?qū)ο蠓椒ㄍ瑯邮峭暾w系核心是「對(duì)象、封裝、繼承、多態(tài)」把系統(tǒng)抽象成一個(gè)個(gè)交互的對(duì)象更貼合現(xiàn)實(shí)認(rèn)知也更易應(yīng)對(duì)需求變化包含 OOA分析、OOD設(shè)計(jì)、OOP編程三個(gè)階段??键c(diǎn)提示結(jié)構(gòu)化方法、面向?qū)ο蠓椒ㄊ峭暾_發(fā)范型而 SA/SD、OOA/OOD 只是對(duì)應(yīng)范型下的單個(gè)階段方法二者不是同一層級(jí)。第二層過程模型與框架 —— 決定你「按什么節(jié)奏交付項(xiàng)目」定位項(xiàng)目管理與交付流程維度和技術(shù)開發(fā)范型完全正交互不綁定—— 它不管你代碼怎么寫只管項(xiàng)目怎么拆、怎么迭代、怎么協(xié)作。核心概念傳統(tǒng)過程模型瀑布模型、增量模型、螺旋模型、噴泉模型敏捷過程框架Scrum、XP極限編程、Kanban看板統(tǒng)一過程RUP統(tǒng)一軟件開發(fā)過程。核心說明Scrum 是最典型的敏捷過程框架只定義了三個(gè)角色、五個(gè)事件、三個(gè)工件比如 Sprint 沖刺、每日站會(huì)、評(píng)審回顧完全不約束技術(shù)選型。正交關(guān)系意味著你可以用 Scrum 做面向?qū)ο箝_發(fā)也可以用 Scrum 做結(jié)構(gòu)化開發(fā)反過來瀑布模型也可以搭配面向?qū)ο蠓椒āevOpsDevelopment Operations開發(fā)運(yùn)維一體化同樣歸屬于這一層它是敏捷過程向運(yùn)維側(cè)的延伸是打通開發(fā)、測(cè)試、運(yùn)維全鏈路的工程體系而非單一工具或單一流程。它的核心是打破部門墻讓開發(fā)、運(yùn)維、測(cè)試共同對(duì)交付效率與線上穩(wěn)定性負(fù)責(zé)最終實(shí)現(xiàn)「高頻、穩(wěn)定、低風(fēng)險(xiǎn)」的軟件交付。考點(diǎn)提示Scrum 屬于過程管理框架不是開發(fā)方法也不屬于面向?qū)ο篌w系。Scrum 聚焦開發(fā)團(tuán)隊(duì)內(nèi)部的迭代管理解決「需求怎么拆、迭代怎么排、團(tuán)隊(duì)怎么協(xié)作」的問題DevOps 覆蓋從代碼提交到線上運(yùn)維的全鏈路解決「代碼怎么快速、穩(wěn)定地上線并持續(xù)健康運(yùn)行」的問題。第三層架構(gòu)設(shè)計(jì)與評(píng)估方法 —— 決定你「系統(tǒng)骨架怎么搭、怎么驗(yàn)」定位系統(tǒng)宏觀層級(jí)關(guān)注整體結(jié)構(gòu)、組件劃分、質(zhì)量屬性性能、可用性、安全性、可維護(hù)性是銜接業(yè)務(wù)需求與技術(shù)實(shí)現(xiàn)的頂層設(shè)計(jì)。核心概念架構(gòu)設(shè)計(jì)方法ABSD基于架構(gòu)的軟件設(shè)計(jì)、DSSA特定領(lǐng)域軟件架構(gòu)架構(gòu)評(píng)估方法ATAM架構(gòu)權(quán)衡分析方法、SAAM軟件架構(gòu)分析方法。核心說明ABSD 是設(shè)計(jì)架構(gòu)的方法論核心是「以質(zhì)量屬性驅(qū)動(dòng)架構(gòu)分解」通過場(chǎng)景化的質(zhì)量需求推導(dǎo)出系統(tǒng)的組件劃分、接口定義和架構(gòu)風(fēng)格。ATAM 是驗(yàn)證架構(gòu)的工具核心是識(shí)別架構(gòu)風(fēng)險(xiǎn)、分析質(zhì)量屬性之間的權(quán)衡比如性能和可維護(hù)性的沖突是「設(shè)計(jì) - 評(píng)估 - 優(yōu)化」閉環(huán)里的評(píng)估環(huán)節(jié)??键c(diǎn)提示嚴(yán)格區(qū)分「架構(gòu)設(shè)計(jì)方法」和「架構(gòu)評(píng)估方法」ATAM 是評(píng)估方法不是設(shè)計(jì)方法。第四層分析與設(shè)計(jì)方法 —— 范型指導(dǎo)下的階段落地方法定位在底層開發(fā)范型的指導(dǎo)下對(duì)應(yīng)需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)階段的具體執(zhí)行方法是思想到實(shí)踐的橋梁。核心概念結(jié)構(gòu)化體系SA結(jié)構(gòu)化分析、SD結(jié)構(gòu)化設(shè)計(jì)面向?qū)ο篌w系OOA面向?qū)ο蠓治?、OOD面向?qū)ο笤O(shè)計(jì)。核心說明SA 階段用數(shù)據(jù)流圖、數(shù)據(jù)字典、加工邏輯描述需求SD 階段用模塊結(jié)構(gòu)圖設(shè)計(jì)系統(tǒng)分層遵循高內(nèi)聚低耦合原則。OOA 階段識(shí)別業(yè)務(wù)對(duì)象、屬性、關(guān)系和行為OOD 階段細(xì)化類結(jié)構(gòu)、接口規(guī)范、交互邏輯銜接編碼實(shí)現(xiàn)??键c(diǎn)提示OOA/OOD 是面向?qū)ο蠓缎偷膬蓚€(gè)階段不是獨(dú)立的開發(fā)方法不能和 “結(jié)構(gòu)化方法” 平級(jí)并列。第五層建模語言與工具 —— 決定你「用什么圖形表達(dá)設(shè)計(jì)成果」定位可視化表達(dá)的載體和工具服務(wù)于上層的分析設(shè)計(jì)方法本身不提供設(shè)計(jì)思路只提供標(biāo)準(zhǔn)化的表達(dá)方式。核心概念UML統(tǒng)一建模語言、數(shù)據(jù)流圖DFD、ER 圖、狀態(tài)轉(zhuǎn)換圖、程序流程圖等。核心說明UML 是面向?qū)ο蠓椒ǖ臉?biāo)準(zhǔn)建模語言用例圖表達(dá)功能需求類圖表達(dá)靜態(tài)結(jié)構(gòu)時(shí)序圖 / 協(xié)作圖表達(dá)動(dòng)態(tài)交互組件圖 / 部署圖表達(dá)架構(gòu)。數(shù)據(jù)流圖是結(jié)構(gòu)化分析的核心工具ER 圖是數(shù)據(jù)建模的通用工具。考點(diǎn)提示UML 是建模語言 / 工具不是開發(fā)方法它主要服務(wù)于面向?qū)ο蠓椒ǖ部删植坑糜谄渌麍?chǎng)景。第六層設(shè)計(jì)模式與架構(gòu)模式 —— 不同粒度的最佳實(shí)踐沉淀定位前人總結(jié)的、可復(fù)用的場(chǎng)景化解決方案是經(jīng)驗(yàn)沉淀分宏觀架構(gòu)級(jí)和微觀代碼級(jí)兩個(gè)粒度。核心概念架構(gòu)模式宏觀系統(tǒng)級(jí)分層架構(gòu)、微服務(wù)架構(gòu)、事件驅(qū)動(dòng)架構(gòu)、C/S、B/S、MVC 等設(shè)計(jì)模式微觀類級(jí)GoF 23 種經(jīng)典設(shè)計(jì)模式如單例、工廠、適配器、觀察者、策略模式等。核心說明架構(gòu)模式是 ABSD 架構(gòu)設(shè)計(jì)中的核心選型決定系統(tǒng)的整體結(jié)構(gòu)風(fēng)格系統(tǒng)架構(gòu)風(fēng)格是 ABSD 架構(gòu)設(shè)計(jì)方法的核心產(chǎn)出之一設(shè)計(jì)模式是 OOD 詳細(xì)設(shè)計(jì)中的工具箱解決特定場(chǎng)景的類設(shè)計(jì)問題通常用 UML 類圖來描述標(biāo)準(zhǔn)結(jié)構(gòu)??键c(diǎn)提示嚴(yán)格區(qū)分「架構(gòu)模式」和「設(shè)計(jì)模式」的粒度設(shè)計(jì)模式屬于面向?qū)ο笤O(shè)計(jì)的最佳實(shí)踐不是獨(dú)立的開發(fā)方法。三、項(xiàng)目全流程落地每個(gè)階段到底用什么光有層級(jí)還不夠我們用一個(gè)典型的企業(yè)級(jí) OA 系統(tǒng)升級(jí)項(xiàng)目為例搭配「Scrum 敏捷過程 面向?qū)ο箝_發(fā) 架構(gòu)驅(qū)動(dòng)設(shè)計(jì)」的組合串起所有概念的落地時(shí)機(jī)。階段 1項(xiàng)目立項(xiàng)與架構(gòu)規(guī)劃這一階段定方向、定骨架是高層決策環(huán)節(jié)。過程層確定采用 Scrum 敏捷開發(fā)框架明確產(chǎn)品負(fù)責(zé)人、Scrum Master 和開發(fā)團(tuán)隊(duì)制定 3 個(gè)月的發(fā)布計(jì)劃拆分多個(gè) 2 周 Sprint。架構(gòu)設(shè)計(jì)基于核心業(yè)務(wù)需求采用ABSD 方法進(jìn)行架構(gòu)設(shè)計(jì)識(shí)別核心質(zhì)量屬性高可用、易擴(kuò)展、審批流程靈活選型 B/S 分層架構(gòu)架構(gòu)模式劃分為表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層、基礎(chǔ)設(shè)施層定義各層接口規(guī)范。架構(gòu)評(píng)估產(chǎn)出初步架構(gòu)方案后用ATAM 方法組織架構(gòu)評(píng)審邀請(qǐng)業(yè)務(wù)、開發(fā)、運(yùn)維多方參與通過質(zhì)量場(chǎng)景打分識(shí)別出 “審批流程變更頻繁” 帶來的可擴(kuò)展性風(fēng)險(xiǎn)確認(rèn)分層 策略模式的組合可以應(yīng)對(duì)同時(shí)權(quán)衡性能與靈活性的取舍。階段 2需求分析Sprint 待辦梳理這一階段把業(yè)務(wù)需求轉(zhuǎn)化為技術(shù)可識(shí)別的模型。底層范型全程采用面向?qū)ο蠓椒ㄖ笇?dǎo)分析工作。分析方法使用OOA 方法梳理需求識(shí)別核心業(yè)務(wù)對(duì)象用戶、角色、審批單、部門、通知定義對(duì)象的屬性和核心行為梳理對(duì)象之間的關(guān)聯(lián)、依賴、繼承關(guān)系。建模工具用UML 用例圖輸出全量功能清單用 UML 領(lǐng)域類圖梳理實(shí)體關(guān)系用 UML 活動(dòng)圖畫出請(qǐng)假、報(bào)銷等審批流程。局部補(bǔ)充針對(duì)財(cái)務(wù)報(bào)表數(shù)據(jù)流轉(zhuǎn)這類流程清晰、邏輯固定的模塊局部使用結(jié)構(gòu)化分析SA補(bǔ)充數(shù)據(jù)流圖梳理數(shù)據(jù)加工鏈路。階段 3概要設(shè)計(jì)模塊與接口設(shè)計(jì)這一階段把需求模型轉(zhuǎn)化為系統(tǒng)結(jié)構(gòu)銜接架構(gòu)與編碼。架構(gòu)落地基于 ABSD 的分層架構(gòu)細(xì)化組件劃分比如業(yè)務(wù)層拆分為用戶中心、審批引擎、消息中心等獨(dú)立組件。設(shè)計(jì)方法使用OOD 方法進(jìn)行模塊級(jí)設(shè)計(jì)劃分包結(jié)構(gòu)定義每個(gè)組件的對(duì)外接口明確類的職責(zé)邊界遵循單一職責(zé)、開閉原則等面向?qū)ο笤O(shè)計(jì)原則。建模工具用UML 組件圖表達(dá)模塊依賴關(guān)系用 UML 包圖梳理代碼結(jié)構(gòu)用 UML 部署圖規(guī)劃應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器的部署方案。架構(gòu)模式表現(xiàn)層落地 MVC 架構(gòu)模式分離視圖、控制器、業(yè)務(wù)模型。階段 4詳細(xì)設(shè)計(jì)類級(jí)與代碼級(jí)設(shè)計(jì)這一階段細(xì)化到代碼層面的類結(jié)構(gòu)與交互邏輯。設(shè)計(jì)方法OOD 詳細(xì)設(shè)計(jì)細(xì)化每個(gè)類的屬性、方法、訪問權(quán)限定義對(duì)象之間的調(diào)用關(guān)系。最佳實(shí)踐引入設(shè)計(jì)模式優(yōu)化設(shè)計(jì)審批狀態(tài)流轉(zhuǎn)用「狀態(tài)模式」避免大量 if-else 判斷審批通過后的多渠道通知站內(nèi)信、郵件、短信用「觀察者模式」多數(shù)據(jù)庫適配用「抽象工廠模式」。建模工具用UML 時(shí)序圖畫出審批流程的對(duì)象交互鏈路用 UML 類圖畫出設(shè)計(jì)模式的標(biāo)準(zhǔn)類結(jié)構(gòu)。階段 5編碼實(shí)現(xiàn)與迭代交付這一階段把設(shè)計(jì)落地為代碼按過程框架循環(huán)交付。底層范型采用面向?qū)ο缶幊蘋OP用 Java 語言落地所有類與接口。過程執(zhí)行嚴(yán)格按Scrum節(jié)奏推進(jìn)每個(gè) Sprint 啟動(dòng)會(huì)拆分任務(wù)每日站會(huì)同步進(jìn)度與阻塞點(diǎn)Sprint 結(jié)束后做功能評(píng)審演示最后做回顧會(huì)總結(jié)改進(jìn)。整個(gè)迭代交付過程由 DevOps 體系提供底層工程支撐代碼提交后自動(dòng)觸發(fā) CI 流水線依次完成代碼編譯、單元測(cè)試、代碼質(zhì)量掃描、鏡像打包一鍵部署到對(duì)應(yīng)測(cè)試環(huán)境。自動(dòng)化流水線大幅減少了人工操作成本也保障了每個(gè) Sprint 交付物的一致性與質(zhì)量。通用方法單元測(cè)試階段等價(jià)類劃分、邊界值分析等結(jié)構(gòu)化測(cè)試方法依然通用和開發(fā)范型無關(guān)。階段 6上線運(yùn)維與迭代優(yōu)化這一階段驗(yàn)證架構(gòu)效果支撐后續(xù)迭代。線上運(yùn)維是 DevOps 的核心陣地通過 CD 流水線實(shí)現(xiàn)自動(dòng)化生產(chǎn)發(fā)布支持藍(lán)綠發(fā)布、灰度發(fā)布等策略大幅降低上線風(fēng)險(xiǎn)配合全鏈路監(jiān)控、日志聚合、告警體系能夠快速定位線上故障。架構(gòu)復(fù)盤系統(tǒng)上線運(yùn)行 1 個(gè)月后基于真實(shí)運(yùn)行數(shù)據(jù)用ATAM的思路復(fù)盤架構(gòu)驗(yàn)證高可用、性能等質(zhì)量屬性是否達(dá)標(biāo)識(shí)別新的架構(gòu)風(fēng)險(xiǎn)為下一輪架構(gòu)優(yōu)化提供輸入。持續(xù)迭代新需求、優(yōu)化項(xiàng)繼續(xù)進(jìn)入產(chǎn)品待辦列表按 Scrum 流程開啟下一輪 Sprint形成「需求 - 設(shè)計(jì) - 開發(fā) - 反饋」的閉環(huán)。四、系統(tǒng)分析師高頻易錯(cuò)點(diǎn)總結(jié)層級(jí)歸類ATAM 是架構(gòu)評(píng)估方法不是設(shè)計(jì)方法Scrum 是過程框架不是開發(fā)方法UML 是建模工具不是開發(fā)方法。正交關(guān)系敏捷 / Scrum 和面向?qū)ο鬀]有綁定關(guān)系二者是不同維度的概念可以任意組合。粒度區(qū)分分層、微服務(wù)是架構(gòu)模式不是設(shè)計(jì)模式單例、觀察者是設(shè)計(jì)模式屬于微觀類級(jí)方案。從屬關(guān)系OOA/OOD 從屬于面向?qū)ο箝_發(fā)范型SA/SD 從屬于結(jié)構(gòu)化開發(fā)范型二者是兩代方法論的階段產(chǎn)物不能平級(jí)并列。架構(gòu)風(fēng)格≠設(shè)計(jì)模式分層、微服務(wù)、事件驅(qū)動(dòng)屬于架構(gòu)模式系統(tǒng)級(jí)單例、工廠、觀察者屬于設(shè)計(jì)模式類級(jí)二者粒度不同對(duì)應(yīng)設(shè)計(jì)階段不同。DevOps≠Scrum二者同屬過程交付維度但 Scrum 是敏捷開發(fā)管理框架聚焦開發(fā)迭代節(jié)奏DevOps 是全鏈路工程體系覆蓋開發(fā)到運(yùn)維全流程二者是互補(bǔ)關(guān)系而非同類概念。至此從底層開發(fā)范型、過程框架、架構(gòu)方法到分析設(shè)計(jì)、建模工具、最佳實(shí)踐再到全鏈路的 DevOps 交付閉環(huán)軟件工程的核心概念就形成了一套完整、自洽的知識(shí)地圖。