欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

語言的變量檢測方法和裝置與流程

文檔序號(hào):11250678閱讀:643來源:國知局
語言的變量檢測方法和裝置與流程

本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種語言的變量檢測方法和裝置。



背景技術(shù):

在現(xiàn)有的語言變量檢測技術(shù)中,采用對c語言變量的未初始化使用進(jìn)行檢測的技術(shù)方案,可以利用符號(hào)表、抽象語法樹、控制流程圖等分析未初始化變量。其中,符號(hào)表是一種用于語言翻譯器中的數(shù)據(jù)結(jié)構(gòu)。在符號(hào)表中,程序源代碼中的每個(gè)標(biāo)識(shí)符都和它的聲明或使用信息綁定在一起,比如,數(shù)據(jù)類型,作用域以及內(nèi)存地址等。抽象語法樹所對應(yīng)的樹狀結(jié)構(gòu),控制流程圖為以圖形的方式表達(dá)在問題中信息的變換和傳遞過程,為數(shù)據(jù)流聯(lián)系的各種概念的組合,用分解及抽象手段來控制需求分析的復(fù)雜性,采用分層的數(shù)據(jù)流程圖來表示一個(gè)復(fù)雜的系統(tǒng)。

現(xiàn)有技術(shù)支持c語言的變量未初始化使用檢測,但不支持腳本語言的變量未初始化使用檢測,同時(shí)也沒有考慮條件的滿足性,容易報(bào)錯(cuò),導(dǎo)致檢測誤報(bào)率很高,因而語言檢測的準(zhǔn)確率低,進(jìn)而導(dǎo)致語言的變量檢測效率低下。

另外,在腳本語言的使用過程中,經(jīng)常出現(xiàn)的典型錯(cuò)誤是腳本語言的變量的未初始化使用。由于變量的未初始化使用只有在運(yùn)行時(shí)發(fā)生崩潰才會(huì)發(fā)現(xiàn)這個(gè)錯(cuò)誤,而對于游戲中使用大量腳本語言代碼的情況,靠運(yùn)行來修改錯(cuò)誤,顯然非常耗時(shí),降低了語言的變量檢測效率。

針對上述的語言的變量檢測效率低下的問題,目前尚未提出有效的解決方案。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供了一種語言的變量檢測方法和裝置,以至少解決相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種語言的變量檢測方法。該語言的變量檢測方法包括:獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種語言的變量檢測裝置。該語言的變量檢測裝置包括:第一獲取單元,用于獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;第二獲取單元,用于獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;切片分析單元,用于根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;第一確定單元,用于當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

在本發(fā)明實(shí)施例中,采用獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,由于采用腳本語言的變量未初始化使用檢測,通過對目標(biāo)變量做切片分析,同時(shí)考慮求解條件的可滿足性,達(dá)到了對腳本語言進(jìn)行檢測的目的,從而實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

附圖說明

此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:

圖1是根據(jù)本發(fā)明實(shí)施例的語言的變量檢測方法的硬件環(huán)境的示意圖;

圖2是根據(jù)本發(fā)明實(shí)施例的一種語言的變量檢測方法的流程圖;

圖3是根據(jù)本發(fā)明實(shí)施例的一種獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量方法的流程圖;

圖4是根據(jù)本發(fā)明實(shí)施例的一種對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖;

圖5是根據(jù)本發(fā)明實(shí)施例的一種對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖;

圖6是根據(jù)本發(fā)明實(shí)施例的一種對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖;

圖7是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測方法的流程圖;

圖8是根據(jù)本發(fā)明實(shí)施例的一種vdg的示意圖;

圖9是根據(jù)本發(fā)明實(shí)施例的另一種vdg的示意圖;

圖10是根據(jù)本發(fā)明實(shí)施例的另一種vdg的示意圖;

圖11是根據(jù)本發(fā)明實(shí)施例的一種語言的變量檢測裝置的示意圖;

圖12是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖;

圖13是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖;

圖14是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖;

圖15是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖;

圖16是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖;以及

圖17是根據(jù)本發(fā)明實(shí)施例的一種終端的結(jié)構(gòu)框圖。

具體實(shí)施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。

需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

實(shí)施例1

根據(jù)本發(fā)明實(shí)施例,提供了一種語言的變量檢測方法的實(shí)施例。

可選地,在本實(shí)施例中,上述語言的變量檢測方法可以應(yīng)用于如圖1所示的由服務(wù)器102和終端104所構(gòu)成的硬件環(huán)境中。圖1是根據(jù)本發(fā)明實(shí)施例的語言的變量檢測方法的硬件環(huán)境的示意圖。如圖1所示,服務(wù)器102通過網(wǎng)絡(luò)與終端104進(jìn)行連接,上述網(wǎng)絡(luò)包括但不限于:廣域網(wǎng)、城域網(wǎng)或局域網(wǎng),終端104并不限定于pc、手機(jī)、平板電腦等。本發(fā)明實(shí)施例的語言的變量檢測方法可以由服務(wù)器102來執(zhí)行,也可以由終端104來執(zhí)行,還可以是由服務(wù)器102和終端104共同執(zhí)行。其中,終端104執(zhí)行本發(fā)明實(shí)施例的語言的變量檢測方法也可以是由安裝在其上的客戶端來執(zhí)行。

圖2是根據(jù)本發(fā)明實(shí)施例的一種語言的變量檢測方法的流程圖。如圖2所示,該方法可以包括以下步驟:

步驟s202,獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量。

在本申請上述步驟s202提供的技術(shù)方案中,獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量。

該實(shí)施例的腳本語言可以為lua腳本語言,lua腳本語言為一個(gè)小巧的腳本語言,主要是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能,由于lua支持熱加載,游戲中后臺(tái)可以采用lua作為腳本語言。

獲取腳本語言的目標(biāo)源代碼,該目標(biāo)源代碼具有源程序中的語句,以及每條語句中的定義變量和使用變量。獲取目標(biāo)源代碼中的目標(biāo)變量,該目標(biāo)變量包括定義變量和使用變量。

步驟s204,獲取目標(biāo)變量的依賴關(guān)系。

在本申請上述步驟s204提供的技術(shù)方案中,獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系。

在獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量之后,獲取目標(biāo)變量的依賴關(guān)系??梢詷?gòu)造目標(biāo)源代碼的抽象語法樹(abstractsyntaxtree,簡稱為ast),該抽象語法樹為源代碼語法所對應(yīng)的樹狀結(jié)構(gòu),為程序的一種中間表示形式。該抽象語法樹上的每個(gè)節(jié)點(diǎn)可以表示源代碼的語句、變量等,也即,源代碼中的每條語句都在抽象語法樹中都有對應(yīng)的節(jié)點(diǎn)。

可選地,遍歷上述抽象語法樹,找到源代碼程序中每條語句中的定義變量和使用變量,可以根據(jù)定義的變量和使用變量構(gòu)造值依賴圖(valuedependencegraph,簡稱為vdg),該值依賴圖用于表示變量定義、變量使用之間的依賴關(guān)系。值依賴圖上的節(jié)點(diǎn)可以與抽象語法樹上的節(jié)點(diǎn)相同,為用于保存變量未初始化檢測過程中有用的節(jié)點(diǎn),是程序中的語句和程序入口,值依賴圖上的節(jié)點(diǎn)之間的連線可以用于表示節(jié)點(diǎn)之間的依賴關(guān)系,包括了vdg連線上所含變量的由定義到使用的關(guān)系,這種依賴關(guān)系是由條件語句到達(dá)的,也即,是否到達(dá)與條件語句有關(guān)??蛇x地,需要通過相關(guān)算法計(jì)算vdg連線上兩點(diǎn)之間的到達(dá)條件,稱為兩點(diǎn)之間的守衛(wèi)(guard),從而實(shí)現(xiàn)了獲取目標(biāo)變量的依賴關(guān)系的目的。

步驟s206,根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

在本申請上述步驟s206提供的技術(shù)方案中,根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量。

該實(shí)施例的切片為和源程序中的變量有關(guān)的所有語句,可以為條件語句,也可以為賦值語句等。切片分析用于從源程序中抽取對源程序中特定點(diǎn)上的特定變量具有影響的語句以及控制條件,其中,程序的后向切片包含了所有與變量有直接或間接影響的語句和控制條件,對有影響的語句和控制條件組成新的程序,該過程稱作切片分析,然后通過分析切片來分析源程序的行為。

該實(shí)施例的目標(biāo)語句可以為條件語句、賦值語句等,在獲取目標(biāo)變量的依賴關(guān)系之后,根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

可選地,在值依賴圖上對每個(gè)聲明的目標(biāo)變量做切片分析。首先在值依賴圖中尋找所有目標(biāo)變量的聲明點(diǎn),其中,聲明點(diǎn)為所有目標(biāo)變量在值依賴圖中聲明的位置,將其作為起始點(diǎn)進(jìn)行后向切片。此時(shí)對于每個(gè)聲明的目標(biāo)變量,都將得到一個(gè)對應(yīng)的切片,切片中的節(jié)點(diǎn)為與該聲明的目標(biāo)變量的值有關(guān)的使用點(diǎn)。

在值依賴圖上,從聲明點(diǎn)到使用點(diǎn)之間的路徑為“聲明-使用路徑”,該路徑中不包括其它對聲明的目標(biāo)變量的賦值語句。在做后向切片之后,分析切片,對于每條“聲明-使用”路徑計(jì)算其目標(biāo)條件,該目標(biāo)條件可以表示為目標(biāo)變量之間的依賴關(guān)系,也即,目標(biāo)變量從聲明到使用的到達(dá)條件??蛇x地,當(dāng)一個(gè)目標(biāo)變量依賴于另一個(gè)目標(biāo)變量的到達(dá)條件時(shí),可以進(jìn)行約束二次求精,得到目標(biāo)變量的目標(biāo)條件,該目標(biāo)條件為一種約束條件,用于約束目標(biāo)變量為未賦值變量,不包括其它對聲明的目標(biāo)變量的賦值語句。

步驟s208,當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

在本申請上述步驟s208提供的技術(shù)方案中,當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

在根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件之后,對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果,可以利用求解器求解目標(biāo)條件的可滿足性,也即,求解出滿足目標(biāo)條件的值,該求解器可以為smtsolver,從而求解出滿足目標(biāo)條件的未賦值的變量使用點(diǎn),避免了目標(biāo)變量的未初始化使用只有在運(yùn)行、發(fā)生崩潰時(shí)才發(fā)現(xiàn)的問題,避免了靠運(yùn)行來修改錯(cuò)誤的問題,提高了變量未初始化使用檢測的準(zhǔn)確性和效率。

舉例而言,當(dāng)參數(shù)param的目標(biāo)條件為!(param>8)and!(param<4)時(shí),目標(biāo)變量var未被賦初值,smtsolver可解出該滿足該約束的值為4、5、6、7、8,所以目標(biāo)變量var為未初始化變量,也即,為變量未賦值使用的情況。

當(dāng)對目標(biāo)變量未求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量不為未初始化變量,也即,smtsolver解不出滿足該目標(biāo)條件的值,所以目標(biāo)條件不可到達(dá),不存在目標(biāo)變量的未賦值使用情況。

通過上述步驟s202至步驟s208,通過獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,由于采用腳本語言的變量未初始化使用檢測,通過對目標(biāo)變量做切片分析,同時(shí)考慮求解條件的可滿足性,達(dá)到了對腳本語言進(jìn)行檢測的目的,從而實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

作為一種可選的實(shí)施方式,步驟s202,獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量包括:構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹;遍歷抽象語法樹,得到每條語句中的定義變量和使用變量。

圖3是根據(jù)本發(fā)明實(shí)施例的一種獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量方法的流程圖。如圖3所示,該方法包括以下步驟:

步驟s301,構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹。

在本申請上述步驟s301提供的技術(shù)方案中,構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹,其中,抽象語法樹上的每個(gè)節(jié)點(diǎn)與目標(biāo)源代碼中的每條語句相對應(yīng)。

