다양한 유형의 소프트웨어 테스트
단위 테스트, 통합 테스트, 기능 테스트, 수용 테스트 등 여러 유형의 소프트웨어 테스트를 비교해 보세요!
Sten Pittet
기고 작가
코드에 대한 변경 사항이 예상대로 작동하는지 확인하는 데 사용할 수 있는 소프트웨어 테스트 기법에는 여러 가지가 있습니다. 하지만 모든 테스트가 같은 것은 아니며 몇 가지 테스트 방법이 어떻게 다른지 살펴보겠습니다.
수동 테스트 및 자동화된 테스트
수동 테스트와 자동화된 테스트를 구분하는 것이 중요합니다. 수동 테스트는 사람이 직접 수행하는 것으로, 애플리케이션을 클릭하거나 적절한 도구로 소프트웨어 및 API와 상호 작용합니다. 환경을 설정하고 테스트를 직접 실행해야 하기 때문에 비용이 많이 들며 테스터가 오타를 일으키거나 테스트 스크립트에서 단계를 생략할 수 있기 때문에 실수가 발생하기 쉽습니다.
반면 자동화된 테스트는 미리 작성된 테스트 스크립트를 실행하는 컴퓨터에서 수행됩니다. 테스트의 복잡성은 클래스에서 단일 메서드를 검사하는 것부터 UI에서 복잡한 작업을 연속으로 수행해도 동일한 결과가 나오는지 확인하는 것까지 다양합니다. 수동 테스트보다 훨씬 더 강력하고 신뢰성이 뛰어나지만 자동화된 테스트의 품질은 테스트 스크립트가 얼마나 잘 작성되었는지에 달려 있습니다. 테스트를 이제 막 시작한 단계라면 첫 번째 테스트 스위트에 도움이 되는 지속적 통합 자습서를 읽어보세요. 더 많은 테스트 도구를 찾고 있습니까? DevOps 테스트 자습서를 확인하세요.
자동화된 테스트는 지속적 통합과 지속적 제공의 핵심 구성 요소이며 애플리케이션에 새 기능을 추가할 때 QA 프로세스를 확장하는 데 좋은 방법입니다. 하지만 이 가이드에서 볼 수 있듯이 예비 테스트라는 것을 통해 수동 테스트를 실행하는 것도 여전히 가치가 있습니다.
솔루션 보기
Open DevOps로 소프트웨어를 구축 및 운영
관련 자료
DevOps를 위한 자동화된 테스트
다양한 유형의 테스트
1. 단위 테스트
단위 테스트는 매우 낮은 수준이며 애플리케이션의 소스와 가깝습니다. 소프트웨어에서 사용하는 클래스, 구성 요소 또는 모듈의 개별 메서드와 함수를 테스트하는 것으로 구성되어 있습니다. 단위 테스트는 일반적으로 자동화 비용이 상당히 저렴하며 지속적 통합 서버에서 매우 빠르게 실행할 수 있습니다.
2. 통합 테스트
통합 테스트는 애플리케이션에 사용되는 여러 모듈 또는 서비스가 잘 작동하는지 확인합니다. 예를 들어, 데이터베이스와의 상호 작용을 테스트하거나 마이크로서비스가 예상대로 함께 작동하는지 확인하는 것일 수 있습니다. 이러한 유형의 테스트는 애플리케이션의 여러 부분을 실행해야 하기 때문에 실행 비용이 더 많이 듭니다.
3. 기능 테스트
기능 테스트는 애플리케이션의 비즈니스 요구 사항에 초점을 맞춥니다. 이 테스트는 작업의 출력만 확인하며 작업을 수행할 때 시스템의 중간 상태는 확인하지 않습니다.
통합 테스트와 기능 테스트는 모두 서로와 상호 작용하는 데 여러 구성 요소가 필요하기 때문에 둘 사이를 헷갈리는 경우가 있습니다. 차이점은 통합 테스트의 경우 단순히 데이터베이스를 쿼리할 수 있는지 확인하는 반면 기능 테스트의 경우 제품 요구 사항에 정의된 대로 데이터베이스에서 특정 값을 받을 것으로 예상합니다.
4. 엔드투엔드 테스트
엔드투엔드 테스트는 전체 애플리케이션 환경에서 소프트웨어를 사용한 사용자의 행동을 복제합니다. 다양한 사용자 흐름이 예상대로 작동하는지 확인하며 웹 페이지를 로드하거나 로그인하는 것처럼 간단할 수도 있고 이메일 알림, 온라인 결제 등을 확인하는 훨씬 더 복잡한 시나리오일 수도 있습니다.
엔드투엔드 테스트는 매우 유용하지만 수행하는 데 비용이 많이 들고 자동화된 경우 유지 관리가 어려울 수 있습니다. 주요 변경 사항을 빠르게 식별하려면 몇 가지 주요 엔드투엔드 테스트를 실행하고 낮은 수준 테스트 유형(단위 테스트 및 통합 테스트)을 더 많이 사용하는 것이 좋습니다.
5. 수용 테스트
수용 테스트는 시스템이 비즈니스 요구 사항을 충족하는지 확인하는 공식적인 테스트입니다. 테스트하는 동안 애플리케이션 전체를 실행해야 하며 사용자 행동을 복제하는 데 초점을 둡니다. 여기서 더 나아가 시스템 성능을 측정하고 특정 목표가 충족되지 않으면 변경을 거부할 수도 있습니다.
6. 성능 테스트
성능 테스트는 특정한 워크로드에서 시스템이 어떻게 작동하는지 평가합니다. 이 테스트는 애플리케이션의 신뢰성, 속도, 확장성, 반응성을 측정하는 데 도움이 됩니다. 예를 들어, 성능 테스트는 많은 요청을 실행할 때의 응답 시간을 관찰하거나 시스템이 대량의 데이터에 대해 어떻게 동작하는지 확인할 수 있습니다. 애플리케이션이 성능 요구 사항을 충족하는지 확인하고 병목 현상을 찾아내고 트래픽이 가장 많은 시간대의 안정성을 측정하는 등의 작업을 할 수 있습니다.
7. 스모크 테스트
스모크 테스트는 애플리케이션의 기본 기능을 확인하는 기본 테스트입니다. 신속하게 실행할 수 있으며 테스트의 목표는 시스템의 주요 기능이 예상대로 작동하고 있다는 확신을 주는 것입니다.
스모크 테스트는 새로운 빌드 직후에 더 비용이 높은 테스트를 실행할 수 있는지 여부를 결정하거나 배포 직후에 새로 배포된 환경에서 애플리케이션이 제대로 실행되고 있는지 확인하는 데 유용합니다.
테스트를 자동화하는 방법
테스트를 자동화하려면 먼저 애플리케이션에 적합한 테스트 프레임워크를 사용하여 프로그래밍 방식으로 테스트를 작성해야 합니다. PHPUnit, Mocha, RSpec은 각각 PHP, Javascript, Ruby에 사용할 수 있는 테스트 프레임워크의 예입니다. 언어마다 다양한 옵션이 있으므로 조사한 후 어떤 프레임워크가 가장 적합한지 개발자 커뮤니티에 물어봐야 할 수도 있습니다.
터미널에서 스크립트로 테스트를 실행할 수 있는 경우 Bamboo와 같은 지속적 통합 서버에서 자동으로 실행하거나 Bitbucket Pipelines와 같은 클라우드 서비스를 사용할 수 있습니다. 이러한 도구는 리포지토리를 모니터링하고 메인 리포지토리에 새 변경 사항이 푸시될 때마다 테스트 스위트를 실행합니다.
예비 테스트
코드에 더 많은 기능과 개선 사항이 적용될수록 모든 시스템이 제대로 작동하는지 확인하기 위해 더 많은 테스트를 거쳐야 합니다. 그리고 버그를 수정할 때마다 최신 릴리스에서 다시 발생하지 않는지 확인하는 것이 좋습니다. 이를 가능하게 만드는 핵심 요소는 자동화이며 테스트 작성이 개발 워크플로의 일부가 되는 것은 시간 문제입니다.
따라서 문제는 수동 테스트를 계속 실행할 가치가 있는지입니다. 짧게 대답하자면 그렇습니다. 명확하지 않은 오류를 찾아내려면 예비 테스트가 가장 좋은 방법일 수 있습니다.
예비 테스트 세션은 2시간을 넘지 않아야 하며 테스터가 소프트웨어의 특정 영역에 집중할 수 있도록 명확한 범위가 있어야 합니다. 모든 테스터에게 브리핑한 다음에는 시스템이 어떻게 작동하는지 확인하기 위해 다양한 조치를 취해야 합니다.
테스트에 대한 참고 사항
이 가이드를 마무리하면서 강조하고 싶은 점은 테스트의 목표에 관해 이야기하는 것이 중요하다는 것입니다. 사용자가 실제로 애플리케이션을 사용할 수 있는지 테스트하는 것도 중요하지만(로그인하고 개체를 저장할 수 있는지) 잘못된 데이터나 예상치 못한 동작이 수행되어도 애플케이션이 중단되지 않는지 테스트하는 것도 마찬가지로 중요합니다. 사용자가 오타를 내거나 완료되지 않은 양식을 저장하려고 하거나 잘못된 API를 사용하면 어떤 일이 발생할지 예상해야 합니다. 누군가가 데이터를 쉽게 손상시킬 수 있는지 또는 허용되지 않는 리소스에 액세스할 수 있는지 확인해야 합니다. 좋은 테스트 스위트는 앱에서 버그를 발견하고 한계를 이해하는 데 도움이 되어야 합니다.
그리고 마지막으로, 테스트도 코드입니다! 따라서 코드 검토 중에 프로덕션의 마지막 관문이 될 수도 있는 테스트에 대해서도 잊지 마세요.
Atlassian의 Open DevOps는 사용자가 즐겨 사용하는 도구로 CD 기반 개발 파이프라인을 구축할 수 있는 개방형 도구 체인 플랫폼을 제공합니다. DevOps 테스트 자습서를 통해 Atlassian 도구 및 타사 도구가 워크플로에 테스트를 통합하는 방법을 알아보세요.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.