During software maintenance phase, programs are evolved for various reasons; to adapt programs to new operational environments, to correct their errors, to enhance their functionalities, or to ease future maintenance. Whenever a program is modified, it must be retested to ascertain whether changes have been made correctly and whether those changes have caused any adverse effect on its behavior. Regression testing is the activity of validating that the modified program is still right. Since testing is a complicated and expensive activity, most regression testing techniques attempt to identify only those parts of the program that are affected by a change and retest them. This activity is called change impact analysis. Moreover, they try to reuse test data obtained from the previous testing phase in order to reduce the time and effort of retesting. This dissertation describes an environment of regression testing for C++ programs. Especially, it focuses on change impact analysis and test data management.
Impact analysis technique identifies which parts should be retested after a software system is modified. We are interested in identifying the impacts of changes at the class member-level by using dependency relations among class members. We try to find out which member functions need unit-level retesting and which interactions between member functions need integration-level retesting. To get precise analysis results, we adopt a technique that classifies types of changes and analyze the impact for each type. Primitive changes, changes which are associated with C++ features, are first defined and their ripple effects are computed in order to construct a firewall for each type of changes systematically. Test data history is maintained at the class member-level and test data that execute program components in the computed firewall are selected as reusable ones. We have applied our prototype tool to a real system with small size. This case study shows some evidence that our approach gives reasonable efficiency and precision as well as being practical for analyzing change impact and selecting reusable test data in order to retest C++ programs.
소프트웨어 유지 보수 단계 동안 프로그램은 에러를 수정하거나 새로운 기능을 추가, 혹은 성능 향상 등의 여러 이유에 의해서 변경될 수 있다. 프로그램이 변경될 때마다 수정된 부분과 수정에 의해 프로그램의 영향 받은 부분이 제대로 동작하는지를 확인하기 위하여 프로그램은 재테스팅되어야 한다. 이러한 테스팅 기법을 회귀 테스팅이라고 한다. 테스팅 작업에 드는 시간과 노력을 줄이기 위하여 대부분의 회귀 테스팅 기법은 수정에 의해 영향 받은 부분만을 분석하여 프로그램의 일부분을 재테스팅하고 이 때, 개발 단계에서 생성한 테스트 데이타를 재사용한다.
이 논문에서는 객체 지향 프로그램의 특성을 고려한 회귀 테스팅 환경을 구축하기 위하여 수정 영향 분석 방법과 테스트 데이타 관리 방법을 제안하였다. 수정 영향 분석은 분석 결과가 비교적 정확하면서도 규모가 큰 프로그램을 분석하기 용이해야 하고 효율성도 제공해야 할 필요가 있다. 따라서 제안된 방법은 메소드를 테스팅의 기본 단위로 간주하고 데이타 멤버, 메소드, 클래스, 클래스 간의 상속 관계에서 일반적으로 발생할 수 있는 수정의 유형을 하여 각 유형에 따라 재테스팅이 필요한 메소드들을 찾는다. 테스트 데이타는 메소드 레벨의 히스토리 정보를 유지하도록 관리됨으로써 메소드들을 재테스팅하기 위한 테스트 데이타의 선택이 용이해진다. 마지막으로, 실제 규모의 프로그램을 대상으로 실험을 수행함으로써 제안된 방법의 분석 결과의 정확성과 실현 가능성을 보일 수 있었다.