확률적 소프트웨어 모델링을 통한 의미적 클론 탐지Towards Semantic Clone Detection via Probabilistic Software Modeling

읽는 시간: 6 분
...

📝 원문 정보

  • Title: Towards Semantic Clone Detection via Probabilistic Software Modeling
  • ArXiv ID: 2001.07399
  • 발행일: 2020-01-22
  • 저자: Hannes Thaller, Lukas Linsbauer, Alexander Egyed

📝 초록 (Abstract)

형태적 클론은 동일한 기능을 수행하지만 텍스트 표현이 다른 프로그램 구성 요소입니다. 형태적 유사성을 감지하는 것은 어렵고, 형태적 클론 탐지는 여전히 해결되지 않은 문제입니다. 우리는 확률적 소프트웨어 모델링(PSM)을 통해 형태적 클론을 탐지할 수 있는 강력한 방법을 제시합니다. PSM은 프로그램의 구조와 런타임 동작을 검사하고 확률적 모델(PMs) 네트워크를 합성합니다. 각 PM은 프로그램 내의 메소드를 나타내며, 런타임 이벤트 생성과 평가 능력이 있습니다. 이러한 기능을 활용하여 형태적으로 동등한 메소드를 정확히 찾아냅니다. 결과는 문법적 유사성이 전혀 없는 상황에서도 높은 정밀도와 낮은 오류율로 형태적 클론을 탐지할 수 있음을 보여줍니다.

💡 논문 핵심 해설 (Deep Analysis)

This paper presents a novel approach to detecting semantic clones in software using Probabilistic Software Modeling (PSM). Semantic clones are program components that perform the same functionality but have different textual representations. Detecting these clones is challenging due to their lack of syntactic similarity, making it difficult for traditional methods to identify them.

The authors propose leveraging PSM to detect semantic equivalence between methods in a software system. PSM inspects both the structure and runtime behavior of a program and synthesizes this information into a network of probabilistic models (PMs). Each PM represents an executable method within the program, capable of generating and evaluating runtime events based on given inputs.

The process involves building PM networks for each method in the software system. The authors then use these models to compare the behavior of different methods by evaluating their likelihood under various conditions. This probabilistic inference enables accurate detection of semantic clones even when there is no syntactic similarity between the code fragments.

Experimental results demonstrate that this approach achieves high precision and low error rates, effectively identifying semantic clones without any textual resemblance. The significance lies in its ability to improve software maintenance costs by detecting and reducing duplicate code segments across a program. This method can be particularly useful for large-scale software projects where traditional methods may fall short due to the complexity of detecting purely behavioral similarities.

📄 논문 본문 발췌 (Translation)

# 서론

소스 코드 조각을 복사 및 붙여넣기하면 코드 클론이 발생합니다. 코드 클론은 유지보수 비용 증가, 나쁜 소프트웨어 설계, 버그 전파 등의 문제를 일으키는 반모양 패턴으로 여겨집니다. 코드 클론은 일반적으로 네 가지 범주로 분류됩니다. 1-3형 코드 클론은 프로그램 조각의 텍스트 복사본이며 일부 변경 사항이 포함될 수 있습니다. 4형 코드 클론은 동일한 기능을 수행하지만 문법적 유사성이 없는 프로그램 조각의 행동 복사본입니다. 예를 들어, 피보나치 알고리즘의 반복적 구현과 재귀적 구현은 텍스트적으로 유사성을 갖지 않지만 같은 기능을 수행합니다.

Juergens 등은[1] 존재하는 도구들이 4형 클론 탐지를 위한 제한적인 능력을 가지고 있음을 보여주었습니다. 이 한계는 다양한 클론 탐지 도구 비교에서 4형 클론의 부재나 명시적 배제를 통해 볼 수 있습니다. 그럼에도 불구하고, 4형 클론은 존재하며 이를 탐지하는 도구가 필요합니다.

본 논문에서는 확률적 소프트웨어 모델링(PSM)을 통한 형태적 클론 탐지(SCD-PSM) 방법을 제시합니다. SCD-PSM은 문법적 및 구조적 유사성이 없는 형태적 클론을 감지합니다. 첫 번째로, PSM을 통해 확률적 모델(PMs) 네트워크를 구성합니다. 각 PM은 분석 대상 프로그램 내의 실행 가능 요소(예: Java 메소드)를 모델링합니다. SCD-PSM은 이러한 PMs 및 그 추론 능력을 활용하여 형태적으로 동등한 실행 가능 요소를 탐지합니다. 확률적 추론을 통해 기반 확률에 기반한 유사성 지표를 측정할 수 있습니다. 이러한 확률을 사용하여 통계 검증(일반화된 근거비 테스트)을 수행하고 최종 클론 결정을 내립니다.

배경

_FACTORIAL_FOR 구현.
_FACTORIAL_WHILE 구현.
재귀적 FACTORIAL 구현.
_FOR와 WHILE 구현은 새로운 라인이 추가되고 일부 변경된 복잡한 3형 클론입니다. 재귀적 구현은 FOR 및 WHILE 구현의 문법적 유사성이 전혀 없는 4형 클론입니다.

이 접근법을 이해하기 위해 기본적인 클론 탐지와 확률적 소프트웨어 모델링에 대한 이해가 필요합니다. 프로그램 요소를 나타낼 때는 코드(예: )로, 해당 모델 요소는 (예: factorial_a)로 표기합니다.

클론 탐지

클론 탐지는 유사한 프로그램 조각을 찾는 과정입니다(그림 4 참조). 그림 4는 팩토리얼 계산의 세 가지 다른 구현 방법을 보여줍니다. 그림 1은 for 루프를 사용하고, 그림 2는 while 루프 구현을 사용합니다. 마지막으로, 그림 3은 n의 팩토리얼을 재귀적으로 계산합니다.

