我們常見的軟件設計中,它設計目標都是比較抽象、概括的方式,確定目標系統如何完成預定任務的,因此說軟件設計是確定系統的物理模型。同時軟件設計還是將需求準確地轉化為完整的軟件產品或系統的唯一途徑,由此可見,軟件設計師開發階段的最重要步驟。說了這么多,到底什么是軟件設計?軟件設計都設計什么?
什么是軟件設計?
軟件設計是從軟件需求規格說明出發,形成軟件的具體設計方案的過程,也就是說在需求分析階段明確軟件是“做什么”的基礎上,解決軟件“怎么做”的問題。結構化設計方將把軟件設計分為概要設計和詳細設計兩個階段。概要設計的主要任務是,通過分析需求規格說明對軟件進行功能分解,確定軟件的總體結構;詳細設計階段確定每個模塊功能所需要的算法和數據結構,設計出每個模塊的邏輯結構。軟件設計階段結束時的工作成果是軟件設計說明書,它描述軟件系統的組成模塊結、模塊間的調用關系,以及每個模塊的輸入、輸出和詳細的過程描述。
軟件設計都設計什么?
軟件設計的部分大概包含以下內容(以較復雜帶RTOS的單片機項目為例---嵌入式Linux項目除了技術棧不一樣,設計思路是一樣的):
1.需求分析和應用評估
需求分析就是根據產品經理根據市場的要求,提出的產品需求(一般包含具體的功能需求,和成本等), 軟件人員要根據這些需求分析,確定MCU型號,外圍器件,評估設計難度和成本,確定產品的進度規劃。
2.軟件框架設計
現在主流的嵌入式產品都支持,本地端對端訪問(如智能音箱 --- 手機通過藍牙/wifi直接APP訪問), 以及遠程網絡訪問(如停車場終端 -- 云服務器 -- 手機APP/網頁前端/軟件), 所以軟件框架設計包含整個產品的框架和嵌入式產品內部框架,這里詳細講述嵌入式產品內部框架,借用我之前的一張圖,就是我簡化的本地端對端訪問的產品框架。
到了這一步,基本對于項目的后續執行開發就有底了, 大致就分為RTOS的移植和任務,驅動模塊開發及單元測試實現,通訊協議的移植和開發,應用層功能開發,下面詳細講述
3.RTOS的移植和任務
RTOS的移植主要任務就是讓系統在平臺正常執行,完成任務創建,同步,這部分因為主流單片機都已經支持,文檔也很清晰,比較簡單。
4.驅動模塊的開發及單元測試實現
驅動模塊的開發不僅指GPIO,UART,I2C,SPI這些硬件的配置,這部分因為現在的底層固件庫的封裝已經很簡單了,還包含外圍器件如SPI-FLASH,傳感器,EPPROM,CMOS,LCD等的調試,要考慮兼容性和穩定性,即使嵌入式Linux開發中,后面也是工作的大頭,此外涉及到通訊相關的,還要能夠獨立測試,以避免集成后出問題很難分析。
5.通訊協議的移植和開發
對于通訊協議,主要包含通用的標準協議(如TCP/IP, BLE, Modbus),廠商自定義的協議和用于用戶自定義協議,這部分一般來說是產品中的重難點,需要有豐富的C語言以及行業相關知識。
6.應用層功能開發
應用層開發雖然能講的不多,但其實這部分是工作量最大的部分,如按鍵請求的處理,菜單的實現和顯示,數據的分發和處理,以及和上述實現模塊接口的讀寫訪問,這部分是最后產品功能實現的核心,會根據需求實時變化,也是產品設計中最經常維護修改的部分。
7.產品測試和維護
完成上述所有步驟,一款產品就能夠運行了,但是僅通過自己開發中的測試,和量產還有距離,后續就需要專門的測試,而軟件開發人員只要發現問題-解決問題,進行版本維護或者新功能完善就可以,如果這個時間接手項目,還沒有重構的權限和時間,工作就很枯燥了。
上面就是一款產品的軟件人員主要參與和執行的流程,大部分人只參與其中一部分,但最終產品都是靠這些小部分累積起來的,因此合理的架構設計和模塊解耦很重要,不過設計再好的架構,隨著代碼容量的增大,時間進度的要求以及不同風格人員的維護,到最后都會偏離最初的設計,這也是工程上的難題。
綜上所述,什么是軟件設計,軟件設計都設計什么相信大家已經清楚了吧,想了解更多關于軟件設計的信息,請繼續關注中培偉業。