抽象語法樹為用于表示源代碼語法所對應(yīng)的樹狀結(jié)構(gòu),抽象語法樹上的每個(gè)節(jié)點(diǎn)可以表示源代碼的語句、變量等,也即,源代碼中的每條語句都在抽象語法樹中都有對應(yīng)的節(jié)點(diǎn)。在獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量時(shí),獲取腳本語言的目標(biāo)源代碼,根據(jù)目標(biāo)源代碼構(gòu)造抽象語法樹??蛇x地,當(dāng)腳本語言為lua腳本語言時(shí),可以利用分析程序(parser)工具lua-parser構(gòu)造出lua的ast樹,ast樹上的每個(gè)節(jié)點(diǎn)表示源代碼的一種結(jié)構(gòu),源代碼中的每條語句都在ast樹中有對應(yīng)的節(jié)點(diǎn)。

步驟s302,遍歷抽象語法樹,得到每條語句中的定義變量和使用變量。

在本申請上述步驟s302提供的技術(shù)方案中,遍歷抽象語法樹,得到每條語句中的定義變量和使用變量,其中,目標(biāo)變量包括定義變量和使用變量。

在構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹之后,遍歷抽象語法樹,找到程序中每條語句中的定義變量和使用變量,并分析每條語句的定義變量和使用變量,可以根據(jù)每條語句中的定義變量和使用變量構(gòu)造出值依賴圖,確定節(jié)點(diǎn)之間的依賴關(guān)系。

該實(shí)施例通過構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹,其中,抽象語法樹上的每個(gè)節(jié)點(diǎn)與目標(biāo)源代碼中的每條語句相對應(yīng);遍歷抽象語法樹,得到每條語句中的定義變量和使用變量,其中,目標(biāo)變量包括定義變量和使用變量,實(shí)現(xiàn)了獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量的目的,進(jìn)而獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果。

作為一種可選的實(shí)施方式,在獲取目標(biāo)變量的依賴關(guān)系之后,該變量檢測方法還包括:將目標(biāo)源代碼中的語句確定為多個(gè)目標(biāo)節(jié)點(diǎn);通過依賴關(guān)系連接多個(gè)目標(biāo)節(jié)點(diǎn),得到值依賴圖;步驟s206,根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件包括:對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

值依賴圖上的節(jié)點(diǎn)是程序中的語句,而節(jié)點(diǎn)之間的連線則代表節(jié)點(diǎn)之間的依賴關(guān)系,也即,連線上的兩個(gè)節(jié)點(diǎn)之間所包含的變量由定義到使用的關(guān)系。在獲取目標(biāo)變量的依賴關(guān)系之后,將目標(biāo)源代碼中的語句確定為值依賴圖的多個(gè)目標(biāo)節(jié)點(diǎn),通過依賴關(guān)系連接多個(gè)目標(biāo)節(jié)點(diǎn),從而構(gòu)造出值依賴圖;在值依賴圖上找出所有目標(biāo)變量的聲明點(diǎn),將其作為起始點(diǎn)作后向切片,此時(shí)對于每個(gè)聲明的目標(biāo)變量,都將得到一個(gè)對應(yīng)的切片,切片中的節(jié)點(diǎn)為與該變量的值有關(guān)的使用點(diǎn),分析切片,對不包括其它聲明變量的賦值語句的路徑進(jìn)行計(jì)算,得到目標(biāo)條件,從而實(shí)現(xiàn)了對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

作為一種可選的實(shí)施方式,對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件包括:查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn);從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句;在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑;計(jì)算目標(biāo)路徑上的目標(biāo)條件。

圖4是根據(jù)本發(fā)明實(shí)施例的一種對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖。如圖4所示,該方法包括以下步驟:

步驟s401,查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn)。

在本申請上述步驟s401提供的技術(shù)方案中,查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn)。

值依賴圖上具有聲明變量的位置,在獲取目標(biāo)變量的依賴關(guān)系之后,查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn),將該聲明點(diǎn)確定為切向分析的起始點(diǎn)。

步驟s402,從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句。

在本申請上述步驟s402提供的技術(shù)方案中,從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句,其中,值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn)。

在查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn)之后,從聲明點(diǎn)開始執(zhí)行后向切片操作,此時(shí)對于每個(gè)聲明的變量,都將得到一個(gè)對應(yīng)的切片,得到目標(biāo)變量所屬的目標(biāo)語句。值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn),也即,切片中的節(jié)點(diǎn)為與該變量的值有關(guān)的使用點(diǎn)。

步驟s403,在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑。

在本申請上述步驟s403提供的技術(shù)方案中,在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,其中,目標(biāo)路徑不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量賦值過的語句。

在從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句之后,在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,也即,確定“聲明-使用”路徑,該目標(biāo)路徑中不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量聲明過的語句,也即,不包括其它對聲明變量進(jìn)行賦值的語句。

步驟s404,計(jì)算目標(biāo)路徑上的目標(biāo)條件。

在本申請上述步驟s404提供的技術(shù)方案中,計(jì)算目標(biāo)路徑上的目標(biāo)條件。

在確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑之后,計(jì)算目標(biāo)路徑上的目標(biāo)條件,也即,計(jì)算從聲明點(diǎn)到使用點(diǎn)之間的到達(dá)條件,包含了變量由定義到使用的關(guān)系。

舉例而言,變量“聲明-使用”的到達(dá)條件是:!(param>8)and!(param<=8),可以進(jìn)一步通過smtsolver解算器求解滿足該到達(dá)條件的值。

該實(shí)施例通過查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn);從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句,其中,值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn);在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,其中,目標(biāo)路徑不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量賦值過的語句;計(jì)算目標(biāo)路徑上的目標(biāo)條件,實(shí)現(xiàn)了對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件的目的,進(jìn)而當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果。

作為一種可選的實(shí)施方式,步驟s206,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件包括:獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;其中,步驟s208,當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量包括:當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件且滿足第二目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

圖5是根據(jù)本發(fā)明實(shí)施例的一種對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖。如圖5所示,該方法包括以下步驟:

步驟s501,獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件。

在本申請上述步驟s501提供的技術(shù)方案中,獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件。

