SW test란 무엇일까

오경원·2022년 12월 26일
0
post-thumbnail

들어가며

테스트란 용어는 누구에게나 익숙한 용어일 것입니다. 소프트웨어 개발자, 하드웨어 개발자, 기획자 등 어떠한 일을 하던 직책을 가지던 테스트를 이야기 하고 테스트의 중요성을 강조합니다. 이렇듯 우리는 누구나 테스트의 중요성에 대해 알고 있습니다. 그렇다면 이 중요한 테스트라는 친구에 대해 우리는 얼마나 알고 있을까요? 이번 포스트는 테스트 그중에서도 소프트웨어 테스트란 무엇인가에 관해 이야기 해볼까 합니다.

테스트란 무엇일까

프로그램 혹은 시스템이 사용자가 요구하는 기능이나 성능, 신뢰성 등을 만족하는지 확인하고 결함을 발견하는 활동

보통 테스트가 무엇인가에 대한 답변을 이야기하면 위의 문장에서 크게 벗어나지 않는 답이 나올것 입니다. 위와 같은 테스트의 정의는 소프트웨어 개발 이후에 요구 기능확인과 결함 발견에만 중점을 둔 소극적인 활동으로 테스트를 이야기하고 있습니다. 하지만 저의 생각은 조금 다릅니다. QA 엔지니어로써 회사 업무를 진행하면서 여러 서적과 글을 읽었고 스스로도 테스트라는 업무에 대해서 생각한 결과 제 스스로 테스트는 개발 기획 단계부터 능동적으로 참여하여 개발과 함께 테스트를 기획, 실행, 기능확인과 결함 발견뿐만 아니라 결함을 예방하고 이미 일어난 결함을 관리하며 이때 쌓이는 데이터를 이용해 제품 자체의 리스크 정보를 식별해 내는 과정이 테스트라는 정의를 내리게 되었습니다.

v-model

개발을 하다보면 v-model에 관한 이야기를 들어보셨을 것입니다. v-model은 소프트웨어 개발 프로세스로 개발의 생명주기와 이에 대응하는 테스트 들을 보여주는 model 입니다.


위의 그림이 v-model인데 테스트가 무엇인지에 대해 이야기를 나누려 하는 저희는 v모양의 오른쪽 즉 validation phaese를 봐야합니다. v-model은 왼쪽 -> 오른쪽으로 진행되는 모델이기 때문에 이 모델에서 테스트의 진행과정은 Unit test > Integration test > System test > Acceptance test 순으로 진행됩니다.

  • Unit test
    Unit test 즉 단위 테스트는 첫번째 테스트 단계인 만큼 가장 작은 범위부터 시작합니다. 일반적으로 개발자 분들이 진행을 하게 되며 메서드 혹은 클래스 단위에서의 기능을 테스트하는 단계입니다. 단위 테스트는 소프트웨어 내부 코드에 관련한 지식을 반드시 알고 있어야 하는 화이트박스 테스트로 진행되어야 합니다. 화이트 박스 테스트에 관한 내용은 나중에 다뤄보도록 하겠습니다. 단위 테스트는 TDD(Test-Driven-Development)라는 방법으로 개발을 할때에 더욱 큰 효과를 발휘하게 된됩니다. TDD에 관한 내용은 나중에 다루도록 하겠습니다.

  • Integration test
    Integration test 즉 통합 테스트는 단위 테스트보다 더 큰 동작을 테스트하기 위해 여러 모듈들을 모아 이들이 의도대로 협력하는지 확인하는 테스트입니다. 이때에 클래스, 메서드 뿐 아니라 사용되는 외부 라이브러리와 DB등을 포함한 동작까지 테스트 하게 됩니다. 보통 개발환경에서 테스트 하게 되고 단위 테스트에서는 발견하지 못한 이슈들이 많이 발견되게 됩니다

  • System test
    이 단계 부터는 개발자가 아닌 테스트를 전문적으로 맡아 하시는 분들의 영역입니다. System test 즉 시스템 테스트는 단위 테스트와 통합 테스트에서 테스트하지 않은 비기능적 테스트에 조금더 중점을 둔 테스트 단계입니다. 비기능적 테스트는 소프트웨어의 성능, 사용성, 효율성, 신뢰성, 효율성, 유지보수성, 이식성 등을 포함하며 소프트웨어가 동작할 실 환경과 최대한 유사한 환경에서 진행되어야 합니다.

  • Acceptance test
    Acceptance test 즉 인수 테스트는 테스트의 마지막 단계로써 앞의 테스트 단계를 거쳐 검증되어 있는 소프트웨어를 사용자의 입장에서 테스트 하는 과정입니다. 일반적으로 테스트 라고 할때 떠오르는 활동이 이 인수 테스트 단계에서의 활동들입니다. 실제 사용자의 환경과 입장에서 테스트를 진행하게 되며 해당 소프트웨어를 인수받을 사용자가 직접 테스트 하게 됩니다.

테스트 유형

앞에서 v-model을 통해 테스트의 단계를 살펴보았습니다. 이번에는 테스트를 유형 별로 구분해 살펴보도록 하겠습니다.

  • 기능 테스팅
    소프트웨어의 기능들을 테스트 하는 과정을 이야기 합니다. 소프트웨어의 기능들이 정상적으로 작동하는지에 대해 테스트하게 됩니다

  • 비기능 테스팅
    소프트웨어의 비기능적 요소들을 테스트 하는 과정을 이야기 합니다. 앞서 설명한 System test와 유사한 테스팅 과정입니다.

  • 구조적 테스팅
    소프트웨어의 구조나 아키텍쳐에 관련된 테스팅 과정입니다.

  • 확인/리그레션 테스팅
    소프트웨어의 기능 추가 혹은 이슈 해결 등의 이유로 소프트웨어가 변경되었을때에 해당 변경사항이 정상적으로 적용되었는지 테스트 하는 과정입니다. 이때에 변경 과정에서 의도치 않게 유입된 결합이 있는지 확인하는 테스트를 같이 진행하게 됩니다. 반복적 성향이 강한 테스트이기 때문에 테스트 자동화를 고려해볼수 있는 부분입니다.

마무리

이번 포스팅에서는 테스트가 무엇인가 부터 시작해서 테스트를 단계별로, 유형별로 나누어 보았습니다. 위와 같이 테스트의 유형과 종류는 매우 많기 때문에 완성도가 높은 테스트를 진행하기 위해서는 테스트 유형과 종류를 정확하게 알고 상황과 목적에 맞는 테스트를 적용시켜 완성된 계획을 세우는 것이 중요합니다.

0개의 댓글