Skip to main content
QUICK REVIEW

[논문 리뷰] Program slicing techniques and its applications

N. Sasirekha, A. Edwin Robert|arXiv (Cornell University)|2011. 08. 05.
Software Testing and Debugging Techniques인용 수 8
한 줄 요약

이 논문은 정적, 동적, 조건부, 준정적 슬라이싱을 포함한 프로그램 슬라이싱 기법에 대한 종합적인 조사 결과를 제시하며, 디버깅, 유지보수, 테스팅과 같은 소프트웨어 공학 작업에 응용 가능함을 보여준다. 자바를 사용하여 구현된 연구에서는 정적 및 동적 슬라이싱 방법을 설명하며, 데이터 흐름과 제어 흐름 기반으로 관련 프로그램 컴포넌트를 고립시키기 위해 문법적 및 의미적 분석을 강조한다.

ABSTRACT

Program understanding is an important aspect in Software Maintenance and Reengineering. Understanding the program is related to execution behaviour and relationship of variable involved in the program. The task of finding all statements in a program that directly or indirectly influence the value for an occurrence of a variable gives the set of statements that can affect the value of a variable at some point in a program is called a program slice. Program slicing is a technique for extracting parts of computer programs by tracing the programs' control and data flow related to some data item. This technique is applicable in various areas such as debugging, program comprehension and understanding, program integration, cohesion measurement, re-engineering, maintenance, testing where it is useful to be able to focus on relevant parts of large programs. This paper focuses on the various slicing techniques (not limited to) like static slicing, quasi static slicing, dynamic slicing and conditional slicing. This paper also includes various methods in performing the slicing like forward slicing, backward slicing, syntactic slicing and semantic slicing. The slicing of a program is carried out using Java which is a object oriented programming language.

연구 동기 및 목표

  • 소프트웨어 유지를 위한 다양한 프로그램 슬라이싱 기법을 분석하고 분류하는 것.
  • 슬라이싱을 통해 데이터 흐름과 제어 의존성 기반으로 관련 코드 세그먼트를 고립시켜 프로그램 이해도를 향상시킬 수 있는 방법을 탐구하는 것.
  • 정적, 동적, 정방향, 역방향, 문법적, 의미적 슬라이싱 등의 다양한 슬라이싱 방법이 특정 변수에 영향을 주는 프로그램 컴포넌트에 집중하는 데 얼마나 효과적인지 평가하는 것.
  • 디버깅, 테스팅, 응집도 측정, 프로그램 통합에 있어서 슬라이싱의 실용적 응용을 보여주는 것.
  • 실세계 소프트웨어 분석을 위한 자바 기반 객체지향 원칙을 활용한 체계적인 슬라이싱 접근법을 제공하는 것.

제안 방법

  • 실행 없이 데이터 흐름과 제어 의존성 기반으로 프로그램 문장을 분석하는 정적 슬라이싱을 적용하는 것.
  • 실제 런타임 데이터 흐름을 추적하여 특정 실행 지점에서 변수에 영향을 주는 문장을 식별하는 동적 슬라이싱을 적용하는 것.
  • 변수 발생 지점에서 그 값을 정의하는 문장으로 거슬러 올라가는 의존성 경로를 추적하기 위해 역방향 슬라이싱을 사용하는 것.
  • 주어진 지점 이후로 변수의 값을 영향을 줄 수 있는 모든 문장을 식별하기 위해 정방향 슬라이싱을 사용하는 것.
  • 소스 코드의 구조 기반으로 구현하는 문법적 슬라이싱과 프로그램 의미와 실행 컨텍스트 기반으로 구현하는 의미적 슬라이싱을 사용하는 것.
  • 객체지향 구조가 슬라이싱 정확도와 관련성에 미치는 영향을 평가하기 위해 자바 프로그램에 슬라이싱 분석을 수행하는 것.

실험 결과

연구 질문

  • RQ1소프트웨어 유지보수 과정에서 정적 슬라이싱과 동적 슬라이싱이 관련 프로그램 컴포넌트를 고립시키는 데 있어 어떤 차이를 보이는가?
  • RQ2대규모 소프트웨어 시스템의 디버깅과 테스팅에서 조건부 슬라이싱과 준정적 슬라이싱의 실용적 이점은 무엇인가?
  • RQ3객체지향 프로그램에서 문법적 슬라이싱과 의미적 슬라이싱이 프로그램 이해도를 얼마나 향상시키는가?
  • RQ4슬라이싱 기법은 재공학 과정에서 응집도 측정과 프로그램 통합을 어떻게 향상시킬 수 있는가?
  • RQ5자바와 같은 객체지향 언어에 전통적 슬라이싱 기법을 적용할 때의 한계는 무엇인가?

주요 결과

  • 데이터 흐름과 제어 의존성 경로를 추적함으로써 프로그램 슬라이싱은 관련 코드 세그먼트를 효과적으로 고립시키며, 이는 디버깅과 유지보수 효율성을 크게 향상시킨다.
  • 실제 프로그램 실행 중에 관련 문장을 식별하는 데 있어 동적 슬라이싱이 정적 슬라이싱보다 더 정확한 결과를 제공한다.
  • 역방향 슬라이싱은 변수 값의 원천으로 거슬러 내려가기 때문에 디버깅에 특히 효과적이다.
  • 정방향 슬라이싱은 데이터 값이 프로그램 전반에 걸쳐 어떻게 전파되는지 이해하는 데 도움이 되며, 이는 테스팅과 영향 분석을 지원한다.
  • 의미적 슬라이싱은 복잡한 객체지향 프로그램에서 문법적 슬라이싱을 능가한다. 이는 프로그램 동작에 대한 맥락 인식 분석 덕분이다.
  • 슬라이싱 기법을 소프트웨어 유지보수 워크플로우에 통합함으로써 대규모 코드베이스를 이해하고 수정하는 데 소요되는 시간과 노력이 감소한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.