System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本專利技術(shù)涉及研發(fā)管理和金融科技領(lǐng)域,尤其涉及一種代碼遍歷異常檢測方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
技術(shù)介紹
1、在金融系統(tǒng)的開發(fā)過程中,金融數(shù)據(jù)結(jié)構(gòu)復(fù)雜,涉及多層次的業(yè)務(wù)邏輯和數(shù)據(jù)傳遞。現(xiàn)代軟件開發(fā)中通常采用數(shù)據(jù)分層領(lǐng)域模型,將金融系統(tǒng)中的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)對(duì)象,如數(shù)據(jù)傳輸對(duì)象、數(shù)據(jù)訪問對(duì)象、業(yè)務(wù)對(duì)象、顯示層對(duì)象等。這些對(duì)象之間在進(jìn)行數(shù)據(jù)傳遞時(shí),金融開發(fā)人員為了提高開發(fā)效率,往往使用foreach或for循環(huán)對(duì)數(shù)據(jù)對(duì)象中的所有屬性進(jìn)行批量操作。
2、然而,現(xiàn)有技術(shù)中,這種遍歷操作存在一些潛在問題,特別是在數(shù)據(jù)對(duì)象為空的情況下。由于對(duì)數(shù)據(jù)對(duì)象的foreach或for操作不會(huì)在編譯階段報(bào)錯(cuò),程序在運(yùn)行時(shí)可能出現(xiàn)異常(如空指針異常),這類問題通常在運(yùn)行階段難以發(fā)現(xiàn),只有通過大量的測試才能捕捉到。而金融系統(tǒng)對(duì)于準(zhǔn)確性和穩(wěn)定性的要求極高,任何程序異常都會(huì)導(dǎo)致業(yè)務(wù)流程中斷或數(shù)據(jù)錯(cuò)誤。
3、但是,現(xiàn)有技術(shù)在處理這些遍歷操作時(shí)存在以下不足:
4、依賴大量測試:為了避免這些遍歷異常,通常需要投入大量的測試人力和時(shí)間來檢查代碼中的潛在問題。這不僅增加了金融項(xiàng)目的開發(fā)成本,還對(duì)項(xiàng)目的進(jìn)度產(chǎn)生不利影響。
5、測試覆蓋不足:即便進(jìn)行大量測試,也很難完全覆蓋所有遍歷操作中的潛在問題,特別是在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)或特殊情況下,異常的遍歷問題可能會(huì)被遺漏。
6、由于這些問題,現(xiàn)有的金融系統(tǒng)在代碼遍歷操作上存在一定的風(fēng)險(xiǎn),金融機(jī)構(gòu)需要依賴更為高效和精準(zhǔn)的代碼檢測工具來幫助開發(fā)者提前發(fā)現(xiàn)這些潛在的遍歷異常,以避免
技術(shù)實(shí)現(xiàn)思路
1、本專利技術(shù)的主要目的在于提供一種代碼遍歷異常檢測方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),旨在解決現(xiàn)有技術(shù)無法有效檢測遍歷操作時(shí)數(shù)據(jù)對(duì)象為空,從而無法預(yù)防遍歷操作中潛在異常的技術(shù)問題。
2、為實(shí)現(xiàn)上述目的,本專利技術(shù)提供一種代碼遍歷異常檢測方法,包括:
3、獲取項(xiàng)目源碼文件夾并遍歷所述項(xiàng)目源碼文件夾,篩選出java文件,并儲(chǔ)存至java文件列表中;
4、對(duì)所述java文件列表中的每個(gè)java文件進(jìn)行解析,生成對(duì)應(yīng)的抽象語法樹;
5、在每個(gè)抽象語法樹中查找表示表達(dá)式操作的statementexpression節(jié)點(diǎn),判斷statementexpression節(jié)點(diǎn)的名稱屬性是否以foreach結(jié)尾或以for開頭;
6、若是,確認(rèn)statementexpression節(jié)點(diǎn)為遍歷操作節(jié)點(diǎn),向上遍歷對(duì)應(yīng)的抽象語法樹,獲取所述遍歷操作節(jié)點(diǎn)的全部父節(jié)點(diǎn),生成父節(jié)點(diǎn)列表;
7、遍歷所述父節(jié)點(diǎn)列表,判斷父節(jié)點(diǎn)是否包含條件判斷語句,并檢查條件判斷語句中是否包含對(duì)數(shù)據(jù)對(duì)象的判空操作;
8、若在條件判斷語句中不包含對(duì)數(shù)據(jù)對(duì)象的判空操作,則確認(rèn)對(duì)應(yīng)的statementexpression節(jié)點(diǎn)存在數(shù)據(jù)對(duì)象遍歷異常,并生成異常報(bào)告。
9、在一個(gè)實(shí)施例中,向上遍歷對(duì)應(yīng)的抽象語法樹,獲取所述遍歷操作節(jié)點(diǎn)的全部父節(jié)點(diǎn),生成父節(jié)點(diǎn)列表,包括:
10、對(duì)所述遍歷操作節(jié)點(diǎn)的位置信息進(jìn)行標(biāo)記,記錄遍歷操作節(jié)點(diǎn)的文件名、行號(hào)和列號(hào),用于定位異常代碼位置;
11、對(duì)所述遍歷操作節(jié)點(diǎn)與直接父節(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系進(jìn)行記錄,建立遍歷操作節(jié)點(diǎn)在上下文語法結(jié)構(gòu)中的層次關(guān)系;
12、利用所述層次關(guān)系,在對(duì)應(yīng)的抽象語法樹中遞歸向上查找遍歷操作節(jié)點(diǎn)的所有父節(jié)點(diǎn),并標(biāo)記每個(gè)父節(jié)點(diǎn)的語法類型,所述語法類型用于識(shí)別條件判斷語句;
13、將每個(gè)父節(jié)點(diǎn)按照語法結(jié)構(gòu)存儲(chǔ)到所述父節(jié)點(diǎn)列表中,生成層次化的父節(jié)點(diǎn)路徑。
14、在一個(gè)實(shí)施例中,遍歷所述父節(jié)點(diǎn)列表,判斷父節(jié)點(diǎn)是否包含條件判斷語句,并檢查條件判斷語句中是否包含對(duì)數(shù)據(jù)對(duì)象的判空操作,包括:
15、遍歷所述父節(jié)點(diǎn)列表,從父節(jié)點(diǎn)列表的第一個(gè)節(jié)點(diǎn)開始,依次處理每個(gè)父節(jié)點(diǎn);
16、對(duì)每個(gè)父節(jié)點(diǎn)的語法類型進(jìn)行判斷,識(shí)別是否為條件判斷語句,所述條件判斷語句包括if語句、else?if語句和switch語句;
17、對(duì)已識(shí)別的條件判斷語句進(jìn)行分析,檢查條件判斷表達(dá)式中是否包含對(duì)遍歷操作中的數(shù)據(jù)對(duì)象的!=null的判空檢查;
18、若存在任意一個(gè)條件判斷語句未包含判空操作,則標(biāo)記對(duì)應(yīng)的遍歷操作節(jié)點(diǎn)為異常節(jié)點(diǎn)。
19、在一個(gè)實(shí)施例中,生成異常報(bào)告,包括:
20、生成異常報(bào)告,并列出標(biāo)記為異常的statementexpression節(jié)點(diǎn),所述異常報(bào)告包括異常節(jié)點(diǎn)的文件路徑、行號(hào)及列號(hào);
21、基于所述異常報(bào)告生成修復(fù)建議,所述修復(fù)建議包括在異常節(jié)點(diǎn)之前添加!=null判空操作的代碼示例;
22、將所述異常報(bào)告和修復(fù)建議發(fā)送至開發(fā)人員,通知開發(fā)人員需要處理的問題;
23、在開發(fā)環(huán)境中通過高亮的方式標(biāo)記異常節(jié)點(diǎn),供開發(fā)人員定位問題代碼;
24、在接收到自動(dòng)修復(fù)指令時(shí),根據(jù)所述修復(fù)建議在異常節(jié)點(diǎn)之前插入判空檢查代碼,并對(duì)插入的代碼進(jìn)行標(biāo)記。
25、在一個(gè)實(shí)施例中,獲取項(xiàng)目源碼文件夾并遍歷所述項(xiàng)目源碼文件夾,篩選出java文件,并儲(chǔ)存至java文件列表中,包括:
26、從項(xiàng)目根目錄中提取項(xiàng)目源碼文件夾,遞歸遍歷項(xiàng)目源碼文件夾內(nèi)的子文件夾,逐層處理每一個(gè)子文件夾和子文件夾包含的文件;
27、在遍歷過程中,根據(jù)文件擴(kuò)展名、隱藏屬性和項(xiàng)目中的代碼文件類型,過濾掉隱藏文件、非代碼文件、構(gòu)建文件夾和測試文件夾;
28、篩選擴(kuò)展名為.java的源代碼文件,并將篩選出的每個(gè)java文件路徑存儲(chǔ)到j(luò)ava文件列表中;
29、使用文件路徑標(biāo)識(shí)符,將已處理的文件路徑和未處理的文件路徑分開,并在遍歷過程中記錄每個(gè)文件的處理狀態(tài),包括文件是否已被處理、文件處理時(shí)間和處理結(jié)果。
30、在一個(gè)實(shí)施例中,對(duì)所述java文件列表中的每個(gè)java文件進(jìn)行解析,生成對(duì)應(yīng)的抽象語法樹,包括:
31、對(duì)所述java文件進(jìn)行詞法分析,逐行讀取java文件中的源代碼,將所述源代碼分割為詞法單元,所述詞法單元包括關(guān)鍵字、標(biāo)識(shí)符、操作符和分隔符;
32、基于所述詞法單元,使用語法分析器依次解析java文件中的源代碼,并按照java語言的語法結(jié)構(gòu)生成對(duì)應(yīng)的語法節(jié)點(diǎn);
33、基于所述語法節(jié)點(diǎn)構(gòu)建與java文件相對(duì)應(yīng)的抽象語法樹,所述抽象語法樹由多個(gè)語法節(jié)點(diǎn)組成,每個(gè)語法節(jié)點(diǎn)表示java文件中的語法結(jié)構(gòu)元素。
34、在一個(gè)實(shí)施例中,對(duì)所述java文件進(jìn)行詞法分析,逐行讀取java文件中的源代碼,包括:
35、基于所述java文件列表中java文件的大小和歷史處理時(shí)間對(duì)java文件進(jìn)行分組,并將每組java文件分配至獨(dú)立線程進(jìn)行處理;
36、基于jav本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種代碼遍歷異常檢測方法,其特征在于,包括以下步驟:
2.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,向上遍歷對(duì)應(yīng)的抽象語法樹,獲取所述遍歷操作節(jié)點(diǎn)的全部父節(jié)點(diǎn),生成父節(jié)點(diǎn)列表,包括:
3.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,遍歷所述父節(jié)點(diǎn)列表,判斷父節(jié)點(diǎn)是否包含條件判斷語句,并檢查條件判斷語句中是否包含對(duì)數(shù)據(jù)對(duì)象的判空操作,包括:
4.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,生成異常報(bào)告,包括:
5.如權(quán)利要求1中所述的代碼遍歷異常檢測方法,其特征在于,獲取項(xiàng)目源碼文件夾并遍歷所述項(xiàng)目源碼文件夾,篩選出java文件,并儲(chǔ)存至java文件列表中,包括:
6.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,對(duì)所述java文件列表中的每個(gè)java文件進(jìn)行解析,生成對(duì)應(yīng)的抽象語法樹,包括:
7.如權(quán)利要求6所述的代碼遍歷異常檢測方法,其特征在于,對(duì)所述Java文件進(jìn)行詞法分析,逐行讀取Java文件中的源代碼,包括:
8.一種代碼遍歷異常檢測裝置,其特征在于,所
9.一種代碼遍歷異常檢測設(shè)備,其特征在于,所述代碼遍歷異常檢測設(shè)備包括存儲(chǔ)器、處理器以及存儲(chǔ)在所述存儲(chǔ)器上并可以在所述處理器上運(yùn)行的代碼遍歷異常檢測程序,所述代碼遍歷異常檢測程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1-7中任一項(xiàng)所述的代碼遍歷異常檢測方法的步驟。
10.一種計(jì)算機(jī)存儲(chǔ)介質(zhì),其特征在于,所述存儲(chǔ)介質(zhì)上存儲(chǔ)有代碼遍歷異常檢測程序,所述代碼遍歷異常檢測程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1-7中任一項(xiàng)所述的代碼遍歷異常檢測方法的步驟。
...【技術(shù)特征摘要】
1.一種代碼遍歷異常檢測方法,其特征在于,包括以下步驟:
2.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,向上遍歷對(duì)應(yīng)的抽象語法樹,獲取所述遍歷操作節(jié)點(diǎn)的全部父節(jié)點(diǎn),生成父節(jié)點(diǎn)列表,包括:
3.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,遍歷所述父節(jié)點(diǎn)列表,判斷父節(jié)點(diǎn)是否包含條件判斷語句,并檢查條件判斷語句中是否包含對(duì)數(shù)據(jù)對(duì)象的判空操作,包括:
4.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,生成異常報(bào)告,包括:
5.如權(quán)利要求1中所述的代碼遍歷異常檢測方法,其特征在于,獲取項(xiàng)目源碼文件夾并遍歷所述項(xiàng)目源碼文件夾,篩選出java文件,并儲(chǔ)存至java文件列表中,包括:
6.如權(quán)利要求1所述的代碼遍歷異常檢測方法,其特征在于,對(duì)所述java文件列表中的每...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:周小亮,
申請(qǐng)(專利權(quán))人:平安銀行股份有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。