《2-張超-追求大規模代碼重構的極致.pdf》由會員分享,可在線閱讀,更多相關《2-張超-追求大規模代碼重構的極致.pdf(45頁珍藏版)》請在三個皮匠報告上搜索。
1、追求大規模軟件重構的追求大規模軟件重構的極致極致2023 深圳站張超張超在大型系統級軟件的領域建模、架構設計、軟件重構、自動化測試、性能優化等方面有超過十年的開發和咨詢經驗。曾深入輔導多個大規模嵌入式團隊進行架構設計和代碼重構,擅長利用各種優秀工程技術實踐和設計方法論幫助團隊解決業務痛點,例如:重構、持續集成、結對編程、開發者測試等,在輔導過程中幫助團隊和個人提高研發工程效率。樂于分享,擅長因地制宜的幫助團隊循序漸進和調整設計。獨立技術顧問嘉賓照片2023 深圳站目錄目錄CONTENTS大規模重構的挑戰01 領域架構模型“極致的方向正確“02 測試防護網“極致的質量”03 工程提供“極致的保障
2、”04 實現模式“極致的落地”05 總結與感悟06 2023 深圳站0101大規模重構大規模重構的挑戰的挑戰2023 深圳站大規模軟件重構面臨多方面大規模軟件重構面臨多方面的挑戰的挑戰為何需要大規模重構對比代碼級重構 手法和壞味道識別是基礎 大病還需大手術 相輔相成重構與重寫 宏觀意義上重構 微觀意義上重寫 是否遵循“新建+替換,可工作”的節奏和原則。軟件的熵增 架構的演進 人員的更迭牽扯面廣利益沖突 程序員希望有更清爽的代碼 質量主管希望有更少的bug 項目經理希望不要影響主干 架構師希望更容易看護架構2023 深圳站重構的極致在重構的極致在哪里?哪里?由于變化的絕對存在,不存在絕對的極致。
3、對極致的追求既是一種態度,也是正確有效的前提。大規模軟件重構的極致探索:充分了解大規模軟件重構的維度和每個維度上極致的目標后,基于可調動的資源,圍繞合理的目標收益,精心設計的合理重構過程。橫向全面大規模重構涉及是否多維度?相關受益人是否都有收獲?可以利用的各種資源有哪些?縱向深入代碼有沒有最精煉?最佳測試分層?最全覆蓋?工程構建的效率是不是最高?合理選擇是否充分利用資源的情況下完成了最優的選擇?2023 深圳站大規模重構的全景與大規模重構的全景與原則原則以架構模型為核心設計的重構框架是正確開展大規模重構的前提,通過關注點分離降解復雜度,通過系統性的串聯確保整體最優開發工程開發者測試領域架構模型
4、 模型確保結構質量 測試確保細節質量 工程確保過程質量質量質量 模型一致保障溝通效率 測試反饋提高驗證效率 工程能力提升研發效率效率效率軟件實現設計2023 深圳站項目背景項目背景-視頻處理芯片視頻處理芯片SDKSDK軟件是視頻圖像處理芯片的SDK軟件。芯片硬件支持多種算法。算法的執行順序可以配置不同,算法的輸入輸出在不同順序下會有相互影響,用戶可以開啟關閉算法,最終由SDK軟件配置到芯片寄存器上,芯片可以應用在電視和機頂盒兩個場景,不同應用場景對算法的配置有差異。對于的維護人員,除了可以進行更多詳細參數的配置外,還有故障診斷的能力,可以通過芯片故障檢查點發現故障,并可以通過配置相應的寄存器對
5、故障進行隔離。2023 深圳站0202領域架構模型領域架構模型“極致的極致的方向正確方向正確“2023 深圳站極致的建模與模型的極致的建模與模型的作用作用2023 深圳站重構建模設計重構建模設計-用例用例/場景場景模型模型:為靜態用例視圖提供交互對象的分析。:站在系統角度分析為主要交互對象提供的價值和如何與次要交互對象交互獲得信息。并分析用例間潛在的關系。2023 深圳站重構建模設計重構建模設計-用例用例/場景模型場景模型動態用例視圖:基于靜態用例視圖的場景產生明確交互的信息和順序追溯信息的來源和產生可以作為黑盒用例的輸入2023 深圳站重構建模設計重構建模設計-領域領域劃分劃分來自場景的概念
6、劃分到配置域和故障域:進行過上下文劃分的:算法、芯片域、故障域2023 深圳站重構建模設計重構建模設計-架構架構分層分層分層:架構選型區分不同關注點層級間關系分域:基于領域層劃分明確子領域間依賴關系子領域可以向上包含2023 深圳站重構建模設計重構建模設計-分離分離變化變化識別變化:識別變化:*數據變化*行為變化*類型變化*生命周期變化分離變化分離變化*參數化*接口化*模版化*語義化每種變化類型都可以采用每種變化類型都可以采用多種方式進行分離,具體多種方式進行分離,具體參照實現參照實現的復雜度。的復雜度。2023 深圳站重構建模設計重構建模設計-組合組合變化變化聚合根進行生命周期聚合工廠進行不
7、同類型的生產組裝倉儲存儲相同類型的對象配置中心進一步組合數據的關系DSL描述數據和行為的組合2023 深圳站重構建模設計重構建模設計-動態視圖動態視圖驗證驗證基于用例視圖相同場景驗證以建模后的元素進行交互基于對象關注生命周期,而非類的交互。2023 深圳站重構實施策略重構實施策略設計設計“自上而下”與“自下而上”的重構策略相結合讓大規模軟件重構徹底通透。全部自上而下影響范圍巨大,全部自下而上存在重復建設和模型提取不完整子領域內的建模設計基于最核心流程完成重構打樣形成最佳實踐輻射其他子領域頂層設計,子領域劃分基于子領域調整頂層視圖明確看護子領域之間的依賴自 下自 下而 上而 上自 上自 上而 下
8、而 下2023 深圳站重構實施計劃重構實施計劃設計設計經常需要兩條腿走路(測試補充與重構打樣)分域設計實現參考模塊的依賴關系新老兼容的設計要考慮2023 深圳站0303測試測試防護網防護網“極致的質量極致的質量”2023 深圳站基于領域的測試分層基于領域的測試分層協同是成本質量最佳協同是成本質量最佳平衡平衡基于領域邊界的測試才是穩定的(ST,DT,UT)基于領域語言的DSL才是可以跟測試團隊協同,可以層次間上下移動基于用例視圖動態圖構筑ST用例對測試效率(測試成本)的高度關注2023 深圳站案例:基于穩定邊界的可讀用例是對測試代碼的極致案例:基于穩定邊界的可讀用例是對測試代碼的極致追求追求基于
9、外部角色或外部領域對象建立測試替身測試替身,在測試替身上構建外部約束和測試DSL?;谙到y邊界的用例場景才是最穩定的,可上可下。慎用Mock技術,防止破壞用例的順序可讀性。2023 深圳站領域內交互場景下領域內交互場景下協同測試優于單邊的契約協同測試優于單邊的契約測試測試單邊契約測試可能導致重復的Fake構造。相同場景需要在兩邊同時構造。從單邊很難還原復雜的組網場景,內部的邊界可能不穩定。2023 深圳站案例:重構測試防護體系建設案例:重構測試防護體系建設實踐實踐新老對比的測試(對比觀測性能)多芯片基于被測系統的領域共享測試性能調優測試(valgrind+benchmark)并行測試(可分離的
10、多線程測試框架)2023 深圳站0404工程提供工程提供“極致的極致的效率效率”2023 深圳站面向開發者的統一工程入口面向開發者的統一工程入口2023 深圳站案例:面向開發者的統一工程案例:面向開發者的統一工程統一入口和標準化動作目錄結構標準化2023 深圳站大規模重構中工程體系大規模重構中工程體系串聯串聯雙環設計:主干開發(Dev)、分支發布(Release),語義化版本、迭代規劃。盡量基于制品發布和獲取依賴。開發測試基于Release協同2023 深圳站融入架構原則的工程融入架構原則的工程工具看護工具看護沒有工程工具支撐的架構看護手段,過多的依賴review,時效性和準確性難以保障。包管
11、理工具只能解決標準化的問題,領域依賴依靠設計。CI提供依賴的通知和聯動。2023 深圳站實踐:工程設計依賴管理實踐:工程設計依賴管理基于CMakeTarget標準化閉包構建依賴反映架構依賴https:/ 深圳站0505實現模式的實現模式的“極致落地極致落地”2023 深圳站模型與代碼不一致導致模型與代碼不一致導致前功盡棄前功盡棄無法驗證設計是否正確落地實現變更無法正確反饋給設計模型設計被認為是開發的累贅開發交流需要大量翻譯2023 深圳站精確表達模型是極致看護的最后精確表達模型是極致看護的最后一公里一公里實現模式介于設計模式和語言手冊之間,設計模式更多關注的是對象之間如何組織、關聯的決策,是高
12、于具體編程語言的設計決策2023 深圳站0606總結與總結與感悟感悟2023 深圳站極致重構體系基于成本選擇極致重構體系基于成本選擇并符合重構并符合重構思想思想架構模型作為核心必須嚴格的推演各個維度做到什么程度可以選擇?;谀繕撕唾Y源進行選擇。保持隨時可用,隨時可暫停,隨時再啟動。2023 深圳站合理的選擇可能沒有標準合理的選擇可能沒有標準答案答案案例1:20w行代碼規模,5個人,2個月,希望通過重構支持架構看護。建模后只做自上而下,不做自下而上。工程做統一入口,架構看護。測試只做ST測試。實現設計做到命名一致。案例2:10w行代碼規模,8個人,半年,希望通過重構全員重構設計能力提升。建模后既
13、做自上而下,也做自下而上。工程做統一入口,架構看護,流水線設計。測試做到分層和測試融合。實現設計與模型高度一致。2023 深圳站關鍵實踐對重構過程影響關鍵實踐對重構過程影響深遠深遠鼓勵通過各種形式的共享達到統一語言(結對,每日session)推薦通過有效管理實踐管理風險、協調資源、showcase最低成本的維護關鍵的模型交付物,將持續演進融入到研發流程中感謝聆聽感謝聆聽CSDN全球最大的中文開發者社區平臺CSDN全球最大的中文開發者社區平臺CSDN創立于1999年全球編程類網站排名第7(來源:Similarweb 2023.04)注冊用戶超過4300萬,覆蓋90%的中文開發者新媒體矩陣粉絲數量超過3100萬超過1000家企業客戶和合作伙伴目前公司員工近800名,分布在北京、長沙、上海、深圳、杭州、成都等城市,并在美國硅谷常設辦事處旗下品牌旗下品牌專業中文IT技術社區:CSDN.NET多媒體專業出版:新程序員開發者專屬移動APP:CSDN APP代碼托管協作平臺:GitCode代碼工具協同平臺:InsCodeIT人力資源服務:科銳??怂关俗W絡高校IT技術學習成長平臺:高校俱樂部