面向并發(fā)程序的重構(gòu)一致性檢測方法
發(fā)布時間:2022-02-04 20:32
針對并發(fā)軟件重構(gòu)后可能帶來的行為不一致問題,提出了一種重構(gòu)一致性檢測方法,該方法使用控制流分析和數(shù)據(jù)流分析檢測重構(gòu)前后的變化,使用同步依賴分析檢測重構(gòu)前后同步依賴關(guān)系的變化.針對對象重用性、靜態(tài)共享字段、死鎖3種典型的引起并發(fā)錯誤的情況,設(shè)計了3種檢測算法對重構(gòu)前后程序的不一致性進(jìn)行檢測.依據(jù)該方法,在WALA軟件分析框架下實現(xiàn)了一個原型檢測工具.在實驗中,使用該工具在SPECjbb2005和HSQLDB測試程序上進(jìn)行了驗證,并與Schafer等提出的方法進(jìn)行比較,實驗結(jié)果表明,該方法能夠有效地發(fā)現(xiàn)并發(fā)軟件重構(gòu)的不一致行為.
【文章來源】:河北師范大學(xué)學(xué)報(自然科學(xué)版). 2020,44(03)
【文章頁數(shù)】:9 頁
【部分圖文】:
檢測框架
圖3為對象重用檢測算法.通過檢測監(jiān)視器對象的類型,對監(jiān)視器對象類型進(jìn)行判斷,判斷其是否為Boolean,Integer或String等類型.方法doPerformAnalysis(1~5行)中,被檢測的程序如果檢測的方法不為空,則通過調(diào)用方法populateBugInstances檢測程序中符合條件的監(jiān)視器對象信息,賦值給bugInstances實例獲取最終符合條件的重用對象.方法populateBugInstances(6~12行)判斷獲取的指令是否為重用對象.其中獲取的指令instruction必須為監(jiān)視器獲取鎖定指令.通過調(diào)用方法getReusableLockObjectTypes給reusableLockObjectTypes賦值.該reusableLockObjectTypes符合對象重用類型.方法getReusableLockObjectTypes(13~18行),獲取監(jiān)視器指令monitorInstruction的指向地址,將其賦值給instanceKey.通過方法createReusableChecker判斷instanceKey是否為重用對象類型.方法createReusableChecker(19~29行),獲取instanceKey的類型,如果其類型為Boolean,Integer或String等重用類型,則檢測出該程序中含有對象重用問題.2.2 靜態(tài)共享字段檢測
對象的重用是在鎖定諸如Boolean,Integer等類型的對象時發(fā)生的重用,如Boolean類型只有2個值true和false,如果使用2個Boolean類型對象作為同步監(jiān)視器對象,可能會因指向同一地址而導(dǎo)致問題.如圖2的示例程序,在synchronized同步塊中,其鎖定監(jiān)視器對象類型是Boolean類型.方法oneMethod( )和方法anotherMethod( )分別會在2個線程中執(zhí)行.由于Boolean FALSE和false 2個常量代表同一內(nèi)存位置,實際上是同一個同步對象,在圖2的程序中雖然使用2個不同名字的同步對象,但會導(dǎo)致臨界資源的訪問形成互斥.圖3為對象重用檢測算法.通過檢測監(jiān)視器對象的類型,對監(jiān)視器對象類型進(jìn)行判斷,判斷其是否為Boolean,Integer或String等類型.方法doPerformAnalysis(1~5行)中,被檢測的程序如果檢測的方法不為空,則通過調(diào)用方法populateBugInstances檢測程序中符合條件的監(jiān)視器對象信息,賦值給bugInstances實例獲取最終符合條件的重用對象.方法populateBugInstances(6~12行)判斷獲取的指令是否為重用對象.其中獲取的指令instruction必須為監(jiān)視器獲取鎖定指令.通過調(diào)用方法getReusableLockObjectTypes給reusableLockObjectTypes賦值.該reusableLockObjectTypes符合對象重用類型.方法getReusableLockObjectTypes(13~18行),獲取監(jiān)視器指令monitorInstruction的指向地址,將其賦值給instanceKey.通過方法createReusableChecker判斷instanceKey是否為重用對象類型.方法createReusableChecker(19~29行),獲取instanceKey的類型,如果其類型為Boolean,Integer或String等重用類型,則檢測出該程序中含有對象重用問題.
本文編號:3613893
【文章來源】:河北師范大學(xué)學(xué)報(自然科學(xué)版). 2020,44(03)
【文章頁數(shù)】:9 頁
【部分圖文】:
檢測框架
圖3為對象重用檢測算法.通過檢測監(jiān)視器對象的類型,對監(jiān)視器對象類型進(jìn)行判斷,判斷其是否為Boolean,Integer或String等類型.方法doPerformAnalysis(1~5行)中,被檢測的程序如果檢測的方法不為空,則通過調(diào)用方法populateBugInstances檢測程序中符合條件的監(jiān)視器對象信息,賦值給bugInstances實例獲取最終符合條件的重用對象.方法populateBugInstances(6~12行)判斷獲取的指令是否為重用對象.其中獲取的指令instruction必須為監(jiān)視器獲取鎖定指令.通過調(diào)用方法getReusableLockObjectTypes給reusableLockObjectTypes賦值.該reusableLockObjectTypes符合對象重用類型.方法getReusableLockObjectTypes(13~18行),獲取監(jiān)視器指令monitorInstruction的指向地址,將其賦值給instanceKey.通過方法createReusableChecker判斷instanceKey是否為重用對象類型.方法createReusableChecker(19~29行),獲取instanceKey的類型,如果其類型為Boolean,Integer或String等重用類型,則檢測出該程序中含有對象重用問題.2.2 靜態(tài)共享字段檢測
對象的重用是在鎖定諸如Boolean,Integer等類型的對象時發(fā)生的重用,如Boolean類型只有2個值true和false,如果使用2個Boolean類型對象作為同步監(jiān)視器對象,可能會因指向同一地址而導(dǎo)致問題.如圖2的示例程序,在synchronized同步塊中,其鎖定監(jiān)視器對象類型是Boolean類型.方法oneMethod( )和方法anotherMethod( )分別會在2個線程中執(zhí)行.由于Boolean FALSE和false 2個常量代表同一內(nèi)存位置,實際上是同一個同步對象,在圖2的程序中雖然使用2個不同名字的同步對象,但會導(dǎo)致臨界資源的訪問形成互斥.圖3為對象重用檢測算法.通過檢測監(jiān)視器對象的類型,對監(jiān)視器對象類型進(jìn)行判斷,判斷其是否為Boolean,Integer或String等類型.方法doPerformAnalysis(1~5行)中,被檢測的程序如果檢測的方法不為空,則通過調(diào)用方法populateBugInstances檢測程序中符合條件的監(jiān)視器對象信息,賦值給bugInstances實例獲取最終符合條件的重用對象.方法populateBugInstances(6~12行)判斷獲取的指令是否為重用對象.其中獲取的指令instruction必須為監(jiān)視器獲取鎖定指令.通過調(diào)用方法getReusableLockObjectTypes給reusableLockObjectTypes賦值.該reusableLockObjectTypes符合對象重用類型.方法getReusableLockObjectTypes(13~18行),獲取監(jiān)視器指令monitorInstruction的指向地址,將其賦值給instanceKey.通過方法createReusableChecker判斷instanceKey是否為重用對象類型.方法createReusableChecker(19~29行),獲取instanceKey的類型,如果其類型為Boolean,Integer或String等重用類型,則檢測出該程序中含有對象重用問題.
本文編號:3613893
本文鏈接:http://sikaile.net/kejilunwen/jisuanjikexuelunwen/3613893.html
最近更新
教材專著