문제

저는 매우 큰 데이터 집약적 인 레거시 애플리케이션을 작업하고 있습니다. 코드 기반 및 데이터베이스는 모두 규모가 커집니다. 저장 절차를 포함하여 모든 계층에 많은 비즈니스 논리가 퍼져 있습니다.

"단위"테스트 적용을 시작하는 방법에 대한 제안이 있습니까 (기술적으로 통합 테스트는 거의 모든 주어진 프로세스의 단일 측면에 대해 계층을 가로 질러 테스트해야하기 때문에 효율적인 방식으로 응용 프로그램으로 테스트해야하기 때문입니다. 현재 아키텍처는 모든 유형의 주입 또는 조롱을 쉽게 지원하지 않습니다. 테스트를 용이하게하기 위해 새 코드가 작성되고 있지만 레거시 코드는 어떻습니까? 데이터베이스의 데이터 자체와 비즈니스 로직에 대한 강력한 의존성으로 인해 현재 인라인 SQL을 사용하여 테스트에 사용할 데이터를 찾지만 시간이 많이 걸립니다. 뷰 및/또는 저장된 절차를 작성하면 충분하지 않습니다.

어떤 접근 방식을 취했습니까 (해당되는 경우)? 효과가있는 것은 무엇입니까? 무엇을 그렇지 않았습니까? 모든 제안은 감사 할 것입니다. 감사.

도움이 되었습니까?

해결책

사본을 얻으십시오 레거시 코드로 효과적으로 작동합니다 Michael Feathers. 대형 테스트되지 않은 코드베이스로 작업하는 데 유용한 조언으로 가득합니다.

또 다른 좋은 책입니다 객체 지향적 리엔지니어링 패턴. 이 책의 대부분은 객체 지향 소프트웨어에만 국한되지 않습니다. 전체 텍스트는 PDF 형식으로 무료로 다운로드 할 수 있습니다.

내 자신의 경험에서 : 시도하려고 ...

  • 빌드 및 배포를 자동화하십시오
  • 아직 그렇지 않은 경우 데이터베이스 스키마를 버전 제어로 가져옵니다. 일반적으로 데이터베이스에는 트랜잭션 코드가 작동하기 전에 존재 해야하는 참조 데이터가 포함됩니다. 버전 제어하에 이것을 가져옵니다. 도구와 같은 도구 dbdeploy 일련의 델타에서 스키마와 참조 데이터를 쉽게 재건 할 수 있습니다.
  • 개발 워크 스테이션에 데이터베이스 (및 기타 인프라 서비스) 버전을 설치하십시오. 이렇게하면 DBA를 계속 통과하지 않고도 데이터베이스에서 작업 할 수 있습니다. 원격 데이터 센터의 공유 서버에서 스키마를 사용하는 것보다 빠릅니다. 모든 주요 상용 데이터베이스 서버에는 Windows에서 작동하는 무료 (맥주에서와 같이) 개발 버전이 있습니다 (Windows에서 개발하고 UNIX에 배포 할 수없는 상황에 처한 경우).
  • 코드 영역에서 작업을 시작하기 전에 작업중 인 영역의 동작을 대략적으로 다루는 엔드 투 엔드 테스트를 작성하십시오. 엔드 투 엔드 테스트는 사용자 인터페이스를 제어하거나 네트워크 서비스를 통해 상호 작용하여 시스템을 외부에서 운동해야하므로 코드를 변경하여 시행 할 필요가 없습니다. (불완전한) 회귀 테스트 역할을하며 단위 테스트가 더 쉬운 구조로 시스템의 내부를 리팩토링 할 수있는 자신감을 줄 것입니다.
  • 수동 테스트 계획이있는 경우 읽고 자동화 할 수있는 항목을 확인하십시오. 대부분의 수동 테스트 계획은 거의 전적으로 스크립트되어 있으며 자동화를위한 낮은 금융 과일도 마찬가지입니다.
  • 엔드 투 엔드 테스트 커버리지를 받으면 수정 및/또는 확장 할 때 코드를보다 느슨하게 결합 된 장치로 리팩터링하십시오. 단위 테스트로 해당 장치를 둘러싸십시오.

피해야 할 것 :

  • 제작 데이터베이스에서 데이터를 자동 테스트에 사용하는 환경으로 복사합니다. 이렇게하면 테스트를 예측할 수 없습니다. 물론, 생산 데이터의 사본에 대해 시스템을 실행하지만 회귀 테스트가 아닌 탐색 테스트에 사용하십시오.
  • 테스트 종료시 거래를 롤백하여 테스트를 서로 분리합니다. 이것은 거래가 커밋 될 때만 발생하는 동작을 테스트하지 않으며 테스트 실패를 진단하는 데 유용한 데이터를 버릴 것입니다. 대신, 테스트는 데이터베이스가 시작될 때 알려진 초기 상태에 있는지 확인해야합니다.
  • 테스트를 실행할 "작은"데이터 세트를 작성합니다. 이것은 단일 장치로 읽을 수 없기 때문에 테스트를 이해하기 어렵게 만듭니다. "작은"데이터 세트는 다른 시나리오에 대한 테스트를 추가 할 때 곧 매우 커집니다. 대신 테스트는 데이터베이스에 데이터를 삽입하여 테스트 고정을 설정할 수 있습니다.

다른 팁

“레거시 애플리케이션 현대화 테스트”는 다음과 같이 강조합니다.

  1. AscentialTest에서 테스트가 어떻게 생성되는지에 대한 높은 수준의 개요

  2. 레거시 객체를 객체 정의의 새로운 플랫폼 구성 요소로 변환하는 방법

  3. 최신 버전의 응용 프로그램이 동일한 결과를 생성하는 방법

레거시 응용 프로그램 테스트 사용에 대한 자세한 내용은 여기를 참조하십시오.

http://application-management.cioreview.com/whitepaper/testing-legacy-application-modernization-wid-529.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top