[1]의 6장 테스트라는 생명 보험에서는 다음 사항에 대해서 설명한다.
- 테스트의 중요성:
- 리엔지니어링 프로젝트의 시작 단계에서 기존 시스템의 많은 부분을 변경해야 할 때 발생하는 여러 위험을 최소화하기 위해 테스트가 필요하다.
- 시스템의 기능, 디자인, 아키텍처를 변경하면서도 시스템의 신뢰성을 유지하기 위해 체계적인 테스트가 필수적이다.
- 리엔지니어링의 주요 요구사항(Force):
- 레거시 시스템에 정의된 테스트 절차가 부족한 경우가 많으며, 시스템 일부를 변경하는 것이 어렵다.
- 시스템의 모든 측면을 테스트하는 것은 불가능하며, 시간에 쫓길 때 테스트 작성은 가장 먼저 제거된다.
- 테스트 비용은 시스템의 새로운 기능 비용에 비해 고객에게 더 중요한 문제이다.
- 테스트의 특성:
- 자동화(Automation): 테스트는 자동화되어 사람의 개입 없이 실행되어야 하며, 테스트를 실행하는 데 필요한 노력을 최소화하여 개발자가 주저하지 않게 해야 한다.
- 지속성(Persistence): 테스트는 저장되어야 하며, 테스트 데이터, 수행할 작업 및 예상 결과를 문서화해야 한다.
- 반복성(Repeatability): 변경 사항이 구현된 후 테스트를 반복할 수 있어야 하며, 새로운 기능이 추가될 때마다 기존 테스트 풀에 새로운 테스트를 추가하여 시스템에 대한 신뢰도를 높일 수 있다.
- 유닛 테스트(Unit testing): 테스트는 개별 소프트웨어 컴포넌트에 연결되어 시스템의 어느 부분을 테스트하는지 명확히 식별할 수 있어야 한다.
- 독립성(Independence): 각 테스트는 다른 테스트에 대한 종속성을 최소화해야 하며, 이는 테스트에 대한 신뢰를 유지하기 위해 중요한다.
다음은 이 장에서 서명하는 패턴이다.
- 테스트 프레임워크 사용하기:
- 테스트를 쉽게 개발, 구성 및 실행할 수 있는 프레임워크를 제공하여 개발자가 회귀 테스트를 작성하고 사용하도록 장려해야 한다.
- JUnit과 같은 단위 테스트 프레임워크를 사용하면 테스트 데이터를 설정하고, 실행하고, 결과를 확인하는 기본 패턴을 쉽게 따를 수 있다.
- 구현이 아닌 인터페이스 테스트하기:
- 블랙박스 테스트를 통해 시스템 변경에도 살아남을 수 있는 재사용 가능한 테스트를 구축해야 한다.
- 컴포넌트의 퍼블릭 인터페이스를 실행하는 블랙박스 테스트는 시스템의 주요 상호작용을 테스트하는 좋은 기회이다.
- 비즈니스 규칙을 테스트로 기록하기:
- 비즈니스 규칙을 테스트 케이스로 명시적으로 인코딩하여 시스템이 구현하는 비즈니스 규칙과 동기화 상태를 유지할 수 있다.
- 비즈니스 규칙을 테스트로 기록하면 규칙의 명시성을 높이고, 향후 시스템 진화 시 규칙이 올바르게 구현되는지 확인할 수 있다.
- 이해하기 위해 테스트 작성하기:
- 레거시 시스템의 일부를 이해하고, 가설을 세우고 검증하기 위해 테스트를 작성해야 한다.
- 이러한 테스트는 향후 리엔지니어링 작업에 도움을 주며, 시스템의 특정 측면에 대한 명확한 사양을 제공한다.
결론:
리엔지니어링 프로젝트에서 테스트는 시스템 변경으로 인한 위험을 줄이고, 시스템의 신뢰성을 유지하며, 향후 개발 및 유지 보수 작업을 지원하는 중요한 역할을 한다. 체계적인 테스트 절차와 프레임워크를 통해 리스크를 최소화하고, 비즈니스 규칙을 명시적으로 기록하는 등의 접근법이 강조된다.
참고 문헌
[1] Serge Demeyer et al., "Object-oriented Reengineering Patterns"
'Software Architecture' 카테고리의 다른 글
객체 지향 리엔지니어링 패턴: 7장 마이그레이션 전략 (0) | 2024.09.25 |
---|---|
포스가 아키텍처와 함께하길(May the Force be with the Architecture) (6) | 2024.09.11 |
객체 지향 리엔지니어링 패턴: 5장 디테일한 모델 캡처 (0) | 2024.08.28 |
객체 지향 리엔지니어링 패턴: 4장 초기 이해 (0) | 2024.08.14 |
객체 지향 리엔지니어링 패턴: 3장 첫 번째 접근 (4) | 2024.07.24 |