目標(biāo)變量可以所屬多個(gè)語句。在根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件時(shí),獲取目標(biāo)變量所屬的第一目標(biāo)語句,該第一目標(biāo)語句包括了目標(biāo)變量的第一賦值條件,比如,第一目標(biāo)語句為“ifparam>8thenvar=4”,也即,在“param>8”的第一賦值條件下,為目標(biāo)變量var賦值4。

步驟s502,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

在本申請上述步驟s502提供的技術(shù)方案中,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

在獲取目標(biāo)變量所屬的第一目標(biāo)語句之后,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

舉例而言,第一目標(biāo)語句為“ifparam>8thenvar=4”,第一賦值條件為“param>8”,確定與“param>8”相反的條件“!(param>8)”為第一目標(biāo)條件。

步驟s503,獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件。

在本申請上述步驟s503提供的技術(shù)方案中,獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件。

獲取目標(biāo)變量所屬的第二目標(biāo)語句,該第二目標(biāo)語句包括了目標(biāo)變量的第二賦值條件。

舉例而言,第一目標(biāo)語句為“ifparam<4thenvar=2”,也即,在“param<4”的第二賦值條件下,為目標(biāo)變量var賦值2。

步驟s504,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

在本申請上述步驟s504提供的技術(shù)方案中,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

在獲取目標(biāo)變量所屬的第二目標(biāo)語句之后,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

舉例而言,第一目標(biāo)語句為“ifparam<4thenvar=2”,第二賦值條件為“param<4,確定與“param<4”相反的條件“!(param<4)”為第二目標(biāo)條件。

可選地,該實(shí)施例先執(zhí)行步驟s503、步驟s504,再執(zhí)行步驟s501、步驟s502。

步驟s505,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

在本申請上述步驟s505提供的技術(shù)方案中,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

在確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件之后,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

舉例而言,第一目標(biāo)條件為“!(param>8)”,第二目標(biāo)條件為“!(param<4)”,對目標(biāo)變量var執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件,也即,目標(biāo)條件為!(param>8)and!(param<4)。

在當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量時(shí),當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件且滿足第二目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,可以通過smtsolver解算器解出該滿足該約束的值,比如,求解出的值為4、5、6、7、8,所以存在目標(biāo)變量var的未賦值使用情況。

該實(shí)施例通過獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件,實(shí)現(xiàn)了達(dá)到目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件的目的,實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果。

作為一種可選的實(shí)施方式,步驟s206,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件包括:獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件;確定第二賦值條件的第四目標(biāo)條件,第四目標(biāo)條件為第二目標(biāo)變量的取值條件;確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

圖6是根據(jù)本發(fā)明實(shí)施例的一種對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析的方法的流程圖。如圖6所示,該方法包括以下步驟:

步驟s601,獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件。

在本申請上述步驟s601提供的技術(shù)方案中,獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件。

在對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件時(shí),獲取第一目標(biāo)變量所屬的第一目標(biāo)語句。

舉例而言,第一目標(biāo)語句為“ifparam==1thenvar=4”,也即,在“param==1”的第一賦值條件下,為第一目標(biāo)變量var賦值4。

步驟s602,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

在本申請上述步驟s602提供的技術(shù)方案中,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

在獲取第一目標(biāo)變量所屬的第一目標(biāo)語句之后,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

舉例而言,第一目標(biāo)語句為“ifparam==1thenvar=4”,第一賦值條件為”ifparam==1”,確定與“ifparam==1”相反的條件“!(param==1)”為第一目標(biāo)條件。

步驟s603,獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定。

在本申請上述步驟s603提供的技術(shù)方案中,獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定。

在對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件時(shí),獲取第一目標(biāo)變量所屬的第二目標(biāo)語句。

舉例而言,第二目標(biāo)語句為“ifflag==1thenvar=3”,也即,在第二賦值條件“flag==1”下,為第一目標(biāo)變量var賦值3。該第二賦值條件“flag==1”由第一賦值條件對應(yīng)的第二目標(biāo)變量flag確定,比如,第一賦值條件為“ifparam==1”,則第二賦值條件中的flag的取值由“ifparam==1thenflag=0”,“l(fā)ocalflag=1”中的第二目標(biāo)變量確定。

步驟s604,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

在本申請上述步驟s604提供的技術(shù)方案中,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

在獲取第一目標(biāo)變量所屬的第二目標(biāo)語句之后,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

舉例而言,第二目標(biāo)語句為“ifflag==1thenvar=3”,第二賦值條件為“ifflag==1”,確定與“ifflag==1”相反的條件“!(flag==1)”為第一目標(biāo)條件。

步驟s605,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件。

在本申請上述步驟s605提供的技術(shù)方案中,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量和第二目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件。

在確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件,確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件之后,確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件。

舉例而言,第一目標(biāo)條件為“!(param==1)”,第二目標(biāo)條件為“!(flag==1)”,對第一目標(biāo)變量var執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件,也即,第三目標(biāo)條件為“!(param==1)and!(flag==1)”。

步驟s606,確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值條件。

在本申請上述步驟s606提供的技術(shù)方案中,確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值條件。

確定第二賦值條件的第四目標(biāo)條件,比如,確定第二賦值條件“ifflag==1”的第四目標(biāo)條件,第四目標(biāo)條件為第二目標(biāo)變量的取值條件,比如,第四目標(biāo)條件可以為((!(param==1))=>flag==1)&&((param==1)=>flag==0),也即,在!(param==1)的條件下,第二目標(biāo)變量flag取值為1。在(param==1)的條件下,flag取值為0。

步驟s607,確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

在本申請上述步驟s607提供的技術(shù)方案中,確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量和第二目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

在確定第二賦值條件的第四目標(biāo)條件之后,確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

舉例而言,第三目標(biāo)條件為“!(param==1)and!(flag==1)”,第四目標(biāo)條件可以為((!(param==1))=>flag==1)&&((param==1)=>flag==0),則目標(biāo)條件為第三目標(biāo)條件&&第四目標(biāo)條件。smtsolver解不出滿足該約束的值,所以該目標(biāo)條件不可到達(dá),即不存在var的未賦值使用。

其中,步驟s208,當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量包括:當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

該實(shí)施例通過獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件;確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值目標(biāo)條件;確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,實(shí)現(xiàn)對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件的目的。

