如何做一份清晰易懂的軟件設計?

        在進行軟件開發之前,擁有一份清晰的軟件設計文檔進行開發全程的指導十分重要。在軟件團隊,經常發生人員流動,在完成一個項目的過程中,一個軟件模塊可能會流經N個人的手。如果沒有一分清晰的設計,模塊的設計思路經過多人之後可能已經走偏,即使能保證原來的思路進行,中間也勢必造成很大的成本浪費。

        軟件設計的工作屬於架構師或可以叫做技術負責人,架構師的職責是保證軟件設計可以滿足用戶的功能性需求和技術發展的非功能性需求,同時完成和各個相關方的人員溝通和系統溝通。在完成一切準備後,架構師就要保證自己團隊內技術思想統一,按照達成的共識進行項目開發。

        軟件設計是軟件項目中的一個核心環節,這個過程就是架構師或技術負責人產出技術設計的過程,同時輸出產物:技術設計文檔。

        軟件設計的核心就是軟件建模,在你建立的各種抽象模型之上,再配上文字說明就形成了軟件設計文檔。模型是對客觀業務的抽象,軟件設計就是要解決的各種抽象模型及其之間的對應關係,和其涉及到的業務流程,最後在這些基礎上添磚加瓦,組件規劃。

        軟件設計過程又可以拆分成 需求分析、概要設計、詳細設計三個階段,主要用到的工具是UML。如果在一般的迭代形項目中,我建議大家最終形成一份 詳細設計 即可,但是詳細設計也會是包含了需求分析、概要設計、詳細設計的過程,只不過文檔最終體現在一起而已,任何一個環節肯定是都是不能少的(當然有些項目需要總體設計等,這裏別較真哈)。其中每個環節都有具體的模型工具可以幫助我們,下圖就軟件建模中常見的幾種圖以及對應的場景進行使用說明,基本可以涵蓋市場上大部分大中小型的軟件設計了。

    

圖1 - 10種常用的圖使用說明

        圖2 - 軟件設計3個階段使用的工具

 

需求分析:

並不是只有產品經理纔去做的事情,在一份軟件設計設計文檔中,需求分析部分體現的是設計人員對整體產品放心思路的把控。比如這個階段 我們可以用流程圖描述業務的具體流轉,用用例圖標識各個角色的場景用例,用時序圖表述場景交互等。

 

概要設計:

在我們的軟件設計文檔中,概要設計部分體現在項目文檔的最上方, 在經歷了一系列的項目需求討論之後,他清楚的描述了項目的整體架構,以及各模塊間的層級關係。雖然他的發生客觀意義上晚於需求分析階段。

 

詳細設計:

這個階段着重對技術實現的細節進行描述,開發可以根據這部分的內容進行軟件開發了。

例如:

  • 接口間交互用到的時序圖

  • 代碼實現用到的類圖

  • 實體關係表述依賴的ER圖

  • 內部狀態流轉又會使用到狀態圖等

真正做了這些,纔算完成了一份勉強合格的技術設計。

 

        那如何才能做一份清晰易懂,可供開發使用的軟件詳細設計?

 

        首先,目錄結構要清晰,有清晰的索引才能方便我們後期的使用,方便開發過程中快速的定位到某個模塊設計。類似於字典的目錄,如果字典沒有了目錄,這本字典也將變得一無是處,同樣軟件設計文檔也如此。

 

        其次,系統說明也要有,不論是大型項目還是每次迭代型項目,都有其存在的背景,項目的產生一定經歷了需求沉澱的過程,一份具有指導意義的設計文檔中對需求的描述是必須的,具體體現形式可以沒有具體的規定。

 

        再次,設計原則等規範需要提前聲明。項目的微觀實現有很多方式,可以採用傳統的分層架構模式也可以採用領域驅動設計,但是其中有一個概念必須被提出就是 通用語言。通用語言並不是只有領域驅動開發纔會用的概念,在很多項目中都會存在很多人對於同一個名詞有不同理解的情況,比如取送車(e代駕)模塊實現中,取送車模塊會關聯訂單模塊,訂單一詞取送車相關的同事理解成了取送車下單,而訂單模塊同事理解成了支付訂單,如果定義好了通用語言,這個情況就不會發生了。

 

        同時,在這部分也需要體現出系統的設計規則或使用了哪些技術來實現,比如加密方式採用對稱機加密或非對稱加密,消息傳遞採用同步還是異步,語言使用java還是go,組件使用springcloud還是dubbo等。這些非業務性的組件作爲項目開發的一個工具,可以很清楚的告訴夥伴們應該去學習什麼,應該如何使用等。

 

        然後,一切準備完成之後,可以進入正題了。總體設計,在系統設計模塊開始,最好可以用一張圖或是幾張圖體現出整個架構的思想,讓人可以對此次項目軟件設計有清晰的整體認知。比如整體的架構圖,流程圖,ER圖等。其次可以分別針對不同的模塊交互進行詳細的交互設計,只有一個要求就是直到清晰的描述完成各個的細節爲止。

        最後,設計可以收尾了,當然在這之前還可以有項目拓撲部署圖等等。無所謂了到這個階段已經開發完了, 性能不夠核數來湊,不在部分範疇裏討論了。

 

抓住以上幾個核心點,足以完成一份實用的軟件詳細設計了。

 

 

 

 

        

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章