클론 탐지 과정에는 표현(예: 텍스트 조각), 쌍 생성(예: 유사한 크기의 텍스트 조각 쌍), 유사성 평가(예: 텍스트 조각 간의 차이 수를 계산), 그리고 클론 결정(예: 10개 미만의 차이)이 포함됩니다.

표현은 예를 들어 소스 코드, AST 등의 그래프 또는 확률적 모델(이 연구에서는 사용됨)일 수 있습니다. 쌍 생성은 두 개의 잠재적으로 클론인 코드 조각을 선택하는 과정입니다. 각 쌍은 후보 클론 쌍(또는 후보 쌍)이라고 합니다. 유사성 평가는 후보 쌍의 텍스트 조각 간 유사성을 측정합니다. 클론 결정은 유사성이 특정 기준을 충족하는 경우 후보 쌍을 클론으로 표시합니다.

유사성 지표의 속성은 클론을 두 그룹으로 나눕니다[2]. 1-3형 클론은 텍스트적 유사성을 포착하고, 4형 클론은 형태적 유사성을 포착합니다. 이러한 유형들은 점점 더 어렵게 탐지되며, 특히 4형이 가장 복잡한 유형입니다.

그림 1과 그림 2는 3형 클론의 사례입니다. 반면에, 그림 1 또는 그림 2와 그림 3은 4형 클론의 사례입니다. 참고로, 형태적 클론의 정의는 종종 텍스트 조각 간에 최대 50%의 문법적 유사성이 허용되는 것으로 완화됩니다. 그러나 우리는 이러한 클론들을 복잡한 3형 클론(추가, 삭제, 재정렬)으로 보고 형태적 클론은 아닙니다. 이는 본 연구에서 형태적 클론이 문법적 유사성을 전혀 갖지 않는다는 것을 의미합니다.

확률적 소프트웨어 모델링

확률적 소프트웨어 모델링(PSM)은 프로그램을 확률적 모델(PMs) 네트워크로 변환하는 데이터 기반 모델링 패러다임입니다. PSM은 프로그램의 구조를 추출합니다. 이를 통해 타입, 속성 및 실행 가능 요소(예: Java에서 클래스, 필드 및 메소드)가 정의됩니다. 이 구조에는 코드 요소 간의 호출 종속성이 포함되어 있으며 이를 통해 PM 네트워크의 위상이 결정됩니다.

각 PM은 프로그램 실행을 향상시킵니다. 프로그램 실행은 합성(예: 무작위 테스트), 테스트(예: 개발자 테스트) 또는 프로그램의 생산 환경에서 수행될 수 있습니다. 클론 탐지의 관점에서 보면, 합성 프로그램 실행이 충분하며 결과는 두 요소 간의 비교 기반으로 이루어집니다.

각 PM은 프로그램 내의 실행 가능 요소(예: Java 메소드)를 나타냅니다. 입력은 매개변수, 속성 읽기 및 호출 반환 값입니다. 출력은 메소드 반환 값, 속성 쓰기 및 호출 매개변수입니다. 소프트웨어 엔지니어링 관점에서 볼 때 입력과 출력의 구분은 논리적인 시각입니다. 실제 PMs는 모든 변수에 대한 공동 모델로 구분이 없는 다중 밀도 추정기를 나타냅니다.

PMs는 초기 훈련 데이터와 유사한 관찰을 생성할 수 있습니다. 더욱 중요한 점은 각 모델이 데이터의 가능성(likelihood)를 평가할 수 있다는 것입니다. 이 가능성은 모델 간의 행동적 동등성을 탐지하는 데 사용되며, 이를 프로그램 내 실행 가능 요소 사이의 형태적 동등성으로 일반화합니다.

네트워크에 있는 PMs는 실제 비 부피 보존 변환(NVP)입니다. NVP는 밀도 추정을 위한 생성 가능성 기반 잠재 변수 모델입니다. NVP는 데이터를 알려진 잠재 공간(예: 입력 매개변수 값 및 메소드의 반환 값)으로 맵핑하는 함수를 학습합니다.

샘플링은 랜덤 샘플링을 통해 기초 데이터에서 관찰 값을 생성하고 이를 원래 데이터 공간으로 역변환하여 생성됩니다. 조건부 추론은 특정 조건을 충족시키는 잠재 변수의 구성(즉, 잠재 코드)을 찾는 과정입니다.

접근법

SCD-PSM은 모델 간 유사성을 그들의 데이터 가능성으로 평가합니다. 가능성들은 최종 클론 결정에 결합됩니다.

SCD-PSM은 PSM을 통해 구성된 모델을 비교하여 행동적 동등성을 탐지합니다. 이 행동적 동등성은 프로그램 내 실행 가능 요소(즉, 메소드) 사이의 형태적 동등성으로 일반화됩니다.

유사성 평가

유사성 평가는 모델 간의 교차 가능성(cross-wise likelihood)을 통해 계산합니다. 후보 PMs 쌍이 주어지면 각 모델의 가능성을 평가하고 이를 비교하여 두 메소드 사이의 동등성을 결정합니다.

클론 결정

최종 클론 결정은 유사성 검증을 통해 이루어집니다. 이 과정에서, 모델 간의 가능성 차이를 분석하고 일정 기준 이상의 유사성이 있는 경우 클론으로 판단합니다.

Reference

이 글은 ArXiv의 공개 자료를 바탕으로 AI가 자동 번역 및 요약한 내용입니다. 저작권은 원저자에게 있으며, 인류 지식 발전에 기여한 연구자분들께 감사드립니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키