2012 28th IEEE International Conference on Software Maintenance (ICSM)
Configuration Selection Using Code Change Impact Analysis for Regression Testing ⌸㡈攨᰼솜艌⌸ 솜 愈岠 㡈램㡈⌸㡈 攨⌸ 슐攨 怼 솜슐⌸㡈龈攨 뵼㡈ㄼ龈램슐ㄼ슐 愈怴攨攨㡈ㄼ ㄼ슐ㄼ㡈岠 㡈ㄼ⌸⏄ 怴㞬龈愈쿨 뚼 ⌸㡈攨稄솜⌸ 솜 㡈岠 㡈램㡈⌸㡈 攨⌸ 슐攨 녈 솜슐㡈岠攨 Abstract— Configurable systems that let users customize system behaviors are becoming increasingly prevalent. Testing a configurable system with all possible configurations is very expensive and often impractical. For a single version of a configurable system, sampling approaches exist that select a subset of configurations from the full configuration space for testing. However, when a configurable system changes and evolves, existing approaches for regression testing select all configurations that are used to test the old versions for testing the new version. As demonstrated in our experiments, this retest-all approach for regression testing configurable systems turns out to be highly redundant. To address this redundancy, we propose a configuration selection approach for regression testing. Formally, given two versions of a configurable system, S (old) and S' (new), and given a set of configurations CS for testing S, our approach selects a subset CS' of CS for regression testing S'. Our study results on two open source systems and a large industrial system show that, compared to the retest-all approach, our approach discards 15% to 60% of configurations as redundant. Our approach also saves 20% to 55% of the regression testing time, while retaining the same fault detection capability and code coverage of the retest-all approach. Keywords- Configurable System Testing; Configuration Selection; Regression Testing; Static Program Slicing; Change Impact Analysis.
怼 怼 ፠㞬怴 怼፠ 솜슐 㡈슐 슐攨 뵼㡈ㄼ 㡈슐 ㄼ岠攨ㄼ ㄼ슐슐ㄼ ⌸㡈 ⌸ 攨솜 㡈⌸램 㡈岠⌸⌸⌸ㄼ슐 슐攨 㡈슐 ㄼ 㡈⌸⌸램 攨 岠攨 ⌸⏄솜ㄼ 攨 岠솜슐攨⌸ㄼ ⌸ 㞬슐ㄼ슐configure ㄼ슐攨 뵼㡈ㄼ램슐ㄼ⌸ ⏄ ㄼ⌸攨뵼 㡈⌸岠㡈⌸攨 ㄼ ㄼㄼ 岠ㄼ슐 㡈 ⏄⌸ ⏄ 攨 ㄼ㡈솜ㄼ슐 㡈 㡈ㄼ 岠攨슐ㄼ⌸岠 攨 ㄼ㡈솜ㄼ슐 㡈攨⌸ 램 ㄼ슐램슐ㄼㄼ 㡈⌸攨 怼⌸슐뵼ㄼ瀜 攨뵼 㡈ㄼ슐⌸ ⏄㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ솜 ㄼ ⌸ ㄼㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼ 攨슐ㄼ슐⌸ ㄼㄼ 㡈솜슐枼侈侈댨枼侈댨枼⟀댨 ㄼ 岠ㄼ ⌸ ⌸슐 ㄼ슐⌸㡈ㄼ 攨 ㄼ슐 㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ ㄼ 㡈솜슐⌸ㄼ램뵼⌸ 㡈攨슐슐⌸ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐솜ㄼ 㡈솜슐⌸ㄼ ㄼ슐⌸ ⏄ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸슐 솜슐솜㡈램 ⌸ ㄼ㡈슐⌸ㄼ 枼侈댨 ㄼ岠ㄼ 뵼攨瀜 㡈슐 슐 攨뵼 㡈 㡈攨㡈岠 ㄼ슐 슐솜岠 㡈슐 Combinatorial Interaction Testing怴怼 荬岠㡈 ⌸攨ㄼ ㄼ岠攨슐舜ㄼ ㄼ岠⌸ㄼ ㄼ슐슐 攨 ㄼ슐⌸ ⏄ 㡈 슐⌸ ⏄ㄼ ㄼ슐⌸攨 攨 㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ 램 sampling ㄼ 솜岠攨 ⌸⏄솜㡈⌸攨 슐㡈岠ㄼ枼侈侈댨枼侈⟀댨枼侈댨枼⟀댨ㄼS ㄼ㡈ㄼ슐⌸攨 攨 㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ뵼⌸ 㡈ㄼ슐슐솜⌸ㄼT㡈 ㄼCSㄼ㡈슐㡈ㄼ슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨ㄼ슐⌸ ⏄S뵼 ⌸岠 ⌸슐 ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 怴怼 㡈攨㡈岠 ፠솜 ㄼ⌸攨솜슐 뵼攨瀜 枼侈쿨댨 슐 攨뵼슐 㡈 솜
⌸ ⏄ ㄼ 솜 ㄼ슐 슐솜⌸ㄼ T 솜 ㄼ ㄼ㡈岠 岠攨 ⌸⏄솜㡈⌸攨 ⌸ CS 攨 ㄼ슐⌸ ⏄ S ⌸슐 ⌸⏄ 램 ㄼ솜 㡈 攨 㡈ㄼ슐슐 ⌸슐ㄼ솜 㡈 岠램攨솜ㄼ⌸攨솜슐뵼攨瀜⌸ 攨솜岠ㄼ㡈test
case selection 㡈攨㡈岠 ⏄⌸ㄼ 㡈 ㄼ ⌸슐⌸ ⏄ㄼ슐슐솜⌸ㄼT솜슐ㄼ 攨 ㄼ슐⌸ ⏄ S 솜 ㄼ 㡈 岠攨 ⌸⏄솜㡈⌸攨 C∈ CS 攨솜 ㄼ⌸攨솜슐 㡈攨㡈岠 枼侈쿨댨 슐ㄼㄼ岠슐 㡈 슐솜슐ㄼ T’⊆T 攨 ㄼ슐⌸ ⏄ S 솜 ㄼ 㡈 ⌸ ㄼㄼ 岠攨 ⌸⏄솜㡈⌸攨 C’∈CS 攨뵼ㄼㄼ ㄼ岠 㡈ㄼ ⏄ㄼ슐攨 ㄼ슐⌸ ⏄㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ 㡈슐攨ㄼ슐⌸슐슐⌸ 㡈ㄼ 슐㡈⏄ㄼ슐 攨 ㄼ슐攨 뵼㡈ㄼ⌸ ㄼ岠램岠ㄼ 뵼 ㄼㄼ
ㄼ뵼ㄼㄼ㡈슐ㄼ攨 ㄼ슐램슐ㄼㄼ 攨ㄼ㡈슐S’荬솜슐ㄼregression tested ㄼ CS’ ㄼ ㄼ슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈 뵼⌸ ㄼ솜슐ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ S’ ዼ ⌸슐⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ㄼ슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 슐ㄼㄼ岠 㡈 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈 㡈ㄼ 솜슐ㄼ 攨 ㄼ슐 ㄼ 攨 ㄼ슐⌸攨 슐 攨 ㄼ슐⌸ ⏄ ㄼ ㄼ뵼 ㄼ슐⌸攨 ⌸ㄼCS’蒤CS龈솜岠 retest-all岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 攨뵼ㄼㄼ 岠㡈 ㄼㄼ ㄼ 슐⌸ㄼ ⌸ 슐⌸ㄼ攨 솜슐⌸ ⏄ ㄼ怴怼 슐㡈⌸ ⏄㡈攨㡈岠 攨슐ㄼㄼ岠㡈슐솜슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ 솜 岠攨 ⌸⏄솜㡈⌸攨 슐㡈岠ㄼ 攨 ㄼ 㡈ㄼ 㡈슐 ㄼ攨 슐㡈ㄼ ⌸ 攨솜 ㄼ⌸攨솜슐 뵼攨瀜 枼侈댨 뵼 ㄼ ㄼ 怴怼 슐㡈ㄼ CS 뵼㡈슐 솜슐ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 㡈 㡈⏄ㄼ 슐램슐ㄼㄼ㡈岠 岠攨 ⌸⏄솜㡈⌸攨 ㄼ稄솜⌸ㄼㄼ⌸⏄ 攨솜슐攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐㡈 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄攨 㡈岠攨 ⌸⏄솜㡈⌸攨 슐⌸ ㄼ怴怼 슐㡈ㄼCSㄼ稄솜⌸ㄼ㡈攨슐 ㄼㄼ뵼ㄼㄼ瀜슐
攨 㡈ㄼ슐슐 ⌸슐 攨ㄼ 攨솜 ㄼ⌸攨솜슐 뵼攨瀜 枼侈댨 ⌸ 攨솜岠ㄼ㡈configuration prioritization㡈攨㡈岠 攨ㄼ攨ㄼ ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐攨 ㄼㄼ⏄ㄼ슐슐⌸攨 ㄼ슐ㄼ ㄼ⌸攨⌸⌸㡈⌸攨 㡈攨㡈岠 ⌸攨ㄼ슐 ㄼ rate 攨 㡈솜 ㄼㄼ岠⌸攨 솜⌸ ㄼ⌸ ㄼ ⌸슐岠㡈슐 ㄼ솜 㡈 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼㄼ岠슐 㡈 ㄼ 㡈솜슐 ㄼㄼ岠ㄼ 램 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 怼 ⌸슐 㡈ㄼ 뵼ㄼ ⌸ 攨솜岠ㄼ 㡈 configuration selection 㡈攨㡈岠 㡈 슐ㄼㄼ岠슐 㡈 슐㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 CS 뵼 ⌸ㄼ슐⌸ㄼ㡈⌸ ⌸ ⏄ ㄼ fault detection capability ㄼ㡈슐솜ㄼ 램 ㄼ 솜ㄼ 攨 ㄼㄼ岠ㄼ 㡈솜슐荬 攨 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 攨㡈램 ⏄⌸ㄼ 뵼攨ㄼ슐⌸攨 슐攨 㡈 岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ S攨荬㡈 S' ㄼ뵼荬 㡈 ⏄⌸ㄼ 㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 CS 攨 ㄼ슐⌸ ⏄ S 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐 㡈 슐솜슐ㄼ CS' ⊆ CS 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ S' ፠솜 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 솜슐ㄼ슐슐⌸岠⌸ ⏄舜㡈슐ㄼ岠攨ㄼ岠 㡈 ⏄ㄼ⌸㡈岠㡈 㡈램슐⌸슐枼댨攨㡈슐슐⌸슐 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 愈슐 ㄼ攨 슐㡈ㄼ ⌸ 攨솜 슐솜램 龈ㄼ岠⌸攨 怼怴荬 攨솜 㡈攨㡈岠 岠㡈 㡈⏄ㄼ램 ㄼ솜岠ㄼ ㄼ ㄼ솜 㡈 岠램攨 ㄼㄼㄼ슐舜㡈㡈攨㡈岠 뵼⌸ 攨솜 슐㡈岠⌸ ⌸岠⌸ ⏄ ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램
ㄼ 슐㡈ㄼ 攨 ㄼ 㡈 ⌸ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ ㄼ슐⌸ ⏄ ⌸슐 슐솜㡈⌸ㄼ⌸ 愈ዼ怼ޜ愈⌸ ㄼ㡈ㄼ⌸ ⌸岠㡈ㄼ슐 㡈 ㄼ ⌸攨⌸⌸㡈⌸攨 㡈攨㡈岠 ㄼ슐㡈ㄼ 攨㡈⌸岠㡈ㄼ 攨슐⌸ ⏄ㄼㄼ슐⌸攨 슐램슐ㄼ슐 愈슐 슐 攨뵼 ⌸ ⌸슐 㡈ㄼㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 㡈슐 ㄼㄼ ㄼ ㄼ 슐⌸ㄼ램 ㄼ슐ㄼ㡈岠 ㄼ 㡈 ㄼ ㄼ슐 岠㡈슐ㄼ ㄼㄼ 枼侈댨枼댨枼㷤댨 뵼 ㄼㄼ㡈슐 ㄼ 攨ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 㡈 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ㄼㄼ 㡈슐 ㄼ岠ㄼ⌸ㄼ ㄼ램 ㄼ슐슐 㡈ㄼ ⌸攨 ፠솜 ㄼ⌸攨솜슐뵼攨瀜枼댨㡈 ㄼ㡈攨㡈岠 攨攨슐ㄼ⌸ ⌸슐㡈ㄼ ⌸⏄ ⌸⏄ ㄼ⌸ ㄼ㡈ㄼ荬㡈ㄼ슐슐ㄼ슐 ⌸슐㡈岠瀜
쿨舜侈舜쿨㷤舜㷤侈舜㷤껤侈껤㷤侈艴侈怼ዼዼዼ
129
2012 28th IEEE International Conference on Software Maintenance (ICSM)
愈ዼ怼
ዼ龈 愈 ዼ፠ ዼ愈 怼怴፠ 怼壌㞬 愈ዼ龈 俸龈 ዼ艌 ዼ龈 怼壌
Single Version Testing
Regression Testing
Selection
枼侈侈댨枼侈⟀댨枼侈댨枼⟀댨
Focus of this paper
Prioritization
愈
枼侈댨
Selection
枼侈쿨댨
枼댨枼㷤댨㡈
Prioritization
愈
枼侈댨㡈
Problems
Configuration Level
Test Case Level
㡈 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ㄼ岠 ⌸稄솜ㄼ슐㡈 ㄼㄼ슐岠㡈슐ㄼ ㄼㄼ㡈ㄼ㡈⌸ㄼ攨 㡈ㄼ舜岠攨 ⌸⏄솜㡈⌸攨 㡈슐⌸슐 攨 岠攨 ⌸⏄솜㡈ㄼ슐攨 뵼㡈ㄼ슐램슐ㄼ
፠ㄼ㡈攨솜㡈ㄼ㡈瀜ㄼ슐 ㄼ 攨攨뵼⌸ ⏄岠攨 ⌸솜⌸攨 슐 · ·
演ㄼ⌸ 攨솜岠ㄼ ㄼ ⌸슐岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ슐 演ㄼㄼ㡈솜㡈ㄼ攨솜㡈攨㡈岠 攨 뵼攨攨ㄼ 슐攨솜岠ㄼ슐램슐ㄼ슐 㡈 㡈㡈⏄ㄼ⌸ 솜슐⌸㡈슐攨 뵼㡈ㄼ슐램슐ㄼ፠솜슐솜램ㄼ슐솜슐 슐 攨뵼 㡈 岠攨㡈ㄼ 攨 ㄼ retest-all 㡈攨㡈岠 攨솜 㡈攨㡈岠 ⌸슐岠㡈슐 侈⟀ ﵈攨 ﵈岠攨 ⌸⏄솜㡈⌸攨 슐 㡈슐 ㄼ솜 㡈 㡈 岠㡈 슐㡈ㄼ ﵈攨 ⟀⟀ ﵈攨 ㄼ ㄼ슐⌸ ⏄ ⌸ㄼ뵼 ⌸ㄼㄼ㡈⌸ ⌸ ⏄ ㄼ슐㡈ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 㡈 岠攨ㄼ岠攨ㄼ㡈⏄ㄼ攨 ㄼㄼㄼ슐舜㡈㡈攨㡈岠
ㄼㄼ슐 攨 ㄼ㡈ㄼ ⌸슐 攨⏄㡈 ⌸ㄼ 㡈슐 攨攨뵼슐 龈ㄼ岠⌸攨 怼怼 ㄼ슐ㄼ 슐 ㄼ 㡈岠瀜⏄攨솜 ㄼ稄솜⌸ㄼ 攨 솜 ㄼ슐㡈 ⌸ ⏄ 攨솜 㡈攨㡈岠 龈ㄼ岠⌸攨 怼怼怼 ㄼ슐岠⌸ㄼ슐 攨솜 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 솜슐⌸ ⏄ 㡈 ⌸솜슐㡈⌸ㄼ ㄼ 㡈ㄼ ㄼ 슐솜램 ㄼ슐⌸⏄ 㡈 ㄼㄼ슐솜슐㡈ㄼㄼ슐ㄼ ㄼ⌸ 龈ㄼ岠⌸攨 怼 ⌸ 㡈램 龈ㄼ岠⌸攨 ⌸슐岠솜슐슐ㄼ슐 ㄼㄼ㡈ㄼ⌸ㄼ㡈솜ㄼ㡈 龈ㄼ岠⌸攨 怼 岠攨 岠솜ㄼ슐 攨솜㡈ㄼ뵼⌸ 攨⌸ ㄼ슐攨 솜솜ㄼ뵼攨瀜 怼怼 愈怴瓤壌 ፠㞬愈፠ 愈 怼፠龈 怼 ⌸슐 슐ㄼ岠⌸攨 뵼ㄼ 攨⌸ㄼ ㄼ 㡈슐⌸岠 㡈岠瀜⏄攨솜 攨 岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ슐龈ㄼ岠⌸攨 怼怼愈荬㡈 岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ ㄼ슐⌸ ⏄龈ㄼ岠⌸攨 怼怼荬㡈⌸岠솜㡈램 configuration generation 솜슐⌸ ⏄ ㄼ怴攨⌸ 㡈攨⌸㡈怼 ㄼ㡈岠⌸攨 ㄼ슐⌸ ⏄怴怼 荬슐㡈⌸ ⏄ 㡈攨㡈岠 枼댨枼侈侈댨枼侈⟀댨⌸슐ㄼ슐岠⌸ㄼ龈ㄼ岠⌸攨 怼怼侈荬荬演ㄼ㡈슐攨 ⌸ 攨솜岠ㄼstatic program slicing龈ㄼ岠⌸攨 怼怼怴荬뵼 ⌸岠 ⌸슐솜슐ㄼ 램攨솜 㡈攨㡈岠 攨 㡈 㡈램⌸ ⏄ ㄼ⌸㡈岠 攨 岠攨ㄼ 岠 㡈 ⏄ㄼ슐
ㄼ 攨㡈⌸攨 슐 ⌸ 攨솜岠ㄼ ⌸ ⌸슐 슐ㄼ岠⌸攨 뵼⌸ ㄼ 솜슐ㄼ 攨솜⏄ 攨솜 ㄼㄼ슐攨 ㄼ㡈ㄼ A. Configurable Systems and Configurations 愈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ 㡈슐 㡈⌸攨솜슐 岠攨 ⌸⏄솜㡈ㄼ options 㡈 岠攨 攨 ㄼ 슐램슐ㄼ슐 ㄼ ㄼ岠솜⌸攨 ㄼ 슐ㄼ岠⌸ ⌸岠 ㄼ ㄼ岠솜⌸攨 攨 ㄼ 슐램슐ㄼ ㄼㄼ 슐 攨 ㄼ 㡈岠솜㡈 values 슐솜⌸ㄼ 攨 ㄼ슐ㄼ 攨⌸攨 슐 攨 ㄼ 㡈ㄼ Internet Explorer (IE) 㡈 攨솜㡈 뵼ㄼ攨뵼슐ㄼ⌸슐㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ 怼 IE솜슐ㄼ슐 岠㡈 슐ㄼㄼ岠 ⌸ ㄼㄼ 㡈솜ㄼ슐 攨 슐ㄼ⌸ ⏄슐荬 攨 ㄼ岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 privacy 攨allow all cookies攨block all cookies 壌⌸ㄼ 㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ S 뵼ㄼ 솜슐ㄼ S 攨 ㄼ 攨ㄼ 攨 ㄼ岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼS㡈 ⌸슐슐攨솜岠ㄼ岠攨ㄼ荬ㄼ솜슐ㄼ 攨ㄼ ㄼ슐ㄼ攨 m岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐램P蒤뚼P1, P2, P3, …, Pm녈 愈 㡈⌸岠솜㡈 㡈슐슐⌸⏄ ㄼ 攨 㡈솜ㄼ슐 攨 ㄼ㡈岠 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 攨슐㡈configuration instanceㄼ 攨ㄼ㡈슐C怼 ⌸슐 㡈ㄼ 뵼ㄼ 솜슐ㄼ ㄼ ㄼ 岠攨 ⌸⏄솜㡈⌸攨 㡈 岠攨 ⌸⏄솜㡈⌸攨
130
⌸ 슐㡈 岠ㄼ⌸ ㄼ岠 㡈 ⏄ㄼ㡈램 攨ㄼ㡈岠 Pi ㄼPi ㄼ ㄼ 솜ㄼ 攨 㡈솜ㄼ슐 㡈 ㄼ 솜슐ㄼ슐 岠㡈 岠 攨攨슐ㄼ 攨 ⌸슐 攨⌸攨 愈岠岠攨⌸ ⏄램 ㄼ㡈岠 攨슐슐⌸ㄼ 㡈솜ㄼ 攨 攨⌸攨 Pi ⌸슐ㄼ 攨ㄼ㡈슐 pij 뵼 ㄼㄼ j ∈ 枼侈 Pi 댨 攨 ㄼ㡈岠 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 Pi ㄼ 岠 攨슐ㄼ 攨 뚼pij j ∈ 枼侈 Pi 댨녈 ㄼㄼ슐ㄼ ㄼ 㡈솜ㄼ 㡈슐슐⌸⏄ ㄼ 攨 Pi ⌸ 岠攨 ⌸⏄솜㡈⌸攨 C ㄼ 岠ㄼ ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼC岠㡈 ㄼㄼㄼ슐ㄼ ㄼ램 ㄼ슐ㄼ뚼 ꄰ 녈愈 岠攨ㄼ岠⌸攨 攨 CS蒤k슐솜岠 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐뚼C1C2C3 ꄰCk녈솜슐ㄼ 攨ㄼ슐⌸ ⏄S⌸슐ㄼ 攨ㄼ㡈슐CS B. Configurable System Testing ዼ ㄼ岠⌸ㄼ램ㄼ슐⌸ ⏄㡈岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼㄼ稄솜⌸ㄼ슐 㡈 ㄼ 슐램슐ㄼ ⌸슐 ㄼ슐ㄼ 뵼⌸ ⌸슐 ㄼ슐 슐솜⌸ㄼ 솜 ㄼ ⌸ ㄼㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 枼侈侈댨枼侈댨枼⟀댨 ㄼ 岠ㄼ 㡈攨㡈岠 ㄼ슐 攨 ㄼ슐⌸ ⏄ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ슐 岠攨 슐⌸ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈 ㄼ슐 岠㡈슐ㄼ슐 演⌸ 솜 ㄼ슐 攨 ㄼㄼ 攨솜슐㡈 슐 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ 㡈岠⌸岠ㄼ ⌸ ⌸슐 攨 攨슐슐⌸ㄼ 攨ㄼ 㡈솜슐⌸ㄼ램ㄼ슐 㡈 슐램슐ㄼ뵼⌸ 㡈攨슐슐⌸ㄼ岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 攨㡈ㄼ슐슐 ⌸슐 攨ㄼ ㄼ슐⌸ ⏄ 㡈攨㡈岠 ㄼ슐 솜슐ㄼ configuration generation 攨 슐㡈ㄼ 㡈 슐솜슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 攨 ㄼ슐ㄼ攨 㡈攨슐슐⌸ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐 攨ㄼ슐⌸ ⏄ 怴攨⌸ 㡈攨⌸㡈 怼 ㄼ㡈岠⌸攨 ㄼ슐⌸ ⏄ 怴怼 荬 枼댨 ⌸슐 㡈 슐램슐ㄼ㡈⌸岠㡈 㡈 㡈솜攨㡈ㄼ㡈攨㡈岠 攨 ㄼ岠攨 ⌸⏄솜㡈⌸攨 ⏄ㄼ ㄼ㡈⌸攨 攨岠ㄼ슐슐 怴怼 㡈슐 ㄼㄼ 슐 攨뵼 攨 ㄼ 슐솜ㄼ⌸攨 攨 攨 㡈 攨 㡈 ㄼ 㡈솜슐⌸ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ⏄ㄼ ㄼ㡈⌸攨 㡈攨㡈岠 ㄼ슐 枼侈댨枼侈댨 ዼ⌸⌸岠㡈 슐솜⌸ㄼ슐 枼侈侈댨枼侈⟀댨 攨 ㄼ㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ슐 㡈ㄼ 슐 攨뵼 㡈 怴怼 ⌸슐 ㄼ ㄼ岠⌸ㄼ ⌸ ⏄ㄼ ㄼ㡈⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ슐⌸ ⏄ ㄼ㡈슐솜ㄼ 램 ㄼ 㡈솜 ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 俸⌸㡈 ㄼ 㡈 枼⟀댨 㡈ㄼ 슐 攨뵼 㡈 岠攨 ⌸⏄솜㡈⌸攨 슐 ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 怴怼 㡈攨㡈岠 岠㡈 ㄼㄼ岠 岠攨 ⌸⏄솜㡈⌸攨 舜ㄼㄼ ㄼ 㡈⌸솜ㄼ슐 㡈 岠 㡈㡈岠ㄼ⌸ㄼ 㡈솜슐 攨ㄼ ㄼ ⌸岠⌸ㄼ 램 岠攨㡈ㄼ 攨 ㄼ ㄼ 㡈솜슐⌸ㄼ ⏄ㄼ ㄼ㡈⌸攨 㡈攨㡈岠 ㄼ슐 怴怼 ⌸슐 㡈슐攨 㡈 뵼⌸ㄼ램 솜슐ㄼ ㄼ岠 ⌸稄솜ㄼ ⌸ ㄼ ⌸ 솜슐램枼댨 1) The CIT Approach 攨 㡈 ⏄⌸ㄼ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ ㄼ 怴怼 㡈攨㡈岠 攨ㄼ슐⌸슐岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐㡈 ㄼ⌸㡈슐슐攨岠⌸㡈ㄼ㡈솜ㄼ슐 㡈 岠攨⌸ ㄼ슐 ㄼ 슐램슐ㄼ㡈⌸岠㡈램슐攨 㡈 㡈 岠攨⌸ 㡈⌸攨 슐 攨 㡈솜ㄼ슐 攨 ㄼ㡈岠 t舜뵼㡈램t 侈荬 岠攨⌸ 㡈⌸攨 攨 攨⌸攨 슐㡈ㄼ ㄼ슐ㄼ 攨⏄ㄼ ㄼ 枼댨 ㄼㄼ t⌸슐岠㡈ㄼ ㄼ슐ㄼ ⏄ 攨 ㄼ슐⌸ ⏄ 㡈 ㄼ岠㡈슐ㄼ뵼 ㄼ t蒤⌸슐岠㡈ㄼpair-wiseㄼ슐⌸ ⏄
愈ዼ怼怼슐 攨뵼슐㡈㡈⌸㡈슐ㄼ攨 岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐㡈 ㄼ⌸ 㡈솜ㄼ슐 攨 ㄼ ㄼ ㄼ⌸攨 vim 㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ
ㄼㄼ㡈ㄼ 攨솜 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 P蒤뚼P1 P2 P3 P4녈 P1 P2㡈 P3 㡈ㄼ⌸ 㡈램攨⌸攨 슐뵼⌸ 뵼攨攨슐슐⌸ㄼ㡈솜ㄼ슐荬⌸ㄼ P1蒤 P2蒤 P3蒤P4 㡈슐 ㄼㄼ攨슐슐⌸ㄼ㡈솜ㄼ슐⌸ㄼP4蒤㷤荬 뵼⌸ p41蒤 p42蒤㡈 p43蒤쿨愈攨㡈攨 P1ӔP2ӔP3ӔP4蒤 ӔӔӔ㷤蒤 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 㡈ㄼ 攨슐슐⌸ㄼ ዼ 㡈솜슐⌸ㄼ램ㄼ슐⌸ ⏄ 㡈 攨슐슐⌸ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 ⌸슐 ⌸ ㄼ㡈슐⌸ㄼ 攨 슐램슐ㄼ슐 ⌸ 㡈岠⌸岠ㄼ 㡈 攨ㄼ 㡈 ⌸슐 㡈ㄼ슐슐ㄼ램 ㄼ怴怼 㡈攨㡈岠
愈ዼ 怼怼怼 슐 攨뵼슐 ㄼ 슐ㄼ CS蒤뚼C1 C2 ꄰ C6녈 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 㡈⌸舜뵼⌸슐ㄼ 怴怼 㡈攨㡈岠 뵼 ⌸岠 ㄼ稄솜⌸ㄼ슐 㡈㡈攨슐슐⌸ㄼ㡈솜ㄼ岠攨⌸ 㡈⌸攨 슐攨 ㄼ㡈岠 㡈⌸攨 攨⌸攨 슐攨㡈램4C2蒤㡈⌸슐攨 攨⌸攨 슐荬슐 攨솜㡈ㄼ㡈 ⌸ 㡈ㄼ㡈슐攨 ㄼ攨 ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐
2012 28th IEEE International Conference on Software Maintenance (ICSM)
攨ㄼ 㡈ㄼ ㄼㄼ㡈ㄼP1ӔP2蒤㡈솜ㄼ岠攨⌸ 㡈⌸攨 슐 攨 ㄼ 㡈⌸ P1蒤background P2蒤autoread荬 뵼 ⌸岠 㡈ㄼ dark ar荬 dark noar荬 light ar荬 㡈 light noar荬 怼 愈ዼ 怼怼怼 ㄼ슐 㡈ㄼ攨 ㄼ슐 ㄼ 攨ㄼ ㄼ슐ㄼ 攨솜 㡈솜ㄼ岠攨⌸ 㡈⌸攨 슐 ዼ㡈岠 攨 ㄼ슐ㄼ 㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 슐 攨솜 ㄼ 岠攨ㄼㄼ 램 㡈 ㄼ㡈슐 攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ㄼ 㡈솜ㄼ 㡈⌸ 攨 dark ar荬 ⌸슐 岠攨ㄼㄼ⌸ C1lightnoar荬⌸슐岠攨ㄼㄼ⌸ C2darknoar荬⌸슐 岠攨ㄼㄼ⌸ C3 㡈 lightar荬⌸슐岠攨ㄼㄼ⌸ C4 怼 ⌸슐 ㄼ㡈슐램 攨 ㄼ⌸ 램 攨 愈ዼ 怼怼怼 㡈 攨 ㄼ 攨 ㄼ ⟀ 㡈⌸슐 background tabstop荬 background textwidth荬 autoread tabstop荬autoread textwidth荬 㡈 tabstop textwidth荬㡈 㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 㡈ㄼ 岠攨ㄼㄼ ⌸ 㡈 ㄼ㡈슐 攨 ㄼ 攨 ㄼ 슐⌸ 岠攨 ⌸⏄솜㡈⌸攨 슐 솜 㡈슐 슐 攨뵼 ⌸ 攨솜 ㄼ⌸攨솜슐 뵼攨瀜 枼侈댨 ㄼㄼ ⌸ ㄼ 솜ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐⏄ㄼ ㄼ㡈ㄼ램 ㄼ㡈⌸舜 뵼⌸슐ㄼ怴怼 㡈攨㡈岠 ⌸슐솜岠 슐㡈ㄼ 㡈 ㄼ 솜ㄼ 攨 㡈 攨슐슐⌸ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ ⌸슐 슐⌸ ㄼ램 ㄼ ㄼ 슐⌸ㄼ 㡈 ㄼ솜 㡈 㡈슐攨솜ㄼ ㄼ⌸ㄼ 슐ㄼ攨 슐㡈ㄼ⌸ 龈ㄼ岠⌸攨 怼怴荬 攨 ㄼ솜 㡈 岠攨 ⌸⏄솜㡈⌸攨 슐 ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 怴怼 㡈攨㡈岠 ㄼ슐ㄼ岠⌸㡈램⌸ 㡈ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ㄼ ⌸攨 ㄼ 뵼⌸ ⌸ㄼ㡈 ㄼ슐攨솜岠ㄼ岠攨 슐㡈⌸ 슐
愈ዼ怼怼
ㄼ S ㄼ 㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ 㡈 슐솜攨슐ㄼ 㡈 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ ㄼ攨ㄼ슐 攨 S 攨 㡈 ㄼ뵼 ㄼ슐⌸攨 S’
ㄼ슐攨솜岠ㄼ岠攨ㄼ 攨 S’⌸슐슐 攨뵼 ⌸ ⌸⏄솜ㄼ侈ㄼ솜슐㡈슐슐솜ㄼ 㡈攨 램⌸ ㄼ쿨 㡈슐岠 㡈 ⏄ㄼㄼ뵼ㄼㄼ ㄼ슐⌸攨 슐S㡈 S’ㄼ ∆S, S’荬ㄼ 攨ㄼ ㄼ岠 㡈 ⏄ㄼ슐⌸ ㄼ岠攨ㄼㄼ뵼ㄼㄼ S㡈 S’怼 ⌸⏄솜ㄼ侈∆S, S’荬蒤뚼쿨녈ㄼimp(∆S, S’荬荬ㄼㄼ슐ㄼ ㄼ岠攨ㄼ 㡈⌸슐슐㡈⌸岠㡈램⌸㡈岠ㄼ램 ㄼ岠 㡈 ⏄ㄼ∆S, S’荬怼 S’ ㄼ 攨뵼㡈 슐⌸岠ㄼ 攨 ⌸ ㄼ 쿨 ⌸ 岠솜ㄼ슐 ⌸ ㄼ슐 쿨 侈 㡈 侈㷤 ⌸⏄ ⌸⏄ ㄼ⌸ ㄼ ⌸⏄솜ㄼ荬⌸ㄼimp(∆ S, S’荬荬蒤뚼쿨侈侈㷤녈 龈⌸ 岠ㄼ ㄼ⌸㡈岠攨 ㄼ岠 㡈 ⏄ㄼ岠攨ㄼ ⌸⌸㡈램⌸ 岠솜ㄼ슐 ㄼ 岠 㡈 ⏄ㄼ 岠攨ㄼ ⌸슐ㄼ ∆S, S’荬 ⊆ imp(∆ S, S’荬荬 攨 攨솜 ㄼ 㡈ㄼ 岠攨ㄼ ⌸ ⌸⏄솜ㄼ 侈 뵼ㄼ ㄼ㡈슐솜ㄼ ㄼ 岠 㡈 ⏄ㄼ 㡈 ⌸슐 ⌸㡈岠 㡈 ㄼ ⌸ ㄼ ⏄㡈 솜㡈⌸램 怼 ⌸슐 㡈ㄼ 攨뵼ㄼㄼ 뵼ㄼ ㄼ㡈슐솜ㄼ ㄼ 岠 㡈 ⏄ㄼ 㡈 ⌸슐 ⌸㡈岠 㡈 ㄼ 솜 岠⌸攨 ⏄㡈 솜㡈⌸램
怴፠ 怼壌㞬 愈ዼ፠ 怼፠龈愈愈㞬ዼ龈፠ VIM P1
P2
P3
P4
background
autoread
tabstop
textwidth
Options
Values of Options
㡈瀜
㡈
⌸⏄
攨㡈
侈
愈ዼ怼怼怼
쿨
怴፠ 怼壌㞬 愈 怼፠龈壌ዼዼ 愈 ዼ俸愈怼 舜演怼龈ዼ怴怼 ፠ VIM P1
P2
background
autoread
P3
P4
tabstop
textwidth
C1
㡈瀜
㡈
C2
⌸⏄
攨㡈
侈
쿨
C3
㡈瀜
攨㡈
侈
C4
⌸⏄
㡈
侈
C5
⌸⏄
㡈
C6
㡈瀜
攨㡈
쿨
C. Static Program Slicing 龈㡈⌸岠 攨⏄㡈 슐⌸岠⌸ ⏄ ⌸슐 ⌸ 攨솜岠ㄼ 램 演ㄼ⌸슐ㄼ 枼댨 ㄼ ㄼ슐 攨 ㄼ 岠攨솜㡈⌸攨 攨 program points 㡈 ㄼ ㄼ岠 攨 㡈ㄼ㡈 ㄼ岠ㄼ램㡈⏄⌸ㄼ 攨⏄㡈攨⌸ ㄼforward slice攨 㡈 攨⏄㡈 攨⌸ ⌸ 岠솜ㄼ슐 㡈 ㄼ 攨⏄㡈 攨⌸ 슐 ⌸ ㄼ 攨뵼㡈 岠攨 攨 攨뵼 㡈 ㄼ岠ㄼ 램 ㄼ 岠攨솜㡈⌸攨 攨 岠攨 ⌸⌸攨 㡈ㄼ슐㡈 ㄼ攨⏄㡈攨⌸ 攨⏄㡈攨⌸ 슐㡈ㄼ ㄼ 攨슐 㡈슐⌸岠 㡈⏄ㄼ 슐 攨 ㄼ 슐攨솜岠ㄼ 岠攨ㄼ 愈 攨⏄㡈 㡈램 岠攨 㡈⌸ 솜⌸ㄼ ⌸ㄼ슐㡈 ⌸ㄼ㡈램岠攨 㡈⌸ 솜⌸ㄼ 솜 岠⌸攨 슐 㡈 솜 岠⌸攨 㡈램 岠攨 㡈⌸ 솜⌸ㄼ ⌸ ㄼ슐 㡈 㡈 ⌸ ㄼ 㡈램 岠攨 㡈⌸ 솜⌸ㄼ 攨⏄㡈 攨⌸ 슐 愈 岠 㡈 ⏄ㄼ 攨 㡈 岠 㡈 ⏄ㄼ 攨岠瀜岠㡈 ㄼ岠攨 슐⌸ㄼㄼ㡈슐㡈슐ㄼ攨 攨⏄㡈攨⌸ 슐
⌸⏄솜ㄼ侈 ㄼ 攨뵼㡈슐⌸岠ㄼ攨 sum=0
怼怼怼
፠㞬 愈 ፠愈怴
怼 ⌸슐 슐ㄼ岠⌸攨 뵼ㄼ ㄼ슐岠⌸ㄼ 攨솜 㡈攨㡈岠 攨 슐ㄼㄼ岠⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ슐 怼 龈ㄼ岠⌸攨 怼怼怼愈 뵼ㄼ ㄼ슐岠⌸ㄼ ㄼ 攨ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 솜슐⌸ ⏄㡈슐⌸ㄼㄼ 㡈ㄼ뵼 ⌸岠 뵼⌸㡈슐攨ㄼ솜슐ㄼ攨 ⌸솜슐㡈ㄼ 攨솜 㡈攨㡈岠 怼 龈ㄼ岠⌸攨 怼怼怼 뵼ㄼ ㄼ슐岠⌸ㄼ ㄼ 㡈⌸攨솜슐 슐ㄼ슐⌸ 攨솜 㡈攨㡈岠 怼 龈ㄼ岠⌸攨 怼怼怼怴 뵼ㄼ 攨⌸ㄼ ㄼ⌸ㄼㄼ 㡈⌸攨 ㄼ㡈⌸슐攨 攨솜㡈攨㡈岠 A. Example and Problem Description 龈솜攨슐ㄼ S ⌸슐 㡈 슐⌸ㄼ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ 㡈슐 슐 攨뵼 ⌸ ⌸⏄솜ㄼ S 岠攨 㡈⌸ 슐 ㄼ⌸⏄ 솜 岠⌸攨 슐 f1 攨 f8 S 㡈슐 ㄼㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ㄼ P蒤뚼P1 P2 P3녈 愈슐 슐 攨뵼 ⌸
愈ዼ 怼 ㄼ㡈岠 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 ⌸슐 ⌸ 㡈램㡈 㡈램 ㄼ ㄼ⌸ ㄼ True 攨 False ⌸ㄼ P1蒤P2蒤P3蒤p11蒤p21蒤p31蒤True 㡈 p12蒤 p22蒤 p32蒤False. 愈 ⏄⌸ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 攨 슐램슐ㄼ S Pi 岠㡈 ㄼ 㡈ㄼ 攨 ⌸슐 岠攨ㄼ슐攨 ⌸ ⏄ configuration variables솜슐솜㡈램솜슐ㄼ攨ㄼ岠ㄼ⌸ㄼ ㄼ㡈솜ㄼ슐攨 ㄼ 攨⌸攨 슐 攨 ㄼ 솜슐ㄼ荬 ⌸ ㄼ 슐攨솜岠ㄼ 岠攨ㄼ 攨 S 怼 攨솜 ㄼ 㡈ㄼ ㄼ㡈岠 攨 ㄼ岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐P1P2㡈 P3㡈ㄼ 㡈ㄼ 攨 攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 㡈⌸㡈ㄼ 攨 ㄼ 슐㡈ㄼ 㡈ㄼ 솜 슐⌸⏄ ㄼ⏄攨㡈⌸ ㄼ⏄ㄼ슐P1P2㡈 P3⌸ ⌸ ㄼ슐攨荬⌸ ㄼ 슐攨솜岠ㄼ 岠攨ㄼ ㄼ슐ㄼ 岠攨 ⌸⏄솜㡈⌸攨 㡈⌸㡈ㄼ슐 㡈 ㄼ 岠ㄼ ㄼ⌸ 岠攨ㄼ슐攨 ⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 攨⌸攨 슐 岠攨 攨 ㄼ ⌸ ㄼㄼ ㄼ ㄼ岠솜⌸攨 슐攨 SㄼimpPi荬ㄼㄼ슐ㄼ ㄼ岠攨ㄼ⌸ S 㡈 ⌸슐 슐㡈⌸岠㡈램 ⌸㡈岠ㄼ 램 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 㡈⌸㡈ㄼ슐 岠攨ㄼ슐攨 ⌸ ⏄ 攨 Pi 愈슐 뵼ㄼ ㄼ㡈슐솜ㄼ ㄼ ⌸㡈岠 㡈 ㄼ 솜 岠⌸攨 ⏄㡈 솜㡈⌸램 impPi荬 ⌸슐 㡈 슐ㄼ 攨 솜 岠⌸攨 岠㡈슐 㡈攨 ⏄ ㄼ슐㡈⌸岠㡈 슐⌸ S 㡈㡈ㄼ⌸㡈岠ㄼ램Pi
ㄼ怴攨 攨 攨뵼壌㡈 怴 壌荬攨 S⌸슐슐 攨뵼 ⌸ ⌸⏄솜ㄼ 㷤怼 ㄼ怴 壌㡈㡈슐 ㄼ㡈攨뵼⌸ ⌸岠㡈ㄼ슐㡈 솜 岠⌸攨 岠㡈 攨
131
2012 28th IEEE International Conference on Software Maintenance (ICSM)
슐 攨뵼 ⌸ 攨솜ㄼ⌸攨솜슐뵼攨瀜枼侈댨⌸⌸슐슐⌸ㄼ램ㄼ ㄼ 슐⌸ㄼ攨 ㄼㄼ슐㡈 ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ ⌸ ⌸⌸슐㡈ㄼ㡈⌸ㄼ램슐㡈슐ㄼ ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 㡈⌸舜뵼⌸슐ㄼ 怴怼 㡈攨㡈岠 ㄼ슐ㄼ岠⌸㡈램 ⌸ 㡈 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ㄼ ⌸攨 ㄼ 뵼⌸ ⌸ㄼ 㡈 ㄼ슐攨솜岠ㄼ 岠攨 슐㡈⌸ 슐 솜 ㄼ攨ㄼ슐攨ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐⌸ 攨ㄼ ㄼ㡈램 슐ㄼ솜攨ㄼ ㄼ㡈뵼 ⌸岠 뵼⌸㡈슐솜슐㡈 ⌸㡈㡈⌸⌸攨 㡈ㄼ슐⌸ ⏄ 岠攨슐 ⌸ 㡈램 㡈슐 ㄼ攨 슐㡈ㄼ 램 攨솜 ㄼ ㄼ⌸ㄼ 㡈 ㄼ슐솜슐 ㄼ슐ㄼ ㄼ⌸ 龈ㄼ岠⌸攨 怼怴 ㄼㄼㄼ슐舜㡈㡈攨㡈岠 솜 슐攨솜攨 ㄼ ⌸⏄ 램ㄼ솜 㡈 ⌸ 攨슐岠㡈슐ㄼ슐⌸⌸슐攨슐슐⌸ㄼ攨㡈岠 ⌸ㄼㄼ ㄼ슐㡈ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램攨 ㄼㄼㄼ슐舜㡈㡈攨㡈岠 뵼⌸ 㡈슐㡈슐솜슐ㄼ攨 CS ㄼㄼ 攨ㄼ⏄⌸ㄼ 뵼攨ㄼ슐⌸攨 슐攨 㡈 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ S 㡈 S’ 㡈 ⏄⌸ㄼ 㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 CS 攨 ㄼ슐 ㄼ 攨 ㄼ슐⌸攨 S ㄼ 攨ㄼ 㡈ㄼ슐슐ㄼ 램 ⌸슐 㡈ㄼ ⌸슐 攨 슐ㄼㄼ岠 㡈 슐㡈 슐솜슐ㄼ CS’ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ CS 㡈 ㄼ㡈⌸ 슐 ㄼ 岠攨ㄼ 岠攨ㄼ㡈⏄ㄼ 㡈 ㄼ⏄ㄼ슐슐⌸攨 㡈솜 ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 攨 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠
ㄼ 㡈ㄼ 솜 岠⌸攨 슐 f2 㡈 f6 岠㡈 ㄼ 솜 岠⌸攨 f1 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 㡈⌸㡈ㄼ슐荬 ⌸⏄ ⌸⏄ ㄼ 램 슐 㡈ㄼ ⌸㡈攨 슐⌸ ㄼ怴 壌ㄼㄼ⌸ ㄼ뵼 ⌸岠 슐㡈⌸岠㡈 슐㡈ㄼ㡈瀜ㄼ ⌸ ㄼ슐攨솜岠ㄼ岠攨ㄼㄼㄼ ⌸ ⏄攨 ㄼ㡈솜ㄼ슐슐솜⌸ㄼ 攨 ㄼ ㄼㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 슐ㄼㄼ 슐㡈⌸岠 㡈 슐 e1 攨 e7荬 㡈ㄼ 攨슐슐⌸ㄼ⌸ 攨솜ㄼ 㡈ㄼ岠攨ㄼ怼 攨솜ㄼ 㡈ㄼ슐㡈⌸岠㡈 슐e1 e2 e5 e6 㡈 e7 㡈ㄼ ⌸㡈岠ㄼ 램 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 㡈⌸㡈ㄼ荬P1e6㡈 e7램P2㡈 e3㡈 e4 램P3 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
int f1(int x){ return ++x; } int f2(int x){ int s = -f1(x); return s; } int f6(int x){ int s = f1(x)%4; return s; } void f3(){ printf("f3"); } void f4(){ printf("f4"); } void f5(){ printf("f5"); } void f7(){ printf("f7"); } void f8(){ printf("f8"); } //configurable options unsigned int P1; unsigned int P2; unsigned int P3;
29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
void main(){ int x; if (x == 0) { if(P1) f1(1); else f2(2); } // end x==0 else { // x != 0 f3(); if(x < 0){ f5(); if(P3) f4(); // end x < 0 } //x > 0 else{ if(P1){ if(P2) f8(); else f7(); } else f6(6); } // end x > 0 }
// end x != 0
58. }
⌸⏄솜ㄼ ㄼ슐攨솜岠ㄼ岠攨ㄼ攨 攨솜ㄼ 㡈ㄼ岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼS
愈ዼ怼
怴፠ 怼壌㞬 愈ዼ፠ 怼፠龈愈愈㞬ዼ龈፠ S
Options
P1
P2
P3
True
True
True
False
False
False
Values of Options
攨 S 㡈 攨㡈 攨 P1ӔP2ӔP3蒤 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 㡈ㄼ攨슐슐⌸ㄼ演ㄼ㡈⌸ㄼ㡈⌸舜뵼⌸슐ㄼ怴怼 枼侈侈댨枼侈⟀댨攨⏄ㄼ ㄼ㡈ㄼ㡈 슐솜슐ㄼ攨 攨솜岠攨 ⌸⏄솜㡈⌸攨 슐 攨ㄼ슐⌸ ⏄ ㄼ⌸ ⌸⌸㡈ㄼ슐⌸攨 攨 ㄼ 슐램슐ㄼ S ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼ ⏄ㄼ ㄼ㡈ㄼ 램 㡈⌸舜뵼⌸슐ㄼ 怴怼 CS蒤뚼C1 C2 C3 C4녈 ⌸슐 슐 攨뵼 ⌸ 愈ዼ 攨솜⏄ 怴怼 ⌸슐 솜슐ㄼ ⌸ ⌸슐 ㄼ 㡈ㄼ 㡈 攨솜 ㄼ ㄼ⌸ㄼ 슐 ⌸ ⌸슐 㡈ㄼ 攨솜 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 攨ㄼ슐 攨 ㄼ稄솜⌸ㄼ 㡈 ㄼ 攨⌸⏄⌸ 㡈슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼ⏄ㄼ ㄼ㡈ㄼ램怴怼 ㄼ솜슐㡈슐슐솜ㄼ 㡈㡈 ㄼ뵼ㄼ슐⌸攨 攨 攨솜ㄼ 㡈ㄼ슐램슐ㄼ S’ 㡈슐ㄼㄼ ㄼㄼ㡈슐ㄼㄼ솜슐㡈슐攨㡈슐슐솜ㄼ 㡈攨 램 ㄼ슐攨솜岠ㄼ 岠攨ㄼ攨 ㄼ 솜 岠⌸攨 f1 㡈슐ㄼㄼ 攨⌸ ⌸ㄼㄼ뵼ㄼㄼ S 㡈 S’ ⌸ㄼ ∆S, S’荬蒤뚼f1녈 ㄼ 攨ㄼ 뵼ㄼ 슐ㄼㄼ瀜 攨 슐攨ㄼ ⌸ ⌸슐 㡈ㄼ⌸슐攨슐ㄼㄼ岠㡈슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐CS’ 攨CS蒤뚼C1C2 C3 C4녈 攨 ㄼ슐⌸ ⏄ S’ 愈 㡈뚰ㄼ 㡈攨㡈岠 ⌸슐 ㄼ retest-all 㡈攨㡈岠 뵼 ⌸岠 ⌸슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 S’ 뵼⌸ 㡈 攨솜 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ㄼ CS’ 蒤 CS ㄼ⌸㡈램㡈㡈 㡈⏄ㄼ攨 ㄼ ㄼㄼ슐舜㡈㡈攨㡈岠 ⌸슐 㡈CS’㡈岠 ⌸ㄼㄼ슐 ㄼㄼ슐攨슐슐⌸ㄼ岠攨ㄼ 岠攨ㄼ㡈⏄ㄼ㡈 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 攨뵼ㄼㄼ ㄼㄼ㡈ㄼ슐ㄼㄼ㡈⌸슐㡈㡈 㡈⏄ㄼ슐뵼⌸ ㄼㄼㄼ슐舜 㡈 㡈攨㡈岠 攨솜⏄ ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 㡈램 슐岠㡈ㄼ 攨 슐㡈슐램슐ㄼ슐슐솜岠 㡈슐 ㄼ攨 ㄼ⌸ 攨솜⌸솜슐㡈⌸ㄼㄼ 㡈ㄼ ㄼ ㄼㄼ슐舜㡈㡈攨㡈岠 ⌸슐⌸㡈岠⌸岠㡈 攨㡈⏄ㄼ⌸ 솜슐⌸㡈슐램슐ㄼ슐 뵼⌸ 솜 ㄼ슐 攨 ㄼㄼ 攨솜슐㡈 슐 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 愈슐
132
⌸⏄솜ㄼ㷤 ㄼ怴 壌攨 攨솜ㄼ 㡈ㄼ岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼS
愈ዼ
CS壌ዼዼ 愈 ዼ俸愈怼 舜演怼龈ዼ怴怼 ፠ ዼ龈 怼壌S
P1
P2
P3
C1
True
True
True
C2
True
False
False
C3
False
True
False
C4
False
False
True
Random-selection ⌸슐 㡈 攨 ㄼ 㡈뚰ㄼ 㡈攨㡈岠 攨 슐ㄼㄼ岠 㡈 슐솜슐ㄼ 攨 CS 攨뵼ㄼㄼ 㡈슐뵼ㄼㄼ攨 슐㡈ㄼ⌸ 龈ㄼ岠⌸攨 怼怴 ㄼ슐솜슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐슐ㄼㄼ岠ㄼ램 ㄼ㡈 攨舜슐ㄼㄼ岠⌸攨 㡈攨㡈岠 㡈램 攨 ㄼ㡈⌸ ㄼ ㄼ⏄ㄼ슐슐⌸攨 㡈솜 ㄼㄼ岠⌸攨
2012 28th IEEE International Conference on Software Maintenance (ICSM)
岠㡈㡈⌸⌸램攨 ㄼㄼㄼ슐舜㡈 㡈攨㡈岠 怼 ㄼ ㄼ 슐ㄼ岠⌸攨 뵼ㄼ ⌸ 攨솜岠ㄼ攨솜슐⌸岠⌸ ⏄舜㡈슐ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 B. Description of Our Approach 怼 ⌸슐㡈ㄼ뵼ㄼ㡈슐슐솜ㄼ 㡈P’ ㄼ슐ㄼ 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 攨 S’ ⌸슐 슐㡈ㄼ㡈슐 P ㄼ슐ㄼ 攨 岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐 攨 S ⌸ㄼ P’蒤P 怴攨 ⌸⏄솜㡈⌸攨 舜㡈뵼㡈ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ 岠㡈슐ㄼ슐 뵼 ㄼㄼ P’ ⌸슐 㡈 슐솜ㄼ슐ㄼ 攨 슐솜슐ㄼ 攨 P ⌸ 攨ㄼ슐 岠攨 ⌸⏄솜㡈⌸攨 augmentation 攨 reduction ㄼ슐⌸ㄼ슐 슐ㄼㄼ岠⌸攨 怴攨 ⌸⏄솜㡈⌸攨 㡈솜⏄ㄼ 㡈⌸攨 㡈 ㄼ솜岠⌸攨 ㄼ岠 ⌸稄솜ㄼ슐 㡈ㄼ 攨솜슐⌸ㄼ ㄼ슐岠攨ㄼ攨 ⌸슐㡈ㄼ㡈 뵼ㄼ㡈 攨ㄼ 攨ㄼ ㄼ 㡈슐㡈㡈攨 攨솜 솜솜ㄼ뵼攨瀜
ㄼ⏄攨㡈攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄⌸슐攨ㄼㄼ슐㡈 ㄼ岠 㡈 ⏄ㄼ슐 ⌸ ㄼ 岠攨ㄼ ⌸ㄼ ∆S,S’荬荬 㡈 ㄼ 岠攨ㄼ ⌸㡈岠ㄼ 램 ㄼ슐ㄼ 岠 㡈 ⏄ㄼ슐 ⌸ㄼimp(∆S,S’荬荬荬攨ㄼ 슐솜ㄼ 㡈 ㄼ岠攨ㄼ岠 㡈 ⏄ㄼ슐 攨 攨⌸ 攨솜岠ㄼ ㄼ뵼 㡈솜슐ㄼ⏄ㄼ슐슐⌸攨 㡈솜슐荬ㄼR ㄼ 攨ㄼ ㄼ岠攨ㄼ攨ㄼㄼ슐 ⌸ㄼ R=∆S,S’荬∪imp(∆S,S’荬蒤imp(∆S,S’荬 슐⌸ 岠ㄼ ∆S,S’荬⊆imp(∆S,S’荬荬 怴攨 슐ㄼ稄솜ㄼ 램 ㄼ ⏄攨㡈 攨 攨솜 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸슐 攨 슐ㄼㄼ岠 攨 램 攨슐ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 㡈 ㄼ 岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐荬 㡈⌸㡈岠 ㄼ슐㡈⌸岠㡈 슐⌸ R
ㄼ ⌸⏄ 舜ㄼㄼ 攨ㄼ⌸ㄼ뵼 攨 攨솜 㡈攨㡈岠 ⌸슐 슐 攨뵼 ⌸ ⌸⏄솜ㄼ ፠솜 㡈攨㡈岠 㡈슐 뵼攨 㡈⌸ 슐ㄼ슐 selecting configurable options 㡈 selecting configuration instances 㡈슐슐 攨뵼 램 ㄼ攨ㄼ攨 ㄼ슐⌸ ㄼ ⌸⏄솜ㄼ ⌸슐㡈攨 ⏄㡈 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ P’ 攨 S’ 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐㡈 슐솜슐ㄼ 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 P’sel ⊆P’ 㡈 ⌸㡈岠슐 ㄼ 슐㡈⌸岠㡈 슐⌸ R፠ 램 ㄼ岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐⌸ P’sel ㄼㄼ 攨 ㄼ ㄼㄼ슐ㄼ 攨 S’ 龈ㄼ岠攨 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐 㡈 슐솜슐ㄼ CS’ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 CS 㡈 뵼⌸ 岠攨ㄼ ㄼ 㡈⌸舜뵼⌸슐ㄼ ⌸ ㄼ㡈岠⌸攨 슐 ㄼ뵼ㄼㄼ ㄼ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ P’sel 演ㄼ 솜슐ㄼ 㡈⌸舜뵼⌸슐ㄼ ⌸ ㄼ㡈岠⌸攨 㡈슐 ㄼ 岠⌸ㄼ⌸㡈 攨 怴怼 ㄼ岠㡈솜슐ㄼ⌸⌸슐 ㄼ攨슐ㄼ㡈ㄼ 怴怼 岠⌸ㄼ⌸㡈 攨岠攨 ⌸⏄솜㡈⌸攨 ⏄ㄼ ㄼ㡈⌸攨 ㄼ ⌸ 㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 CS’⌸슐솜슐ㄼ 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ㄼ ㄼ뵼ㄼ슐⌸攨 S’ 怼 攨攨뵼⌸ ⏄ 슐ㄼ岠⌸攨 슐 뵼ㄼ ⌸솜슐㡈ㄼ ㄼ㡈岠 슐ㄼ ⌸ 攨솜 㡈攨㡈岠 솜슐⌸ ⏄ ㄼ ㄼ 㡈ㄼ ⌸ 攨솜岠ㄼ ⌸ ㄼ ㄼ⌸攨솜슐 슐ㄼ岠⌸攨 1) Selecting Configurable Options ⌸슐 攨솜 㡈攨㡈岠 ⌸ㄼ ⌸ ⌸ㄼ슐 ㄼ ⌸㡈岠 攨 ㄼ 岠 㡈 ⏄ㄼ 岠攨ㄼ⌸ㄼR蒤imp(∆S,S’荬ㄼ 攨솜㡈攨㡈岠 슐ㄼㄼ岠슐㡈슐ㄼ攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 㡈 ⌸㡈岠슐 ㄼ 슐㡈⌸岠 㡈 슐 ⌸ R 愈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 ⌸슐슐ㄼㄼ岠ㄼ ⌸ ⌸슐⌸㡈岠 ⌸ ㄼ슐ㄼ岠슐 뵼⌸ ㄼ⌸㡈岠攨 ㄼ岠 㡈 ⏄ㄼ岠攨ㄼR 攨㡈램㡈岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 Pi ∈P’ ⌸슐슐ㄼㄼ岠ㄼ램攨솜㡈攨㡈岠 ⌸ × Ý ∩ ≠ ∅舜舜舜侈荬 怼 ⌸슐 㡈ㄼ 뵼ㄼ ㄼ㡈슐솜ㄼ ㄼ ⌸㡈岠 㡈 ㄼ 솜 岠⌸攨 ⏄㡈 솜㡈⌸램 ㄼ岠㡈 㡈 ㄼ⌸㡈岠 攨 㡈岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 攨 S⌸슐 ㄼ슐ㄼ攨 솜 岠⌸攨 岠㡈슐㡈攨 ⏄ ㄼ슐㡈⌸岠㡈 슐⌸ S 㡈 㡈ㄼ ⌸㡈岠ㄼ 램 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 攨 ㄼ 㡈ㄼ 㡈슐 슐 攨뵼 ⌸ ⌸⏄솜ㄼ슐㡈 㷤P1⌸㡈岠슐 ㄼ슐㡈⌸岠㡈 슐e1e2 e5 e6 㡈 e7 龈⌸ 岠ㄼ 솜 岠⌸攨 슐 f1 f2 f6 f7 㡈 f8 㡈ㄼ 岠㡈ㄼ 㡈攨 ⏄ ㄼ슐ㄼ㡈 슐뵼ㄼㄼ⏄㡈 ㄼ슐ㄼ 솜 岠⌸攨 슐㡈슐 ㄼ 솜 岠⌸攨 슐 ⌸㡈岠ㄼ 램 P1 怼 攨솜 ⌸솜슐㡈⌸ㄼ ㄼ 㡈ㄼ ㄼ ⌸㡈岠ㄼ × Ý© 솜 岠⌸攨 슐 攨 ㄼ㡈岠 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 㡈ㄼ × Ý © 뚼 î 녈㡈 × Ý © 뚼 녈 뚼 î î î î 녈
⌸⏄솜ㄼ ㄼ ⌸⏄ 舜ㄼㄼ攨ㄼ⌸ㄼ뵼攨 攨솜㡈攨㡈岠
愈슐 ⌸ 攨솜岠ㄼ ⌸ 龈ㄼ岠⌸攨 愈 ⌸ 攨솜 ㄼ 㡈ㄼ 뵼ㄼ 㡈ㄼ 㡈슐슐솜ㄼ 㡈∆SS’荬蒤뚼f1녈怼⌸슐ㄼ㡈슐램攨㡈 솜㡈램ㄼ⌸ 램 㡈 ㄼ 솜 岠⌸攨 슐f1 f2㡈 f6 㡈ㄼ슐㡈⌸岠㡈램⌸㡈岠ㄼ램 ㄼ岠攨ㄼ 岠 㡈 ⏄ㄼ슐⌸ f1⌸ㄼR蒤imp∆S, S’荬荬蒤뚼f1 f2f6녈뵼 ⌸岠 ⌸슐 ㄼ ⌸㡈岠 攨 ㄼ 岠攨ㄼ 㡈 㡈슐 岠 㡈 ⏄ㄼ ㄼ뵼ㄼㄼ S 㡈 S’ 㡈슐ㄼ 攨 侈荬 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐 攨 램 P1 ⌸⏄ ⌸⏄ ㄼ ⌸ ㄼ ⌸슐 岠攨솜 攨 愈ዼ 怼荬 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ㄼ P’sel 蒤 뚼P1녈荬 ㄼ岠㡈솜슐ㄼ 攨 램 ㄼ ⌸㡈岠 攨 P1 ⌸ ㄼ슐ㄼ岠슐뵼⌸ ㄼ⌸㡈岠攨 ㄼ岠攨ㄼ岠 㡈 ⏄ㄼ슐愈슐㡈ㄼ슐솜攨 램 솜 岠⌸攨 슐 f1 f2 㡈 f6 岠㡈ㄼ 㡈攨 ⏄슐㡈⌸岠 㡈 슐e1e2 㡈 e5 㡈ㄼ 攨 ㄼ ㄼㄼ슐ㄼ⌸ S’슐㡈⌸슐 램⌸ ⏄ ㄼ⏄攨㡈攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 2) Selecting Configuration Instances 怼 ⌸슐 슐ㄼ岠⌸攨 뵼ㄼ ㄼ슐岠⌸ㄼ 攨뵼 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 攨 CS 攨 岠攨 슐솜岠 CS’ 㡈 ㄼ 슐ㄼㄼ岠⌸ ⏄ ㄼ岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐P’sel⌸ ㄼ ⌸슐슐ㄼ 㡈⌸舜뵼⌸슐ㄼ 怴怼 ⌸슐 ㄼ 攨슐 ㄼ㡈ㄼ ㄼ岠 ⌸稄솜ㄼ 攨 슐ㄼㄼ岠 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ 솜 岠攨 ⌸⏄솜㡈⌸攨 슐㡈岠ㄼ 愈슐 ⌸ 攨솜岠ㄼ⌸ 龈ㄼ岠⌸攨 怼怼侈 ㄼ㡈⌸舜뵼⌸슐ㄼ岠⌸ㄼ⌸攨 ㄼ稄솜⌸ㄼ슐 㡈 㡈 㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 攨 ㄼ㡈岠 㡈⌸ 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 슐 攨솜 ㄼ 岠攨ㄼㄼ 㡈 ㄼ㡈슐 攨 岠ㄼ ⌸ ㄼ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ ㄼ슐ㄼ 攨 攨솜 ㄼ⏄ㄼ슐슐⌸攨 슐ㄼㄼ岠⌸攨 솜攨슐ㄼ 攨 램 ㄼ⌸ ㄼ㡈岠⌸攨 슐 ㄼ뵼ㄼㄼ ㄼ슐ㄼㄼ岠ㄼ 攨⌸攨 슐 ⌸ P’sel 㡈ㄼ ⌸攨㡈 愈岠岠攨⌸ ⏄램 㡈 㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 攨 ㄼ㡈岠 㡈⌸ 攨 selected 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 P’sel荬 슐 攨솜 ㄼ岠攨ㄼㄼ㡈ㄼ㡈슐攨 岠ㄼ⌸ ㄼ슐ㄼㄼ岠ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐攨ㄼ ㄼㄼ슐ㄼ愈攨 ㄼ攨⌸攨 슐 攨⌸ P’sel⌸ㄼP’舜P’sel荬㡈램솜슐ㄼ 㡈 램攨 ⌸슐㡈솜ㄼ슐㡈 攨램 ፠솜 㡈⏄攨⌸ 攨 슐ㄼㄼ岠⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐 ⌸슐 슐 攨뵼 ⌸ ⌸⏄솜ㄼ⟀ ⌸슐㡈슐슐 攨뵼 ⌸ ⌸ ㄼ侈 ㄼ㡈⏄攨⌸ 岠攨 슐솜岠슐 ㄼvalue pair슐ㄼA 㡈岠攨 슐⌸슐슐攨 㡈 ㄼ㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 攨 㡈 㡈⌸슐 攨 攨⌸攨 슐 슐ㄼㄼ岠ㄼ ⌸ P’sel 龈솜攨슐ㄼ P’sel 蒤뚼P1,P2녈 ㄼㄼ 뵼⌸ ㄼ 攨솜 㡈솜ㄼ 㡈⌸슐 㡈슐 A 蒤뚼p11, p21荬p11, p22荬 p12, p21荬 p12, p22荬녈怼 攨솜 ⌸솜슐㡈⌸ㄼ ㄼ 㡈ㄼP’sel攨 램岠攨 㡈⌸ 슐攨 ㄼ攨⌸攨 P1㡈 ㄼ 岠ㄼ攨 램 뵼攨 㡈솜ㄼ 㡈⌸슐 슐 攨솜 ㄼ 岠攨ㄼㄼ ⌸ ㄼ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ㄼ A=뚼p11荬 p12荬녈 뵼 ㄼㄼ p11蒤 True 㡈 p12蒤False 怼 攨 ㄼ 뵼攨슐 ㄼㄼ 솜슐 ㄼ ⌸슐 㡈 ㄼ㡈슐 攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 뵼 ㄼㄼ ㄼ㡈솜ㄼ攨 P1 ⌸슐True㡈 㡈ㄼ㡈슐攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 뵼 ㄼㄼ ㄼ㡈솜ㄼ攨 P1⌸슐False
133
2012 28th IEEE International Conference on Software Maintenance (ICSM)
ㄼ ㄼ 㡈⏄攨⌸ 슐㡈슐 슐ㄼㄼ岠⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐 솜 ⌸ 攨 ㄼ攨 ㄼ뵼攨슐攨⌸ ⏄岠⌸ㄼ⌸㡈⌸슐ㄼ侈荬㡈㡈솜ㄼ㡈⌸슐⌸ A 㡈ㄼ 岠攨ㄼㄼ ⌸ㄼ ㄼ 슐ㄼ 攨 ㄼ㡈⌸ ⌸ ⏄ 㡈⌸슐 Z ⌸슐 ㄼ램 ㄼ 뵼 ⌸ㄼ攨攨荬 ፠ 荬 攨ㄼ㡈⌸ ⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ CS 岠㡈 岠攨ㄼ㡈 램攨 ㄼㄼ㡈⌸ ⌸ ⏄㡈솜ㄼ㡈⌸슐⌸ Z ⌸ ㄼ슐쿨㡈 荬 ㄼ슐ㄼ岠攨 슐攨⌸ ⏄岠⌸ㄼ⌸㡈⌸슐슐㡈⌸슐 ⌸ㄼ⌸ ㄼ攨⌸⏄⌸ 㡈슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 CS ⌸슐 攨 岠ㄼ㡈ㄼ 램 ㄼ 怴怼 㡈攨㡈岠 뵼 ⌸岠 ⌸ ⌸岠㡈ㄼ슐 㡈슐攨ㄼ⌸攨㡈 㡈솜ㄼ㡈⌸슐㡈ㄼ⌸슐슐⌸ ⏄ ⌸ CS 怼 ⌸슐 岠㡈슐ㄼ 뵼ㄼ 岠㡈 㡈솜⏄ㄼ CS’ 솜슐⌸ ⏄ ㄼ ㄼ⏄솜㡈 怴怼 㡈攨㡈岠 뵼 ⌸岠 뵼⌸ㄼ㡈ㄼ슐슐ㄼ⌸ 攨솜 솜솜ㄼ뵼攨瀜 愈 攨 ㄼ 瀜ㄼ램 攨⌸ 攨 ⌸슐 㡈⏄攨⌸ ⌸슐 ⌸ ㄼ㡈岠 솜 攨 슐ㄼㄼ岠⌸攨 ㄼ 뵼 ⌸ㄼ 攨攨荬 ㄼ 㡈⏄攨⌸ 㡈뵼㡈램슐 슐ㄼㄼ岠슐 㡈 岠攨 ⌸⏄솜㡈⌸攨 㡈 뵼攨솜 岠攨ㄼ ㄼ 攨슐 㡈솜ㄼ 㡈⌸슐 㡈 㡈ㄼ 攨ㄼㄼ 岠攨ㄼㄼ램ㄼ⌸ㄼ㡈솜ㄼ㡈⌸슐 㡈㡈ㄼ슐⌸⌸ Z 侈荬怼 ⌸ ㄼ⟀攨솜㡈⏄攨⌸ 岠攨솜 슐 ㄼ 솜ㄼ攨 uncovered 㡈솜ㄼ㡈⌸슐⌸ ㄼ㡈岠 Ci ∈CSㄼ 攨ㄼ㡈슐Nii蒤侈攨 CS荬ﵸ荬 怼 ⌸ ㄼ攨솜 㡈⏄攨⌸ ⌸ 슐 ㄼ㡈⏄ㄼ슐Ni ﵸ㷤荬 怼 ⌸ ㄼ 攨솜㡈⏄攨⌸ 슐ㄼㄼ岠슐 ㄼ岠攨 ⌸⏄솜㡈⌸攨 뵼 攨슐ㄼN㡈솜ㄼ⌸슐 ㄼ 㡈⏄ㄼ슐 演 ㄼ ㄼㄼ ⌸슐 㡈 ⌸ㄼ 攨 슐ㄼㄼ岠⌸攨 㡈攨 ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐 ㄼ㡈⏄攨⌸ 㡈 攨램슐ㄼㄼ岠슐攨 ㄼ攨 ㄼ 攨 ㄼ岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐 㡈㡈ㄼ 攨슐ㄼㄼ岠ㄼ⌸ ㄼ ⌸슐 슐ㄼ 龈ㄼ岠⌸攨 侈荬 ⌸ 슐ㄼ㡈 攨 ⌸岠瀜⌸ ⏄ 㡈 㡈 攨 㡈솜ㄼ 攨솜 㡈攨㡈岠 ㄼ솜슐ㄼ슐 ㄼ슐㡈ㄼ㡈솜ㄼ솜슐ㄼ 攨ㄼ슐⌸ ⏄ ㄼㄼ⌸攨솜슐 ㄼ슐⌸攨 攨 ㄼ 攨⏄㡈 㡈슐 ⌸ 슐㡈 ⌸㡈ㄼ ⌸ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐荬 艌攨ㄼ攨ㄼ ㄼ 岠 㡈 岠ㄼ 攨 㡈 ⌸ㄼ 㡈 ㄼ
솜ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 㡈 攨 슐ㄼㄼ岠⌸攨 ⌸ ㄼㄼㄼ 攨 㡈⌸ㄼㄼ岠ㄼ㡈슐ㄼ슐뵼⌸ ㄼ 솜ㄼ攨 ⌸ㄼ㡈⌸攨 슐攨 ㄼ뵼 ⌸ㄼ 攨攨 怼 攨솜 ㄼ 㡈ㄼ 솜⌸ ⏄ ㄼ ⌸슐 攨攨 N1蒤N2蒤N3蒤N4蒤侈 龈솜攨슐ㄼ C2 ⌸슐 㡈 攨램 슐ㄼㄼ岠ㄼ 攨 ㄼ 攨솜 岠㡈 ⌸㡈ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐Z ⌸슐솜㡈ㄼ攨Z=뚼p12荬녈솜⌸ ⏄ ㄼ슐ㄼ岠攨 攨攨 N1蒤 㡈 N3蒤N4蒤侈 龈솜攨슐ㄼ C3 ⌸슐 슐ㄼㄼ岠ㄼ 攨 ㄼ 뵼攨岠㡈 ⌸㡈ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐ㄼ岠攨ㄼ슐愈슐㡈ㄼ슐솜攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐CS’蒤뚼C2C3녈뵼 ⌸岠 슐㡈ㄼ슐솜슐⟀﵈攨 ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄⌸ㄼ岠攨㡈ㄼ攨 ㄼㄼㄼ슐舜㡈㡈攨㡈岠
× Ý 㡈 攨뵼㡈 攨⏄㡈 슐⌸岠⌸ ⏄ 攨 岠攨솜ㄼ ∆× î ′Ý 攨뵼㡈슐⌸岠⌸ ⏄ㄼ稄솜⌸ㄼ 攨 岠攨솜⌸ ⏄ ㄼ ⌸㡈岠 슐ㄼ슐 ㄼㄼ 슐 攨 슐ㄼㄼ㡈 슐㡈⌸岠 㡈 㡈램슐⌸슐 㡈㡈ㄼㄼ슐 슐솜岠 㡈슐攨⌸ ㄼ㡈 㡈램슐⌸슐 岠攨 ㄼ 껤 攨뵼슐ㄼ 슐⌸⌸⌸램 攨 舜攨岠㡈 㡈 㡈램슐⌸슐 㡈 슐⌸岠⌸ ⏄ ㄼㄼ ㄼ 岠램 㡈 㡈램슐⌸슐 怼 攨솜 ㄼ ㄼ⌸ㄼ 슐 뵼ㄼ 岠攨 슐ㄼ㡈⌸ㄼ램 솜슐ㄼ ㄼ 攨슐 ㄼ ㄼ 슐⌸ㄼ CodeSurfer 攨⌸攨 㡈㡈⌸㡈ㄼ 攨 ㄼ 攨 ㄼ 㡈ㄼ 攨 攨⌸ ㄼ㡈 㡈램슐⌸슐뵼ㄼ솜슐ㄼ ㄼ愈 ㄼ슐ㄼ 슐㡈⏄攨⌸ 枼댨荬 ㄼ 攨슐 ㄼ ㄼ 슐⌸ㄼ㡈㡈ㄼㄼ 슐ㄼ⌸ ⏄ 攨 CodeSurfer ⌸슐ㄼ 攨ㄼ 㡈슐H슐 攨뵼 ⌸ 愈ዼ怼荬 愈슐슐 攨뵼 ⌸ 攨솜슐솜램龈ㄼ岠⌸攨 怼荬 ㄼㄼ⌸슐攨 ㄼ슐㡈⌸岠 㡈 㡈램슐⌸슐 㡈㡈ㄼㄼ non-local analysis 뵼 ⌸岠 㡈램 ⌸㡈岠 ㄼ ㄼ岠⌸슐ㄼ ㄼ슐슐 攨 攨솜 㡈攨㡈岠 ㄼ 攨 舜攨岠㡈슐 攨 㡈 솜 岠⌸攨 ⌸ 岠솜ㄼ 㡈 ㄼ ⏄攨㡈 㡈⌸㡈ㄼ슐 㡈 ⌸ ⌸ㄼ岠램 㡈岠岠ㄼ슐슐ㄼ 㡈⌸㡈ㄼ슐 솜슐ㄼ 攨 攨⌸ ⌸ㄼ 램 㡈 솜 岠⌸攨 演⌸ CodeSurfer ㄼ 攨 舜攨岠㡈 㡈 㡈램슐⌸슐 ⌸슐 岠攨 ⌸⏄솜㡈ㄼ 㡈 岠㡈 ㄼ 슐 솜 攨 ㄼ H 슐ㄼ⌸ ⏄ 攨 CodeSurfer 뵼⌸ 攨 舜攨岠㡈 㡈 㡈램슐⌸슐솜 ㄼ攨 ⌸슐ㄼ 攨ㄼ㡈슐 ㄼ슐ㄼ⌸ ⏄L
愈ዼ怼
ዼH愈 愈艌ዼ ዼ 龈ዼ
怼壌龈 ፠ CODESURFER
Static Analysis Parameter 攨 舜攨岠㡈㡈 㡈램슐⌸슐 ㄼㄼ ㄼ 岠ㄼ슐 攨⌸ ㄼ㡈 㡈램슐⌸슐 龈솜㡈램ㄼ⏄ㄼ슐
Settings 俸ㄼ슐 怼 ㄼ껤⌸ 㡈怴攨 攨㡈 㡈㡈 愈 ㄼ슐ㄼ 슐㡈⏄攨⌸ 枼댨 俸ㄼ슐
ㄼ 攨 ㄼ 岠攨攨 ㄼ 슐 攨 攨솜 㡈攨㡈岠 ⌸ 岠솜⌸ ⏄ ㄼ 㡈⏄攨⌸ 슐 攨뵼 ⌸ ⌸⏄솜ㄼ ⟀ 㡈ㄼ ⌸ㄼㄼ ㄼ 㡈슐 怴껤怴ፔፔ 攨⏄㡈슐 怼
ዼ愈㞬愈 怼፠፠ ፠㞬 愈 ፠愈怴
怼 ⌸슐 슐ㄼ岠⌸攨 뵼ㄼ ㄼ슐ㄼ 攨솜 ㄼ슐솜슐 攨 ㄼ㡈솜㡈⌸ ⏄ 攨솜 㡈攨㡈岠 㡈슐ㄼ攨 ㄼㄼ岠⌸ㄼ⌸㡈 ⌸슐뵼ㄼ슐솜램 ㄼquality 攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ ㄼ슐 攨 ㄼ 㡈솜 ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 ㄼ㡈슐솜ㄼ 램 ㄼ 솜ㄼ 攨 㡈솜슐 ㄼㄼ岠ㄼ荬 㡈 ㄼ 岠攨ㄼ P’sel 岠攨ㄼ㡈⏄ㄼ 龈ㄼ岠攨 뵼ㄼ 슐솜램 뵼 㡈 ㄼ岠ㄼ 㡈⏄ㄼ 攨 侈 set A 蒤 㡈 ㄼ 㡈솜ㄼ 岠攨⌸ 㡈⌸攨 슐 攨 㡈 怴 㡈⌸슐 攨 岠攨 ⌸⏄솜㡈⌸攨 슐⌸슐⌸슐岠㡈ㄼ㡈슐ㄼ솜 㡈 램攨솜㡈攨㡈岠 攨 攨⌸攨 슐⌸ P’sel ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ 㡈램 뵼ㄼ 슐솜램 ㄼ 攨ㄼ㡈 ㄼ⏄ㄼ슐슐⌸攨 setZ 蒤A ㄼ슐⌸ ⏄ time-savings 攨슐슐⌸ㄼ 뵼⌸ 攨솜 㡈攨㡈岠 ㄼ 㷤 CS’ = ㄼ슐ㄼ㡈岠 稄솜ㄼ슐⌸攨 슐 攨攨솜ㄼ㡈솜㡈⌸攨 㡈ㄼ㡈슐 攨攨뵼슐 while Z ≠ do · RQ1 怴㡈 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 ⟀ Ni蒤 ㄼ 솜ㄼ攨 㡈솜ㄼ㡈⌸슐 㡈㡈ㄼ岠攨ㄼㄼ램 㡈攨㡈岠 㡈岠 ⌸ㄼㄼ ㄼ 슐㡈ㄼ 㡈솜 ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 岠攨 ⌸⏄솜㡈⌸攨 슐Ci∈CS 㡈 㡈ㄼ㡈슐攨⌸ Zi 蒤侈攨CS 荬 㡈 岠攨ㄼ岠攨ㄼ㡈⏄ㄼ㡈슐 ㄼㄼㄼ슐舜㡈㡈攨㡈岠 譴攨뵼攨ㄼ슐 Nmax蒤 ㄼ㡈⏄ㄼ슐㡈솜ㄼ攨 Ni ⌸뵼攨瀜岠攨㡈ㄼ攨 ㄼ㡈 攨舜슐ㄼㄼ岠⌸攨 譴 쿨 if Nmax蒤 break · RQ2演 㡈ㄼ岠ㄼ 㡈⏄ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐⌸슐⌸슐岠㡈ㄼ㡈슐 龈ㄼㄼ岠㡈岠攨 ⌸⏄솜㡈⌸攨 Ck∈CS ⌸ Nk蒤Nmax ㄼ솜 㡈 램攨솜㡈攨㡈岠 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄譴 侈 CS’蒤CS’∪Ck · RQ3 攨뵼 솜岠 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ㄼ 岠㡈 攨솜 㡈攨㡈岠 슐㡈ㄼ譴 侈侈 CS蒤CSCk 侈 Z蒤Z㡈솜ㄼ㡈⌸슐⌸ Ck荬 怼 龈ㄼ岠⌸攨 怼愈 뵼ㄼ ㄼ슐岠⌸ㄼ ㄼ 슐솜ㄼ岠슐 㡈 㡈ㄼ 솜슐ㄼ 攨 攨솜 ㄼ㡈솜㡈⌸攨 怼 龈ㄼ岠⌸攨 슐 怼舜怼 뵼ㄼ 攨⌸ㄼ ㄼ ⌸⏄솜ㄼ⟀ 愈⏄攨⌸ 攨슐ㄼㄼ岠⌸ ⏄岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐⌸ 攨솜㡈攨㡈岠 ㄼ㡈⌸슐 攨 㡈 슐ㄼ⌸ㄼ슐 攨 ㄼ ㄼ⌸ㄼ 슐 뵼ㄼ 岠攨 솜岠ㄼ 攨 ㄼ㡈솜㡈ㄼ攨솜ㄼ슐ㄼ㡈岠 稄솜ㄼ슐⌸攨 슐 C. Implementation of Our Approach ፠솜 㡈攨㡈岠 ㄼ攨램슐 㡈 슐㡈⌸岠 㡈 㡈램슐⌸슐 攨攨 岠㡈ㄼ CodeSurfer 枼쿨댨 攨 岠攨솜⌸ ⏄ ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 ⌸㡈岠 㡈 ㄼ 岠攨ㄼ 岠 㡈 ⏄ㄼ ⌸㡈岠 CodeSurfer 솜슐ㄼ슐
134
2012 28th IEEE International Conference on Software Maintenance (ICSM)
A. Study Subjects 演ㄼ ⌸슐 ㄼ㡈솜㡈ㄼ 攨솜 㡈攨㡈岠 攨 grep 㡈 make 뵼攨 攨ㄼ 슐攨솜岠ㄼ㡈岠瀜㡈⏄ㄼ슐뵼⌸ㄼ ⌸ C⏄rep⌸슐㡈 岠攨㡈 舜⌸ ㄼ 솜⌸⌸램 攨슐ㄼ㡈岠 ⌸ ⏄㡈⌸ 舜ㄼ 㡈㡈슐ㄼ슐 攨⌸ ㄼ슐㡈岠 ⌸ ⏄㡈 ㄼ⏄솜㡈 ㄼ ㄼ슐슐⌸攨 make ⌸슐 㡈 뵼⌸ㄼ램 攨솜㡈 㡈 ⏄ㄼ ㄼ㡈 솜攨슐ㄼ攨攨솜슐ㄼ攨岠攨⌸ㄼ攨⏄㡈슐 ㄼ슐攨솜岠ㄼ岠攨ㄼ攨 grep 㡈 make 㡈ㄼ 㡈㡈⌸㡈ㄼ 㡈 ㄼ 壌㞬 뵼ㄼ슐⌸ㄼ 枼댨枼㷤댨 演ㄼ 㡈 㡈램ㄼ 뵼攨ㄼ슐⌸攨 슐攨 grep grep-1.0 㡈슐 ㄼ攨⌸⏄⌸ 㡈 㡈 攨 ㄼ슐⌸攨 㡈 grep-2.0 㡈슐 ㄼ 岠 㡈 ⏄ㄼ 㡈 ㄼ뵼 ㄼ슐⌸攨 grep 岠攨 㡈⌸ 슐 㡈攨솜 솜 岠攨ㄼ ㄼ ⌸ ㄼ슐 攨 岠攨ㄼ 演ㄼ㡈 㡈램ㄼ뵼攨ㄼ슐⌸攨 슐攨 makemake-3.77㡈슐 ㄼ 攨⌸⏄⌸ 㡈㡈 攨ㄼ슐⌸攨 㡈 make-3.78.1㡈슐 ㄼ岠 㡈 ⏄ㄼ㡈
ㄼ뵼 ㄼ슐⌸攨 make 岠攨 㡈⌸ 슐 㡈攨솜 侈⟀ 솜 岠攨ㄼ ㄼ ⌸ ㄼ슐攨 岠攨ㄼ 演ㄼㄼ攨 슐㡈ㄼ攨솜㡈攨㡈岠 攨 슐ㄼㄼ岠⌸ ⏄㡈 슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ㄼ ㄼ뵼ㄼ슐⌸攨 슐 攨 grep㡈 make 演ㄼ㡈슐攨㡈램攨솜㡈攨㡈岠 攨㡈岠攨ㄼ岠攨攨 ㄼ 岠㡈ㄼ ABB1 ㄼㄼ㡈 ㄼ荬 攨 㡈 㡈⏄ㄼ ㄼ㡈舜⌸ㄼ ㄼㄼㄼ 슐攨 뵼㡈ㄼ 슐램슐ㄼ ㄼㄼ攨ㄼ 㡈 愈 ABB1 岠攨 슐⌸슐슐 攨 㡈攨솜 侈侈 艌፠怴뵼⌸ㄼ ⌸ 怴껤怴ፔፔ怼岠攨 㡈⌸ 슐㷤 솜 岠⌸攨 슐㡈岠攨슐슐 ⟀ 攨솜ㄼ슐 ዼ㡈岠 攨솜ㄼ ㄼ ⌸ ㄼ슐 㡈 슐솜슐램슐ㄼ 㡈 ⌸ㄼㄼ 슐⌸ ㄼㄼ 솜 岠⌸攨 㡈⌸⌸ㄼ슐攨 ㄼ슐램슐ㄼ B. Study 1: Fault Detection Capability and Code Coverage 1) Study Design make-3.78.1 ⌸슐 㡈 슐솜슐ㄼ稄솜ㄼ ㄼ슐⌸攨 攨 make-3.77 ㄼㄼ㡈슐ㄼ侈攨 슐㡈 ㄼmake-3.77攨솜攨 슐攨솜岠ㄼ ⌸ㄼ슐 岠 㡈 ⏄ㄼ 攨 make-3.77 攨 make-3.78.1 龈ㄼ㡈 㡈岠攨슐슐 ㄼ 岠 㡈 ⏄ㄼ ⌸ㄼ슐 ㄼㄼ㡈ㄼ岠 㡈 ⏄ㄼ攨岠瀜슐攨 岠攨ㄼ ㄼ 岠攨ㄼ 岠 㡈 ⏄ㄼ 攨岠瀜슐 뵼ㄼㄼ 岠攨솜ㄼ 램 WinMerge 枼㷤侈댨 㡈 攨ㄼ 슐攨솜岠ㄼ 岠攨ㄼ ⌸ ㄼㄼ 岠⌸ ⏄ 㡈 ㄼ⏄⌸ ⏄ 攨攨 攨 演⌸ 攨뵼슐 演ㄼ 㡈슐슐솜ㄼ 㡈 㡈 슐램슐ㄼ ㄼ슐⌸ ⏄ ⌸ 攨⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐뵼㡈슐岠攨 솜岠ㄼㄼㄼ램攨 演ㄼ㡈슐攨㡈슐슐솜ㄼ 㡈 ㄼ 岠 㡈 ⏄ㄼ슐 㡈ㄼ 攨솜⏄ ㄼ 侈 攨 슐 뵼ㄼㄼ ㄼㄼ 램 ⌸슐⌸솜ㄼ ⌸ ㄼ㡈岠 攨 ㄼ 岠ㄼ 뵼ㄼ 㡈 攨램 슐ㄼㄼ岠ㄼ 껤侈 ≈ 荬 岠 㡈 ⏄ㄼ슐攨 攨 㡈 ⌸ ㄼㄼ⌸㡈ㄼ ㄼ슐⌸攨 攨 makemake-3.77.bㄼ뵼ㄼㄼ make-3.77㡈 make3.78.1램㡈슐슐솜⌸ ⏄ 㡈⟀﵈攨 ㄼ岠 㡈 ⏄ㄼ슐㡈램⌸ 攨솜岠ㄼ ㄼ⏄ㄼ슐슐⌸攨 㡈솜슐 뵼ㄼ 㡈 攨램 슐ㄼㄼㄼ 侈⟀ 㡈솜슐 ⌸ ㄼ 슐ㄼㄼ岠ㄼ 岠 㡈 ⏄ㄼ 攨岠瀜슐 攨 make-3.78.1 ㄼ 슐ㄼㄼㄼ 㡈솜슐 ⌸ 岠솜ㄼ ㄼ 㡈 舜슐ㄼㄼㄼ 㡈솜슐 攨㡈⌸ ㄼ 攨 ㄼ 龈攨 뵼㡈ㄼ 怼 㡈슐솜岠솜ㄼ ㄼ攨슐⌸攨램 龈怼 荬 枼侈댨 㡈 ㄼ 솜㡈⌸攨 슐 ⏄ㄼ ㄼ㡈ㄼ램 ㄼmutgen攨攨枼㷤댨 grep-2.0 岠攨 㡈⌸ 슐 ㄼ⌸⏄ 슐攨솜岠ㄼ ⌸ㄼ슐 龈⌸ 岠ㄼ ㄼㄼ ⌸슐 攨 ㄼ슐⌸攨 ㄼ 攨ㄼ grep-2.0 㡈 ⌸슐 솜⌸岠램 㡈㡈⌸㡈ㄼ 뵼ㄼ 㡈 攨ㄼ슐 솜⌸⌸ ⏄ ㄼ 㡈ㄼ ㄼ슐⌸攨 슐 攨 grep 뵼⌸ CodeSurfer荬뵼ㄼ㡈 攨램슐ㄼㄼ岠ㄼ侈⟀攨岠瀜슐⌸ grep-2.0㡈슐 岠 㡈 ⏄ㄼ슐 攨㡈ޜ⌸솜㡈ㄼ⌸攨솜슐ㄼ슐⌸攨 grep-1.0演ㄼ솜슐ㄼ mutgen 攨 ⏄ㄼ ㄼ㡈ㄼ 攨ㄼ 㡈 侈솜㡈 슐 슐ㄼ㡈 㡈岠攨슐슐 㡈 ㄼ ⌸ㄼ슐演ㄼ ㄼ 㡈 攨램슐ㄼㄼ岠ㄼ㡈岠攨⌸㡈ㄼ솜㡈 攨 ㄼ㡈岠 슐ㄼㄼ岠ㄼ岠 㡈 ⏄ㄼ攨岠瀜 ㄼ 岠ㄼ⌸ 攨㡈 ㄼㄼ뵼ㄼㄼ 侈⟀ 㡈솜슐슐ㄼㄼㄼ⌸ grep-2.0 演ㄼ 슐ㄼㄼ岠ㄼ 侈侈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 攨 make 㡈 侈 攨⌸攨 슐 攨 grep愈 ㄼ슐ㄼ攨⌸攨 슐㡈ㄼ⌸ 㡈램攨⌸攨 슐 ㄼ 攨 ㄼ㡈岠 슐솜ㄼ岠 뵼ㄼ岠ㄼ㡈ㄼ ㄼ⌸ ⌸⌸㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ㄼCS荬 攨 ㄼ슐ㄼ攨⌸攨 슐솜슐⌸ ⏄ ㄼ怴怼 㡈攨㡈岠 枼侈댨枼侈侈댨
ㄼ 솜ㄼ슐攨 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 슐㡈 岠ㄼ슐⌸ CS 攨 ㄼ슐⌸ ⏄ ㄼ 攨 ㄼ슐⌸攨 뵼ㄼㄼ 侈 㡈 쿨 攨 make 㡈 grep ㄼ슐ㄼ岠⌸ㄼ램
ㄼㄼ슐 슐솜⌸ㄼ슐 攨 make 㡈 grep 뵼ㄼㄼ 攨 攨㡈⌸ ㄼ 攨 ㄼ龈怼 枼侈댨 2) Indepednet and Dependent Variables
ㄼ ⌸ ㄼㄼ ㄼ 㡈⌸㡈ㄼ 攨 ᰼侈 ⌸슐 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ㄼ CS’荬 슐ㄼㄼ岠ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ make-3.78.1㡈 grep-2.0演ㄼ岠攨㡈ㄼ攨솜㡈攨㡈岠 攨 ㄼ ㄼㄼ슐舜㡈 㡈 ㄼ 㡈 攨舜슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ㄼ슐 ㄼ 岠ㄼ ㄼ 㡈솜ㄼ슐攨 ㄼ⌸ ㄼㄼ ㄼ 㡈⌸㡈ㄼ㡈ㄼ · ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 뵼 ⌸岠 ⌸슐 ㄼ 솜 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ攨⌸⏄⌸ 㡈ㄼ슐⌸攨 CS荬 · ㄼ슐ㄼ攨 岠攨 ⌸⏄솜㡈⌸攨 슐슐ㄼㄼ岠ㄼ램攨솜㡈攨㡈岠 · ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 ㄼ 㡈 攨舜 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 愈슐⌸ 攨솜岠ㄼㄼ 攨ㄼ 㡈 ⌸攨㡈 㡈岠攨 ⌸ ㄼ 㡈⌸ ⌸ ⏄ ㄼ 稄솜㡈⌸램 攨 㡈 ㄼ⏄ㄼ슐슐⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ⌸슐 ㄼ fault detection capability ㄼ㡈슐솜ㄼ램 ㄼ 솜ㄼ攨 㡈솜슐 ㄼㄼ岠ㄼ荬攨 ㄼ슐ㄼㄼ岠ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐 演ㄼ슐ㄼㄼ岠 ⌸㡈슐攨솜 ⌸슐 ㄼㄼ ㄼ 㡈⌸㡈ㄼ ㄼ슐⌸ㄼ슐 ⌸슐 뵼ㄼ 㡈슐攨 ㄼ 㡈⌸ ㄼ ㄼ 岠攨ㄼ 岠攨ㄼ㡈⏄ㄼ 岠㡈㡈⌸⌸램 攨 ㄼ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈⌸岠솜㡈램 ㄼ 岠攨ㄼ㡈⏄ㄼ 攨 ㄼ 岠攨ㄼ 攨 ㄼㄼ슐 ⌸ㄼ R蒤imp(ΔSS’荬荬荬 演ㄼ 岠㡈 ⌸ changed function coverage 怴 怴荬攨솜슐ㄼ岠攨 ㄼㄼ ㄼ 㡈⌸㡈ㄼ演ㄼ솜슐ㄼgcov枼댨攨 岠攨ㄼ岠 ㄼ岠攨ㄼ岠攨ㄼ㡈⏄ㄼ㡈㡈 3) Results ⌸슐뵼ㄼ⌸슐岠솜슐슐 ㄼㄼ슐솜슐攨 㡈램⌸ ⏄攨솜㡈攨㡈岠 攨 grep 演 ㄼ 뵼ㄼ 솜슐ㄼ ㄼ 攨슐 ㄼ ㄼ 슐⌸ㄼ 슐ㄼ⌸ ⏄ H 攨 CodeSurfer ㄼ슐岠⌸ㄼ⌸ 龈ㄼ岠⌸攨 怼怼怼怴荬 ㄼ⌸㡈岠攨 㡈侈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ ㄼ슐ㄼ岠슐 뵼⌸ ㄼ ⌸㡈岠 攨 岠 㡈 ⏄ㄼ슐 ㄼ뵼ㄼㄼ grep-1.0㡈 grep-2.0 ⌸슐⌸ ⌸岠㡈ㄼ슐 㡈 뵼ㄼ 㡈ㄼ 攨 슐ㄼㄼ岠 㡈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 뵼 ⌸岠 ㄼ㡈슐 攨 슐ㄼㄼ岠⌸ ⏄ 㡈岠攨 ⌸⏄솜㡈⌸攨 슐 攨CS演ㄼ攨攨瀜ㄼ⌸ 攨 ㄼ㡈岠솜㡈⌸㡈岠 攨 ㄼ㡈岠 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 演ㄼ 攨솜 㡈 ㄼ ⌸㡈岠 攨 ㄼ㡈岠 攨⌸攨 ⌸슐 ㄼ 슐㡈ㄼ 뵼 ⌸岠 㡈攨슐 岠攨ㄼㄼ 㡈 ㄼ 솜 岠⌸攨 슐 ⌸ ㄼ 슐램슐ㄼ ⌸슐 攨ㄼ ⌸슐 岠㡈ㄼ impact explosion 枼侈댨枼쿨댨㡈⌸ 램岠㡈솜슐ㄼ 솜ㄼ 攨 㡈⏄ㄼ 岠ㄼ 㡈 ⏄攨㡈 㡈㡈 슐솜岠솜ㄼ슐 怼 grep, 㡈 攨⌸攨 슐 㡈ㄼ ㄼ ⌸ ㄼ 㡈슐 ⏄攨㡈 㡈⌸㡈ㄼ슐㡈 攨⏄㡈 ⌸ㄼ⌸ 㡈岠ㄼ 㡈슐솜岠솜ㄼ ㄼ岠㡈솜슐ㄼ 攨 ⌸슐 攨ㄼ ⌸㡈岠 岠攨솜ㄼ 뵼⌸ ㄼ H 슐ㄼ⌸ ⏄ 攨 CodeSurfer ⌸슐 ㄼ램 ⌸ㄼ岠⌸슐ㄼ 㡈 ㄼ 岠ㄼ 攨 슐솜⌸㡈ㄼ 攨 슐ㄼㄼ岠⌸ ⏄ ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ㄼㄼ 攨ㄼ 뵼ㄼ 솜슐ㄼ 㡈 ㄼ슐슐 ㄼ ㄼ 슐⌸ㄼ 슐ㄼ⌸ ⏄ L 攨 怴攨ㄼ龈솜 ㄼ 램솜 ⌸ ⏄ 攨 ㄼ 攨 舜攨岠㡈 㡈 㡈램슐⌸슐 㡈 ㄼ 㡈⌸ ㄼ ⌸ ⌸ 뵼⌸ 㡈 ㄼ岠 ㄼ ㄼ岠⌸슐⌸攨 攨 攨솜㡈攨㡈岠
ㄼ ㄼ슐솜슐 攨 㡈 㡈램⌸ ⏄ ㄼ grep 㡈岠瀜㡈⏄ㄼ 슐 攨뵼 㡈 뵼⌸ ㄼL 슐ㄼ⌸ ⏄ 㡈攨 ⏄ ㄼ 侈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ㄼ ⌸㡈岠 攨 攨⌸攨 슐 攨ㄼ슐 攨 ⌸ ㄼ슐ㄼ岠 뵼⌸ 㡈 램 ⌸㡈岠 攨 岠攨ㄼ岠 㡈 ⏄ㄼ슐 ㄼ 岠ㄼ 侈 攨솜 攨 侈 攨⌸攨 슐㡈ㄼ슐ㄼㄼ岠ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ grep-2.0 램 㡈램⌸ ⏄ 攨솜 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈⏄攨⌸ ⌸⏄솜ㄼ⟀荬攨 ㄼ슐ㄼ슐ㄼㄼ岠ㄼ攨⌸攨 슐슐⌸ 攨솜 攨 슐ㄼㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈ㄼ 슐ㄼㄼ岠ㄼ 㡈슐 슐 攨뵼 ⌸ ㄼ 슐 㡈ㄼ 攨 攨 愈ዼ 怼怼 ㄼ 攨솜 岠攨솜 岠攨 㡈⌸ ⌸ ⏄ ㄼ 슐 㡈ㄼ 攨 슐 攨뵼슐 ㄼ 솜ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ램⌸ ㄼㄼ 㡈攨㡈岠 ㄼ슐⌸ㄼ ㄼ슐⌸ㄼ攨 CS’荬
135
2012 28th IEEE International Conference on Software Maintenance (ICSM)
ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 荬攨 ㄼ슐ㄼ슐슐ㄼㄼ岠ㄼ램 ㄼㄼ⌸ ㄼㄼ 㡈攨㡈岠 ㄼ슐 攨grep㡈ㄼ슐 攨뵼 ⌸ ㄼ슐ㄼ岠攨 岠攨솜 攨 愈ዼ怼怼攨솜攨 侈⟀ 㡈솜슐뵼ㄼㄼㄼㄼ岠ㄼ램 ㄼ 솜슐ㄼ攨 㡈쿨岠攨 ⌸⏄솜㡈⌸攨 슐 ㄼ슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램攨솜 㡈攨㡈岠 ㄼㄼ岠슐 ㄼ슐㡈ㄼ 솜ㄼ 攨 㡈솜슐 㡈슐 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 怼 岠攨 㡈슐 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 ㄼ 㡈 攨舜슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ⌸슐슐ㄼ슐攨 ㄼ 㡈솜 램 ⌸ ㄼ슐⌸⏄㡈⌸ ⏄ ㄼ 㡈솜슐 岠攨슐ㄼ램 뵼ㄼ 攨솜 㡈 㡈攨 ⏄ ㄼ 슐⌸ 㡈솜슐 㡈 㡈ㄼ ㄼㄼ岠ㄼ 램 ㄼ 솜 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨솜 㡈솜슐 㡈ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ㄼㄼ ㄼ 㡈⌸岠솜㡈램 ⌸ ㄼ 攨솜 㡈솜슐 뵼攨 㡈솜슐 㡈ㄼ ㄼ㡈ㄼ 攨 岠ㄼ㡈⌸ 슐⌸ ⏄ㄼ 攨⌸攨 슐 㡈 뵼攨 㡈솜슐 㡈ㄼ ㄼ㡈ㄼ 攨 岠ㄼ㡈⌸ 㡈⌸舜뵼⌸슐ㄼ 攨⌸攨 岠攨⌸ 㡈⌸攨 슐껤⌸ ㄼ㡈岠⌸攨 슐 愈 ㄼ슐ㄼ ⌸攨㡈 㡈솜舜ㄼㄼ㡈⌸ ⏄荬 攨⌸攨 슐 㡈ㄼ 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 愈슐 㡈 ㄼ슐솜 ㄼ 㡈솜 ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램 攨 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 岠㡈 ㄼ 岠攨 슐⌸ㄼㄼ 攨ㄼ ㄼ슐㡈ㄼ㡈슐 㡈攨 ㄼㄼㄼ슐舜㡈㡈攨㡈岠 攨 攨솜 ㄼ슐솜슐 攨 岠 㡈 ⏄ㄼ 솜 岠⌸攨 岠攨ㄼ㡈⏄ㄼ 怴 怴荬 슐 攨뵼 ⌸ ㄼ ⌸岠攨솜 攨 愈ዼ怼怼⌸㡈ㄼ㡈슐 㡈 ㄼ 岠 㡈 ⏄ㄼ 솜 岠⌸攨 岠攨ㄼ㡈⏄ㄼ⌸슐슐㡈ㄼ 攨 㡈 ㄼㄼ㡈攨㡈岠 ㄼ슐 ⟀ 솜 岠⌸攨 슐 㡈ㄼ 岠攨ㄼㄼ 攨솜 攨 쿨 岠 㡈 ⏄ㄼ 솜 岠⌸攨 슐 攨뵼ㄼㄼ ㄼ 岠攨ㄼ㡈⏄ㄼ ⌸ ㄼㄼ 岠ㄼ슐 ㄼ뵼ㄼㄼ ㄼ ㄼㄼ 㡈攨㡈岠 ㄼ슐㡈ㄼㄼㄼ㡈ㄼ 㡈 ㄼ슐㡈ㄼㄼ ⏄㡈 솜㡈⌸램 뵼 ⌸岠 ㄼ 㡈⌸ 슐 ㄼ⌸ ㄼㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸⌸ㄼ슐
愈ዼ怼怼
ዼ龈㞬 龈 ፠艌壌 ዼ
FD
CFC
Size of CS’
Reduction Rate
Retest-all
껤侈⟀
⟀껤쿨
쿨
舜
Random- selection Our approach
⟀껤侈⟀ 껤侈⟀
⟀껤쿨 ⟀껤쿨
舜 1/7 = 14%
ㄼ 뵼ㄼ⌸슐岠솜슐슐 ㄼㄼ슐솜슐攨 㡈램⌸ ⏄攨솜㡈攨㡈岠 攨 make愈攨 ⏄ ㄼ侈侈岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐攨 램⟀攨솜攨 侈侈 攨⌸攨 슐 㡈ㄼ 슐ㄼㄼ岠ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ make-3.78.1 램 㡈램⌸ ⏄ ㄼ슐ㄼㄼ岠⌸攨 㡈⏄攨⌸ 攨솜攨 侈 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈ㄼ슐ㄼㄼ岠ㄼ㡈슐슐 攨뵼 ⌸ ㄼ슐 㡈ㄼ攨 ⌸ 愈ዼ怼怼怼
ㄼ 㡈 怴 怴 ㄼ슐솜슐 攨 ㄼ 슐ㄼ슐 슐ㄼㄼ岠ㄼ 램 ㄼㄼ ⌸ ㄼㄼ 㡈攨㡈岠 ㄼ슐 攨 make 㡈ㄼ 슐 攨뵼 ⌸ ㄼ 슐ㄼ岠攨 㡈 ⌸ 岠攨솜 슐 攨 愈ዼ 怼怼怼 攨솜 攨 侈⟀ 㡈솜슐 뵼ㄼㄼ ㄼㄼ岠ㄼ 램 ㄼ 侈 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 㡈 侈 攨솜 攨 侈 岠 㡈 ⏄ㄼ 솜 岠⌸攨 슐 뵼ㄼㄼ 岠攨ㄼㄼ 램 ㄼ슐ㄼ 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 㡈岠 ⌸ㄼㄼ슐 ㄼ 슐㡈ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램㡈 岠 㡈 ⏄ㄼ岠攨ㄼ岠攨ㄼ㡈⏄ㄼ㡈슐 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 怼 岠攨 㡈슐 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 ㄼ 㡈 攨舜슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ⌸슐슐ㄼ슐 ⟀ 㡈솜슐 㡈 솜 岠⌸攨 슐
愈ዼ怼怼怼
ዼ龈㞬 龈 ፠艌艌愈瓤ዼ
FD
CFC
Size of CS’
Reduction Rate
Retest-all
껤侈⟀
侈껤侈
侈
舜
Random-selection Our approach
㷤껤侈⟀ 껤侈⟀
㷤껤侈 侈껤侈
舜 8/14 = 57%
136
怼 岠攨 岠솜슐⌸攨 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 슐ㄼㄼ岠ㄼ 램 攨솜 㡈攨㡈岠 岠㡈 ㄼㄼ岠 ㄼ 슐㡈ㄼ 솜ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 㡈솜슐 㡈 㡈ㄼ ㄼㄼ岠ㄼ 램 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 㡈 ㄼ 岠ㄼ 攨솜ㄼ 攨슐 ㄼ㡈 攨舜슐ㄼㄼ岠⌸攨 㡈攨㡈岠 C. Study 2: Effectivness 1) Study Design 怼 攨솜 슐솜램 攨 ABB1 뵼ㄼ 㡈 㡈램ㄼ 㡈 ㄼㄼ攨ㄼ ㄼ슐⌸攨 岠㡈ㄼ 荬 㡈슐 ㄼ 攨⌸⏄⌸ 㡈 ㄼ슐⌸攨 㡈 㡈 ㄼㄼ㡈슐ㄼ ㄼ슐⌸攨 岠㡈ㄼ 侈荬 㡈슐 ㄼ 岠 㡈 ⏄ㄼ ㄼ슐⌸攨 쿨 슐攨솜岠ㄼ ⌸ㄼ슐 㡈 㷤 攨岠瀜슐 㡈 岠 㡈 ⏄ㄼ ㄼ뵼ㄼㄼ ㄼ슐⌸攨 슐 㡈 侈 愈攨 ⏄ ㄼ㷤岠 㡈 ⏄ㄼ슐뵼ㄼ㡈 攨램슐ㄼㄼ岠ㄼ ㄼㄼ슐ㄼ슐攨 㷤岠 㡈 ⏄ㄼ슐 攨㡈 㡈램슐⌸슐
ㄼㄼ 㡈ㄼ 攨㡈램 ⟀⟀ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 뵼⌸ ABB1
ㄼ 攨슐슐⌸ㄼ 㡈솜ㄼ슐 攨 ㄼ슐ㄼ 攨⌸攨 슐 㡈 ⏄ㄼ 攨 攨 愈攨솜﵈攨 ㄼ攨⌸攨 슐㡈ㄼ⌸ 㡈램攨⌸攨 슐演ㄼ솜슐ㄼ㡈⌸舜 뵼⌸슐ㄼ 怴怼 枼侈댨枼侈侈댨 攨 ⏄ㄼ ㄼ㡈ㄼ ㄼ ⌸ ⌸⌸㡈 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 뵼⌸ 攨 ㄼ 攨솜 ⌸ㄼ ⌸⌸ 攨 ㄼ ⏄ㄼ ㄼ㡈⌸攨 ㄼㄼ뵼ㄼㄼ侈⟀岠攨 ⌸⏄솜㡈⌸攨 슐⏄ㄼ ㄼ㡈ㄼ ABB1 ㄼ ⌸ ㄼ슐 ㄼ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸ ㄼㄼ 램 攨 make 㡈 grep 怼 슐ㄼ㡈 攨 ㄼ ⌸ ⌸ ⏄ ⏄攨㡈 㡈⌸㡈ㄼ슐 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ABB1 슐攨ㄼ슐 ㄼ 㡈솜ㄼ슐 攨 ⌸슐 岠攨 ⌸⏄솜㡈ㄼ攨⌸攨 슐⌸ 㡈 㡈㡈㡈슐ㄼ ዼ㡈岠 ⌸ㄼ ㄼ攨⌸攨 ⌸슐 솜슐ㄼ 㡈 솜 岠⌸攨 ㄼ⌸ㄼㄼ슐 ㄼ 㡈솜ㄼ 攨 ㄼ 㡈㡈㡈슐ㄼ ㄼ 岠ㄼ 솜 ⌸瀜ㄼgrep 㡈 make ㄼㄼ⌸슐 攨⌸㡈岠ㄼ 攨슐⌸攨 攨ㄼ 枼侈댨 攨 ABB1 㡈 뵼ㄼ岠攨솜 솜슐ㄼ ㄼ ⌸⏄ ㄼ슐슐ㄼ⌸ ⏄ Hㄼ슐岠⌸ㄼ⌸ 龈ㄼ岠⌸攨 怼怼怼怴荬攨 CodeSurfer 攨岠攨솜⌸ ⏄ ㄼ⌸㡈岠㡈 㡈램슐⌸슐뵼⌸ 攨솜㡈 램攨슐슐攨 ㄼ岠⌸슐⌸攨 2) Results ⌸슐 뵼ㄼ ⌸슐岠솜슐슐 ㄼ ㄼ ㄼ岠⌸ㄼ ㄼ슐슐 攨 攨솜 㡈攨㡈岠 攨 grep 㡈 make 愈슐 슐 攨뵼 ⌸ ㄼ 攨솜 岠攨솜 攨 㡈ㄼ슐 怼怼 㡈 怼怼怼 攨솜 㡈攨㡈岠 슐ㄼㄼ岠슐 슐⌸ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸슐岠㡈슐攨 ㄼ荬 攨 ㄼ슐⌸ ⏄ grep-2.0㡈 슐ㄼㄼ岠슐 슐⌸ ⌸슐岠㡈슐 ㄼ⌸⏄ 荬 攨 ㄼ슐⌸ ⏄ make-3.78.1 愈슐 㡈 ㄼ슐솜 攨솜 㡈攨㡈岠 ⌸슐岠㡈슐 侈 ﵈㡈 ⟀쿨﵈슐 攨뵼 ⌸ 攨 ⌸ ㄼ㡈슐 岠攨솜 荬 岠攨 ⌸⏄솜㡈⌸攨 슐 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ㄼㄼ슐ㄼ岠⌸ㄼ램
愈ዼ怼
㞬艌ዼ ፠ 怴፠ 怼壌㞬 愈ዼ፠ 怼፠龈龈ዼዼ怴 ዼ ፠ 侈 Change Set 1
Retest-all Selected Reduction
侈쿨 ﵈
愈ዼ
Average 侈㷤 70%
㞬艌ዼ ፠ 怴፠ 怼壌㞬 愈 怼፠龈龈ዼዼ怴 ዼ ፠ ዼ壌 ዼ龈龈怼፠ ዼ龈 怼壌侈
Change Set 1 Retest-all Selected Reduction
Change Set 2 Change Set 3 ⟀⟀ 侈侈 侈侈 쿨﵈ 쿨﵈
侈 ⟀﵈
Change Set 2 Change Set 3 侈⟀ 侈 侈 ⟀﵈ ⟀﵈
Average 侈 25%
ㄼ 뵼ㄼ⌸슐岠솜슐슐 ㄼㄼ슐솜슐 攨 ABB1 愈ዼ 怼 슐 攨뵼슐 ㄼ 솜ㄼ 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 㡈 㡈ㄼ 슐ㄼㄼ岠ㄼ 攨 ㄼㄼ슐⌸ ⏄ 侈 愈攨 ⏄ 㡈 ⟀⟀ 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 侈쿨 攨⌸攨 슐 뵼ㄼㄼ 슐ㄼㄼ岠ㄼ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⏄⌸ㄼ ㄼ ⌸슐 岠攨ㄼ岠 㡈 ⏄ㄼ슐ㄼ侈侈攨⌸攨 슐뵼ㄼㄼ슐ㄼㄼ岠ㄼ⏄⌸ㄼ ㄼ슐ㄼ岠攨 㡈 ⌸ 슐ㄼ슐 攨 岠攨ㄼ 岠 㡈 ⏄ㄼ슐 ㄼ 㡈ㄼ㡈⏄ㄼ ㄼ솜岠⌸攨 ⌸ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸슐 㡈攨솜 쿨 ﵈슐 㡈ㄼ 攨 荬 램 솜슐⌸ ⏄ 㡈⌸舜 뵼⌸슐ㄼ 怴怼 뵼⌸ ㄼ 攨 ㄼ舜 攨솜 ⌸ㄼ ⌸⌸ 侈 岠攨 ⌸⏄솜㡈⌸攨 슐
2012 28th IEEE International Conference on Software Maintenance (ICSM)
뵼ㄼㄼ슐ㄼㄼ岠ㄼ 攨 ㄼ 솜슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼ⏄㡈ㄼ슐슐 攨 뵼 ⌸岠 슐ㄼ 攨 岠攨ㄼ 岠 㡈 ⏄ㄼ ⌸슐 㡈ㄼ슐슐ㄼ 㡈슐 슐 攨뵼 ⌸
愈ዼ 愈슐 㡈 ㄼ슐솜 攨솜 㡈攨㡈岠 ⌸슐岠㡈슐 㡈攨솜 ⟀﵈ 岠攨 ⌸⏄솜㡈⌸攨 슐攨ㄼㄼㄼ슐ㄼ D. Study 3: Regression Testing Time Savings 怼 ⌸슐 슐ㄼ岠⌸攨 뵼ㄼ 岠㡈岠솜㡈ㄼ ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ㄼ 㡈 ⌸슐 슐㡈ㄼ 램 攨솜 㡈攨㡈岠 岠攨㡈ㄼ 攨 ㄼ ㄼㄼ슐舜㡈 㡈攨㡈岠 ㄼㄼ슐솜슐㡈ㄼ슐 攨뵼 ⌸ 愈ዼ 怼hm㡈 s ㄼㄼ슐ㄼ 攨솜슐⌸ 솜ㄼ슐㡈 슐ㄼ岠攨 슐ㄼ슐ㄼ岠⌸ㄼ램荬 1) Overheads of Our Approach
ㄼ ⌸ㄼ 攨ㄼ ㄼ㡈 ⌸ 岠솜ㄼ 램 攨솜 㡈攨㡈岠 슐 㡈ㄼ ⌸
愈ዼ 怼荬 㡈슐 ㄼㄼ㡈⌸ 岠攨攨 ㄼ 슐 ㄼ build time 攨 솜⌸⌸ ⏄ ㄼ 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ 뵼⌸ CodeSurfer ㄼ slicing time 攨 岠攨솜ㄼ ㄼ ⌸㡈岠 攨 岠攨ㄼ 岠 㡈 ⏄ㄼ슐 㡈 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 㡈 ㄼ selection time 攨 ㄼ ㄼ岠솜⌸ ⏄ ㄼ슐ㄼㄼ岠⌸攨 㡈⏄攨⌸ ⌸⏄솜ㄼ⟀荬 CodeSurfer ㄼ 攨슐 슐ㄼㄼ㡈 슐㡈⌸岠 攨⏄㡈 㡈 㡈램슐ㄼ슐 攨 ㄼ 슐攨솜岠ㄼ 岠攨ㄼ 램 㡈 슐㡈ㄼ 램 ⌸ ㄼ⏄㡈⌸ ⏄ 뵼⌸ ㄼ 岠攨⌸ㄼ㡈 ⌸ 瀜슐㡈⏄ㄼ슐攨 ㄼ슐攨 뵼㡈ㄼ솜⌸Build time⌸슐 ㄼ⌸ㄼㄼ稄솜⌸ㄼ 攨 ⌸슐솜⌸슐㡈⏄ㄼSlicing time⌸슐 ㄼ⌸ㄼ ㄼ稄솜⌸ㄼ 攨 岠攨솜ㄼ ㄼ ⌸㡈岠 슐ㄼ 㡈슐 ㄼ 攨뵼㡈 슐⌸岠ㄼ 솜슐⌸ ⏄ ㄼ⌸ 攨㡈⌸攨 岠攨솜ㄼ솜⌸ ⏄ ㄼ솜⌸슐㡈⏄ㄼ ㄼ 솜⌸⌸ㄼ슐솜슐솜㡈램⌸ ㄼ攨ㄼ攨 攨솜슐攨㡈램슐㡈ㄼ솜岠 攨 ⏄ㄼ 㡈 슐⌸岠ㄼ ⌸ㄼ슐 뵼 ⌸岠 㡈ㄼ 솜슐솜㡈램 ⌸ ㄼ 攨ㄼ 攨 㡈 ㄼ뵼슐ㄼ岠攨 슐ㄼ 岠ㄼ⌸ ⌸슐㡈ㄼ뵼ㄼ⌸⏄ 攨ㄼ ㄼ슐⌸岠ㄼ⌸ㄼ슐 㡈 攨 램岠攨 슐⌸ㄼ 솜⌸⌸ㄼ攨ㄼ ㄼ㡈슐⌸ 岠솜ㄼ램岠 㡈 ⏄ㄼ ⌸㡈岠㡈 㡈램슐⌸슐፠솜ㄼ ㄼ⌸ㄼ 슐뵼ㄼㄼ솜 攨 㡈壌稄솜㡈舜 岠攨ㄼ演⌸ 攨뵼슐龈ㄼㄼ㡈岠 ⌸ ㄼ뵼⌸ 壌 愈艌 2) Testing Time Savings
ㄼ ⌸슐 ⌸ㄼ攨뵼슐⌸ 愈ዼ怼슐 攨뵼 ㄼ㡈岠솜㡈ㄼ슐⌸ ⏄ ⌸ㄼ뵼⌸ ㄼ슐ㄼㄼ岠ㄼ岠攨 ⌸⏄솜㡈⌸攨 슐⌸ㄼCS’荬램 ㄼㄼㄼ슐舜 㡈 㡈攨㡈岠 㡈 攨솜 㡈攨㡈岠 㡈⌸岠솜㡈램 TestTimePerC ㄼㄼ슐ㄼ 슐 ㄼ ⌸ㄼ 攨 ㄼ슐⌸ ⏄ 攨 ㄼ 슐⌸ ⏄ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ⌸ 岠솜⌸ ⏄ ㄼ ⌸ㄼ 攨 슐ㄼ⌸ ⏄ 솜 ㄼ 岠攨 ⌸⏄솜㡈⌸攨 CS’ ㄼ 攨ㄼ슐 ㄼ 슐⌸ㄼ 攨 CS’ ⌸ㄼ ㄼ 솜ㄼ 攨 슐ㄼㄼ岠ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 ㄼ ⌸ㄼ 㡈瀜ㄼ 램 ⌸ ㄼㄼ 㡈攨㡈岠 ㄼ슐 ⌸슐 ㄼ 攨솜岠 攨 ㄼ슐ㄼ 뵼攨 㡈岠攨슐 ⌸⏄ ⌸⏄ ㄼ ⌸ ㄼ㡈ㄼ ⌸ bold 愈슐 㡈 ㄼ슐솜 ㄼ ㄼ슐⌸ ⏄ ⌸ㄼ 슐㡈ㄼ Tsaved荬 램 攨솜 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ⌸슐⟀⌸ 솜ㄼ슐⟀﵈荬㷤쿨⌸ 솜ㄼ슐⟀⟀﵈荬 㡈 侈쿨 攨솜슐 侈﵈荬 攨 grep make 㡈 ABB1 ㄼ슐ㄼ岠⌸ㄼ램㡈슐슐 攨뵼 ⌸ ㄼ㡈슐뵼攨攨뵼슐⌸ 愈ዼ怼
愈ዼ怼
ዼ壌 ዼ龈龈怼፠ ዼ龈 怼壌 怼艌ዼ龈愈怼壌龈演怼 ፠㞬 愈 ፠愈怴
TestTimePerC
Testing Time with CS’ selected by different Approaches
Overhead
Testing Time Saving
CS’ 램Retest-all
⌸ㄼ㡈瀜ㄼ 램 ㄼㄼ슐舜㡈Tall荬 CS’ 램攨솜㡈攨㡈岠
⌸ㄼ㡈瀜ㄼ 램攨솜 㡈攨㡈岠 Tselect 荬 Build time Selection time Overhead Tsaved = Tall –Tselect荬 - Overhead Tsaved / Tall
grep 侈 쿨
make ⟀ 侈
ABB1 ⟀ 侈⟀
70 m
700 m
795 h
侈
60 m
300 m
600 h
侈슐 ⟀ ⟀
㷤 侈 侈㷤
⟀
㷤쿨
侈쿨
⟀﵈
⟀⟀﵈
侈﵈
ዼ愈 ዼ演፠ 瓤
A. Configurable System Regression Testing 愈攨㡈岠 ㄼ슐 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄攨 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ슐枼侈㷤댨枼⟀댨枼댨슐솜램 ㄼ⌸슐슐솜ㄼ攨 ⌸攨⌸ ⏄ ㄼ ㄼ ㄼ岠⌸ㄼ ㄼ슐슐 攨 岠攨 ⌸⏄솜㡈⌸攨 슐㡈⌸ ⏄ 攨 ㄼ슐⌸ ⏄ 㡈
ㄼ뵼ㄼ슐⌸攨 攨 슐램슐ㄼ፠솜ㄼ⌸攨솜슐뵼攨瀜枼侈댨슐솜⌸ㄼ ㄼ ⌸㡈岠 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈岠攨슐슐 솜⌸ㄼ ㄼ슐⌸攨 슐 攨 㡈 슐램슐ㄼ 㡈슐 ⌸ ㄼ攨ㄼ슐 ፠솜 ㄼ⌸攨솜슐 㡈攨㡈岠 ⌸攨⌸⌸ㄼ슐 ㄼ 솜 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ㄼ ㄼ뵼 ㄼ슐⌸攨 攨 ㄼ 슐램슐ㄼ ⌸ 攨ㄼ 攨 ⌸攨ㄼ ㄼ ㄼ㡈램 㡈솜 ㄼㄼ岠⌸攨 㡈ㄼ 攨뵼ㄼㄼ ⌸ 슐솜 ㄼ슐 攨 슐攨ㄼ ⌸⌸㡈⌸攨 슐 ⌸슐 ⌸ ㄼ稄솜⌸ㄼ슐 ⌸ 攨㡈⌸攨 攨 ⌸攨 ㄼ슐⌸攨 슐 뵼 ⌸岠 ⌸슐
攨 㡈뵼㡈램슐 㡈㡈⌸㡈ㄼ 龈ㄼ岠攨 ⌸ ㄼ稄솜⌸ㄼ슐 㡈 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈⌸攨 슐 攨 ㄼ ⌸攨⌸⌸ㄼ ⌸슐 ⏄ㄼ ㄼ㡈ㄼ 램 ㄼ 怴怼 㡈攨㡈岠 뵼 ⌸岠 ⌸슐 攨 㡈뵼㡈램슐 ㄼ 岠㡈슐ㄼ ⌸ 㡈램 ⌸攨⌸⌸㡈⌸攨 㡈攨㡈岠 ㄼ슐 攨 攨 㡈ㄼ슐슐 ㄼ ㄼ솜 㡈 岠램 攨ㄼ ㄼ岠ㄼ 램 㡈 㡈 ㄼ 㡈 枼侈댨 攨攨슐ㄼ 㡈 㡈攨㡈岠 攨 슐솜攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 攨 슐램슐ㄼ슐 㡈 ㄼ ⌸⌸ ㄼ稄솜ㄼ 岠 㡈 ⏄ㄼ슐 ⌸ 攨 舜岠攨ㄼ 㡈슐 攨 ㄼ 슐램슐ㄼ ㄼ⌸ 㡈攨㡈岠 攨岠솜슐ㄼ슐 攨 岠 㡈 ⏄ㄼ슐 攨 㡈㡈㡈슐ㄼ슐 㡈 슐⌸ㄼ 岠攨 ⌸⏄솜㡈⌸攨 ⌸ㄼ슐 솜 攨ㄼ슐 攨 岠攨 슐⌸ㄼ ㄼ 岠攨ㄼ 岠 㡈 ⏄ㄼ슐 ㄼ뵼ㄼㄼ 뵼攨 ㄼ슐⌸攨 슐攨 㡈슐램슐ㄼ B. Regression Test Selection 怼 㡈⌸⌸攨 㡈ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⏄⌸ㄼ 㡈 ⌸ ⌸⌸㡈 ㄼ슐⌸攨 攨 㡈슐램슐ㄼS㡈 㡈ㄼ슐슐솜⌸ㄼT㡈슐솜슐ㄼ攨 ㄼ슐슐T’ 㡈슐攨ㄼ 슐ㄼㄼ岠ㄼ 攨 T 攨 ㄼ슐 㡈 ㄼ뵼 ㄼ슐⌸攨 S’ 攨 S 愈舜 攨岠 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ㄼ슐 枼侈댨 㡈ㄼ 攨 슐㡈 ㄼ ㄼ岠㡈솜슐ㄼ ㄼ램 㡈램 ⌸슐슐 슐攨ㄼ ㄼ슐 岠㡈슐ㄼ슐 㡈 ㄼㄼ㡈 㡈솜슐 ⌸ ㄼ 攨⌸ ⌸ㄼ 攨⏄㡈 怼 슐ㄼ㡈 safe ㄼ슐 岠㡈슐ㄼ 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ㄼ슐 枼댨 슐ㄼㄼ岠 all ㄼ슐 岠㡈슐ㄼ슐 ⌸ ㄼ 攨⌸⏄⌸ 㡈 ㄼ슐 슐솜⌸ㄼ 뵼 ⌸岠 岠㡈 ㄼㄼ㡈 㡈솜슐 ⌸ ㄼ 攨⌸ ⌸ㄼ 攨⏄㡈 攨 ㄼㄼ ㄼ 㡈 ㄼ슐ㄼ 㡈 슐㡈 ㄼㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 枼㷤댨㡈슐ㄼ 攨 㡈 㡈램⌸ ⏄ ㄼ怴攨 攨 攨뵼壌㡈 슐怴 壌荬攨 S㡈 S’ 攨뵼ㄼㄼ㡈⌸⌸攨 㡈ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄㡈攨㡈岠 ㄼ슐攨 攨 岠攨 슐⌸ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐 ⌸ ㄼ슐⌸ ⏄ 怼 岠攨 ⌸⏄솜㡈ㄼ 슐램슐ㄼ ㄼ슐⌸ ⏄ 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 ⌸슐 㡈슐 ⌸攨㡈 㡈슐 ㄼ슐 岠㡈슐ㄼ 슐ㄼㄼ岠⌸攨 ፠솜㡈攨㡈岠 ⌸슐㡈岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 㡈 ⌸슐岠攨ㄼㄼ 㡈램攨㡈⌸⌸攨 㡈ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐슐ㄼㄼ岠⌸攨 㡈攨㡈岠 ㄼ슐
ㄼㄼ 㡈슐 ㄼㄼ 슐攨ㄼ 뵼攨瀜 枼⟀댨枼댨 攨 솜슐⌸ ⏄ 攨⏄㡈 슐⌸岠⌸ ⏄ 攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐슐ㄼㄼ岠⌸攨 龈⌸岠⌸ ⏄舜㡈슐ㄼㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄㡈攨㡈岠 ㄼ슐 岠㡈 ㄼ 岠㡈ㄼ⏄攨⌸ㄼ ⌸ 攨뵼攨⏄攨솜슐枼댨 㡈攨㡈岠 ㄼ슐 㡈 솜슐ㄼ 슐㡈⌸岠 슐⌸岠⌸ ⏄ 㡈 㡈攨㡈岠 ㄼ슐 㡈 솜슐ㄼ 램 㡈⌸岠 슐⌸岠⌸ ⏄ ㄼㄼ ㄼ岠 ⌸稄솜ㄼ슐 솜슐ㄼ 攨⏄㡈 슐⌸岠⌸ ⏄ 攨 攨 攨 㡈 ㄼ뵼 攨⏄㡈슐 攨 ⌸ㄼ ⌸ 램 㡈 ㄼ岠ㄼ 슐㡈ㄼㄼ 슐 愈⏄㡈⌸ ㄼ슐ㄼ㡈攨㡈岠 ㄼ슐㡈ㄼ㡈⌸岠㡈ㄼ攨ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 㡈⌸⌸攨 㡈 슐램슐ㄼ슐 뵼 ㄼㄼ⌸ ㄼ 攨岠솜슐 ⌸슐 攨 ㄼ슐 岠㡈슐ㄼ 슐ㄼㄼ岠⌸攨 怼 岠攨 㡈슐 攨솜 㡈攨㡈岠 㡈⌸ㄼ슐 슐㡈⌸岠슐⌸岠⌸ ⏄ 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ슐뵼 ㄼㄼ⌸ ㄼ 攨岠솜슐⌸슐 攨 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 怼
怴፠怴㞬龈怼፠
怼 ⌸슐 㡈ㄼ 뵼ㄼ ⌸ 攨솜岠ㄼ ㄼ ⌸슐 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 㡈攨㡈岠 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 岠攨 ⌸⏄솜㡈ㄼ
137
2012 28th IEEE International Conference on Software Maintenance (ICSM)
슐램슐ㄼ슐 ፠솜 슐솜램 ㄼ슐솜슐 슐 攨뵼 㡈 岠攨㡈ㄼ 攨 ㄼ retest-all 㡈攨㡈岠 攨솜 㡈攨㡈岠 ⌸슐岠㡈슐 侈⟀ ﵈攨 ﵈攨 岠攨 ⌸⏄솜㡈⌸攨 슐 㡈슐ㄼ솜 㡈 ፠솜 㡈攨㡈岠 㡈슐攨 슐㡈ㄼ슐 ﵈ 攨 ⟀⟀ ﵈攨 ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ ⌸ㄼ 뵼 ⌸ㄼ ㄼ㡈⌸ ⌸ ⏄ ㄼ 㡈솜ㄼㄼ岠⌸攨 岠㡈㡈⌸⌸램㡈 岠攨ㄼ岠攨ㄼ㡈⏄ㄼ攨 ㄼㄼㄼ슐舜㡈 㡈攨㡈岠 怼 攨솜 㡈攨㡈岠 뵼ㄼ 㡈슐슐솜ㄼ 㡈 ㄼ 슐ㄼ 攨 岠攨 ⌸⏄솜㡈ㄼ 攨⌸攨 슐 ⌸슐 ㄼ 슐㡈ㄼ 攨 攨 㡈 ㄼ뵼 ㄼ슐⌸攨 슐 솜 슐攨ㄼ 岠 㡈 ⏄ㄼ슐 ㄼ뵼ㄼㄼ ㄼ슐⌸攨 슐 㡈램 㡈 攨 ㄼ攨ㄼ 攨⌸攨 슐 怼 슐솜岠 슐⌸솜㡈⌸攨 슐 ⌸ 㡈⌸⌸攨 攨 岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 岠攨 ⌸⏄솜㡈⌸攨 㡈솜⏄ㄼ 㡈⌸攨 攨ㄼ솜岠⌸攨 ㄼ岠 ⌸稄솜ㄼ슐㡈ㄼ㡈슐攨 ㄼ稄솜⌸ㄼ演ㄼ뵼⌸㡈ㄼ슐슐 ㄼ슐ㄼ攨ㄼ슐⌸ 솜솜ㄼ뵼攨瀜 怼 ⌸슐㡈ㄼ뵼ㄼ⌸ 攨솜岠ㄼ㡈 㡈攨㡈岠 攨岠攨 ⌸⏄솜㡈⌸攨 슐ㄼㄼ岠⌸攨 怼 攨솜 ㄼ⌸攨솜슐 ㄼ슐ㄼ㡈岠 뵼ㄼ ⌸ 攨솜岠ㄼ 㡈 㡈攨㡈岠 攨 岠攨 ⌸⏄솜㡈⌸攨 ⌸攨⌸⌸㡈⌸攨 枼侈댨 演ㄼ ㄼ ㄼ岠 㡈㡈岠攨⌸ 㡈⌸攨 攨 ㄼ슐ㄼ㡈攨㡈岠 ㄼ슐㡈램 솜 ㄼ⌸攨ㄼ ㄼㄼ슐⌸ ⏄ ㄼ ㄼ岠⌸ㄼ ㄼ슐슐 㡈 ㄼ ⌸岠⌸ㄼ 岠램 岠攨㡈ㄼ 攨ㄼ⌸ ㄼ 㡈攨㡈岠 㡈攨 ㄼ ⌸ 㡈램 ⌸ ㄼ 슐솜ㄼ岠슐 뵼ㄼ 슐솜⌸ㄼ ㄼ 攨ㄼ 攨 impact explosion 枼侈댨枼쿨댨 攨ㄼ슐 攨 슐 攨뵼 㡈 램 ⌸㡈岠 攨 ㄼㄼ ㄼ岠⌸ㄼ ㄼ슐슐攨 攨솜 㡈攨㡈岠 攨뵼ㄼㄼ 뵼ㄼ 뵼⌸⌸ ㄼ슐⌸⏄㡈ㄼ ㄼㄼ ㄼ岠攨 ⌸㡈岠ㄼ 攨슐⌸攨 ⌸ ㄼ 㡈슐㡈 㡈攨 攨솜 솜솜ㄼ뵼攨瀜 愈怴瓤፠演ዼ壌艌ዼ 演ㄼ 㡈 瀜 壌㡈㡈 ㄼ岠 怼 岠 攨 攨⌸⌸ ⏄ ㄼ岠 ⌸岠㡈 슐솜攨 攨 CodeSurfer ㄼ슐㡈⌸岠㡈 㡈램슐⌸슐 攨攨 솜슐ㄼ ⌸ ⌸슐 㡈ㄼ
枼侈侈댨
枼侈댨
枼侈㷤댨
枼侈댨
枼侈⟀댨
枼侈댨
枼侈쿨댨
枼侈댨
枼侈댨
ዼ ዼ ዼ怴ዼ龈 枼侈댨
艌愈岠 㡈램㡈㡈 攨⌸ 슐攨 㡈岠⌸岠㡈岠 㡈 ⏄ㄼ⌸㡈岠㡈 㡈램슐⌸슐㡈슐ㄼ 攨 슐㡈⌸岠 攨⏄㡈 슐⌸岠⌸ ⏄ 攨 ⌸ 솜슐⌸㡈 슐攨 뵼㡈ㄼ 슐램슐ㄼ슐 International Conference on Software Engineering (ICSE)侈侈 쿨舜쿨⟀⟀ 枼댨 ፠ 愈 ㄼ슐ㄼ 攨⏄㡈 㡈 㡈램슐⌸슐 㡈 슐ㄼ岠⌸㡈⌸㡈⌸攨 攨 ㄼ 怴 攨⏄㡈⌸ ⏄ 㡈 ⏄솜㡈⏄ㄼ ㄼ슐⌸슐 怼瓤㞬 㞬 ⌸ㄼ슐⌸램 攨 怴攨ㄼ 㡈⏄ㄼ 侈 枼㷤댨 愈 ㄼ뵼슐 怴 ⌸㡈 俸 㡈⌸岠 ㄼ 㡈 愈 龈 㡈⌸ 㞬슐⌸ ⏄ 솜㡈⌸攨 㡈 㡈램슐⌸슐 攨 㡈슐슐ㄼ슐슐⌸ ⏄ 㡈 岠攨㡈⌸ ⏄ ㄼ슐⌸ ⏄ 岠攨ㄼ㡈⏄ㄼ 岠⌸ㄼ⌸㡈 IEEE Transactions on Software Engineering 㷤荬 枼댨 龈 愈 攨 龈攨 뵼㡈ㄼ 怴 㡈 ⏄ㄼ 怼㡈岠 愈 㡈램슐⌸슐 IEEE Computer Society Press侈 枼⟀댨 ⌸ 瀜ㄼ램 龈ㄼ㡈 ⌸岠슐 ⏄솜⌸ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 岠攨슐 ㄼ솜岠⌸攨 IEEE Transactions on Software Engineering (TSE)㷤荬侈쿨 ⟀侈 枼댨 ⌸ 瀜ㄼ램 ㄼ 愈⌸岠㡈⌸攨 攨 攨⏄㡈 龈⌸岠⌸ ⏄ 攨 ㄼ⏄ㄼ슐슐⌸攨
ㄼ슐⌸ ⏄ Information and Software Technology Special Issue on Program Slicing侈⟀㷤⟀ 枼쿨댨 ⌸ 瀜ㄼ램 壌攨 㡈 艌 㡈㡈 愈 ㄼ⌸⌸岠㡈 슐솜램 攨 슐㡈⌸岠 攨⏄㡈 슐⌸岠ㄼ 슐⌸ㄼ ACM Transactions on Software Engineering and Methodology (TOSEM)侈荬쿨侈舜㷤 枼댨 龈 㡈ㄼ슐 㡈 龈 攨뵼⌸ 怼 岠ㄼㄼ 㡈 攨⏄㡈 ㄼ슐⌸ ⏄ 솜슐⌸ ⏄攨⏄㡈 ㄼㄼ ㄼ 岠ㄼ ⏄㡈 슐 ACM SIGPLAN-SIGACT symposium on Principles of programming languages(POPL)侈㷤㷤㷤 枼댨 艌 怴攨 ㄼ 龈 㡈㡈 艌 ㄼ㡈 㡈 壌 怴 㡈攨 ㄼ 愈ዼ 壌슐램슐ㄼ愈 㡈攨㡈岠 攨ㄼ슐⌸ ⏄㡈슐ㄼ攨 岠攨⌸ 㡈攨⌸㡈ㄼ슐⌸⏄ IEEE Transactions on Software Engineering (TSE)㷤쿨荬侈쿨 㷤쿨 枼侈댨 艌 怴攨 ㄼ 艌 뵼램ㄼ 㡈 龈 ⌸ 怴攨 슐솜岠⌸ ⏄ ⌸ ㄼ㡈岠⌸攨 ㄼ슐 슐솜⌸ㄼ슐 攨 ⌸⏄ 램舜岠攨 ⌸⏄솜㡈ㄼ슐램슐ㄼ슐⌸ ㄼㄼ슐ㄼ 岠ㄼ攨 岠攨 슐㡈⌸ 슐
138
枼댨
枼侈댨
枼댨
枼㷤댨
枼댨 枼⟀댨
枼댨
枼쿨댨 枼댨 枼댨 枼㷤댨 枼㷤侈댨
愈 ⏄ㄼㄼ램 㡈攨㡈岠 IEEE Transactions on Software Engineering (TSE),㷤⟀荬㷤㷤舜⟀ 艌 怴攨 ㄼ 龈 램ㄼ 㡈 壌 攨 ㄼㄼ ㄼ슐⌸ ⏄ 㡈岠攨슐슐 岠攨 ⌸⏄솜㡈⌸攨 슐 怼⌸岠㡈⌸攨 슐 攨 岠攨⌸ 㡈攨⌸㡈 ㄼ슐⌸ ⏄ ACM SIGSOFT Software Engineering Notes侈舜 攨 龈 壌 ዼ㡈솜 㡈 壌 攨 ㄼㄼ 龈솜攨⌸ ⏄ 岠攨 攨ㄼ ㄼ ㄼ⌸ㄼ 㡈⌸攨 뵼⌸ ㄼ슐⌸ ⏄ ㄼ岠 ⌸稄솜ㄼ슐 愈 ⌸ 㡈슐솜岠솜ㄼ 㡈 ⌸슐 攨ㄼ ⌸㡈 ⌸㡈岠 International Journal on Empirical Software Engineering侈荬⟀⟀㷤⟀ 龈 攨솜岠 손 艌 怴攨 ㄼ 㡈 愈 攨ㄼ 怼 岠ㄼㄼ 㡈 岠攨ㄼ⌸ ⏄ 㡈㡈램 㡈⌸솜ㄼ 岠 㡈㡈岠ㄼ⌸㡈⌸攨 ⌸ 㡈⏄ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐㡈岠ㄼ슐 International Symposium on Software Testing and Analysis (ISSTA)侈쿨쿨舜 侈쿨
壌㡈ㄼ슐艌㡈攨舜艌瓤⌸愈攨ㄼ㡈 壌 攨 ㄼㄼ 愈 ㄼ⌸⌸岠㡈 슐솜램 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 슐ㄼㄼ岠⌸攨 ㄼ岠 ⌸稄솜ㄼ슐 IEEE Transactions on Software Engineering (TSE)侈荬侈侈 瓤솜 演㡈㡈岠ㄼ㡈 愈艌壌㡈攨龈攨 뵼㡈ㄼ 㡈솜⌸ ㄼ㡈岠⌸攨 슐 㡈 ⌸⌸岠㡈⌸攨 슐 攨슐攨 뵼㡈ㄼㄼ슐⌸ ⏄IEEE Transactions on Software Engineering (TSE)㷤荬侈侈 愈㡈 㡈龈 艌㡈 ⌸龈龈⌸ 㡈艌㡈攨㡈 愈፠슐攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄⌸ ㄼㄼ슐ㄼ 岠ㄼ攨 攨 舜岠攨ㄼ岠 㡈 ⏄ㄼ슐International Conference on Software Testing (ICST)侈侈侈舜㷤 ᰼솜 艌 愈岠 㡈램㡈 㡈 攨⌸ 슐攨 怼㡈岠 㡈 㡈램슐⌸슐 攨 岠攨 ⌸⏄솜㡈⌸攨 岠 㡈 ⏄ㄼ슐 攨 ㄼ슐 岠㡈슐ㄼ 슐ㄼㄼ岠⌸攨 International Symposium on Software Reliability Engineering (ISSRE) 侈侈 侈舜侈 ᰼솜 艌 怴攨 ㄼ 㡈 壌 攨 ㄼㄼ 怴攨 ⌸⏄솜㡈⌸攨 舜㡈뵼㡈ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ 愈 ㄼ⌸⌸岠㡈슐솜램攨 슐㡈⌸ ⏄㡈 ⌸攨⌸⌸㡈⌸攨 International Symposium on Software Testing and Analysis (ISSTA), 쿨⟀舜⟀ ዼ ㄼ⌸슐 ㄼ 怴 龈攨 ⏄ 瓤舜瓤 艌㡈 龈 攨슐ㄼ 㡈 愈 攨ㄼ 㞬슐⌸ ⏄ 슐램攨⌸岠ㄼ㡈솜㡈⌸攨 攨솜 ㄼ슐㡈 ㄼ 㡈⌸攨⌸ 岠攨 ⌸⏄솜㡈ㄼ 슐攨 뵼㡈ㄼ 슐램슐ㄼ슐 International Conference on Software Engineering (ICSE) 侈⟀舜⟀ 攨⌸ 슐攨 㡈 演 ⌸ㄼ ㄼ슐⌸ ⏄ 攨 솜슐ㄼ舜岠攨 ⌸⏄솜㡈ㄼ 슐攨 뵼㡈ㄼ 슐램슐ㄼ슐 솜슐⌸ ⏄ ⌸ㄼ뵼㡈슐 International Symposium on Software Reliability Engineering (ISSRE)侈쿨쿨侈 壌 攨 ㄼㄼ 㞬 岠 怴怴 솜㡈 艌㡈攨⌸攨⌸⌸⌸ ⏄ㄼ슐 岠㡈슐ㄼ슐 攨 ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐⌸ ⏄ IEEE Transactions on Software Engineering (TSE)쿨侈荬侈 壌 攨 ㄼㄼ㡈 艌 㡈攨 愈 㡈램⌸ ⏄ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 슐ㄼㄼ岠⌸攨 ㄼ岠 ⌸稄솜ㄼ슐 IEEE Transactions on Software Engineering (TSE) 荬侈⟀⟀⟀侈 壌 攨 ㄼㄼ 㡈 艌 㡈攨 ዼ⌸⌸岠㡈 슐솜⌸ㄼ슐 攨 㡈 슐㡈 ㄼ ㄼ⏄ㄼ슐슐⌸攨 ㄼ슐 슐ㄼㄼ岠⌸攨 ㄼ岠 ⌸稄솜ㄼ IEEE Transactions on Software Engineering (TSE)荬侈侈侈 艌 演ㄼ⌸슐ㄼ 攨⏄㡈 슐⌸岠⌸ ⏄ International Conference on Software Engineering (ICSE)侈侈㷤舜 怴俸⌸㡈艌怴攨 ㄼ 㡈 愈攨ㄼ怴攨ㄼ⌸ ⏄㡈㡈램슐 攨ㄼ ⌸岠⌸ㄼ 㡈솜 岠 㡈㡈岠ㄼ⌸㡈⌸攨 ⌸ 岠攨ㄼ 岠攨 ⌸⏄솜㡈⌸攨 슐㡈岠ㄼ슐 IEEE Transactions on Software Engineering (TSE)㷤侈侈荬㷤 怼舜怴 俸攨攨 愈 龈솜슐슐㡈 愈 艌ㄼ攨 㡈 愈 攨ㄼ ዼ ㄼ岠⌸ㄼ 㡈 슐岠㡈㡈ㄼ 슐攨 뵼㡈ㄼ 岠攨㡈⌸⌸⌸램 ㄼ슐⌸ ⏄ International symposium on Software Testing and Analysis (ISSTA),㷤쿨 CodeSurfer壌㡈㡈 ㄼ岠 怼 岠 껤껤뵼뵼뵼⏄㡈㡈ㄼ岠 岠攨껤攨솜岠슐껤岠攨ㄼ슐솜 ㄼ ㄼㄼ龈攨 뵼㡈ㄼ 攨솜 㡈⌸攨 gcov 껤껤⏄岠岠⏄ 솜攨⏄껤攨 ⌸ ㄼ攨岠슐껤⏄岠岠껤壌岠攨 쿨 壌㞬make 껤껤뵼뵼뵼⏄ 솜攨⏄껤슐攨 뵼㡈ㄼ껤㡈瀜ㄼ껤 壌㞬grep 껤껤뵼뵼뵼⏄ 솜攨⏄껤슐攨 뵼㡈ㄼ껤⏄ㄼ껤 WinMerge 껤껤뵼⌸ ㄼ⏄ㄼ攨⏄껤