作為一種可選的實(shí)施方式,在步驟s206,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件之后,當(dāng)未對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為初始化變量。

smtsolver解不出滿足該約束的值,所以該目標(biāo)條件不可到達(dá),即不存在var的未賦值使用。

該實(shí)施例采用腳本語言的變量未初始化使用檢測,通過對目標(biāo)變量做切片分析,同時(shí)考慮求解條件的可滿足性,達(dá)到了對腳本語言進(jìn)行檢測的目的,從而實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

實(shí)施例2

下面結(jié)合優(yōu)選的實(shí)施例對本發(fā)明的技術(shù)方案進(jìn)行說明。

在該實(shí)施例中,因?yàn)閘ua支持熱加載,游戲中后臺(tái)普遍采用lua作為腳本語言。在lua使用過程中一個(gè)經(jīng)常出現(xiàn)的典型錯(cuò)誤是lua變量的未初始化使用,因?yàn)樽兞康奈闯跏蓟褂弥挥性谶\(yùn)行時(shí)發(fā)生崩潰才會(huì)發(fā)現(xiàn)這個(gè)錯(cuò)誤,而對于游戲中使用大量lua代碼的情況,靠運(yùn)行來修改錯(cuò)誤,顯然非常耗時(shí),降低變量檢測的效率,影響了需要尋求其它的解決途徑。

該實(shí)施例為一種通過靜態(tài)分析檢測出lua代碼中變量未初始化使用的情況,報(bào)告未初始化變量,可以給予開發(fā)人員警告,從而一次性修復(fù)所有這類錯(cuò)誤,大大節(jié)省開發(fā)時(shí)間。該靜態(tài)分析檢測方法通過遍歷抽象語法樹,構(gòu)造變量的值依賴圖,然后在vdg圖上對每個(gè)聲明的變量做切片分析,利用smtsolver求解條件識(shí)別未賦值的變量使用點(diǎn)。

圖7是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測方法的流程圖。如圖7所示,該方法包括以下步驟:

步驟s701,將源代碼生成ast樹。

該實(shí)施例的腳本語言為lua腳本語言,利用lua的parser分析程序,可以語法剖析程式工具lua-parser構(gòu)造出lua的ast樹,其中,ast樹上的每個(gè)節(jié)點(diǎn)表示源代碼的一種結(jié)構(gòu),源代碼中的每條語句都在ast樹中有對應(yīng)的節(jié)點(diǎn)。

步驟s702,遍歷ast樹,分析每條語句的變量。

在將源代碼生成ast樹之后,遍歷ast樹,分析ast樹上的每條語句的變量,找到程序中每條語句中定義的變量和使用的變量。

步驟s703,根據(jù)每條語句的變量構(gòu)造vdg樹。

在遍歷ast樹,分析每條語句的變量之后,根據(jù)每條語句的變量構(gòu)造vdg樹。vdg圖的節(jié)點(diǎn)是程序中的語句和程序入口,而節(jié)點(diǎn)之間的連線則代表節(jié)點(diǎn)間的依賴關(guān)系。該依賴關(guān)系包括了兩個(gè)節(jié)點(diǎn)間所含變量的由定義到使用的關(guān)系。這種依賴關(guān)系是有條件語句到達(dá)的,也即,是否到達(dá)與條件語句有關(guān),此時(shí)需要通過相關(guān)算法計(jì)算兩點(diǎn)之間的到達(dá)條件,也稱為兩點(diǎn)之間的守衛(wèi)。

步驟s704,根據(jù)vdg樹構(gòu)造后向切片。

在根據(jù)每條語句的變量構(gòu)造vdg樹之后,根據(jù)vdg樹構(gòu)造后向切片。首先在vdg圖中尋找所有變量的聲明點(diǎn),將其作為起始點(diǎn)作后向切片。此時(shí)對于每個(gè)聲明的變量,都將得到一個(gè)對應(yīng)的切片,切片中的節(jié)點(diǎn)為與該變量的值有關(guān)的使用點(diǎn),其中,切片為與變量有關(guān)的所有語句。

步驟s705,分析切片,構(gòu)造“聲明-使用”鏈。

在根據(jù)vdg樹構(gòu)造后向切片之后,分析切片,構(gòu)造“聲明-使用”鏈,也即,“聲明-使用”路徑。對于每條“聲明-使用”路徑,不包括其他對聲明變量的賦值語句。

步驟s706,二次約束求精。

在分析切片,構(gòu)造“聲明-使用”鏈之后,進(jìn)行約束二次求精。

舉例而言,變量var“聲明-使用”的到達(dá)條件是condition1:!(param==1)and!(flag==1),而flag又依賴于param,所以需要二次求精。在vdg圖中尋找flag的switch節(jié)點(diǎn)(switchnode),獲取其取值以及到達(dá)條件,flag的取值條件為condition2:((!(param==1))=>flag==1)&&((param==1)=>flag==0),將condtion1&&condition2一起進(jìn)行約束求解。smtsolver解不出滿足該約束的值,所以該“聲明-使用”不可到達(dá),也即,不存在var的未賦值使用。

步驟s707,對每條鏈進(jìn)行求解。

在分析切片,構(gòu)造“聲明-使用”鏈之后,或者在二次約束求精之后,對每條鏈進(jìn)行求解,也即,對每條“聲明-使用”鏈計(jì)算其到達(dá)條件,可以采用smtsolver解出滿足該到達(dá)條件的值。

步驟s708,報(bào)告未初始化使用變量。

在對每條鏈進(jìn)行求解之后,報(bào)告未初始化使用變量,也即,在得到所有可達(dá)的未賦值的使用點(diǎn)后,輸出這些點(diǎn)以及相關(guān)的缺陷跟蹤,還可以繼續(xù)執(zhí)行步驟705,分析切片,構(gòu)造“聲明-使用”鏈。

該實(shí)施例通過將源代碼生成ast樹,遍歷ast樹,分析每條語句的變量,根據(jù)每條語句的變量構(gòu)造vdg樹,根據(jù)vdg樹構(gòu)造后向切片,分析切片,構(gòu)造“聲明-使用”鏈,二次約束求精,對每條鏈進(jìn)行求解,報(bào)告未初始化使用變量,實(shí)現(xiàn)了通過靜態(tài)分析檢測出lua代碼中變量未初始化使用的情況,給予開發(fā)人員警告,從而一次性修復(fù)所有這類錯(cuò)誤,大大節(jié)省開發(fā)時(shí)間。

