৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical ReportಈతεϥΠεΛ༻͍ͨόάमਖ਼લ‫ޙ‬ͷ࣮ߦ‫ྻܥ‬ͷࠩ෼‫ݕ‬ग़ख๏ͷఏҊদଜ ढ़ಙ1,a)ੴඌ ོ1,b)Ҫ্ ࠀ࿠1,c)֓ཁɿόάमਖ਼ʹ͓͍ͯॏࢹ͞ΕΔͷ͕ɼमਖ਼ର৅Ͱ͋Δόάʹؔ࿈ͨ͠ಈ࡞Ҏ֎ʹϓϩάϥϜͷಈ࡞ʹӨ‫ڹ‬Λ༩͑ͳ͍͜ͱͰ͋ΔɽϓϩάϥϜʹରͯ͠มߋΛՃ͑ͨ݁Ռੜͨ͡ϓϩάϥϜͷಈ࡞ͷมԽΛ։ൃऀ͕೺Ѳ͢Δ͜ͱ͕ɼ৽ͨʹमਖ਼͢Δඞཁͷ͋ΔՕॴͷಛఆ΍ɼมߋʹΑΔ෭࡞༻͕৽ͨͳόάΛੜΜͰ͍ͳ͍͜ͱͷ֬ೝʹ༗༻Ͱ͋ΔɽϓϩάϥϜͷಈ࡞ͷมԽ͸ɼ୯७ʹ͸ΧόϨοδͷ্ঢ΍ςετͷ੒ޭͳͲʹΑΓ։ൃऀ͕‫ͯݟ‬औΕΔ৔߹΋͋Δ͕ɼҰൠʹͦ͏ͱ͸‫ݶ‬Βͳ͍ɽ·ͨɼΧόϨοδͷมԽ΍ςετ݁ՌʹΑΔ൑ఆͰ͸ɼಈ࡞ͷࠩ෼·ͰΛ೺Ѳ͢Δ͜ͱ͸ࠔ೉Ͱ͋Δɽຊ‫Ͱڀݚ‬͸ɼमਖ਼લ‫ޙ‬ͷϓϩάϥ
ϜʹಉҰͷೖྗΛ༩࣮͑ͯߦͨ͠৔߹ʹಘΒΕΔ 2 ͭͷ࣮ߦ‫ʹྻܥ‬ରͯ͠ɼͦͷಈతεϥΠεΛൺ΂Δ͜ͱͰɼͦΕΒͷࠩ෼Λ‫ݕ‬ग़͢Δख๏ΛఏҊ͢Δɽ۩ମతʹ͸ϓϩάϥϜͷมߋલ‫͍͓ͯʹޙ‬ɼಈతͳϓϩάϥϜґଘάϥϑΛߏங͓͖ͯ͠ɼมߋΛՃ͑ͨϝιουΛ‫ͨ͠ͱ఺ج‬ϑΥϫʔυεϥΠεΛ‫͢ࢉܭ‬Δɽ
̎ͭͷϑΥϫʔυεϥΠε಺ͷ֤௖఺ʹରͯ͠ɼͦͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ʹଘࡏ͢Δ໋ྩू߹Λൺֱ
͢Δ͜ͱʹΑΓಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͢Δɽ·ͨɼఏҊख๏ͷ༗ޮੑΛௐ΂ΔͨΊʹɼόάमਖ਼ʹؔ͢Δެ։σʔληοτ Defects4j ʹ‫·ؚ‬ΕΔΞϓϦέʔγϣϯʹରͯ͠ద༻ࠩ͠෼Λ‫ݕ‬ग़Ͱ͖Δ͜ͱΛ֬ೝͨ͠ɽ

1. ·͕͖͑

ςετέʔεʹΑͬͯ໢ཏ͞Ε͍ͯΔ৔߹ͳͲͰ͸ɼΧόϨοδʹԿͷมԽ΋‫͖ͣى‬൑அࡐྉ͕ͳ͍͜ͱʹͳΔɽ·ιϑτ΢ΣΞอकʹ͓͍ͯɼ‫ݱ‬ঢ়ͷιϑτ΢ΣΞʹରͨ͠ɼςετͷ੒ޭʹΑΓมԽ͕‫ͯݟ‬औΕͨ৔߹Ͱ΋ɼର৅ͯมߋΛՃ͑Δ͜ͱ͕౓ʑߦΘΕΔɽͦͷมߋͷ໨తʹ͸ͱͳͬͨςετέʔεҎ֎Ͱಈ࡞ʹมԽ͕ͳ͔ͬͨ͜ͱʹόάͷमਖ਼΍ɼ৽ͨͳ‫ػ‬ೳͷ௥ՃɼύϑΥʔϚϯεͷվળɼ

ର͢Δอূ͸Ͱ͖ͳ͍ɽ

‫ڥ؀‬ͷมԽʹ൐ͬͨमਖ਼ͳͲ͕‫͛ڍ‬ΒΕΔɽιϑτ΢ΣΞ

ΧόϨοδͷมԽ΍ςετ݁ՌͷมԽҎ֎ʹϓϩάอकͷதͰ΋ɼൃ‫͞ݟ‬Εͨόάʹର͢Δमਖ਼͸ੋਖ਼อकͱ

ϥϜͷಈ࡞ͷมԽΛ‫͚ͭݟ‬Δํ๏ͱͯ͠ Change Impact‫ݺ‬͹Ε͍ͯΔɽ

Analysis[3], [9], [13], [15] ΍ Diﬀerencial Slicing[6]ɼRela-ੋਖ਼อकʹ͓͍ͯॏࢹ͞ΕΔͷ͕ɼमਖ਼ର৅Ͱ͋Δόάtive Debugging[1] ͳͲͷख๏͕ఏҊ͞Ε͍ͯΔɽChangeʹؔ࿈ͨ͠ಈ࡞Ҏ֎ʹϓϩάϥϜͷಈ࡞ʹӨ‫ڹ‬Λ༩͑ͳ͍Impact Analysis ͸ϓϩάϥϜʹରͯ͠มߋΛՃ͑Δ͜ͱ

͜ͱͰ͋ΔɽͦͷͨΊɼόάमਖ਼ͷͨΊʹϓϩάϥϜʹରʹΑΓɼϓϩάϥϜͷଞͷͲͷ෦෼ʹӨ‫ڹ‬Λ‫͢΅ٴ‬Մೳੑͯ͠มߋΛՃ͑Δࡍͷ։ൃऀͷؔ৺ࣄͱͯ͠ɼมߋΛՃ͑

͕͋Δ͔Λ‫͢ࢉܭ‬Δख๏Ͱ͋Δɽ͔͠͠ͳ͕Βɼ͋͘·ͰΔ͜ͱʹΑΓϓϩάϥϜͷಈ࡞ʹͲͷΑ͏ͳมԽ͕͓͖ͨ

Ө‫͕ڹ‬ग़ΔՄೳੑ͕͋Δ͔Ͳ͏͔Λ‫ٻ‬ΊΔٕज़Ͱ͋Δͷ͔Λ஌Γ͍ͨͱ͍͏΋ͷ͕͋ΔɽϓϩάϥϜͷಈ࡞ͷมԽͰɼ࣮ࡍʹมߋΛՃ͑ͨ‫Ͳʹޙ‬ͷΑ͏ͳมԽ͕͔͋ͬͨ·Λ೺Ѳ͢Δ͜ͱ͸ɼ৽ͨʹमਖ਼͢Δඞཁͷ͋ΔՕॴͷಛఆͰΛ‫ٻ‬ΊΔ͜ͱ͸Ͱ͖ͳ͍ɽDiﬀerencial Slicing ͸ɼϓϩ΍ɼมߋʹΑΔ෭࡞༻͕৽ͨͳόάΛੜΜͰ͍ͳ͍͜ͱͷάϥϜͷಈ࡞ͷࠩ෼Λ‫ٻ‬ΊΔख๏Ͱ͋ΓɼϓϩάϥϜʹର֬ೝʹ໾ཱͯΒΕΔɽ

ͯ͠੒ޭ͢Δೖྗͱࣦഊ͢ΔೖྗΛ༩͑Δ͜ͱͰɼͦͷࠩϓϩάϥϜͷಈ࡞ͷมԽ͸ɼ௨ৗ͸ճ‫ؼ‬ςετʹΑͬͯ෼͕Ͳ͜ʹ͔͋ͬͨΛϓϩάϥϜґଘؔ܎ϨϕϧͰ‫ݕ‬ग़Ͱ֬ೝ͞ΕɼΧόϨοδͷมԽ΍ςετ݁ՌͷมԽͱͯ͠։

͖Δɽ·ͨɼRelative Debugging ͸ 2 ͭͷϓϩάϥϜΛಉൃऀ͕‫ͯݟ‬औΕΔ৔߹΋͋Δɽ͔͠͠ͳ͕Βɼ͢Ͱʹଞͷ࣌ʹ࣮ߦ͠ͳ͕ΒσόοάΛߦ͏ख๏Ͱɼ૒ํͷϓϩάϥ

1Ϝͷม਺஋Λಉ࣌ʹӾཡ͠ͳ͕Β֬ೝΛߦ͏͜ͱ͕Ͱ͖

a)
b)
c)

େࡕେֶେֶӃ৘ใՊֶ‫ڀݚ‬Պ
Osaka Uniersity, Suita, Osaka 565-0871, Japan
m-tosinr@ist.osaka-u.ac.jp
ishio@ist.osaka-u.ac.jp
inoue@ist.osaka-u.ac.jp

c 2016 Information Processing Society of Japan

Δɽ͔͠͠ɼDiﬀerencial Slicing ͸ϓϩάϥϜͷมߋલ‫ޙ‬ʹ͓͚Δಈ࡞ͷࠩ෼Λ‫ٻ‬ΊΔ΋ͷͰ͸ͳ͘ɼೖྗͷҧ͍ʹ

1৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical ReportΑΔಈ࡞ͷࠩ෼Λ‫ٻ‬ΊΔख๏Ͱ͋ΓɼRelative Debugging
͸͋͘·ͰσόοΨͰ͋ΔͨΊ࠷ऴతʹ։ൃऀͷૢ࡞͕ඞ
ཁͱͳΔɽΏ͑ʹ͜ΕΒͷख๏Λͦͷ··ద༻͚ͨͩ͠Ͱ
͸ɼϓϩάϥϜมߋલ‫ޙ‬ͷಈ࡞ͷࠩ෼Λ‫ٻ‬ΊΔ͜ͱ͸Ͱ͖ͳ͍ɽຊ‫Ͱڀݚ‬͸ɼόάमਖ਼લ‫͚͓ʹޙ‬ΔಈతεϥΠεΛൺ΂Δ͜ͱͰɼϓϩάϥϜͷ࣮ߦ‫ྻܥ‬ͷࠩ෼Λ‫ݕ‬ग़͢Δख๏
ΛఏҊ͢ΔɽಈతεϥΠε͸ɼϓϩάϥϜͷ࣮ߦʹ͓͚ΔσʔλͷྲྀΕͱ࣮ߦ੍‫ޚ‬Λද‫͓ͯ͠ݱ‬ΓɼͦΕΛൺֱ͢Δ
͜ͱͰ࣮ߦ‫ྻܥ‬ͷࠩ෼Λ‫ݕ‬ग़͢Δɽ۩ମతʹ͸มߋલ‫ޙ‬ͷϓϩάϥϜʹରͯ͠ಉҰͷೖྗΛ༩࣮͑ͯߦ͠ɼಘΒΕ࣮ͨߦ‫͔ྻܥ‬ΒಈతͳϓϩάϥϜґଘάϥϑΛߏங͓ͯ͠

 SDFNDJHGHSHQGHQF\ SXEOLFFODVV([DPSOH^SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^
LQW L
LQW D 
LQW E 
LI DUJVOHQJWK ! ^
L DE`HOVH^
L D E

`


6\VWHPRXWSULQWOQ L 

`
 `

ਤ 1 αϯϓϧίʔυ

Fig. 1 Sample code͖ɼมߋΛՃ͑ͨϝιουΛ‫ͨ͠ͱ఺ج‬ϑΥϫʔυεϥΠεΛ‫͢ࢉܭ‬Δɽ̎ͭͷϑΥϫʔυεϥΠε಺ͷ֤௖఺ʹରಈ࡞͕มԽ͍ͯ͠Δ͕ςετ͸‫ۮ‬વ੒ޭ͓ͯ͠Γɼͦͷಈͯ͠ɼͦͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ʹଘࡏ͢Δ໋ྩू߹Λൺ࡞ͷมԽ͕όάʹؔ࿈͢ΔՄೳੑ΋͋Δɽ࣮ࡍʹɼYin Βֱ͢Δ͜ͱʹΑΓಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͢Δɽͷௐࠪ [18] Ͱ͸ɼΦϖϨʔςΟϯάγεςϜͷ։ൃʹ͓͍·ͨɼఏҊख๏ͷ༗ޮੑΛௐ΂ΔͨΊʹɼόάमਖ਼ʹؔͯɼόάमਖ਼ͷ 14.8%͔Β 24.4%͸ผͷόάΛҾ͖‫͜͠ى‬͢Δެ։σʔληοτ Defects4j[7] ʹ‫·ؚ‬ΕΔΞϓϦέʔ͓ͯΓɼमਖ਼൛ͷϦϦʔεલʹ͸ϦάϨογϣϯςετ͕γϣϯʹରͯ͠ద༻ͨ͠ɽ10 ‫ݸ‬ͷόάʹରͯ͠ख๏Λద༻ߦΘΕ͍ͯΔʹ΋͔͔ΘΒͣɼόάΛ‫ݟ‬མͱ͍ͯ͠Δͱใ

ͨ͠ͱ͜Ζɼ6 ‫͍ͯͭʹݸ‬͸ࠩ෼͕‫ݕ‬ग़Ͱ͖Δ͜ͱΛ֬ೝࠂ͞Ε͍ͯΔɽ·ͨɼ͜ΕΒͷόάͷ಺ 43%͸γεςϜͷ

ͨ͠ɽΫϥογϡɼσʔλഁյɼηΩϡϦςΟ໰୊ΛҾ͖‫͢͜ى‬Ҏ߱ɼ2 ষͰ͸ɼຊ‫ڀݚ‬ͷഎ‫͍ͯͭʹܠ‬ड़΂Δɽ3 ষͰ΋ͷͰ͋ΓɼͦͷӨ‫ڹ‬͸େ͖͍ͱ‫͑ݴ‬Δɽ͸ɼఏҊ͢Δख๏ʹ͍ͭͯड़΂Δɽ4 ষͰ͸ɼ࣮‫͍ͭʹݧ‬ຊ‫Ͱڀݚ‬͸ɼಈతεϥΠεΛ༻͍ͯϓϩάϥϜͷಈ࡞ͷͯड़΂Δɽ5 ষͰ͸ɼؔ࿈‫͍ͯͭʹڀݚ‬ड़΂Δɽ6 ষͰ͸ɼࠩ෼Λ‫ݕ‬ग़͢Δख๏ΛఏҊ͢Δɽςετͷ݁Ռ͚ͩͰ͸ͳຊ‫ڀݚ‬ͷ·ͱΊͱࠓ‫ޙ‬ͷ՝୊Λड़΂Δɽ͘ಈ࡞ͷࠩ෼Λఏࣔ͢Δ͜ͱͰɼόάमਖ਼ʹΑΓผͷόά

2. എ‫ܠ‬ΛੜΜͰ͍Δ͔΋͠Εͳ͍ͱ͍͏։ൃऀʹର͢Δ஫ҙ‫ىש‬ຊষͰ͸ɼഎ‫ͯ͠ͱܠ‬ɼόάमਖ਼ͷ෭࡞༻ʹ͍ͭͯड़΂͕ߦ͑ɼ·ͨɼࠩ෼͕‫ݕ‬ग़͞Εͳ͔ͬͨ৔߹ʹ͸ϓϩάϥ
Ϝಈ࡞͕ಉҰͰ͋ͬͨ͜ͱΛอূͰ͖Δɽ

Δɽ·ͨɼఏҊख๏͸ಈతεϥΠεΛ༻͍͓ͯΓɼಈతεϥΠε͸ಈతͳϓϩάϥϜґଘάϥϑΛ΋ͱʹ‫͞ࢉܭ‬ΕΔ
ͨΊɼٕज़తͳഎ‫ͯ͠ͱܠ‬ɼϓϩάϥϜґଘάϥϑͱεϥΠεʹ͍ͭͯ΋ड़΂Δɽ

2.2 ϓϩάϥϜґଘάϥϑϓϩάϥϜதͷ໋ྩจͷؒʹ͸ɼσʔλґଘؔ܎ͱ੍‫ޚ‬ґଘؔ܎ͷ 2 छྨͷґଘؔ܎͕ଘࡏ͢Δɽσʔλґଘؔ܎͸ϓϩάϥϜதʹ͓͚ΔσʔλͷྲྀΕΛ੍‫ޚ‬ґଘؔ܎͸࣮

2.1 όάमਖ਼ͷ෭࡞༻ߦ੍‫ޚ‬ͷྲྀΕΛͦΕͧΕද‫͍ͯ͠ݱ‬Δɽ͜ͷ 2 ͭͷґଘؔιϑτ΢ΣΞ։ൃʹ͓͍ͯɼςετͷ࡞੒ɾ࣮ߦʹΑΓɼ܎ʹؔͯ͠ɼ໋ྩจΛ௖఺ɼґଘؔ܎Λลͱͯ͠ߏ੒ͨ͠

જࡏతͳόά͕‫͔ͭݟ‬Γɼσόοά࡞‫ߦ͕ۀ‬ΘΕΔɽόά༗޲άϥϑ͕ϓϩάϥϜґଘάϥϑ (PDG) ͱ‫ݺ‬͹Ε [5]ɼमਖ਼͕ਖ਼͘͠‫ͱͨྃ͜͠׬‬͸ɼςετͷ੒ޭʹΑΓ֬ೝ͞ϓϩάϥϜதͷσʔλґଘؔ܎ͱ੍‫ޚ‬ґଘؔ܎Λղੳ͢Δ

ΕΔɽ͔͠͠ͳ͕Βɼιϑτ΢ΣΞ͕ෳࡶԽɾେ‫ن‬໛Խ͜͠ͱͰߏங͕ՄೳͰ͋Δɽ

ͯ͘ΔͱɼϓϩάϥϜͷ૬‫܎ؔޓ‬Λ‫ݟ‬མͱͯ͠͠·͍ɼ͋ຊ‫͍༻Ͱڀݚ‬ΔಈతͳϓϩάϥϜґଘάϥϑ (ಈతͳΔ෦෼ͷमਖ਼͕ɼҰ‫ݟ‬Կͷؔ܎΋ͳ͍ผͷ෦෼ʹӨ‫͠ڹ‬όPDG)[2] ͸ɼϓϩάϥϜͷ࣮ߦΛ΋ͱʹಈతͳσʔλґଘάΛҾ͖‫͕͋ͱ͜͏·ͯ͜͠͠ى‬Δɽ͜ͷΑ͏ͳ͜ͱ͕‫ى‬ؔ܎ͱಈతͳ੍‫ޚ‬ґଘؔ܎ʹ΋ͱ͖ͮߏ੒ͨ͠άϥϑͰ͖͍͋ͯͳ͍͔ͷ‫ͯ͠ͱূݕ‬ɼ͜Ε·Ͱ੒ޭ͍ͯͨ͠ςετΔɽ੩తͳ PDG Ͱ͸ɼιʔείʔυΛղੳ͠ߏங͞ΕΔΛ‫ؚ‬ΊͯςετશମΛ࠶ͼ࣮ߦ͢Δճ‫ؼ‬ςετ͕ߦΘΕΔɽ

ͷͰɼ࣮ࡍͷಈ࡞Ͱ͸͋Γ͑ͳ͍Α͏ͳґଘؔ܎΋நग़͞ճ‫ؼ‬ςετͰ͸ɼมߋલͷϓϩάϥϜͰ΋࣮ߦ͕੒ޭ͠

ΕΔՄೳੑ͕͋ΔɽҰํͰɼಈతͳ PDG Ͱ͸ɼ࣮ࡍͷϓ͍ͯͨςετέʔε͕ɼͦͷ··มߋ‫ޙ‬΋੒ޭ͢Δ͜ͱΛϩάϥϜͷ࣮ߦΛ΋ͱʹɼґଘؔ܎Λߏங͢ΔͨΊɼ࣮ࡍ

֬ೝ͢Δ͜ͱʹΑΓ৽ͨͳόάΛੜΈग़͍ͯ͠ͳ͍͜ͱͷͷಈ࡞Ͱ͸͋Γ͑ͳ͍Α͏ͳґଘؔ܎͸ଘࡏ͠ͳ͍ͱ͍͏

֬ೝ͕ߦΘΕΔɽ͔͠͠ͳ͕Βɼςετͷ݁Ռ͚ͩͰ͸ɼಛ௃͕͋Δɽͨͩ͠ɼ࣮ߦʹ΋ͱ͖࣮ͮࡍʹଘࡏͨ͠ґଘಈ࡞͕มԽ͍ͯ͠ͳ͍͔Ͳ͏͔͸൑அͰ͖ͳ͍ɽ࣮ࡍʹ͸ؔ܎Λநग़͢ΔͨΊɼߏங͞ΕΔάϥϑ͸࣮ߦʹґଘͨ͠c 2016 Information Processing Society of Japan

2৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical Report΋ͷͱͳΔɽ

ํ޲ʹάϥϑΛ୧ΓɼਪҠతʹ౸ୡՄೳͳ௖఺ू߹Λ‫ٻ‬Ίಈతͳ PDG ͱ੩తͳ PDG Ͱ͸ɼάϥϑͷ௖఺͕ද‫ݱ‬Δ͜ͱͰɼεϥΠε‫ج‬४ͱͳΔ໋ྩจʮ͕ʯӨ‫ڹ‬Λ༩͑Δ

͍ͯ͠Δ΋ͷ͕ҟͳΔɽ੩తͳ PDG ͷ௖఺͸໋ྩจͰ͋

Մೳੑ͕͋Δ໋ྩจू߹Λ‫ٻ‬ΊΔ͜ͱ͕ՄೳͰ͋Δɽ͜ͷΔͷʹର͠ɼಈతͳ PDG ͷ௖఺͸࣌ࠁ෇͖ͷ໋ྩจͰ͋

Α͏ͳɼॱํ޲ʹάϥϑΛ୧ͬͯͰ͖ΔεϥΠεΛϑΥΔ. ϓϩάϥϜͷ࣮ߦʹ͓͍ͯ͸ɼಉҰͷ໋ྩΛෳ਺ճ࣮ϫʔυεϥΠεͱ‫Ϳݺ‬ɽ͞Βʹɼಈతͳ PDG Λ΋ͱʹมߦ͢Δ͜ͱ͕ߟ͑ΒΕΔɽಈతͳ PDG ͸࣮ߦʹ΋ͱ͖ͮߋ஍఺͔ΒͷϑΥϫʔυεϥΠεΛ‫͢ࢉܭ‬Ε͹ɼεϥΠεґଘؔ܎Λநग़͢ΔͨΊɼಉҰ໋ྩ͕ෳ਺ճ࣮ߦ͞Ε͍ͯ‫ج‬४ͱͳΔ໋ྩจ͕࣮ࡍʹӨ‫ڹ‬Λ༩໋͑ͨྩจू߹Λ‫ٻ‬Ίͨ৔߹ʹ͸ͦΕͧΕΛผ௖఺ͱͯ͠ѻ͍άϥϑ͕ߏங͞ΕΒΕΔɽ

Δɽͦ͜ͰಉҰ໋ྩΛ۠ผ͢ΔͨΊʹ௖఺ʹ࣌ࠁ৘ใ͕෇
༩͞ΕΔɽ

Li Β͸ΦϒδΣΫτࢦ޲ϓϩάϥϜʹର͢ΔϑΥϫʔυεϥΠεΛ༻͍ͨ Change Impact Analysis ख๏ΛఏҊ͠੩తͳґଘؔ܎͸ߟ͑͏Δશͯͷ࣮ߦ‫ܦ‬࿏ʹؔͯ͠ґଘ͓ͯΓ [10]ɼ‫ܧ‬ঝ΍ϙϦϞʔϑΟζϜΛߟ্ྀͨ͠Ͱɼ੩

ؔ܎͕நग़͞Ε͕ɼಈతͳσʔλґଘؔ܎͸࣮ߦΛ΋ͱʹతͳσʔλґଘؔ܎ɼ੍‫ޚ‬ґଘؔ܎Λ΋ͱʹϑΥϫʔυε࣮ࡍʹଘࡏ࣮ͨ͠ߦ‫ܦ‬࿏ʹ‫ͮ͘ج‬ґଘؔ܎ͷΈநग़͞ΕϥΠεΛ‫͠ࢉܭ‬ɼӨ‫ڹ‬Λड͚ΔՄೳੑͷ͋ΔൣғΛ‫ٻ‬ΊͯΔɽྫ͑͹ɼਤ 1 ʹࣔͨ͠ϓϩάϥϜʹରͯ͠ɼ੩తͳґ͍Δɽ·ͨɼOrso Β͸ಈత৘ใΛ༻͍ͨ Change Impactଘؔ܎Λநग़͢Δͱ, ਤதͷߦ൪߸Λ༻͍ͯɼ3 ˠ 9ɼ6 ˠ

Analysis ख๏ΛఏҊ͍ͯ͠Δ [12]ɽ͜ͷख๏Ͱ͸ϓϩάϥ

10ɼ7 ˠ 11ɼ6 ˠ 12ɼ7 ˠ 12ɼ10 ˠ 15ɼ12 ˠ 15ɼͷ 7 ͭϜͷ࣮ߦΛɼϓϩάϥϜதͷ֤ϝιου͕ϓϩάϥϜͷ࣮ͷσʔλґଘؔ܎͕ಘΒΕɼ9 ˠ 10ɼ9 ˠ 12 ͷ 2 ͭͷ੍‫ޚ‬ߦʹ͓͍ͯ‫ͼݺ‬ग़͞Ε͔ͨ൱͔Λද‫ͨ͠ݱ‬ΧόϨοδ৘ใґଘؔ܎͕ಘΒΕΔɽҰํͰɼਤ 1 ͷϓϩάϥϜʹରͯ͠ͱͯ͠‫ه‬࿥͍ͯ͠ΔɽΧόϨοδ৘ใΛ΋ͱʹɼ࣮ߦதʹίϚϯυϥΠϯҾ਺Λۭʹ࣮ͯ͠ߦ͢Δͱɼ5 ˠ 6 ˠ 7 ˠ‫ͼݺ‬ग़͞Εͨϝιουͱɼมߋ஍఺Λ‫ج‬४ͱͯ͠੩తʹ‫ܭ‬

9 ˠ 12 ˠ 15 ͱ࣮ߦ͕ਐΜͰΏ͖ɼ͜ͷ࣮ߦΛ΋ͱʹಈతࢉͨ͠ϑΥϫʔυεϥΠε಺ͷϝιουͱͷ‫ڞ‬௨ϝιουͳσʔλґଘؔ܎Λநग़͢Δͱɼ3 ˠ 9ɼ6 ˠ 12ɼ7 ˠ 12ɼΛ‫ٻ‬ΊΔ͜ͱͰɼٖࣅతʹϝιουϨϕϧͷಈతϑΥϫʔ

12 ˠ 15ɼͷ 4 ͕ͭநग़͞Εɼಈతͳ੍‫ޚ‬ґଘؔ܎ͱͯ͠

υεϥΠεΛ‫͠ࢉܭ‬ɼมߋʹΑΔӨ‫ڹ‬ൣғΛ‫ݕ‬ग़͍ͯ͠Δɽ

͸ 9 ˠ 12 ͕நग़͞ΕΔɽ

ຊ‫Ͱڀݚ‬͸ɼมߋલ‫ޙ‬ͷϓϩάϥϜʹରͯ͠ಉҰͷςετεΠʔτΛ࣮ߦͯ͠ಈతͳ PDG Λߏங͠ɼมߋର৅ͱ

2.3 ϓϩάϥϜґଘάϥϑͷར༻๏ϓϩάϥϜεϥΠε͸ Weiser ΒʹΑͬͯߟҊ͞Ε [16]ɼ
ϓϩάϥϜதͷ͋Δ໋ྩจʹؔͯ͠ɼͦͷ໋ྩจʹରͯ͠Ө‫ڹ‬Λ༩͑ΔՄೳੑͷ͋Δ͢΂ͯͷจͷ͜ͱͰ͋ΓɼPDG
Λ΋ͱʹ‫͞ࢉܭ‬ΕΔ [5]ɽͳͬͨϝιουΛεϥΠε‫ج‬४ͱͯ͠ɼಈతͳϑΥϫʔυεϥΠεΛ‫͢ࢉܭ‬Δɽͦͯ͠ɼ2 ͭͷϑΥϫʔυεϥΠε
Λൺֱ͠ಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͢Δɽ

3. ఏҊख๏ͱͦͷ࣮૷ϓϩάϥϜεϥΠε͸ɼ·ͣ PDG த͔ΒεϥΠε‫ج‬४ຊ‫Ͱڀݚ‬͸ɼJava ϓϩάϥϜʹରͯ͠ɼϓϩάϥϜมߋ

ͱͳΔ໋ྩจ (௖఺) Λબͼɼͦͷ௖఺͔Β‫ʹ޲ํٯ‬άϥϑલ‫͚͓ʹޙ‬ΔಈతεϥΠεΛൺ΂Δ͜ͱͰɼಈ࡞ͷมԽΛΛ୧Γ౸ୡՄೳͳ௖఺ू߹Λ‫ٻ‬ΊΔ͜ͱͰ‫͕ࢉܭ‬ՄೳͰ͋‫ݕ‬ग़͢Δख๏ΛఏҊ͢ΔɽఏҊख๏ͷ֓ཁͱͯ͠͸ɼϓϩ

Δɽ੩తͳ PDG Λ΋ͱʹ‫͢ࢉܭ‬Ε͹ɼ‫ج‬४ͱ໋ͨ͠ྩจ

άϥϜͷมߋલ‫͍͓ͯʹޙ‬ɼಈతϓϩάϥϜґଘؔ܎ΛߏʹӨ‫ڹ‬Λ༩͑ΔՄೳੑͷ͋Δ໋ྩจ͕ɼಈతͳ PDG Λ΋ங͓͖ͯ͠ɼมߋΛՃ͑ͨϝιουΛ‫ج‬४ͱͨ͠ϑΥϫʔͱʹ‫͢ࢉܭ‬Ε͹ɼ࣮ࡍʹӨ‫ڹ‬Λ༩໋͑ͨྩจ͕நग़͞ΕΔɽ

υεϥΠεΛ‫͢ࢉܭ‬Δɽ̎ͭͷϑΥϫʔυεϥΠε಺ͷ֤ϓϩάϥϜεϥΠε͸σόοά࡞‫ۀ‬ͷࢧԉͳͲʹར༻͞௖఺ʹରͯ͠ɼͦͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ʹଘࡏ͢Δ௖఺Ε͓ͯΓɼྫ͑͹ɼΤϥʔΛҾ͖‫͍ͯ͜͠ى‬Δ໋ྩจΛ‫ج‬ू߹Λൺֱ͢Δ͜ͱʹΑΓಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͢ΔɽఏҊख४ͱͯ͠ϓϩάϥϜεϥΠεΛ‫ٻ‬ΊΔ͜ͱʹΑΓɼ։ൃऀ๏͸࣍ʹࣔ͢ 4 ͭͷεςοϓ͔Βߏ੒͞ΕɼҎ֤߱εςο͸ΤϥʔʹӨ‫ڹ‬Λ༩͑ͨՄೳੑͷ͋Δ෦෼ʹͷΈয఺Λ͋ϓʹ͍ͭͯͷৄࡉΛઆ໌͍ͯ͘͠ɽ

ͯΔ͜ͱ͕ՄೳͱͳΓɼ࿑ྗ࡟‫͖Ͱݙߩʹݮ‬Δɽଞʹ΋ɼ( 1 ) ϓϩάϥϜͷ࣮ߦϩάͷ‫ه‬࿥‫ࢉܭ‬ͷग़ྗ໋ྩΛ‫ج‬४ͱ͢Ε͹ɼͦͷ‫Ͳ͕ࢉܭ‬ͷΑ͏ʹ͠( 2 ) ಈతϓϩάϥϜґଘؔ܎ͷ‫ࢉܭ‬ͯߦΘΕΔͷ͔ɼ‫܎ؔʹࢉܭ‬ͷ͋ΔॲཧͷΈΛநग़͢Δ͜

( 3 ) ϑΥϫʔυεϥΠεͷ‫ࢉܭ‬ͱ͕Ͱ͖ΔͨΊɼϓϩάϥϜཧղͷࢧԉͳͲʹ΋༻͍ΒΕ( 4 ) ϑΥϫʔυεϥΠεͷൺֱ͍ͯΔɽϓϩάϥϜεϥΠεͷ‫Ͱࢉܭ‬͸ɼ͋Δ໋ྩจʮʹʯӨ‫ڹ‬

3.1 ϓϩάϥϜͷ࣮ߦϩάͷ‫ه‬࿥Λ༩͑ΔՄೳੑ͕͋Δ໋ྩจू߹ΛɼεϥΠε‫ج‬४ͱͳΔ

Java ϓϩάϥϜͷಈతϓϩάϥϜґଘؔ܎Λ‫͢ࢉܭ‬Δͨ

໋ྩจ͔Β‫ʹ޲ํٯ‬άϥϑΛ୧Δ͜ͱͰ‫͍ͨͯ͠ࢉܭ‬ɽ͜Ίʹɼ·ͣ Java ϓϩάϥϜͷ࣮ߦͷ‫ه‬࿥Λߦ͏ɽJava ϓ͜ͰɼεϥΠε‫ج‬४ͱͳΔ໋ྩจ͔Βɼ‫Ͱ޲ํٯ‬͸ͳ͘ॱϩάϥϜͷ࣮ߦϩάͷ‫ه‬࿥ʹ͸ Java ϓϩάϥϜͷόΠτ

c 2016 Information Processing Society of Japan

3৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical Reportίʔυʹ࣮ߦϩάΛॻ͖ग़໋͢ྩΛຒΊࠐΈɼ໋ྩΛຒΊߦ͍ͬͯΔɽ͔͠͠ɼಈతϓϩάϥϜґଘؔ܎ΛɼϓϩάࠐΜͩϓϩάϥϜΛ࣮ߦ࣮͠ߦϩάΛ‫ه‬࿥͢Δɽ࣮ߦϩάϥϜͷ࣮ߦΛߦ͍ͳ͕Β‫͢ࢉܭ‬Δख๏΋ଘࡏ͢Δ [11]. ͜͸ [19] ͱಉ͡‫ࣜܗ‬΋ͷΛ༻͍Δɽͷख๏Λ࢖͏͜ͱͰɼϓϩάϥϜͷ࣮ߦΛ‫ه‬࿥ͯͦ͠ͷ‫ޙ‬࣮ߦϩάͷ‫ه‬࿥Ͱ͸ϓϩάϥϜશମʹ໋ྩΛຒΊࠐΈɼʹ࠶‫͢ݱ‬Δɼͱ͍͏खॱΛ౿·ͣʹϓϩάϥϜґଘؔ܎࣮ߦ։͔࢝Βऴྃ·ͰͷϓϩάϥϜશମͷ࣮ߦϩάͷ‫ه‬࿥‫͕ࢉܭ‬ՄೳͰ͋Δɽ͔͠͠ͳ͕Βɼখ‫ن‬໛ͳϓϩάϥϜͰΛߦ͍ͬͯΔɽ໋ྩͷຒΊࠐΈΛϓϩάϥϜશମͰ͸ͳ͘ɼ͋ͬͯ΋ɼಈతͳϓϩάϥϜґଘؔ܎͸ଟ਺ग़ྗ͞ΕΔͨ

੩తͳϓϩάϥϜґଘؔ܎Λ‫ʹݩ‬มߋର৅ͱͳΔϝιου

Ίɼ‫ͨ͠ࢉܭ‬ґଘؔ܎ΛϝϞϦ্ʹอ࣋͠ଓ͚͓ͯ͘ʹ͸͕Ө‫ڹ‬Λ༩͑͏Δ෦෼ʹͷΈຒΊࠐΈΛߦ͏͜ͱͰɼϓϩ‫ݶ‬ք͕͋Γɼ‫ࢉܭ‬ՄೳͳϓϩάϥϜͷαΠζʹ੍‫͕ݶ‬ଘࡏάϥϜͷ‫ه‬࿥ʹΑΔΦʔόʔϔου΍ɼ࣮ߦϩάͷαΠζ

͢Δɽͦ͜Ͱຊ‫Ͱڀݚ‬͸ɼϓϩάϥϜͷαΠζʹؔ͢Δ੍Λ࡟‫͢ݮ‬Δ͜ͱ΋ՄೳͰ͋Δɽ͔͠͠ͳ͕ΒɼҰൠʹ੩త‫ݶ‬Λখ͘͢͞ΔͨΊʹɼϓϩάϥϜͷ࣮ߦΛ‫ه‬࿥͠ɼ࣮ߦ

ͳϓϩάϥϜґଘؔ܎͔Β‫ͨ͠ࢉܭ‬ϑΥϫʔυεϥΠε͸

Λ࠶‫͕ͳ͠ݱ‬Βґଘؔ܎ͷ‫ࢉܭ‬Λߦ͍ɼ‫݁ࢉܭ‬ՌΛॻ͖ग़‫ڊ‬େͰ͋ΔͨΊେ͖ͳޮՌ͸ೝΊΒΕͳ͍͜ͱͱɼ࠷ऴత

͢ํࣜΛ࠾༻͍ͯ͠Δɽʹ‫͢ࢉܭ‬ΔಈతͳϑΥϫʔυεϥΠεͷαΠζ͸มΘΒͳ

3.2.1 σʔλґଘؔ܎ͷ‫ࢉܭ‬͍͜ͱ͔Βɼຊ‫͍͓ͯʹڀݚ‬͸ɼϓϩάϥϜશମʹର໋ͯ͠ྩΛຒΊࠐΈ࣮ߦͷ‫ه‬࿥Λߦ͏ɽσʔλґଘؔ܎͸ɼϩʔΧϧྖҬɼΦϖϥϯυελοΫɼώʔϓྖҬɼͷ 3 ͭͷྖҬʹ͋Δ֤σʔλʹରͯ͠ɼͦͷσʔλ͕ఆٛ͞Εͨ࣌ࠁΛอ͓͖࣋ͤͯ͞ɼࢀর͕‫͖ͨى‬

3.2 ಈతϓϩάϥϜґଘؔ܎ͷ‫ࢉܭ‬৔߹ʹఆٛ࣌ࠁ͔Β‫΁ࠁ࣌ࡏݱ‬ͷลΛҾ͘͜ͱͰ‫ࢉܭ‬Λߦ‫ه‬࿥࣮ͨ͠ߦϩάΛ΋ͱʹɼϓϩάϥϜͷ࣮ߦͷ࠶‫ݱ‬Λ͏ɽྫ͑͹ɼIADD ໋ྩ͸ελοΫ্ͷσʔλΛ 2 ͭϙοߦ͍ͳ͕ΒಈతϓϩάϥϜґଘؔ܎ͷ‫ࢉܭ‬Λߦ͏ɽ࣮ߦϩϓ͠ɼͦΕΒΛ଍͋͠Θͤͯɼͦͷ݁ՌΛελοΫʹϓο

άʹ͸࣍ʹࣔ͢৘ใ͕‫ه‬࿥͞Ε͍ͯͳ͍ͨΊɼόΠτίʔγϡ͢Δ໋ྩͰ͋Δɽ͜ͷ໋ྩͰ͸ɼϙοϓͨ͠σʔλΛυͷ໋ྩΛ࣮ߦϩάͷ৘ใΛ༻͍࣮ͯߦ͠ͳ͓͢͜ͱͰɼ

ࢀরɼϓογϡͨ͠σʔλΛఆٛͨ͜͠ͱʹͳΔͷͰɼࢀ࣮ߦϩάʹ‫ه‬࿥͞Ε͍ͯͳ͍৘ใΛ෮‫͢ݩ‬Δɽরͨ͠σʔλ͔Β‫΁ࠁ࣌ࡏݱ‬ͷลΛҾ͖ɼϓογϡ͢Δ• όΠτίʔυ໋ྩͷ࣮ߦॱংσʔλͷఆٛ࣌ࠁΛ‫ʹࠁ࣌ࡏݱ‬ઃఆ͢Δɽ• ໋֤ྩΛ࣮ߦͨ࣌͠఺ͰͷϩʔΧϧม਺ͷঢ়ଶ

3.2.2 ੍‫ޚ‬ґଘؔ܎ͷ‫ࢉܭ‬• ໋֤ྩΛ࣮ߦͨ࣌͠఺ͰͷΦϖϥϯυελοΫͷঢ়ଶ‫ط‬ଘ‫཰ޮ͍͓ͯʹڀݚ‬ͷΑ͍ಈత੍‫ޚ‬ґଘؔ܎ͷ‫ࢉܭ‬ख• ໋֤ྩΛ࣮ߦͨ࣌͠఺ͰͷώʔϓྖҬ্ͷΦϒδΣΫ

๏͕ఏҊ͞Ε͓ͯΓ [17]ɼͦͷख๏ʹ฿࣮ͬͯ૷Λߦ͏ɽτͷঢ়ଶ‫ط‬ଘ‫ڀݚ‬ͷख๏Ͱ͸ɼελοΫߏ଄Λར༻ͯ͠ಈతͳ੍‫ޚ‬ͦͯ͠ɼ࠶‫ͨ͠ݱ‬ϩʔΧϧม਺ɼώʔϓྖҬ্ͷΦϒδΣ

ґଘؔ܎Λ‫͓ͯ͠ࢉܭ‬ΓɼҎԼʹͦͷ‫ج‬ຊతͳํ਑Λࣔ͢ɽΫτʹରͯ͠ɼ஋ͷఆٛ͞Εͨ࣌ࠁͷ৘ใΛอ͓࣋ͤͯ͞

( 1 ) όΠτίʔυ໋ྩͷ࣮ߦ͞ΕͨॱংʹैͬͯɼόΠτ͘͜ͱͰɼಈతϓϩάϥϜґଘؔ܎ͷ‫ࢉܭ‬Λߦ͏ɽ࠶‫ݱ‬ͷํ๏ͱͯ͠͸ɼ·࣮ͣߦϩά͔Β࠷ॳͷΠϕϯτ
ΛಡΈग़͢ɽͦͯ͠ɼಡΈग़ͨ͠ΠϕϯτʹରԠ͢ΔόΠτίʔυ໋ྩ൪߸·Ͱͷ֤όΠτίʔυ໋ྩΛద༻͠ɼϩʔΧϧม਺ͷঢ়ଶɼΦϖϥϯυελοΫͷঢ়ଶɼώʔϓྖҬ্ͷΦϒδΣΫτͷঢ়ଶΛߋ৽͍ͯ͘͠ɽόΠτίʔυ໋ྩͷద༻࣌ʹɼม਺΍ΦϒδΣΫτͷఆ͕ٛ͋Ε͹ͦΕίʔυ໋ྩΛ 1 ͭͣͭద༻͍ͯ͘͠

( 2 ) ෼‫ʹྩ໋ذ‬౸ୡͨ͠৔߹ɼͦͷ໋ྩΛελοΫʹϓογϡ͢Δ( 3 ) όΠτίʔυ໋ྩͷద༻࣌ʹελοΫͷτοϓʹ͋Δ
෼‫͕ͦྩ໋ذ‬ͷόΠτίʔυ໋ྩΛ੍‫͢ޚ‬Δ( 4 ) ෼‫ྩ໋ذ‬ͷ߹ྲྀ஍఺ʹ͋ͨΔ໋ྩจʹ౸ୡͨ͠ͱ͖ʹελοΫ͔Β෼‫ྩ໋ذ‬Λϙοϓ͢Δ

Βͷఆٛ࣌ࠁΛߋ৽͠ɼࢀর͕͋Ε͹ͦΕΒ͕ఆٛ͞Εͨ஫ҙ͕ඞཁͳͷ͸ྫ֎ൃੜ࣌ͷॲཧͰ͋Δɽྫ֎͕ൃੜ

࣌ࠁ͔Β‫΁ࠁ࣌ࡏݱ‬ͷґଘลΛҾ͘ɽରԠ͢ΔόΠτίʔͨ͠৔߹͸ɼྫ֎ൃੜ࣌ʹελοΫͷτοϓʹ͋Δ෼‫໋ذ‬υ໋ྩ൪߸·Ͱ֤όΠτίʔυ໋ྩΛద༻͠ऴΘΕ͹ɼ࣍ྩ͕ɼྫ֎͕Ωϟον͞Εͨ‫ޙ‬ͷ໋ྩจΛ੍‫͢ޚ‬Δɽྫ͑

ͷΠϕϯτΛಡΈग़͢ɽҎ্ͷॲཧΛϓϩάϥϜͷऴྃΠ͹ਤ 2 ͷΑ͏ͳϓϩάϥϜͷ࣮ߦΛߟ͑Δɽͳ͓ɼ࣮ࡍʹϕϯτʹୡ͢Δ·Ͱ‫܁‬Γฦ͢ɽͳ͓ɼґଘล͸࢝఺ͱऴ఺

͸όΠτίʔυϨϕϧͰͷ੍‫ޚ‬ґଘؔ܎Λߏங͢Δ͕ɼ͜Λද‫ͨ͠ݱ‬௖఺ͷ 2 ͭ૊ͱͯ͠‫ه‬࿥͠ɼ௖఺͸࣌ࠁɼ࢖༻

͜Ͱ͸؆୯ͷͨΊ Java ιʔείʔυϨϕϧͰͷ੍‫ޚ‬ґଘ͞Εͨϝιουʹର͠ҰҙʹׂΓ౰ͯͨϝιου൪߸ɼόؔ܎ͷઆ໌Λߦ͏ɽ͜ͷϓϩάϥϜ͸ɼ5 ߦ໨ˠ 12 ߦ໨ˠΠτίʔυ໋ྩ൪߸ͷ 3 ͭͷ৘ใΛ΋ͭ 3 ͭ૊ͱ͢Δɽ࣌

13 ߦ໨ˠ 14 ߦ໨ͱ࣮ߦ͕ਐΜͰΏ͖ɼ14 ߦ໨Ͱྫ֎͕εࠁʹ͸ɼԾ૝తͳ࣌‫ ͯ͠ͱܭ‬1 ͭͷόΠτίʔυ໋ྩΛॲϩʔ͞Εɼͦͷྫ֎͕Ωϟον͞Εͯ࠷‫ ʹޙ‬7 ߦ໨ͷ໋ྩ

ཧ͢Δ౓ʹΠϯΫϦϝϯτ͞ΕΔ஋Λ༻͍Δɽ

͕࣮ߦ͞ΕΔɽྫ֎͕εϩʔ͞Εͨͱ͖ͷελοΫͷτο

ຊ‫Ͱڀݚ‬͸ɼҰ౓࣮ߦΛ‫ه‬࿥ͨ͠‫هʹޙ‬࿥Λ༻͍ͯϓϩϓ͸ 13 ߦ໨ͷ෼‫͋Ͱྩ໋ذ‬ΔͷͰɼྫ֎͕Ωϟον͞ΕάϥϜͷ࣮ߦΛ࠶‫͠ݱ‬ɼಈతϓϩάϥϜґଘؔ܎ͷ‫ࢉܭ‬Λͨ‫ޙ‬ͷ 7 ߦ໨ͷ໋ྩ͸ 13 ߦ໨ͷ෼‫ޚ੍ʹྩ໋ذ‬ґଘ͢Δ

c 2016 Information Processing Society of Japan

4৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical Report SDFNDJHGHSHQGHQF\ SXEOLFFODVV([FHSWLRQ([DPSOH^SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^WU\^FDOO 

`FDWFK ([FHSWLRQH ^
6\VWHPRXWSULQWOQ FDWFKHUURU 

`

`


SXEOLFVWDWLFYRLGFDOO WKURZV([FHSWLRQ^
LQW L 
LI L  ^
WKURZQHZ([FHSWLRQ 

`

`
 `

ਤ 2

αϯϓϧίʔυɿྫ֎ͷൃੜ

Fig. 2 An example of exception throw

͜ͱͱͳΔɽ

LQW LLI FDOO  ! ^L 
`HOVH^L 
`
6\VWHPRXWSULQWOQ L ਤ 3

LQW FDOO LQW RSLQW RS ^UHWXUQRS RS`ಟṇ

LQW FDOO LQW RSLQW RS ^UHWXUQRS RS`ϓϩάϥϜͷमਖ਼ྫ

Fig. 3 An example of bug ﬁx

ͨͩ͠ɼPDG ͸੍‫ޚ‬ґଘؔ܎ͷଘࡏʹΑΓ෼‫ྲྀ߹ͱذ‬͕ଟ͍ͷ͕ಛ௃Ͱɼ‫ܦ‬࿏਺Λ਺্͑͛Δͱ૊Έ߹Θͤരൃ

3.3 ϑΥϫʔυεϥΠεͷ‫ࢉܭ‬Λ‫͏·ͯ͜͠͠ى‬ɽͦͷͨΊɼάϥϑதͷ‫ܦ‬࿏ू߹ͷۙࣅಈతσʔλґଘؔ܎ͱಈత੍‫ޚ‬ґଘؔ܎Λ΋ͱʹɼมߋͱͯ͠ɼ‫ܦ‬࿏্ͷ௖఺ू߹ͷൺֱΛߦ͏ɽͳ͓ɼϑΥϫʔର৅ͱͳͬͨϝιουΛ‫ج‬४ͱͨ͠ϑΥϫʔυεϥΠεΛ

υεϥΠε಺ʹ͓͚Δ֤௖఺͸ɼ࣌ࠁɼϝιου൪߸ɼό‫͢ࢉܭ‬ΔɽҰൠʹϑΥϫʔυεϥΠε͸ɼಈతσʔλґଘΠτίʔυ໋ྩ൪߸ͷ 3 ͭͷ৘ใΛอ͍࣋ͯ͠Δ͕ɼ࣌ࠁؔ܎ͱಈత੍‫ޚ‬ґଘؔ܎Λ΋ͱʹಈతͳ PDG Λ࡞੒͠ɼ৘ใ͸ 1 ͭͷϑΥϫʔυεϥΠε಺ʹ͓͚Δ૬ରతͳ৘ใ

‫ج‬४ͱͳΔ௖఺͔ΒਪҠతʹ౸ୡՄೳͳ௖఺ू߹Λ‫ٻ‬ΊΔͰ͋ΔͨΊɼ2 ͭͷϑΥϫʔυεϥΠεΛൺֱ͢Δࡍʹ͸͜ͱͰಘΒΕΔɽ͔͠͠ͳ͕Βɼಈతͳ PDG Ͱ͸ɼ௖఺ෆཁͰ͋ΔɽΑͬͯɼϑΥϫʔυεϥΠεͷൺֱʹ͸ɼ࣌਺͕࣮ߦ࣌ؒʹൺྫͯ͠૿Ճ͍͖ͯ͠ɼࠓճͷΑ͏ͳ Javaࠁͷ৘ใΛআ֎͠ɼ࢒Δ 2 ͭͷ৘ใ͚ͩΛ༻͍Δɽ·ͨɼόΠτίʔυϨϕϧͰͷ PDG Ͱ͸ଟ͘ͷ௖఺Λ΋ͭ͜ͱϝιου൪߸ͱόΠτίʔυ໋ྩ൪߸ͷ૊͸ɼϓϩάϥϜ

ͱͳΔɽϝϞϦ্ʹల։ՄೳͳάϥϑαΠζʹ΋‫ݶ‬ք͕͋தͷ໋ྩΛҰҙʹಛఆ͢Δ΋ͷͰ͋ΓɼҎ߱ 2 ͭͷ൪߸ͷΔͷͰɼຊ‫Ͱڀݚ‬͸ಈతσʔλґଘؔ܎ͱಈత੍‫ޚ‬ґଘ૊ΛϓϩάϥϜ໋ྩ൪߸ͱ‫Ϳݺ‬ɽؔ܎Λ࣌‫ࠪ͢૸ʹॱྻܥ‬Δ͜ͱͰɼಈతͳ PDG શମ͔Β

2 ͭͷϑΥϫʔυεϥΠεͷൺֱͷͨΊʹɼ·ͣϑΥϫʔϑΥϫʔυεϥΠεΛ੾Γग़͢‫Ͱܗ‬͸ͳ͘ɼ‫ج‬४఺ʹґଘυεϥΠε಺ͷ֤௖఺ʹରͯ͠ɼͦͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏ลΛ෇͚଍͍ͯ͘͠‫Ͱܗ‬ϑΥϫʔυεϥΠεΛ‫͢ࢉܭ‬Δɽ

্ͷ௖఺ू߹Λ‫͢ࢉܭ‬Δɽͦͯ͠ɼ2 ͭͷϑΥϫʔυεϥ۩ମతͳ‫ํࢉܭ‬๏ͱͯ͠͸ɼ࣌‫ʹॱྻܥ‬ґଘลΛ૸ࠪͯ͠ΠεͦΕͧΕʹ‫ݻ‬༗ͳ௖఺Λࠩ෼ͱͯ͠ग़ྗ͢Δɽ

͍͖ɼ࣍ͷ͍ͣΕ͔ͷ৚݅Λຬͨͨ͠ͱ͖ʹɼάϥϑ΁ͷ

ྫ͑͹ɼਤ 3 ʹࣔͨ͠Α͏ͳϓϩάϥϜͷमਖ਼Λߟ͑௖఺ͱลͷ௥ՃΛߦ͏ɽશͯͷґଘลΛ૸ࠪ͠ऴ͑ͨͱ͖

Δɽਤ 3 ͷࠨଆͷιʔείʔυͰ͸ɼcall ϝιουΛ‫ͼݺ‬ϑΥϫʔυεϥΠεͷ‫ྃ͢׬͕ࢉܭ‬Δɽ

ग़͓ͯ͠ΓɼͦͷฦΓ஋ʹΑΓ࣮ߦ੍‫ޚ‬Λߦ͍ͬͯΔɽ͜• ґଘลͷ࢝఺ͱͳΔ௖఺͕ɼมߋର৅ͱͳͬͨϝιοͷ࣌ɼcall ϝιουͷ಺༰͕ਤͷӈଆͷΑ͏ʹमਖ਼͞Εͨυ಺ͷ໋ྩͰ͋Γɼ͔ͭऴ఺ͱͳΔ௖఺͕มߋର৅ͱ

৔߹ɼमਖ਼લ‫Ͱޙ‬ϓϩάϥϜͷ࣮ߦ͕มԽ͢Δɽमਖ਼લɼ

ͳͬͨϝιου಺ͷ໋ྩͰ͸ͳ͍मਖ਼‫ޙ‬ͷͦΕͧΕͷϓϩάϥϜͷ࣮ߦʹରͯ͠ɼ໋ྩจΛ• ґଘลͷ࢝఺ͱͳΔ௖఺͕ɼάϥϑ಺ʹ‫ʹط‬ଘࡏ͠ɼ௖఺ɼґଘؔ܎Λลͱͯ͠ಈతͳϑΥϫʔυεϥΠεΛ‫ܭ‬͔ͭऴ఺ͱͳΔ௖఺͕มߋର৅ͱͳͬͨϝιου಺ͷࢉ͢Δͱਤ 4 ͷΑ͏ͳάϥϑͱͳΔɽਤதͰ͸ɼ௖఺Լ෦

໋ྩͰ͸ͳ͍

ͷ೾‫ͦʹހׅ‬ͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ͷ௖఺ू߹Λ‫ه‬ड़͍ͯ͠Δɽ͜ͷͱ͖ i = 0 ͸मਖ਼લͷΈɼi = 1 ͸मਖ਼‫ʹޙ‬ͷ

3.4 ϑΥϫʔυεϥΠεͷൺֱΈ࣮ߦ͞ΕΔ໋ྩͰ͋ΔͨΊɼ‫ݻ‬༗ͳ௖఺ͱͯ͠‫ݕ‬ग़͞Εόάमਖ਼લ‫ޙ‬ͷ 2 ͭͷϑΥϫʔυεϥΠε͸͍ͣΕ΋༗Δɽ·ͨɼprint(i) ͸मਖ਼લ‫ͪͲޙ‬ΒͰ΋࣮ߦ͞Ε͍ͯΔ

޲ඇ॥‫؀‬άϥϑͰ͋ΓɼͦΕΒΛൺֱ͢Δ͜ͱͰϓϩάϥ

໋ྩͰ͋Δ͕ɼ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ͷ௖఺ू߹͕मਖ਼લ

Ϝͷಈ࡞ͷࠩ෼Λ‫ٻ‬ΊΔɽ͔͠͠ͳ͕ΒɼϑΥϫʔυεϥ‫Ͱޙ‬ҟͳ͍ͬͯΔͨΊɼ‫ݻ‬༗ͳ௖఺ͱͯ͠‫ݕ‬ग़͞ΕΔɽ

Πε͸࣮ߦͷ௕͞ʹൺྫͯ͠େ͖͘ͳΔͨΊɼ୯७ͳάϥϑΥϫʔυεϥΠε಺ͷ֤௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ͷ௖఺ϑͷൺֱ͸ίετ͕ߴ͘‫࣮ݱ‬తͰ͸ͳ͍ɽͦ͜Ͱຊ‫Ͱڀݚ‬ू߹ͷ‫ࢉܭ‬͸ɼ࣍ͷΑ͏ʹ௖఺Λ๚໰͠ͳ͕Β৘ใΛ఻೻͸ɼϑΥϫʔυεϥΠεதͷ‫ܦ‬࿏ʹண໨ͯ͠ 2 ͭͷϑΥ

ͤ͞Δ‫ͯ͠ͱࢉܭ‬ఆٛ͢ΔɽϫʔυεϥΠεͷൺֱΛߦ͏ɽ( 1 ) ௖఺ͷτϙϩδΧϧιʔτΛߦ͍ɼ͔ࠜΒॱʹ๚໰͢c 2016 Information Processing Society of Japan

5৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical Reportϯιʔειϑτ΢ΣΞͷ 10 ‫ݸ‬ͷόάʹରͯ͠ɼશςετఊਫ৐έʔεͷ࣮ߦΛ‫ه‬࿥͠ɼόάमਖ਼લ‫ޙ‬ͷಈ࡞ͷࠩ෼‫ݕ‬ग़ΛUHWXUQ

LI FDOO^`L^LI FDOO `ߦͬͨɽ

SULQW L^LI FDOO  L`ද 1 ʹ֤खॱʹ͓͚Δ‫ؒ࣌ࢉܭ‬Λɼද 2 ʹநग़ͨ͠ϑΥϫʔυεϥΠεͷ‫ن‬໛͓Αͼࠩ෼ͱͯ͠‫ݕ‬ग़͞Εͨ௖఺਺ఊਫ৏Λࣔ͢ɽදதͷ‫ ߸ه‬b ͸όάमਖ਼લɼf ͕όάमਖ਼‫ޙ‬ΛදUHWXUQ

LI FDOO
^`

ਤ 4

L



^LI FDOO `ͯ͠Δɽྫ͑͹ 1b Ͱ͋Ε͹όά൪߸ 1 ൪ͷόάमਖ਼લͷ

SULQW L^LI FDOO LιʔείʔυΛ͍ࣔͯ͠Δɽද 2 ʹ͓͍ͯɼ‫ܦ‬࿏͸ϑΥ`ϫʔυεϥΠεதͷೖ࣍਺͕ 0 ͷ௖఺͔Βɼग़࣍਺͕ 0 ͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏ͷ૯਺Ͱ͋Δɽ·ͨɼ‫ݻ‬༗ͳ௖఺͸ɼमਖ਼લ‫ޙ‬ͷϑΥϫʔυεϥΠε

Fig. 4 Forward slices of example programΔ௖఺Ϧετ V = [v1 , v2 , v3 , · · ·] Λ࡞੒͢Δ( 2 ) ͔ࠜΒ vi ʹ౸ୡ͢Δ‫ܦ‬࿏্ͷ௖఺ू߹Λ R(vi ) ͱ͠ɼR(vi ) ← φ Ͱॳ‫ظ‬Խ͢Δ

όάमਖ਼લ‫ޙ‬ͷϑΥϫʔυεϥΠεͷࠩ෼ͱͯ͠‫ݕ‬ग़͞Εͨ௖఺਺Λ͍ࣔͯ͠Δɽ
ද 2 ΑΓɼ8 ‫ݸ‬ͷόάʹ͍ͭͯɼͦͷमਖ਼લ‫ޙ‬ͷࠩ෼Λ‫ݕ‬ग़Ͱ͖ɼ࢒Δ 2 ͭͷόά͸ϝϞϦෆ଍ʹΑΓɼ‫׬͕ࢉܭ‬ྃ͠ͳ͔ͬͨɽ1 ൪ͷόάͰ͸ɼϑΥϫʔυεϥΠεͷ௖( 3 ) ֤ vi ʹରͯ͠ɼvi ͔Β༗޲ลͰ઀ଓ͞Ε͍ͯΔ௖఺ू

఺਺͕͓Αͦ 6 ઍɼลͷ਺͕͓Αͦ 1 ສɼ‫ܦ‬࿏਺͸໿ 357

߹ E(vi ) Λྻ‫͠ڍ‬ɼv ∈ E(vi ) ͦΕͧΕʹରͯ͠ɼ௖

‫͋ͱژ‬ΔΑ͏ʹ‫ڊ‬େͳάϥϑͱͳ͍ͬͯΔɽ͜ͷΑ͏ͳ‫ڊ‬఺ vi ͷϓϩάϥϜ໋ྩ൪߸ I(vi ) Λ༻͍ͯ࣍ͷΑ͏ʹେͳάϥϑʹରͯ͠΋ɼຊख๏Λద༻͢Δ͜ͱͰࠩ෼Λ‫ݕ‬R(v) Λߋ৽͢Δ

ग़͢Δ͜ͱ͕Ͱ͖ɼ‫ݕ‬ग़͞Εͨࠩ෼ͱͯ͠͸ɼόάमਖ਼‫ޙ‬R(v) ← R(v) ∪ R(vi ) ∪ {I(vi )}͜ͷํ๏Ͱͷ௖఺ͷ๚໰ճ਺͸ O(|V |)ɼ৘ใͷ఻೻ճ਺͸O(|E|) ͱͳΓ (|V |, |E| ͸ͦΕͧΕ௖఺਺ͱลͷ਺)ɼ࠷ऴ
తͳ‫ؒ࣌ࢉܭ‬͸ O(|V | × |E|) ͱͳΔɽ

2 ͭͷ௖఺ v1, v2 ͕༩͑ΒΕͨͱ͖ɼ௖఺ࣗ਎ͷϓϩάʹ৽ͨʹ 42 ͷ௖఺͕ՃΘ͍ͬͯΔ͜ͱ͕֬ೝͰ͖Δɽ
͔͠͠ͳ͕Βɼόά൪߸ 8 ͷόά͸ϑΥϫʔυεϥΠε
ͷαΠζ͕ 0 ͱ͍͏݁Ռʹͳ͍ͬͯΔɽ͜Ε͸ɼ࣮ߦͷ‫ه‬࿥ର৅֎ʹ͓͚Δґଘؔ܎͸நग़Ͱ͖ͳ͍ͨΊͰ͋Δɽ࣮ߦͷ‫ه‬࿥ʹ‫·ؚ‬Εͳ͍Ϋϥε΍ɼͦͷΦϒδΣΫτʹର͢Δϝιου‫ͼݺ‬ग़͠ʹ͍ͭͯ͸ɼϝιου಺෦ͷॲཧ͕‫؍‬ϥϜ໋ྩ൪߸ͱɼ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ͷ௖఺ू߹͕ͦΕଌͰ͖ͳ͍ɽΏ͑ʹɼϝιου಺ͰϑΟʔϧυ΁ͷॻ͖ࠐͧΕ౳͍͠৔߹ʹɼ2 ͭͷ௖఺Λ౳͍͠ͱΈͳ͢ɽ͜ΕΛΈʹΑΓσʔλͷఆ͕ٛ͋Γɼϝιου֎ͰͦͷϑΟʔϧࣜͰද‫͢ݱ‬ΔͱҎԼͷΑ͏ʹͳΔɽυ஋Λࢀর͍ͯͨ͠৔߹ͳͲʹɼͦͷґଘؔ܎͕நग़͞Εͣɼ݁ՌతʹϑΥϫʔυεϥΠεΛ‫ͨ͠ࢉܭ‬৔߹ʹґଘล

v1 = v2 ⇔ (I(v1 ) = I(v2 )) ∧ (R(v1 ) = R(v2 ))2 ͭͷϑΥϫʔυεϥΠεͦΕͧΕʹ‫ݻ‬༗ͳ௖఺͸ɼ্‫ه‬ͷ௖఺ൺֱΛ༻͍ͨू߹ԋࢉʹΑΓ‫͢ࢉܭ‬Δɽ2 ͭͷϑΥϫʔυεϥΠε಺ͷ௖఺ू߹ V1 , V2 ʹରͯ͠ɼͦΕͧΕʹ‫ݻ‬༗ͳ௖఺ू߹ U1 , U2 Λ࣍ͷࣜͰ‫ٻ‬ΊΔɽ

U1 = V1 − V2
U2 = V2 − V1

4. ࣮‫ݧ‬్͕੾ΕΔ‫ͳͱܗ‬Δɽຊ‫͍͓ͯʹڀݚ‬͸ɼJava ΫϥεϥΠϒϥϦ಺ͷΫϥεʹؔͯ͠͸࣮ߦͷ‫ه‬࿥Λ͍ͯ͠ͳ͍ͨ
Ίɼ͜ΕΒͷΫϥεͷϝιου಺֎ʹ͓͚Δґଘؔ܎͕ந
ग़͞Εͣɼ͜ͷΑ͏ͳ݁Ռͱͳ͍ͬͯΔɽ͜ͷΑ͏ͳঢ়‫گ‬Λආ͚ΔͨΊͷରࡦͱͯ͠͸̎ͭߟ͑Β
ΕΔɽ1 ͭ͸ɼJava ΫϥεϥΠϒϥϦ಺ͷΫϥεʹؔͯ͠΋࣮ߦΛ‫ه‬࿥͢Δ͜ͱͰ͋Δɽͦ͏͢Δ͜ͱͰɼ͢΂ͯͷґଘؔ܎Λਖ਼͘͠நग़͢Δ͜ͱ͕Ͱ͖Δɽ΋͏ 1 ͭ͸ɼJava ΫϥεϥΠϒϥϦ಺ͷΦϒδΣΫτʹର͢Δϝιου
‫ͼݺ‬ग़͕͋ͬͨ͠৔߹ʹ͸ɼ‫ͼݺ‬ग़͠ʹΑͬͯΦϒδΣΫ
τ಺ͷϑΟʔϧυ͕ఆٛ͞ΕΔՄೳੑ͕͋Δͱͯ͠ɼ‫ͼݺ‬ఏҊख๏ͷ༗ޮੑΛධՁ͢ΔͨΊʹ࣮‫ݧ‬Λߦͬͨɽ࣮‫ʹݧ‬ग़໋͠ྩࣗମΛΦϒδΣΫτΛఆٛ͢Δ໋ྩͱͯ͠ѻ͏͜͸όάमਖ਼ʹؔ͢Δެ։σʔληοτ Defects4j[7] ಺ͷΞϓ

ͱͰ͋Δɽ͜ΕʹΑΓɼϝιου಺෦ͷॲཧΛ‫؍‬ଌͰ͖ͳϦέʔγϣϯΛ࢖༻ͨ͠ɽ࣮ߦ‫ڥ؀‬͸ɼOS ͕ Ubuntu14.04ɼ

͍৔߹Ͱ΋ɼґଘล్͕੾ΕΔ͜ͱ͕ͳ͍ɽͨͩ͠ɼ࣮ࡍ

ϝϞϦ͕ 256GBɼCPU ͕ Intel Xeon 2.90GHz Ͱ͋ΔɽDe-ʹ͸ґଘؔ܎͕ͳ͍৔߹ʹ΋ɼґଘؔ܎͕͋Δ΋ͷͱͯ͠fects4j ͸Φʔϓϯιʔειϑτ΢ΣΞͷόάमਖ਼ʹؔ͢Δ

நग़͞Εͯ͠·͍ɼਖ਼͘͠σʔλͷྲྀΕ΍੍‫ޚ‬ͷྲྀΕΛ௥σʔληοτͰ͋Γɼमਖ਼લɾमਖ਼‫ޙ‬ͷιʔείʔυͱɼ͑ͳ͘ͳΔͱ͍͏ܽ఺͕͋ΔɽΤϥʔΛҾ͖‫͢͜ى‬ςετέʔε͕‫·ؚ‬Ε͍ͯΔɽ࣮‫Ͱݧ‬͸ɼͦͷதͰ΋ Apache Commons Lang ͱ‫ݺ‬͹ΕΔΦʔϓ

c 2016 Information Processing Society of Japan

6৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical Report͸ɼςετͷ੒ޭύλʔϯͱࣦഊύλʔϯΛ༩͑ɼͦΕͧ

5. ؔ࿈‫ڀݚ‬Εʹରͯ͠ಈతϓϩάϥϜεϥΠεΛ‫ٻ‬Ίͯൺֱ͠ɼ੒ޭ

Johnson Β͸ 2 ͭͷಈతϓϩάϥϜεϥΠεΛ΋ͱʹɼͦͷҧ͍Λ‫ݕ‬ग़͢Δख๏ΛఏҊ͍ͯ͠Δ [6]ɽ͜ͷख๏Ͱද 1ͱࣦഊͷҧ͍ΛੜΜ໋ͩྩจΛఏ͍ࣔͯ͠ΔɽϓϩάϥϜ
εϥΠεͷൺֱʹ͓͍ͯ͸ɼϙΠϯλͷਖ਼‫ن‬ԽͳͲʹΑΓࢬ‫מ‬ΓΛߦ͍୳ࡧۭؒͷ࡟‫͢ݮ‬Δ͜ͱͰ࣮༻ੑΛߴΊ͍ͯ
Δɽզʑͷख๏͸ɼϓϩάϥϜͷมߋʹΑΔಈ࡞ͷҧ͍Λ֤खॱͷ‫ؒ࣌ࢉܭ‬‫ݕ‬ग़͢Δ໨తͰ͋ΓɼೖྗͱͳΔςετεΠʔτ͸ಉҰͰ

Table 1 Computation time͋Δ͕ɼର৅ͱͳΔϓϩάϥϜ͕มԽ͍ͯ͠ΔɽΏ͑ʹɼ#‫ه‬࿥ [s]PDG[s]

εϥΠε [s]ൺֱ [s]

1b

185

5,507

884

0.019

όοΫϫʔυͷεϥΠεͰ͸ͳ͘ϑΥϫʔυεϥΠεΛ༻

1f

187

5,261

760

0.015

͍͍ͯΔ఺͕͜ͷख๏ͱ͸ҟͳΔɽ

2b

184

5,429

763

0.004

2f

185

5,374

762

0.001

࣮ߦΛൺֱ͢Δ Relative Debugging ΛఏҊͨ͠ [1]ɽRel-

3b

186

5,293

796

0.014

ative Debugging ͸ 2 ͭͷϓϩάϥϜʹಉ͡ೖྗΛ༩࣮͑ͯߦΛൺ΂Δ͜ͱͰܽؕΛಛఆ͢Δٕज़Ͱ͋Γɼ։ൃऀ͕

Abramson Β͸όʔδϣϯͷҟͳΔ 2 ͭͷϓϩάϥϜͷ

3f

184

5,174

662

0.010

4b

187

5,482

1,189

N/A

4f

191

5,372

1,637

N/A

5b

186

5,274

1,234

0.003

5f

185

5,286

1,224

0.001

͜ͷٕज़͸ιϑτ΢ΣΞ։ൃͳͲͰɼਖ਼͘͠ಈ࡞͍ͯͨ͠

6b

189

5,320

2,546

N/A

‫چ‬όʔδϣϯͷϓϩάϥϜʹվมΛՃ͑ͨͱ͜Ζɼ৽όʔ

6f

188

5,171

2,916

N/A

δϣϯͰ͸ਖ਼͘͠ಈ࡞͠ͳ͘ͳͬͨ৔߹ͳͲʹɼ‫چ‬όʔ

7b

189

5,470

1,231

0.022

δϣϯͱ৽όʔδϣϯͷ࣮ߦΛൺ΂Δ͜ͱͰɼޮ཰తͳσ

7f

185

5,439

1,203

0.012

όοά͕ՄೳͱͳΔɽRelative Debugging ͸͋͘·ͰΠϯ

8b

91

2,601

366

0.001

8f

93

2,565

350

0.001

λϥΫςΟϒͳσόοΨͰ͋Γɼಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͢Δͷ

9b

104

2,932

1,272

1,231.148

9f

104

2,895

1,918

1,909.242

10b

104

2,906

427

0.616

10f

107

2,795

416

0.400

2 ͭͷϓϩάϥϜؒͰঢ়ଶ͕౳͘͠ͳΔ΂͖஍఺Λࢦఆ͢
Δͱɼঢ়ଶ͕ҟͳ͍ͬͯͨ৔߹ʹͦͷ͜ͱ͕௨஌͞ΕΔɽ

ʹ։ൃऀͷૢ࡞Λඞཁͱ͢Δ͕ɼզʑͷख๏͸มߋ͞ΕͨϝιουΛೖྗͱͯ͠ɼࣗಈతʹࠩ෼Λ‫ݕ‬ग़͢Δख๏Ͱ
͋Δɽ

Ramanathan Β͸ಈ࡞ͷҧ͍Λϩάͷ࠷௕‫ڞ‬௨෦෼ྻΛ‫ٻ‬ΊΔ͜ͱͰ‫ݕ‬ग़͢Δख๏ΛఏҊͨ͠ [8]ɽ͜ͷख๏Ͱ͸ɼද 2ϓϩάϥϜͷಈ࡞ΛϝϞϦʹର͢ΔಡΈग़͠ͱॻ͖ࠐΈͱϑΥϫʔυεϥΠεͷ৘ใ

Table 2 Extracted dynamic forward slices#௖఺ͯ͠ղऍ͠ɼϓϩάϥϜͷ࣮ߦதʹൃੜͨ͠ɼಡΈग़͠ɾॻ‫ݻ‬༗ͳ௖఺

͖ࠐΈૢ࡞ͷྻΛ‫ٻ‬ΊΔɽϓϩάϥϜͷมߋલ‫ޙ‬ͷ 2 ͭͷ

16

ล

‫ܦ‬࿏

1b

6,260

11,024357 × 100ྻͷ࠷௕‫ڞ‬௨෦෼ྻΛ‫ٻ‬Ίɼಈ࡞ͷࠩ෼Λఏࣔ͢Δɽ͜ͷ

1f

6,996

12,321357 × 1016

42ख๏͸ϝϞϦʹର͢Δૢ࡞ʹͷΈண໨͢Δͷʹର͠ɼզʑ

2b

1,298

1,364

319

1

ͷख๏͸ɼϝϞϦʹର͢ΔಡΈग़͠ɾॻ͖ࠐΈҎ֎ͷ໋ྩ

2f

1,326

1,404

337

7

3b

6,015

10,591357 × 10160ʹؔͯ͠΋ґଘؔ܎ʹࠩ෼͕͋Ε͹‫ݕ‬ग़͢Δ఺͕ҟͳΔɽ

3f

6,078

10,705357 × 1016

3

4b51,491,332

97,249,586

913 × 1016

N/AͨΊͷख๏ΛఏҊͨ͠ [4]ɽ͜ͷख๏Ͱ͸ɼϓϩάϥϜͷ࣮

16

N/A

ߦதʹ࣮ߦ͞Ε໋ͨྩจͱͦͷ࣌ͷ஋ͷྻΛൺ΂Δ͜ͱͰ

136

0ϝιουϨϕϧͰͷಈ࡞ͷมԽΛ‫ݕ‬ग़͍ͯ͠Δɽզʑͷख๏Ͱ͸ɼΑΓࡉཻ౓ͳ Java όΠτίʔυϨϕϧͰͷಈ࡞

4f

51,491,332

97,249,586

5b

329

389

913 × 10Cai Β͸ dynamic impact analysis ͷਖ਼֬͞Λਪఆ͢Δ

5f

396

462

167

19

6b

83,584,442

156,272,662

201 × 1016

N/A

6f

83,586,850

156,277,095

206 × 1016

N/A

7b

4,603

8,002

357 × 1016

39

7f

4,812

8,373

357 × 1016

73

8b

0

0

0

0

8f

0

0

0

0

ߦΛ΋ͱʹΦϒδΣΫτͷਖ਼ৗঢ়ଶͳΔ΋ͷΛߏங͓ͯ͠

119,895,430

532 × 1016

2͖ɼࣦഊ͢Δςετʹରͯ͠ɼਖ਼ৗঢ়ଶ͔Ͳ͏͔ͷνΣο

532 × 1016

9b68,481,669

ͷมԽΛ‫ݕ‬ग़͍ͯ͠Δɽ

Perscheid Β͸εςʔτφϏήʔγϣϯΛఏࣔ͢Δ͜ͱ
ͰγεςϚςΟοΫʹෆ۩߹͔Βܽؕ΁ͱͨͲΓண͚ΔΑ
͏ͳख๏ΛఏҊͨ͠ [14]ɽ͜ͷख๏͸ɼςετέʔεͷ࣮

9f

68,481,483

119,895,112

0ΫΛߦ͍ɼո͍͠෦෼Λ։ൃऀʹఏ͍ࣔͯ͠Δɽ͢ͳΘͪɼ10b631,407631,407

131,3130ΦϒδΣΫτͷঢ়ଶͱ͍͏‫ߦ࣮Ͱ఺؍‬Λൺֱͯࠩ͠෼Λ‫ݕ‬

10f

631,407631,407

131,3130ग़͍ͯ͠Δͱ‫͑ݴ‬Δɽզʑͷख๏͸ಈతͳϓϩάϥϜεϥ

c 2016 Information Processing Society of Japan

7৘ใॲཧֶձ‫ڀݚ‬ใࠂ
IPSJ SIG Technical ReportΠεͷΈΛ༻͍ͯಈ࡞ͷࠩ෼Λ‫ݕ‬ग़͍ͯ͠Δ͕ɼ͜ͷख๏ΛԠ༻͠ɼΦϒδΣΫτͷঢ়ଶͱ͍͏৘ใͱϓϩάϥϜε
ϥΠεΛ૊Έ߹ΘͤΔ͜ͱͰɼಈతεϥΠεͷൺֱͷࡍʹ[6]ࢬ‫מ‬ΓΛߦ͑ɼޮ཰తʹϓϩάϥϜͷಈ࡞ͷҧ͍Λ‫ݕ‬ग़Մೳ͔΋͠Εͳ͍ɽ

[7]

6. ·ͱΊͱࠓ‫ޙ‬ͷ՝୊ຊ‫Ͱڀݚ‬͸ɼόάमਖ਼લ‫ޙ‬ͷϓϩάϥϜͷ࣮ߦ‫ྻܥ‬ͷࠩ[8]෼Λ‫ݕ‬ग़͢Δख๏ΛఏҊ͠ɼ࣮૷Λߦͬͨɽख๏͸मਖ਼લ‫͍͓ͯʹޙ‬ɼಈతͳϓϩάϥϜґଘάϥϑΛߏங͓͖ͯ͠ɼมߋΛՃ͑ͨϝιουΛ‫ͨ͠ͱ఺ج‬ϑΥ

[9]ϫʔυεϥΠεΛ‫͠ࢉܭ‬ɼ2 ͭͷϑΥϫʔυεϥΠεΛൺֱ͢Δ΋ͷͰ͋ΔɽϑΥϫʔυεϥΠε͸άϥϑͱͳΔͨΊɼͦͷൺֱίετ͸ߴ͍ɽఏҊख๏Ͱ͸̎ͭͷϑΥϫʔ[10]υεϥΠε಺ͷ֤௖఺ʹରͯ͠ɼͦͷ௖఺ʹ౸ୡ͢Δ‫ܦ‬࿏্ʹଘࡏ͢Δ௖఺ू߹Λൺֱ͢Δ͜ͱͰɼ͜ΕΛղܾͯ͠[11]

͍Δɽ·ͨɼఏҊख๏ͷ༗ޮੑΛௐ΂ΔͨΊʹɼDefects4jʹ‫·ؚ‬ΕΔΞϓϦέʔγϣϯͷ 10 ‫ݸ‬ͷόάʹରͯ͠ద༻
͠ɼ6 ‫ݸ‬ͷόάʹؔͯ͠ɼͦͷमਖ਼લ‫ޙ‬ͷಈ࡞ͷࠩ෼Λ‫ݕ‬[12]

ग़Ͱ͖Δ͜ͱΛ֬ೝͨ͠ɽ
ࠓ‫ޙ‬ͷ՝୊ͱͯ͠͸ɼ‫ࢉܭ‬ͷߴ଎ԽͱεέʔϥϏϦςΟ

[13]ͷ޲্͕‫͛ڍ‬ΒΕΔɽຊ‫Ͱڀݚ‬͸ɼϓϩάϥϜશମͷ࣮ߦΛ‫ه‬࿥ͨ͠‫ʹޙ‬ɼ࠶ͼϓϩάϥϜͷ࣮ߦΛ࠶‫͕ͳ͠ݱ‬Βɼ
ಈతͳ PDG ͷ‫ࢉܭ‬Λߦ͍ͬͯΔɽϓϩάϥϜશମͷ࣮ߦ[14]Λ‫ه‬࿥͢ΔͷͰ͸ͳ͘ɼมߋର৅ͱͳͬͨϝιουΛ‫ج‬४ͱͨ͠੩తͳϑΥϫʔυεϥΠεͷൣғͷΈϓϩάϥϜΛ

[15]‫ه‬࿥͢Δ͜ͱͰɼ࣮ߦͷ‫ه‬࿥ɼಈతͳ PDG ͷ‫ࢉܭ‬ɼϑΥϫʔυεϥΠεͷ‫͔͔ʹࢉܭ‬Δ࣌ؒΛ࡟‫͖Ͱݮ‬ΔՄೳੑ͕͋Δɽ·ͨɼϓϩάϥϜमਖ਼લ‫ޙ‬ͷ 2 ͭͷಈతͳϑΥϫʔυεϥΠεͷେ෦෼͸ࠩ෼͕ͳ͍͸ͣͰ͋Δɽ͜ͷ৘ใΛ

[16]
[17]

‫͠༻׆‬ɼࠩ෼͕ͳ͍෦෼ͷάϥϑߏ଄Λ 2 ͭͷϑΥϫʔυεϥΠεͰ‫ڞ‬༗͠ɼඞཁͳϝϞϦྔΛ࡟‫͢ݮ‬Δ͜ͱͰε[18]έʔϥϏϦςΟͷ޲্͕ߟ͑ΒΕΔɽँࣙຊ‫ڀݚ‬͸ JSPS Պ‫ݚ‬අ 26280021 ͷॿ੒Λड͚ͨ΋ͷ
Ͱ͢ɽ

[19]

dence Graphs in Software Engineering, Proc. ICSE, pp.
392–411 (1992).
Johnson, N. M., Caballero, J., Chen, K. Z., McCamant,
S., Poosankam, P., Reynaud, D. and Song, D.: Diﬀerential Slicing: Identifying Causal Execution Diﬀerences for
Security Applications, Proc. S & P, pp. 347–362 (2011).
Just, R., Jalali, D. and Ernst, M. D.: Defects4J: A
database of existing faults to enable controlled testingstudies for Java programs, Proc. ISSTA, pp. 437–440(2014).
Krishna Ramanathan, M., Grama, A. and Jagannathan,S.: Sieve: A Tool for Automatically Detecting Variations Across Program Versions, Proc. ASE, pp. 241–252(2006).
Law, J. and Rothermel, G.: Whole program pathbased dynamic impact analysis, Proc. ICSE, pp. 308–318(2003).
Li, L. and Oﬀutt, A.: Algorithmic analysis of the impact
of changes to object-oriented software, Proc. ICSM, pp.
171–184 (1996).
Nagarajan, V., Jeﬀrey, D., Gupta, R. and Gupta, N.: A
System for Debugging via Online Tracing and Dynamic
Slicing, Software Practice and Experience, Vol. 42,
No. 8, pp. 995–1014 (2012).
Orso, A., Apiwattanapong, T. and Harrold, M. J.: Leveraging Field Data for Impact Analysis and Regression
Testing, Proc. FSE, pp. 128–137 (2003).
Orso, A., Apiwattanapong, T., Law, J., Rothermel, G.
and Harrold, M. J.: An Empirical Comparison of Dynamic Impact Analysis Algorithms, Proc. ICSE, pp.
491–500 (2004).
Perscheid, M., Felgentreﬀ, T. and Hirschfeld, R.: Follow the path: Debugging state anomalies along execution
histories, Proc. CSMR-WCRE, pp. 124–133 (2014).
Ren, X., Ryder, B., Stoerzer, M. and Tip, F.: Chianti:a change impact analysis tool for Java programs, Proc.
ICSE, pp. 664–665 (2005).
Weiser, M.: Program Slicing, Proc. ICSE, pp. 439–449(1981).
Xin, B. and Zhang, X.: Eﬃcient Online Detection of Dynamic Control Dependence, Proc. ISSTA, pp. 185–195(2007).
Yin, Z., Yuan, D., Zhou, Y., Pasupathy, S. and Bairavasundaram, L.: How Do Fixes Become Bugs?, Proc.
ESEC/FSE, pp. 26–36 (2011).
দଜढ़ಙɼੴඌɹོɼࣛౡɹ༔ɼҪ্ࠀ࿠ɿREMViewer:ෳ਺ճ࣮ߦ͞Εͨ Java ϝιουͷ࣮ߦ‫ܦ‬࿏ՄࢹԽπʔϧɼίϯϐϡʔλιϑτ΢ΣΞɼ Vol. 32, No. 3, pp. 137–148(2015).

ࢀߟจ‫ݙ‬
[1]

[2]
[3]

[4]

[5]

Abramson, D., Chu, C., Kurniawan, D. and Searle, A.:
Relative debugging in an integrated development environment, Software Practice and Experience, Vol. 39,
No. 14, pp. 1157–1183 (2009).
Agrawal, H. and Horgan, J. R.: Dynamic Program Slicing, Proc. PLDI, pp. 246–256 (1990).
Cai, H. and Santelices, R.: A framework for costeﬀective dependence-based dynamic impact analysis,
Proc. SANER, pp. 231–240 (2015).
Cai, H., Santelices, R. and Xu, T.: Estimating the Accuracy of Dynamic Change-Impact Analysis Using Sensitivity Analysis, Proc. SERE, pp. 48–57 (2014).
Horwitz, S. and Reps, T.: The Use of Program Depen-c 2016 Information Processing Society of Japan

8