1 問題背景
一切為了進度,軟件開發(fā)的首要目標(biāo)就是以最快的速度滿足客戶需求,“快”是第一要素,但是短期指標(biāo);可復(fù)用性、擴展性等長期指標(biāo)被忽略,導(dǎo)致后期的維護、功能增減調(diào)整都非常困難。
一個小的業(yè)務(wù)需求會牽一發(fā)而動全身,一個小的故障修復(fù)可能引入更多的問題。整個系統(tǒng)包袱越來越沉重,軟件的質(zhì)量和開發(fā)周期越來越不可控。
排除軟件開發(fā)人員的水平和項目進度的原因,主要影響因素還包括軟件架構(gòu),和軟件缺陷的修復(fù)能力。對于量產(chǎn)軟件,架構(gòu)問題是先天性的,后期很難大改,只能前期預(yù)防;軟件缺陷問題是無法避免的,只能期望快速修復(fù)。拋磚引玉,也可先參看《嵌入式軟件bug從哪來,怎么去》。
2 軟件架構(gòu)問題
2.1 軟件架構(gòu)的特點
1. 承載力
正如一艘船最多能裝多少人,從軟件方面來說是軟件架構(gòu)能承載多少業(yè)務(wù)或功能需求,當(dāng)然,這需要架構(gòu)師一開始架構(gòu)系統(tǒng)的時候,就需要有一定的預(yù)見性。但也沒必要為了極小概率事件增加過多的冗余。
2. 易用性
易用性決定了軟件的整體開發(fā)效率,好的架構(gòu)會讓團隊成員容易上手,子系統(tǒng)容易對接,開發(fā)效率高,各模塊和子系統(tǒng)的編寫只需要關(guān)注系統(tǒng)的設(shè)計和編碼工作,其他模塊間通信方面的事情架構(gòu)可以提供很好的兼容。
3. 擴展性
一個水杯除了用來喝水,也可用來喝酒,適應(yīng)不同場景,在一定范圍內(nèi)滿足不同的需求,是非常有必要的。軟件架構(gòu)也是這樣,要新增更多的功能就要具備更高的擴展性??蓴U展性的關(guān)鍵就在于新增部分不能影響其他,如果增刪導(dǎo)致系統(tǒng)整體使用異常,那么這個架構(gòu)的可擴展性就很差。
4. 伸縮性
伸縮性就是設(shè)計的方案或系統(tǒng)是否可以根據(jù)需求適配不同數(shù)量的功能或子系統(tǒng),在我們設(shè)計的軟件系統(tǒng)中,架構(gòu)的可伸縮性決定了架構(gòu)的可適配性,例如,當(dāng)硬件資源不足時,可以調(diào)整配置如flash的空間分配,支持減少一些服務(wù)但仍能正常運行。
5. 容錯性
軟件運行中的異常,如用戶的非法操作,或者軟件本身的小缺陷導(dǎo)致整個系統(tǒng)無法使用,那這個架構(gòu)容錯性就很差。軟件中的一些缺陷無法避免,但是我們應(yīng)盡量保證這個缺陷的影響范圍最小。倘若出現(xiàn)系統(tǒng)無法使用的情況,應(yīng)該有備份方案,比如自動重啟或者自動恢復(fù)數(shù)據(jù)等功能,也應(yīng)該能夠讓開發(fā)人員及時知道問題的發(fā)生,以及問題所在的位置并記錄錯誤信息。
在架構(gòu)設(shè)計中,以上五項基本能力缺一不可,某項能力的突出并不能帶動其他項,如果某一項能力比較弱,隨著時間的推移,問題會越來越大,甚至系統(tǒng)崩潰。就像木桶原理那樣,一個木桶的容量不是取決于最長的那根木板,而是取決于最短的那根。
-
嵌入式軟件
+關(guān)注
關(guān)注
4文章
240瀏覽量
26641 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
513瀏覽量
25468 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1014瀏覽量
21332
發(fā)布評論請先 登錄
相關(guān)推薦
評論