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