下面舉例說明本文提出的基于vdg圖的靜態(tài)分析方法的可行性。

代碼1是根據(jù)本發(fā)明實(shí)施例的一種存在變量未初始化的示意代碼。

代碼2是根據(jù)本發(fā)明實(shí)施例的一種無變量未初始化的示意代碼。

代碼1所示為存在變量未初始化使用的情況,其中,當(dāng)參數(shù)param>=4andparam<=8時(shí),變量var未被賦初值,而代碼2所示代碼為不存在變量未初始化使用的代碼,無論param取何值,var都可以被賦初值。

圖8是根據(jù)本發(fā)明實(shí)施例的一種vdg的示意圖。如圖8所示,該vdg圖與代碼1相對應(yīng),輸入變量var,在param>8的條件下,var=4,在param<4的條件下,var=2,返回var+1。該變量var“聲明-使用”的到達(dá)(不經(jīng)過其他對var的賦值語句)條件是:!(param>8)and!(param<4),smtsolver可解出該滿足該約束的值,比如,4、5、6、7、8,所以存在變量var的未賦值使用。

圖9是根據(jù)本發(fā)明實(shí)施例的另一種vdg的示意圖。如圖9所示,該vdg圖與代碼2相對應(yīng),輸入變量var,在param>8的條件下,var=4,在param<=8的條件下,var=2,返回var+1。變量var“聲明-使用”的到達(dá)條件是:!(param>8)and!(param<=8),smtsolver解不出滿足該約束的值,所以該“聲明-使用”不可到達(dá),所以不存在var的未賦值使用,分析方法反饋的結(jié)果與實(shí)際情況相符。

另外,該實(shí)施例的方法也適用于代碼存在需要約束條件二次求精的情況,下面對其進(jìn)行舉例說明。

代碼3是根據(jù)本發(fā)明實(shí)施例的一種需要約束條件二次求精的示意代碼。

圖10是根據(jù)本發(fā)明實(shí)施例的另一種vdg的示意圖。如圖10所示,該vdg圖與代碼3相對應(yīng),輸入變量var,在param==1的條件下,var=4,在flag==1的條件下,var=3,返回var+1。而flag又依賴于param,在param?。?的條件下,flag=1,變量var“聲明-使用”的到達(dá)條件是condition1:!(param==1)and!(flag==1),而flag又依賴于param,所以需要二次求精。在vdg圖中尋找flag的switch節(jié)點(diǎn)(switchflag:switchnode),獲取其取值以及到達(dá)條件,最終得到flag條件節(jié)點(diǎn)的到達(dá)條件為condition2:((!(param==1))=>flag==1)&&((param==1)=>flag==0),將condtion1&&condition2一起進(jìn)行約束求解。smtsolver解不出滿足該約束的值,所以該“聲明-使用”不可到達(dá),也即,不存在var的未賦值使用。

該實(shí)施例通過靜態(tài)分析檢測出lua代碼中變量未初始化使用的情況,給予開發(fā)人員警告,從而一次性修復(fù)所有這類錯(cuò)誤,大大節(jié)省開發(fā)時(shí)間。該靜態(tài)分析檢測方法通過遍歷抽象語法樹(ast樹),構(gòu)造變量的vdg圖,然后在vdg圖上對每個(gè)聲明的變量做切片分析,利用smtsolver求解條件識(shí)別未賦值的變量使用點(diǎn),解決了lua的變量未初始化使用檢測,使得開發(fā)人員不需要依靠運(yùn)行程序,在程序崩潰時(shí)才能發(fā)現(xiàn)變量的未初始化使用,大大提高開發(fā)效率。

需要說明的是,對于前述的各方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。

通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。

實(shí)施例3

根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述語言的變量檢測方法的語言的變量檢測裝置。圖11是根據(jù)本發(fā)明實(shí)施例的一種語言的變量檢測裝置的示意圖。如圖11所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。

第一獲取單元10,用于獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量。

第二獲取單元20,用于獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系。

切片分析單元30,用于根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量。

第一確定單元40,用于當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

圖12是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖。如圖12所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,第一獲取單元10包括:構(gòu)造模塊11和遍歷模塊12。

需要說明的是,該實(shí)施例的第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40與圖11所示實(shí)施例的語言的變量檢測裝置中的作用相同,此處不再贅述。

構(gòu)造模塊11,用于構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹,其中,抽象語法樹上的每個(gè)節(jié)點(diǎn)與目標(biāo)源代碼中的每條語句相對應(yīng)。

遍歷模塊12,用于遍歷抽象語法樹,得到每條語句中的定義變量和使用變量,其中,目標(biāo)變量包括定義變量和使用變量。

圖13是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖。如圖13所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,第一獲取單元10包括:構(gòu)造模塊11和遍歷模塊12。該裝置還包括:第二確定單元50和連接單元60。其中,切片分析單元30包括:切片分析模塊31。

需要說明的是,該實(shí)施例的第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40,構(gòu)造模塊11和遍歷模塊12與圖12所示實(shí)施例的語言的變量檢測裝置中的作用相同,此處不再贅述。

第二確定單元50,用于在獲取目標(biāo)變量的依賴關(guān)系之后,將目標(biāo)源代碼中的語句確定為多個(gè)目標(biāo)節(jié)點(diǎn)。

連接單元60,用于通過依賴關(guān)系連接多個(gè)目標(biāo)節(jié)點(diǎn),得到值依賴圖,其中,多個(gè)目標(biāo)節(jié)點(diǎn)的變量包括:定義變量和使用變量。

切片分析單元30包括:切片分析模塊31,用于對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

圖14是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖。如圖14所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,第一獲取單元10包括:構(gòu)造模塊11和遍歷模塊12。該裝置還包括:第二確定單元50和連接單元60。其中,切片分析單元30包括:切片分析模塊31。其中,切片分析模塊31包括:查找子模塊311、切片分析子模塊312、確定子模塊313和314計(jì)算子模塊。

