片,以獲得與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0081]進(jìn)一步的,獲得模塊350,具體用于對(duì)可能錯(cuò)誤語(yǔ)句進(jìn)行后向切片,以獲得語(yǔ)句集合SBT ;對(duì)變量的定值語(yǔ)句進(jìn)行前向切片,以獲得語(yǔ)句集合SFS ;計(jì)算SBT與SFS的交集STS,并對(duì)變量的定值語(yǔ)句進(jìn)行后向切片,以獲得對(duì)變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果;計(jì)算獲得的對(duì)變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與STS的并集,并將對(duì)變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與STS的并集作為與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
[0082]本實(shí)施例提供的路徑敏感檢測(cè)裝置,通過(guò)根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性,沿著定值引用鏈傳播初始的與錯(cuò)誤相關(guān)的屬性,在潛在錯(cuò)誤語(yǔ)句處識(shí)別變量的與錯(cuò)誤相關(guān)的屬性,根據(jù)在潛在錯(cuò)誤語(yǔ)句處識(shí)別的變量的與錯(cuò)誤相關(guān)的屬性,確定潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,根據(jù)可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集,根據(jù)路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。從而解決現(xiàn)有技術(shù)中檢測(cè)值流錯(cuò)誤存在的可擴(kuò)展性并不理想,無(wú)法有效應(yīng)用于大規(guī)模的應(yīng)用程序的問(wèn)題,通過(guò)減少路徑敏感檢測(cè)的語(yǔ)句輸入集降低了檢測(cè)開(kāi)銷,能夠有效應(yīng)用于大規(guī)模的應(yīng)用程序。
[0083]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:R0M、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0084]最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【主權(quán)項(xiàng)】
1.一種路徑敏感檢測(cè)方法,其特征在于,包括: 根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性; 沿著定值引用鏈傳播所述初始的與錯(cuò)誤相關(guān)的屬性,所述定值引用鏈為所有可能流經(jīng)所述定值點(diǎn)的引用點(diǎn)所組成的集合; 在潛在錯(cuò)誤語(yǔ)句處識(shí)別所述變量的與錯(cuò)誤相關(guān)的屬性; 根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,所述可能錯(cuò)誤語(yǔ)句表示所述變量的定值語(yǔ)句經(jīng)由部分路徑到達(dá)會(huì)導(dǎo)致錯(cuò)誤的引用語(yǔ)句; 根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集; 根據(jù)所述路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,包括: 根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述變量的與錯(cuò)誤相關(guān)的屬性是否為不安全的屬性; 若所述變量的與錯(cuò)誤相關(guān)的屬性為不安全的屬性,則通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句,所述控制節(jié)點(diǎn)為所述潛在錯(cuò)誤語(yǔ)句相對(duì)于所述變量的定值語(yǔ)句的控制流圖上的控制節(jié)點(diǎn); 若存在檢查語(yǔ)句,則查找是否存在特殊控制流; 若不存在特殊控制流,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟; 在檢查過(guò)的所有控制節(jié)點(diǎn)中都不存在檢查語(yǔ)句和特殊控制流的情況下,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括: 若不存在檢查語(yǔ)句,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,還包括: 若存在特殊控制流,則確定所述潛在錯(cuò)誤語(yǔ)句為一定不錯(cuò)語(yǔ)句。
5.根據(jù)權(quán)利要求1?4中任一項(xiàng)所述的方法,其特征在于,所述根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集,包括: 對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,包括: 對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行后向切片,以獲得語(yǔ)句集合Sbt ; 對(duì)所述變量的定值語(yǔ)句進(jìn)行前向切片,以獲得語(yǔ)句集合Sfs ; 計(jì)算所述Sbt與所述Sfs的交集Sts,并對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片,以獲得對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果; 計(jì)算獲得的對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集,并將所述對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集作為與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
7.—種路徑敏感檢測(cè)裝置,其特征在于,包括: 設(shè)置模塊,用于根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性; 傳播模塊,用于沿著定值引用鏈傳播所述初始的與錯(cuò)誤相關(guān)的屬性,所述定值引用鏈為所有可能流經(jīng)所述定值點(diǎn)的引用點(diǎn)所組成的集合; 識(shí)別模塊,用于在潛在錯(cuò)誤語(yǔ)句處識(shí)別所述變量的與錯(cuò)誤相關(guān)的屬性; 確定模塊,用于根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,所述可能錯(cuò)誤語(yǔ)句表示所述變量的定值語(yǔ)句經(jīng)由部分路徑到達(dá)會(huì)導(dǎo)致錯(cuò)誤的引用語(yǔ)句; 獲得模塊,用于根據(jù)所述可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集; 檢測(cè)模塊,用于根據(jù)所述路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述確定模塊,具體用于根據(jù)所述在潛在錯(cuò)誤語(yǔ)句處識(shí)別的所述變量的與錯(cuò)誤相關(guān)的屬性,確定所述變量的與錯(cuò)誤相關(guān)的屬性是否為不安全的屬性;若所述變量的與錯(cuò)誤相關(guān)的屬性為不安全的屬性,則通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句,所述控制節(jié)點(diǎn)為所述潛在錯(cuò)誤語(yǔ)句相對(duì)于所述變量的定值語(yǔ)句的控制流圖上的控制節(jié)點(diǎn);若存在檢查語(yǔ)句,則查找是否存在特殊控制流;若不存在特殊控制流,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟;在檢查過(guò)的所有控制節(jié)點(diǎn)中都不存在檢查語(yǔ)句和特殊控制流的情況下,確定所述潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述確定模塊,還用于若不存在檢查語(yǔ)句,則將下一個(gè)控制節(jié)點(diǎn)作為當(dāng)前控制節(jié)點(diǎn),并執(zhí)行所述通過(guò)檢查當(dāng)前的控制節(jié)點(diǎn)確定所述當(dāng)前的控制節(jié)點(diǎn)中是否存在檢查語(yǔ)句的步驟。
10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述確定模塊,還用于若存在特殊控制流,則確定所述潛在錯(cuò)誤語(yǔ)句為一定不錯(cuò)語(yǔ)句。
11.根據(jù)權(quán)利要求7?10中任一項(xiàng)所述的裝置,其特征在于,所述獲得模塊,具體用于對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行程序切片,以獲得與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述獲得模塊,具體用于對(duì)所述可能錯(cuò)誤語(yǔ)句進(jìn)行后向切片,以獲得語(yǔ)句集合Sbt ;對(duì)所述變量的定值語(yǔ)句進(jìn)行前向切片,以獲得語(yǔ)句集合Sfs ;計(jì)算所述Sbt與所述Sfs的交集Sts,并對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片,以獲得對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果;計(jì)算獲得的對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集,并將所述對(duì)所述變量的定值語(yǔ)句進(jìn)行后向切片的結(jié)果與所述Sts的并集作為與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合,并將所述與所述可能錯(cuò)誤語(yǔ)句相關(guān)的語(yǔ)句集合作為路徑敏感檢測(cè)的語(yǔ)句輸入集。
【專利摘要】本發(fā)明實(shí)施例提供一種路徑敏感檢測(cè)方法和裝置,本發(fā)明路徑敏感檢測(cè)方法,包括:根據(jù)值流錯(cuò)誤類型為變量設(shè)置初始的與錯(cuò)誤相關(guān)的屬性,沿著定值引用鏈傳播初始的與錯(cuò)誤相關(guān)的屬性,在潛在錯(cuò)誤語(yǔ)句處識(shí)別變量的與錯(cuò)誤相關(guān)的屬性,根據(jù)在潛在錯(cuò)誤語(yǔ)句處識(shí)別的變量的與錯(cuò)誤相關(guān)的屬性,確定潛在錯(cuò)誤語(yǔ)句為可能錯(cuò)誤語(yǔ)句,根據(jù)可能錯(cuò)誤語(yǔ)句獲得路徑敏感檢測(cè)的語(yǔ)句輸入集,根據(jù)路徑敏感檢測(cè)的語(yǔ)句輸入集進(jìn)行路徑敏感檢測(cè)。從而解決現(xiàn)有技術(shù)中檢測(cè)值流錯(cuò)誤存在的可擴(kuò)展性并不理想,無(wú)法有效應(yīng)用于大規(guī)模的應(yīng)用程序的問(wèn)題,通過(guò)減少路徑敏感檢測(cè)的語(yǔ)句輸入集降低了檢測(cè)開(kāi)銷,能夠有效應(yīng)用于大規(guī)模的應(yīng)用程序。
【IPC分類】G06F11-36
【公開(kāi)號(hào)】CN104866417
【申請(qǐng)?zhí)枴緾N201410064881
【發(fā)明人】衷璐潔, 霍瑋, 李豐, 張兆慶
【申請(qǐng)人】華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所
【公開(kāi)日】2015年8月26日
【申請(qǐng)日】2014年2月25日