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