需要說明的是,該實(shí)施例的第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,第一獲取單元10包括:構(gòu)造模塊11和遍歷模塊12,第二確定單元50和連接單元60,切片分析模塊31與圖13所示實(shí)施例的語言的變量檢測裝置中的作用相同,此處不再贅述。

查找子模塊311,用于查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn)。

切片分析子模塊312,用于從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句,其中,值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn)。

確定子模塊313,用于在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,其中,目標(biāo)路徑不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量賦值過的語句。

計(jì)算子模塊314,用于計(jì)算目標(biāo)路徑上的目標(biāo)條件。

圖15是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖。如圖15所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,切片分析單元30包括:第一獲取模塊31、第一確定模塊32、第二獲取模塊33、第二確定模塊34和第三確定模塊35,第一確定單元40包括:第四確定模塊41。

需要說明的是,該實(shí)施例的第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40與圖11所示實(shí)施例中的語言的變量檢測裝置中的作用相同,此處不再贅述。

第一獲取模塊31,用于獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件。

第一確定模塊32,確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

第二獲取模塊33,用于獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件.

第二確定模塊34,用于確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

第三確定模塊35,用于確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

第四確定模塊41,用于當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件且滿足第二目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

圖16是根據(jù)本發(fā)明實(shí)施例的另一種語言的變量檢測裝置的示意圖。如圖16所示,該裝置可以包括:第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40。其中,切片分析單元30包括:第三獲取模塊36、第五確定模塊37、第四獲取模塊38、第六確定模塊39、第七確定模塊310、第八確定模塊311和第九確定模塊312。第一確定單元40包括:第十確定模塊42。

需要說明的是,該實(shí)施例的第一獲取單元10、第二獲取單元20、切片分析單元30和第一確定單元40與圖11所示實(shí)施例中的語言的變量檢測裝置中的作用相同,此處不再贅述。

第三獲取模塊36,用于獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件。

第五確定模塊37,用于確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件。

第四獲取模塊38,用于獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定。

第六確定模塊39,用于確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件。

第七確定模塊310,用于確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件。

第八確定模塊311,用于確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值目標(biāo)條件。

第九確定模塊312,用于確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件。

其中,第一確定單元40包括:第十確定模塊42用于當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

可選地,該裝置還包括:第三確定單元,用于在對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件之后,當(dāng)未對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為初始化變量。

需要說明的是,該實(shí)施例中的第一獲取單元10可以用于執(zhí)行本申請實(shí)施例1中的步驟s202,該實(shí)施例中的第二獲取單元20可以用于執(zhí)行本申請實(shí)施例1中的步驟s204,該實(shí)施例中的切片分析單元30可以用于執(zhí)行本申請實(shí)施例1中的步驟s206,該實(shí)施例中的第一確定單元40可以用于執(zhí)行本申請實(shí)施例1中的步驟s208。

該實(shí)施例通過第一獲取單元10獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量,通過第二獲取單元20獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系,通過切片分析單元30根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量,通過第一確定單元40當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,由于采用腳本語言的變量未初始化使用檢測,通過對目標(biāo)變量做切片分析,同時(shí)考慮求解條件的可滿足性,達(dá)到了對腳本語言進(jìn)行檢測的目的,從而實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

此處需要說明的是,上述單元和模塊與對應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實(shí)施例1所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在如圖1所示的硬件環(huán)境中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn),其中,硬件環(huán)境包括網(wǎng)絡(luò)環(huán)境。

實(shí)施例4

根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述語言的變量檢測方法的服務(wù)器或終端。

圖17是根據(jù)本發(fā)明實(shí)施例的一種終端的結(jié)構(gòu)框圖。如圖17所示,該終端可以包括:一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器171、存儲(chǔ)器173、以及傳輸裝置175,如圖17所示,該終端還可以包括輸入輸出設(shè)備177。

其中,存儲(chǔ)器173可用于存儲(chǔ)軟件程序以及模塊,如本發(fā)明實(shí)施例中的語言的變量檢測方法和裝置對應(yīng)的程序指令/模塊,處理器171通過運(yùn)行存儲(chǔ)在存儲(chǔ)器173內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的語言的變量檢測方法。存儲(chǔ)器173可包括高速隨機(jī)存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器173可進(jìn)一步包括相對于處理器171遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過網(wǎng)絡(luò)連接至終端。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。

上述的傳輸裝置175用于經(jīng)由一個(gè)網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù),還可以用于處理器與存儲(chǔ)器之間的數(shù)據(jù)傳輸。上述的網(wǎng)絡(luò)具體實(shí)例可包括有線網(wǎng)絡(luò)及無線網(wǎng)絡(luò)。在一個(gè)實(shí)例中,傳輸裝置175包括一個(gè)網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過網(wǎng)線與其他網(wǎng)絡(luò)設(shè)備與路由器相連從而可與互聯(lián)網(wǎng)或局域網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置175為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

其中,具體地,存儲(chǔ)器173用于存儲(chǔ)應(yīng)用程序。

處理器171可以通過傳輸裝置175調(diào)用存儲(chǔ)器173存儲(chǔ)的應(yīng)用程序,以執(zhí)行下述步驟:

獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;

獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;

根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;

當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

處理器171還用于執(zhí)行下述步驟:構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹,其中,抽象語法樹上的每個(gè)節(jié)點(diǎn)與目標(biāo)源代碼中的每條語句相對應(yīng);遍歷抽象語法樹,得到每條語句中的定義變量和使用變量,其中,目標(biāo)變量包括定義變量和使用變量。

處理器171還用于執(zhí)行下述步驟:在獲取目標(biāo)變量的依賴關(guān)系之后,將目標(biāo)源代碼中的語句確定為多個(gè)目標(biāo)節(jié)點(diǎn);通過依賴關(guān)系連接多個(gè)目標(biāo)節(jié)點(diǎn),得到值依賴圖,其中,多個(gè)目標(biāo)節(jié)點(diǎn)的變量包括:定義變量和使用變量;根據(jù)依賴關(guān)系,對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

