前幾篇文章探討了設(shè)計(jì)嵌入式軟件架構(gòu)的前四個(gè)步驟。本文通過研究最后一步來結(jié)束這個(gè)系列;模擬、迭代和縮放。當(dāng)然可以有更多或更少的步驟,但這無(wú)關(guān)緊要。相反,這五個(gè)步驟可以幫助嵌入式開發(fā)人員確定他們需要做什么以及他們將遵循的一般過程。
步驟 5–模擬、迭代和擴(kuò)展
開發(fā)嵌入式軟件架構(gòu)通常不是軟件開發(fā)生命周期(SDLC)中的單一事件。如果嵌入式軟件架構(gòu)設(shè)計(jì)是發(fā)生在單個(gè)點(diǎn)的單個(gè)事件,這將表明我們知道了在系統(tǒng)開始時(shí)需要知道的一切,并且在整個(gè)項(xiàng)目中沒有什么會(huì)改變。迄今為止,在我大約20年的經(jīng)驗(yàn)和我參與的大約150個(gè)項(xiàng)目中,這種情況從未發(fā)生過。客戶通常試圖在產(chǎn)品發(fā)貨前進(jìn)行更改,在某些情況下甚至在發(fā)貨后!
軟件架構(gòu)開發(fā)是一個(gè)迭代的過程。通常,我們從最高級(jí)別開始,也就是眾所周知的30,000英尺的視圖,然后逐步深入到越來越多的細(xì)節(jié)。好的架構(gòu)通常是有界的,這意味著它被分成幾個(gè)獨(dú)立或半獨(dú)立的域。我們可以利用模擬來測(cè)試并向自己證明高級(jí)架構(gòu)不僅適合我們的需求,也適合我們客戶的需求。如果我們發(fā)現(xiàn)問題,我們迭代并改進(jìn)我們的設(shè)計(jì)。
隨著客戶需求的發(fā)展,軟件架構(gòu)也必須發(fā)展和擴(kuò)展。軟件架構(gòu)和軟件開發(fā)永遠(yuǎn)做不完。總是有更多的事情要做,無(wú)論是消除缺陷、添加新功能,還是重構(gòu)以提高代碼質(zhì)量和理解。對(duì)于一個(gè)嵌入式開發(fā)團(tuán)隊(duì)來說,開發(fā)一個(gè)核心架構(gòu)作為創(chuàng)建幾十個(gè)產(chǎn)品的平臺(tái)是很常見的。這種架構(gòu)必須能夠很好地伸縮,以應(yīng)對(duì)未知的未來需求。
嵌入式軟件仿真
模擬嵌入式軟件的想法并不新鮮,但是如果你向開發(fā)人員和架構(gòu)師詢問模擬,你可能會(huì)聽到它并不適用。
模擬有幾種不同的形式。首先,我們可以編寫應(yīng)用程序代碼模塊,然后創(chuàng)建一個(gè)與這些模塊掛鉤的框架,并為我們提供關(guān)于模塊行為和執(zhí)行情況的視覺和日志反饋。其次,我們可以將這些模塊部署到模擬硬件上,從而獲得關(guān)于系統(tǒng)的總體反饋,并探索其行為。前兩個(gè)選項(xiàng)依賴于我們實(shí)現(xiàn)架構(gòu)。最后一個(gè)模擬方法是使用建模工具來創(chuàng)建我們架構(gòu)的模型。建模工具通常可以模擬模型并探索其行為。有時(shí),這些模型甚至可以生成可用于生產(chǎn)的代碼。
嵌入式軟件架構(gòu)誘惑
一個(gè)好的架構(gòu)師知道軟件架構(gòu)將會(huì)發(fā)展。因此,示例性架構(gòu)將保持高水平的細(xì)節(jié),允許開發(fā)者以他們認(rèn)為合適的方式實(shí)現(xiàn)該架構(gòu)。然而,誘惑折磨著每一個(gè)嵌入式架構(gòu)師和嵌入式開發(fā)人員。誘惑是深入系統(tǒng)的底層細(xì)節(jié),讓他們來決定設(shè)計(jì)。
例如,當(dāng)試圖為一個(gè)功能制定一個(gè)用戶故事時(shí),幾乎每個(gè)開發(fā)人員都會(huì)立即陷入這樣的問題:微控制器上使用的是什么引腳,是GPIO還是通過I2C連接的某個(gè)設(shè)備。他們應(yīng)該考慮用戶如何與系統(tǒng)交互,以及用戶的需求。盡管如此,他們的腦海中立即跳轉(zhuǎn)到實(shí)現(xiàn)細(xì)節(jié)。
一個(gè)重要的技巧是將所有不需要現(xiàn)在決定的低級(jí)細(xì)節(jié)推遲到以后。對(duì)于嵌入式軟件開發(fā)人員來說,這種想法非常痛苦,并且不太符合我們的自然思維方式。一些嵌入式開發(fā)人員需要被指導(dǎo),他們的思維需要被調(diào)整以正確地構(gòu)建系統(tǒng)。不要屈服于誘惑!讓您的架構(gòu)來指導(dǎo)實(shí)現(xiàn),而不是被它緊緊耦合和支配。否則,您會(huì)發(fā)現(xiàn)您的架構(gòu)將無(wú)法很好地發(fā)展或擴(kuò)展。
軟件架構(gòu)設(shè)計(jì)第5步結(jié)論
在本系列中,我們已經(jīng)探索了如何設(shè)計(jì)嵌入式軟件架構(gòu)的現(xiàn)代概念。復(fù)雜系統(tǒng)的現(xiàn)代固件要求將軟件體系結(jié)構(gòu)分解為獨(dú)立于硬件和依賴于硬件的體系結(jié)構(gòu)。傳統(tǒng)的嵌入式軟件開發(fā)人員通常很難做到這一點(diǎn)。通過關(guān)注系統(tǒng)的數(shù)據(jù)資產(chǎn)并允許它們決定設(shè)計(jì),可以在一定程度上緩解這種矛盾。結(jié)果通常是軟件架構(gòu)更容易與用戶的需求聯(lián)系起來,使得架構(gòu)更具可伸縮性和可發(fā)展性。此外,一個(gè)精心架構(gòu)的系統(tǒng)可以利用現(xiàn)代工具,如單元測(cè)試和模擬,并且可以是非常可移植的。
在這五篇文章中,我們研究了設(shè)計(jì)嵌入式軟件架構(gòu)時(shí)可以遵循的幾個(gè)簡(jiǎn)單步驟。請(qǐng)記住,我們只是觸及了表面。正如人們常說的,細(xì)節(jié)決定成敗。然而,這些概念應(yīng)該可以幫助你啟動(dòng)、更新和革新你的嵌入式開發(fā)工作。