代碼走查,是測(cè)試人員了解代碼邏輯,進(jìn)行測(cè)試設(shè)計(jì)的重要環(huán)節(jié)。并且有很多bug并非需要到運(yùn)行程序進(jìn)行測(cè)試才能發(fā)現(xiàn)。通過(guò)合理的代碼走查方法能提前發(fā)現(xiàn)相當(dāng)多的BUG。除常見(jiàn)的業(yè)務(wù)邏輯與程序邏輯不符外,本文收集了在過(guò)往工作中的經(jīng)常能發(fā)現(xiàn)BUG的走查要點(diǎn),以供參考。 走查要點(diǎn):一段代碼存在多個(gè)副本 [釋義] 相同的代碼段,在程序的不同地方復(fù)制和粘貼。 甚至同一項(xiàng)目,復(fù)制出多個(gè)副本。 [問(wèn)題表現(xiàn)] 修改好的bug,一直反復(fù)出現(xiàn)。 由于存在多個(gè)副本,如果代碼段中有bug,就需要修復(fù)多個(gè)副本。其修復(fù)難點(diǎn)在于:如何確定找到所有的代碼副本。如果無(wú)法確定修復(fù)了所有副本,極易導(dǎo)致漏測(cè)??此茰p輕工作的復(fù)制粘貼給后期維護(hù)帶來(lái)了極大工作量和風(fēng)險(xiǎn)。 走查要點(diǎn):初始化對(duì)象或返回值為空 [釋義] 在實(shí)例化對(duì)象時(shí)(例如,從數(shù)據(jù)庫(kù)中取出一條訂單數(shù)據(jù),實(shí)例化一個(gè)訂單對(duì)象),某些字段字段為空。而后面定邏輯需要使用這個(gè)字段時(shí),沒(méi)有進(jìn)行判空。或者在一些遠(yuǎn)程調(diào)用過(guò)程中,返回的對(duì)象有可能是空,或者某些字段為空,在后面的使用中,沒(méi)有判空。 [問(wèn)題表現(xiàn)] 空指針異常NullPointerException 走查要點(diǎn):數(shù)據(jù)定義被破壞 [釋義] 在處理各種數(shù)據(jù)時(shí),由于某些數(shù)據(jù)的定義(類型、長(zhǎng)度、必填、范圍及其他性質(zhì))被破壞,例如,某接口需要接受三個(gè)都為必填項(xiàng)的參數(shù),由于未對(duì)是否必填進(jìn)行校驗(yàn),導(dǎo)致數(shù)據(jù)庫(kù)中的數(shù)據(jù)與預(yù)期的定義不符。應(yīng)盡早檢查數(shù)據(jù)的定義。 [問(wèn)題表現(xiàn)] 代碼運(yùn)行好好的,突然就發(fā)生一些問(wèn)題,之后又沒(méi)問(wèn)題了。完整的數(shù)據(jù)任務(wù)都沒(méi)有問(wèn)題,只有當(dāng)程序運(yùn)行到不完整數(shù)據(jù)時(shí),才會(huì)報(bào)錯(cuò)。 走查要點(diǎn):資源(內(nèi)存、文件或數(shù)據(jù)庫(kù)連接)未被正確釋放 [釋義] 程序的一些執(zhí)行路徑?jīng)]有完成它們應(yīng)該做的工作,或者持有不再使用的對(duì)象。 [問(wèn)題表現(xiàn)] 資源未能正常釋放,導(dǎo)致連接被用完、文件打開(kāi)過(guò)多、FGC 走查要點(diǎn):接口定義不一致 [釋義] 接口定義與實(shí)現(xiàn)不一致,導(dǎo)致調(diào)用接口出錯(cuò)。 [問(wèn)題表現(xiàn)] 當(dāng)使用某個(gè)接口時(shí),處理結(jié)果與接口定義的結(jié)果不一致,甚至直接報(bào)錯(cuò)異常。 走查要點(diǎn):消息隊(duì)列能否補(bǔ)發(fā)消息、對(duì)補(bǔ)發(fā)消息的處理 [釋義] 生產(chǎn)者發(fā)出消息時(shí)發(fā)生異常,導(dǎo)致消費(fèi)者無(wú)消息可用。需要能夠補(bǔ)發(fā)消息。而消費(fèi)者在處理消息時(shí)(或者回調(diào)),是否能處理重復(fù)的消息(重復(fù)的回調(diào)通知)。特別是在多線程的情況下,對(duì)數(shù)據(jù)的修改,需要對(duì)線程進(jìn)行分析。 [問(wèn)題表現(xiàn)] 消費(fèi)者端無(wú)響應(yīng) 少數(shù)數(shù)據(jù)處理出錯(cuò),而大部分都正常。 走查要點(diǎn):不恰當(dāng)?shù)娜罩?/span> [釋義] 日志中的敏感信息:卡號(hào)、手機(jī)號(hào)、密碼、cvv、有效期等 關(guān)鍵的操作步驟沒(méi)有日志(修改狀態(tài),異常報(bào)錯(cuò)) 日志量過(guò)大,打印無(wú)效日志,導(dǎo)致無(wú)法查問(wèn)題。 [問(wèn)題表現(xiàn)] 泄漏用戶信息 無(wú)法查錯(cuò) 走查要點(diǎn):查詢SQL的底線 [釋義] 查詢的sql語(yǔ)句,需要有條件限制,不能無(wú)條件的查詢數(shù)據(jù)庫(kù)。常見(jiàn)的約束:時(shí)間范圍,數(shù)據(jù)量限制。 [問(wèn)題表現(xiàn)] 查詢出的大數(shù)據(jù)量的結(jié)果集,導(dǎo)致數(shù)據(jù)庫(kù)和應(yīng)用的性能問(wèn)題。 走查要點(diǎn):緩存 [釋義] (1)集中緩存,還是分布式緩存 (2)分布式緩存如何保證緩存間的一致性,不一致時(shí),如何影響流程。 (3)緩存如何與數(shù)據(jù)庫(kù)的數(shù)據(jù)保持一致性,不一致時(shí),如何影響流程。 (4)如果緩存失效,如何影響流程 [問(wèn)題表現(xiàn)] 修改了配置,但有的服務(wù)器更新了,有的沒(méi)更新。 集中式緩存服務(wù)掛了,沒(méi)有備份,直接查數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大。 走查要點(diǎn):系統(tǒng)間調(diào)用的保護(hù) [釋義] 同步調(diào)用外部系統(tǒng),必須有超時(shí)時(shí)間的設(shè)置,防止線程池漲滿影響其他業(yè)務(wù)??紤]用異步調(diào)用替代同步調(diào)用。 [問(wèn)題表現(xiàn)] 由于被調(diào)用系統(tǒng)的性能瓶頸,導(dǎo)致調(diào)用系統(tǒng)的響應(yīng)也下降。 走查要點(diǎn):異常處理 [釋義] 異常是否得到明確的定義 是否有未捕獲到異常 捕獲異常后,是否有合適的處理,后續(xù)代碼是否能正常執(zhí)行 [問(wèn)題表現(xiàn)] 異常未能正確定義,導(dǎo)致問(wèn)題無(wú)法快速定位 未捕獲異常,導(dǎo)致信息泄漏、系統(tǒng)處理異常 未能正確處理異常,導(dǎo)致后續(xù)流程錯(cuò)誤 為了身心健康,文中的雞肋處,請(qǐng)自行屏蔽。 著作權(quán)歸作者所有 本文轉(zhuǎn)自:簡(jiǎn)書(shū) 微信號(hào):IdeaofSE |
|
來(lái)自: 逍遙302 > 《計(jì)算機(jī)》