處理器171還用于執(zhí)行下述步驟:查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn);從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句,其中,值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn);在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,其中,目標(biāo)路徑不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量賦值過的語句;計(jì)算目標(biāo)路徑上的目標(biāo)條件。

處理器171還用于執(zhí)行下述步驟:獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件且滿足第二目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

處理器171還用于執(zhí)行下述步驟:獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件;確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值目標(biāo)條件;確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

處理器171還用于執(zhí)行下述步驟:在對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件之后,當(dāng)未對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為初始化變量。

采用本發(fā)明實(shí)施例,提供了一種語言的變量檢測方法的方案。通過獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量,由于采用腳本語言的變量未初始化使用檢測,通過對目標(biāo)變量做切片分析,同時(shí)考慮求解條件的可滿足性,達(dá)到了對腳本語言進(jìn)行檢測的目的,從而實(shí)現(xiàn)了提高變量檢測的效率的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中語言的變量檢測效率低下的技術(shù)問題。

可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例中所描述的示例,本實(shí)施例在此不再贅述。

本領(lǐng)域普通技術(shù)人員可以理解,圖17所示的結(jié)構(gòu)僅為示意,終端可以是智能手機(jī)(如android手機(jī)、ios手機(jī)等)、平板電腦、掌上電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備(mobileinternetdevices,mid)、pad等終端設(shè)備。圖17其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,終端還可包括比圖17中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖17所示不同的配置。

本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設(shè)備相關(guān)的硬件來完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤或光盤等。

實(shí)施例5

本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)。可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于執(zhí)行語言的變量檢測方法的程序代碼。

可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以位于上述實(shí)施例所示的網(wǎng)絡(luò)中的多個(gè)網(wǎng)絡(luò)設(shè)備中的至少一個(gè)網(wǎng)絡(luò)設(shè)備上。

可選地,在本實(shí)施例中,存儲(chǔ)介質(zhì)被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:

獲取腳本語言的目標(biāo)源代碼中的目標(biāo)變量;

獲取目標(biāo)變量的依賴關(guān)系,其中,依賴關(guān)系用于表示目標(biāo)變量中的定義變量與使用變量之間的關(guān)系;

根據(jù)依賴關(guān)系,對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件,其中,目標(biāo)條件用于約束目標(biāo)變量為未賦值變量;

當(dāng)對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:構(gòu)造腳本語言的目標(biāo)源代碼的抽象語法樹,其中,抽象語法樹上的每個(gè)節(jié)點(diǎn)與目標(biāo)源代碼中的每條語句相對應(yīng);遍歷抽象語法樹,得到每條語句中的定義變量和使用變量,其中,目標(biāo)變量包括定義變量和使用變量。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:在獲取目標(biāo)變量的依賴關(guān)系之后,將目標(biāo)源代碼中的語句確定為多個(gè)目標(biāo)節(jié)點(diǎn);通過依賴關(guān)系連接多個(gè)目標(biāo)節(jié)點(diǎn),得到值依賴圖,其中,多個(gè)目標(biāo)節(jié)點(diǎn)的變量包括:定義變量和使用變量;根據(jù)依賴關(guān)系,對值依賴圖上的目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:查找值依賴圖上的所有目標(biāo)變量的聲明點(diǎn);從聲明點(diǎn)開始執(zhí)行后向切片操作,得到目標(biāo)變量所屬的目標(biāo)語句,其中,值依賴圖上與目標(biāo)語句對應(yīng)的節(jié)點(diǎn)為與目標(biāo)變量的值有關(guān)的使用點(diǎn);在值依賴圖上確定由聲明點(diǎn)到使用點(diǎn)的目標(biāo)路徑,其中,目標(biāo)路徑不包括目標(biāo)源代碼中已經(jīng)對目標(biāo)變量賦值過的語句;計(jì)算目標(biāo)路徑上的目標(biāo)條件。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括目標(biāo)變量的第二賦值條件;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第一目標(biāo)條件且滿足第二目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取第一目標(biāo)變量所屬的第一目標(biāo)語句,其中,第一目標(biāo)語句包括第一目標(biāo)變量的第一賦值條件;確定與第一賦值條件相反的賦值條件為第一目標(biāo)條件;獲取第一目標(biāo)變量所屬的第二目標(biāo)語句,其中,第二目標(biāo)語句包括第一目標(biāo)變量的第二賦值條件,第二賦值條件由第一賦值條件對應(yīng)的第二目標(biāo)變量確定;確定與第二賦值條件相反的賦值條件為第二目標(biāo)條件;確定用于在第一目標(biāo)條件下且在第二目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為第三目標(biāo)條件;確定第二賦值條件的第四目標(biāo)條件,其中,第四目標(biāo)條件為第二目標(biāo)變量的取值條件;確定用于在第三目標(biāo)條件下且在第四目標(biāo)條件下對第一目標(biāo)變量執(zhí)行與邏輯運(yùn)算的條件為目標(biāo)條件;當(dāng)對目標(biāo)變量求解出滿足第三目標(biāo)條件且滿足第四目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為未初始化變量。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:在對目標(biāo)變量所屬的目標(biāo)語句進(jìn)行切片分析,得到目標(biāo)變量的目標(biāo)條件之后,當(dāng)未對目標(biāo)變量求解出滿足目標(biāo)條件的求解結(jié)果時(shí),確定目標(biāo)變量為初始化變量。

可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例中所描述的示例,本實(shí)施例在此不再贅述。

可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以包括但不限于:u盤、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

上述實(shí)施例中的集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在上述計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)或多臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。

在本發(fā)明的上述實(shí)施例中,對各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。

在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的客戶端,可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。

另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。

以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宣化县| 临夏市| 湘潭市| 泾阳县| 台江县| 法库县| 临城县| 黄龙县| 宁波市| 张家川| 宝应县| 哈尔滨市| 南汇区| 耒阳市| 孝义市| 高邮市| 康定县| 武清区| 安岳县| 凉山| 北川| 长岭县| 华宁县| 延津县| 鄄城县| 无为县| 扶余县| 榕江县| 界首市| 青铜峡市| 云和县| 多伦县| 芒康县| 交城县| 安福县| 墨竹工卡县| 遵化市| 阜新市| 通许县| 方正县| 郴州市|