下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第第頁談?wù)勄度胧杰浖募嫒菪?/p>
(嵌入式)項(xiàng)目中,軟件是一個(gè)不斷迭代的過程,需要考慮各種兼容性。之前我們的項(xiàng)目,因?yàn)檫@方面考慮得比較少,導(dǎo)致項(xiàng)目中后期開發(fā)起來很被動(dòng)。
項(xiàng)目系統(tǒng)總體設(shè)計(jì)階段,應(yīng)盡可能地考慮到未來可以遇見的情況,覆蓋到盡可能多的業(yè)務(wù)擴(kuò)展。項(xiàng)目雖然分階段開發(fā),各個(gè)階段完成的功能都不一樣,總體設(shè)計(jì)要指向最終的需求。
數(shù)據(jù)兼容性
1、協(xié)議制定
制定的協(xié)議要滿足整個(gè)項(xiàng)目所有數(shù)據(jù)的交互。
比如:
這里的ID設(shè)置為1個(gè)字節(jié),可能有一定的風(fēng)險(xiǎn)。后面功能加著加著,可能1個(gè)字節(jié)的ID滿足不了,就得改協(xié)議。盡管可能滿足了某個(gè)項(xiàng)目的需求,但萬一之后其它項(xiàng)目也用了這一套代碼,但是1個(gè)字節(jié)的ID滿足不了,又得改代碼。這里設(shè)置2字節(jié)可能會(huì)好一點(diǎn),基本上能滿足絕大部分情況的使用。
不一定為了覆蓋范圍更廣而設(shè)置4字節(jié),這樣可能有點(diǎn)冗余。很多情況都有一個(gè)平衡點(diǎn),需要自己權(quán)衡。
Length字段只設(shè)置了1個(gè)字節(jié),可能也有一定的奉獻(xiàn)。后面功能中如果有發(fā)較大的數(shù)據(jù),可能要分好多包發(fā),原本可以發(fā)得很快,被這里限制死了。到時(shí)候想要提速,就得改協(xié)議。
之前項(xiàng)目里,幾塊板間的(通信)都用同一套協(xié)議。但后期發(fā)現(xiàn)該協(xié)議滿足不了新需求,但為了不影響到前面的數(shù)據(jù),又搞了一套協(xié)議。導(dǎo)致項(xiàng)目里有兩套差不多一樣的協(xié)議處理代碼。
協(xié)議應(yīng)該是項(xiàng)目一開始考慮好、制定好,整個(gè)項(xiàng)目開發(fā)期間,都不應(yīng)該再做改動(dòng)。
2、數(shù)據(jù)添加
后面新增的數(shù)據(jù),不應(yīng)該插入現(xiàn)有的數(shù)據(jù)中,應(yīng)該單獨(dú)增加一個(gè)數(shù)據(jù)ID。
比如:
現(xiàn)有的數(shù)據(jù)中,有一條數(shù)據(jù)叫做設(shè)備信息的數(shù)據(jù),設(shè)備信息里包含了:設(shè)備IP、設(shè)備Mac。這個(gè)數(shù)據(jù)會(huì)顯示在(手機(jī))APP上。對(duì)應(yīng)的C語言代碼:
#define
MSG_ID_DEV_INFO
0x0001typedef
struct
_dev_info{
char
dev_ip[IP_MAX_LEN];
char
dev_mac[MAC_MAX_LEN];}dev_info_t;
假如后面需要再顯示一個(gè)設(shè)備的sn,這個(gè)數(shù)據(jù)我們應(yīng)該加在哪里?
如果是項(xiàng)目前中期,這時(shí)候還是在開發(fā)階段,我們可以隨意修改。因?yàn)樵O(shè)備sn也是設(shè)備信息的一部分,可以直接在設(shè)備信息這個(gè)數(shù)據(jù)里添加會(huì)比較合理:
#define
MSG_ID_DEV_INFO
0x0001typedef
struct
_dev_info{
char
dev_ip[IP_MAX_LEN];
char
dev_mac[MAC_MAX_LEN];
char
dev_sn[SN_MAX_LEN];}dev_info_t;
如果是(產(chǎn)品)已經(jīng)在市場(chǎng)上流通,這時(shí)候這么加的話,軟件兼容性就不太好。因?yàn)榧偃缒愕氖謾C(jī)APP版本與設(shè)備版本不匹配,原有的設(shè)備IP及設(shè)備MAC這兩個(gè)設(shè)備信息可能都顯示不出來,因?yàn)槲覀冞@么一改,破壞了原有的數(shù)據(jù)結(jié)構(gòu),而手機(jī)APP按照原來的數(shù)據(jù)來做解析的,會(huì)解析不過。
這時(shí)候可以這么來加:
#define
MSG_ID_DEV_INFO
0x0001#define
MSG_ID_DEV_SN
0x0002typedef
struct
_dev_info{
char
dev_ip[IP_MAX_LEN];
char
dev_mac[MAC_MAX_LEN];}dev_info_t;typedef
struct
_dev_sn{
char
dev_sn[SN_MAX_LEN];}dev_sn_t;
這樣,哪怕手機(jī)APP版本與設(shè)備版本沒有對(duì)應(yīng)上,原來的數(shù)據(jù)還是能正常顯示的。當(dāng)然,最好的情況當(dāng)然是在開發(fā)階段就合理地設(shè)計(jì)好。不然,像這種情況,只能犧牲一些程序可讀性來換取程序兼容性了。這會(huì)讓后面看代碼的人覺得很奇怪,你這個(gè)sn不也是數(shù)據(jù)設(shè)備信息嗎,怎么還單獨(dú)給一個(gè)ID。后面接手這個(gè)代碼的人可能就會(huì)把這一塊代碼給改了。
溫馨提示:在沒有完全弄懂維護(hù)項(xiàng)目的代碼為什么這么實(shí)現(xiàn)的情況下,能正常在跑的程序還是別亂動(dòng)得好,哪怕你覺得這是屎山代碼。否則可能會(huì)出大問題。要么等到軟件重構(gòu)時(shí)再修改,要么就繼續(xù)打補(bǔ)丁。
3、數(shù)據(jù)刪除
如果是刪除本模塊內(nèi)部自己使用的數(shù)據(jù),你想怎么刪就怎么刪。
如果是刪除與其它模塊進(jìn)行交互的數(shù)據(jù),這就不能這么隨意了。比如,請(qǐng)求、應(yīng)答的方式。應(yīng)答端給請(qǐng)求端返回的數(shù)據(jù)是不能隨意刪的,如果要?jiǎng)h,一定要確保請(qǐng)求端已經(jīng)沒有請(qǐng)求數(shù)據(jù)的需求,并且已經(jīng)去掉相關(guān)代碼時(shí),這時(shí)候應(yīng)答端才去刪數(shù)據(jù),否則還是留著吧。
4、數(shù)據(jù)修改
其實(shí)數(shù)據(jù)定了,為了保證軟件兼容性,應(yīng)該是要禁止修改的。
如果一定要修改,可以先增加一條新數(shù)據(jù),后面慢慢切為新數(shù)據(jù)、刪除舊數(shù)據(jù)。
(接口)兼容性
正在使用的接口,應(yīng)該盡量不要修改。如果要修改,一定不要影響之前的功能。
之前就有遇到類似的情況。舉個(gè)例子:
typedef
enum
_sys_status{
SYS_STATUS_IDLE,
SYS_STATUS_RUNNING,
SYS_STATUS_STOP,}sys_status_t;stat(ic)
sys_status_t
g_sys_status;sys_status_t
get_sys_status(void){
return
g_sys_status;}
這里的系統(tǒng)狀態(tài)是要顯示在手機(jī)APP上的,不同的狀態(tài)顯示不同的圖標(biāo)。后面要新增一個(gè)狀態(tài),結(jié)果數(shù)據(jù)提供者這么改:
typedef
enum
_sys_status{
SYS_STATUS_IDLE,
SYS_STATUS_NEW_STATUS,
SYS_STATUS_RUNNING,
SYS_STATUS_STOP,}sys_status_t;static
sys_status_t
g_sys_status;sys_status_t
get_sys_status(void){
return
g_sys_status;}
接口提供者把新增的數(shù)據(jù)插入了中間,影響了枚舉原有的順序。結(jié)果手機(jī)APP上圖標(biāo)顯示亂了。
影響到接口的修改,要保證原有的數(shù)據(jù)不受影響。
系統(tǒng)兼容性
在軟件升級(jí)過程中,需要考慮軟件所依賴的其他系統(tǒng)組件是否發(fā)生變化,以確保升級(jí)后軟件能夠正常運(yùn)行,不會(huì)影響其他系統(tǒng)組件的正常運(yùn)行。如果其他系統(tǒng)組件發(fā)生變化,則需要進(jìn)行相關(guān)測(cè)試和文檔更新,以確保整個(gè)系統(tǒng)能夠正常運(yùn)行。
另外隨著項(xiàng)目的迭代,這一套代碼有可能運(yùn)行于不同的系統(tǒng)不同的(芯片)平臺(tái)。
比如,我們嵌入式(Linux)項(xiàng)目,有些項(xiàng)目里會(huì)用到一些第三方庫,這時(shí)候可能會(huì)編譯成動(dòng)態(tài)庫的形式。要考慮升級(jí)的時(shí)候能不能升級(jí)動(dòng)態(tài)庫。如果不能,就得把依賴的庫一起編譯到可執(zhí)行程序里。
另外,如果使用動(dòng)態(tài)庫,之后產(chǎn)品軟(硬件)迭代換了一個(gè)芯片平臺(tái)的話,我們就需要重新交叉編譯一次所依賴的庫。如果為了保證這一塊的兼容性,也可以考慮把所依賴的庫與用戶代碼一起編譯。
當(dāng)然,這個(gè)根據(jù)實(shí)際情況進(jìn)行權(quán)衡取舍。如果依賴的庫很多,一起編譯到可執(zhí)行程序里,導(dǎo)致可執(zhí)行程序很大,到時(shí)候更新也不好更新。
功能兼容性
涉及到功能的添加的,盡量不要影響到之前已開發(fā)的功能。不然也會(huì)增加用戶對(duì)產(chǎn)品的學(xué)習(xí)成本。比如某些指示燈在前一個(gè)版本的快閃、慢閃代表什么意思,這個(gè)在之后就盡量不要去修改了,不然用戶又得重新理解。
性能兼容性
在軟件升級(jí)過程中,需要考慮軟件的性能是否發(fā)生變化,以確保升級(jí)后軟件的性能仍然能夠滿足用戶需求。如果軟件的性能發(fā)生變化,則需要進(jìn)行相關(guān)測(cè)試和優(yōu)化,以確保軟件能夠正常運(yùn)行,并且能夠滿足用戶的性能需求。
比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學(xué)《大學(xué)生心理健康》2021-2022學(xué)年第一學(xué)期期末試卷
- 哈工大建筑工程法規(guī)與合同試題
- 食品安全與營養(yǎng)健康科普大賽
- 2024酒店會(huì)議服務(wù)合同
- 專題11.分析人物形象-2023年四升五語文暑期閱讀專項(xiàng)提升(統(tǒng)編版)
- 2024【外架工操作證】正規(guī)的外架工程班組勞務(wù)包干合同
- 2024家庭保姆雇傭合同新
- 規(guī)劃課題申報(bào)范例:大學(xué)生畢業(yè)實(shí)習(xí)課程化管理的體制機(jī)制建構(gòu)(附可修改技術(shù)路線圖)
- 規(guī)劃課題申報(bào)范例:“雙減”背景下小學(xué)數(shù)學(xué)教學(xué)提質(zhì)增效策略研究(附可修改技術(shù)路線圖)
- 深圳大學(xué)《中國民俗文化》2022-2023學(xué)年第一學(xué)期期末試卷
- 牙用漂白凝膠市場(chǎng)環(huán)境與對(duì)策分析
- 2024年山東省濟(jì)南市中考英語試題卷(含答案)
- 人教版七年級(jí)道德與法治上冊(cè) 期中復(fù)習(xí)知識(shí)梳理
- 3.1 農(nóng)業(yè)區(qū)位因素及其變化 課件 高一地理人教版(2019)必修第二冊(cè)
- 建筑施工企業(yè)(安全管理)安全生產(chǎn)管理人員安全生產(chǎn)考試參考題及答案
- 鍋爐應(yīng)急預(yù)案演練方案
- 《11~20各數(shù)的認(rèn)識(shí)》(教案)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版
- 關(guān)于高技能人才培養(yǎng)問題的思考高技能人才培養(yǎng)方案
- 2024新信息科技四年級(jí)《第三單元 有趣的編碼應(yīng)用》大單元整體教學(xué)設(shè)計(jì)
- 中國航天發(fā)展史主題班會(huì) 課件
- 正向管理課件教學(xué)課件
評(píng)論
0/150
提交評(píng)論