소프트웨어 테스팅은 소프트웨어 품질을 보장하기 위해 다양한 테스트 단계를 거치게 된다.
첫 번째 단위 데스트는 가장 작은 부분(단위)를 테스트하는 방법으로, 여기서 단위는 보통 개별 함수나 메서드, 클래스와 같은 최소 기능을 의미한다. 각 단위가 올바르게 작동하는지 확인하고, 초기에 발생할 수 있는 오류를 발견하며 수정하는 단계이다.
두 번째 통합 테스트는 여러 단위들이 결합해서 상호 작용을 할 때, 이들이 제대로 협력하는지를 테스트하는 방법이다. 개별 단위가 통합되었을 때 발생할 수 있는 인터페이스 간의 문제를 조기에 발견할 수 있다.
세 번째 시스템 테스트는 통합된 소프트웨어 시스템 전체가 요구 사항에 따라 제대로 작동하는지 확인하는 테스트이다. 전반적인 품질을 평가하고 기능적인 요구사항과 비기능적 요구 사항(성능, 보안, 사용성)이 충족되는지 확인한다.
네 번째 인수 테스트는 최종 사용자가 시스템을 사용할 준비가 되었는지 판단하기 위해 수행하는 테스트로, 고객이나 사용자의 요구 사항이 모두 충족되었는지 확인한다.
마지막 회귀 테스트는 기존의 기능이 새로운 코드 변경이나 수정 후에도 제대로 동작하는지 확인하는 테스트이다. 새롭게 추가된 코드가 기존 기능에 부정적인 영향을 미치지 않는지 확인하고, 보통 버그 수정 후에 수정된 코드뿐만 아니라 모든 주요 기능을 다시 테스트할 때 수행된다.
🌟 추가 질문
📍 테스트 단계 중 어느 부분이 테스트하기 복잡할까?
예를 들어 통합 테스트와 시스템 테스트를 비교 했으 때, 시스템 테스트가 테스트의 범위가 더 넓어지기 때문에 통합 테스트보다 복잡하고, 테스트 시간도 더 오래걸릴 것이다.
통합 테스트는 클래스 간에 목을 사용하지 않고 서로 호출하며 테스트하거나, 레포지토리를 사용해 데이터베이스에 데이터가 쌓이는 걸 체크하거나, 마이크로 서비스 간에 두 서비스의 request와 response를 테스트하거나 모두 통합이라고 볼 수 있다.
시스템이라는건 보통 N2N 테스트(Node-to-Node 테스트), E2E 테스트(End-to-End 테스트로, 애플리케이션 전체를 시작부터 끝까지 테스트하는 방식)라고 해서 브라우저를 띄우고, 로그인 페이지에 접속하고, 유저 아이디와 패스워드를 입력한 뒤 버튼을 클릭하고, 상품 페이지, 주문, 결제 등 모든 과정과 결과가 페이지에 보이는 것 이 모든 것을 스크립트화해서 테스트 하는 것을 보통 시스템 테스트라고 한다. 마치 사람이 하는 것을 똑같이 자동화만 한다고 생각할 수 있다.
테스트의 피라미드라고 해서 소프트웨어 테스팅을 가장 아래는 단위 테스트 그 다음 통합, 시스템 등 점점 피라미드 모양으로 올라가는 그림으로 설명한 글이 있다.
가장 넓은 면적을 차지하는 단위 테스트가 단단하게 잘 되어 있다면, 그 다음 테스트는 양이 좀 적어도 훨씬 더 안정적일 수 있고, 시스템 테스트에서는 정말로 중요한 몇 가지만 테스트해도 상관이 없다는 의미이다.