Delphi 응용 프로그램을 테스트하는 가장 좋은 방법
저는 의존성이 많은 델파이 애플리케이션을 가지고 있는데, DUnit을 사용하기 위해 리팩터링하는 것이 어려울 것 같아서 Automated와 같은 것을 사용하려고 생각했습니다.QA의 테스트 완료 - 프런트 엔드 UI에서 테스트를 수행합니다.
주요 문제는 버그 수정 또는 새로운 기능이 이전에 테스트되어 작동하던 오래된 코드를 때때로 손상시킨다는 것입니다.
명령줄 스위치를 사용하여 테스트할 수 있는 특정 양식을 열 수 있도록 애플리케이션을 설정했으며, 수행해야 하는 일련의 값과 클릭 수를 생성할 수 있습니다.
하지만 극단적인 일을 하기 전에 몇 가지 질문이 있습니다.(그리고 어떤 것을 구입하기 전에)
- 그만한 가치가 있나요?
- 이것이 테스트하는 좋은 방법입니까?
- 테스트 결과가 데이터베이스(Oracle)에 있어야 하는데, 테스트 완료 시 이러한 값(여러 테이블의 여러 필드)을 쉽게 확인할 수 있는 방법이 있습니까?
- 모든 자동 테스트를 수행하기 위해 테스트 데이터베이스를 설정해야 하는데 테스트 데이터베이스를 자동으로 재설정할 수 있는 쉬운 방법이 있을까요?사용자 캐스케이드 삭제 이외에 사용자, ..., impdp를 생성합니다.
- exe에 대한 명령줄 매개 변수를 지정하는 테스트 완료 방법이 있습니까?
- 비슷한 경험을 한 사람이 있습니까?
각각의 용도가 다르므로 DUNit 및 Test Complete와 같은 것을 모두 사용할 계획을 제안합니다.
DUnit는 유닛 테스트에는 좋지만 전체 애플리케이션 테스트 및 UI 테스트에는 사용하기 어렵습니다.
TestComplete는 Delphi를 실제로 지원하는 몇 안 되는 자동화된 테스트 제품 중 하나이며, QA 엔지니어는 지원이 매우 우수하다고 말합니다.
자동화된 테스트 설정은 크고 시간이 많이 소요되는 작업입니다.유닛 테스트와 자동 UI 테스트를 엄격하게 적용하면 생산 코드보다 테스트 코드가 더 많이 발생할 수 있습니다.
대규모(기존) 애플리케이션의 경우 자동화된 테스트 구현과 관련하여 어려운 상황에 처해 있습니다.
먼저 자동 빌드 서버와 함께 Unit Testing을 설정하는 것이 좋습니다.누군가가 소스 제어에 항목을 체크인할 때마다 장치 테스트가 자동으로 실행됩니다.모든 것에 대해 유닛 테스트를 설정하려고 하지 마십시오. 기존 응용 프로그램에는 너무 큰 노력이 필요합니다.새 기능을 추가할 때와 변경을 시도할 때마다 단위 테스트를 만들어야 합니다.또한 버그가 보고될 때마다 버그를 수정하기 전에 버그를 재현하는 단위 테스트를 만들 것을 강력히 제안합니다.
저도 비슷한 상황입니다. (의존성이 많은 대형 앱)자동화된 테스트는 거의 없습니다.하지만 이 문제를 해결하고 싶은 큰 바람이 있습니다.그렇기 때문에 새로운 릴리즈마다 몇 가지 문제를 해결하려고 합니다.
우리는 신제품의 첫 번째 버전을 출시하려고 합니다.그리고 첫 번째 징후는 좋습니다.하지만 그것은 많은 일이었습니다.따라서 다음 릴리스에서는 테스트 프로세스를 자동화할 수 있는 방법이 필요합니다.그것이 제가 이미 단위 테스트를 도입한 이유입니다.종속성 때문에 실제 단위 테스트는 아니지만 어딘가에서 시작해야 합니다.
당사가 수행한 작업:
- 코드의 대부분이 여전히 절차적이었기 때문에 더 많은 OO 접근 방식을 도입했습니다.
- 파일 간에 내용을 이동했습니다.
- 가능한 경우 종속성을 제거합니다.
하지만 은퇴할 때까지 팀 전체가 충분히 일할 수 있도록 요구 사항 목록에는 훨씬 더 많은 것이 있습니다.
그리고 제가 좀 이상할 수도 있지만, 코드를 정리하는 것은 재미있을 수 있습니다.특히 부작용이 많은 경우 유닛 테스트 없이 리팩터링하는 것은 위험한 작업입니다.우리는 어리석은 실수를 피하기 위해 페어 프로그래밍을 사용했습니다.그리고 많은 시험 세션.하지만 결국 우리는 더 깨끗한 코드를 갖게 되었고, 새로운 버그의 양은 극도로 적었습니다.
아, 그리고 이 과정은 비용이 많이 든다는 것을 알아야 합니다.시간이 많이 걸립니다.그리고 한 가지 이상의 문제를 연속적으로 해결하려는 경향과 싸워야 합니다.
test complete를 사용해 본 적이 없기 때문에 모든 것을 답할 수는 없지만, 일부는 답할 수 있습니다.
1 - 네.회귀 테스트는 그만한 가치가 있습니다.예전에 작동하던 것을 고장냈을 때 고객이 다시 찾아오면 개발자로서 상당히 당혹스러운 일입니다.예전에 작동했던 모든 것이 여전히 작동하는지 확인하는 것은 항상 좋은 생각입니다.
4 - Oracle에는 데이터베이스에 복원 지점을 생성할 수 있는 Flashback이라는 기능이 있습니다.테스트를 완료한 후에는 이 복원 지점으로 다시 이동할 수 있습니다.스크립트를 작성하여 사용할 수도 있습니다.FLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);,주요사항
VMware를 사용하여 테스트의 일부를 분리하려고 합니다.
저장된 스냅샷에서 시작할 수 있으므로 항상 일관된 환경과 로컬 데이터베이스 상태를 유지할 수 있습니다.
VMWare 작업을 스크립트로 작성할 수 있으므로 네트워크 위치에서 최신 빌드를 자동으로 설치하고 테스트를 시작한 후 종료할 수 있습니다.
- 그만한 가치가 있나요?
아마.테스트를 설정하고 유지하는 것은 큰 일이 될 수 있지만 테스트가 있을 때 테스트를 매우 쉽고 일관되게 실행할 수 있습니다.프로젝트가 발전하고 있다면 테스트 스위트의 일종이 매우 유용합니다.
- 이것이 테스트하는 좋은 방법입니까?
적절한 DUnit 테스트 스위트가 첫 번째 단계에서 더 낫다고 생각합니다.그러나 테스트용으로 설계되지 않은 대규모 코드베이스가 있는 경우 기능 테스트를 설정하는 것이 GUI 테스트를 설정하는 것보다 훨씬 더 큰 어려움이 있습니다.
- 테스트 결과가 데이터베이스(Oracle)에 있어야 하는데, 테스트 완료 시 이러한 값(여러 테이블의 여러 필드)을 쉽게 확인할 수 있는 방법이 있습니까?
테스트 완료에는 ADO 및 BDE 인터페이스가 있습니다.또는 VBScript의 OLE 인터페이스를 사용하여 사용 가능한 모든 항목에 액세스할 수 있습니다.
- exe에 대한 명령줄 매개 변수를 지정하는 테스트 완료 방법이 있습니까?
네.
(구) 애플리케이션에서 유닛 테스트를 도입하는 한 가지 방법은 Rich Adams가 설명한 "Flashback" 기능과 같은 "Start database"를 사용하는 것입니다.이 프로그램은 DUnit를 사용하여 GUI를 제어하여 테스트합니다.http://delphixtreme.com/wordpress/ ?p=181에서 "DUnit를 사용한 GUI 테스트"를 참조하십시오.
테스트를 시작할 때마다 "데이터베이스 시작"으로 복원합니다. 이는 알려진 데이터 집합을 사용할 수 있기 때문입니다.
모든 자동 테스트를 수행하기 위해 테스트 데이터베이스를 설정해야 하는데 테스트 데이터베이스를 자동으로 재설정할 수 있는 쉬운 방법이 있을까요?
트랜잭션 사용: 테스트가 완료되면 롤백을 수행합니다.이렇게 하면 모든 것이 초기 상태로 돌아갑니다.
권장 판독값:
언급URL : https://stackoverflow.com/questions/540617/best-way-to-test-a-delphi-application
'programing' 카테고리의 다른 글
| PHP 사용 URL SPACE를 %20으로 바꾸기 (0) | 2023.07.31 |
|---|---|
| iOS 6 기기로 원격 디버깅하는 동안 Safari에 "No Inspectable Applications"(검사 가능한 응용 프로그램 없음)가 표시되는 이유는 무엇입니까? (0) | 2023.07.31 |
| 프로토타입 정의 함수에서 개인 멤버 변수 액세스 (0) | 2023.07.31 |
| 자바스크립트 코드를 *순서대로* 실행하는 방법 (0) | 2023.07.31 |
| Why can't I set a nullable int to null in a ternary if statement? (0) | 2023.07.31 |