테스트 관련 강좌

기능 테스팅(Functional Testing)에 대해 자세히 알아보니..

프리스케이터 2025. 5. 1. 08:00

기능 테스팅(Functional Testing) 에 대해 자세히 알아보았습니다.

 

 

소프트웨어 기능 테스트

기능 테스팅은 소프트웨어 테스트 단계 중 하나로, 애플리케이션이 요구사항 문서에 명시된 기능들을 올바르게 수행하는지 검증하는 중요한 절차입니다.

 

1. 기능 테스팅의 개념

  • 정의: 기능 테스팅은 소프트웨어 시스템의 각 기능이 명세서(요구사항, 설계 문서 등)에 따라 정상적으로 작동하는지를 확인하는 테스트 방식입니다.
  • 특징:
    • 블랙박스 테스트: 내부 구현을 고려하지 않고, 사용자가 입력한 데이터에 대해 기대하는 출력이 나타나는지를 검증합니다.
    • 요구사항 기반: 사용자 요구사항이나 기능 명세서를 기반으로 테스트 케이스를 설계하고 실행합니다.

 

2. 기능 테스팅의 목적

  • 정확한 기능 구현 검증: 소프트웨어가 설계된 대로 정상적인 기능을 수행하는지, 그리고 각 기능이 명세서와 요구사항에 부합하는지를 확인합니다.
  • 사용자 관점 검증: 최종 사용자가 시스템을 사용할 때 발생할 수 있는 시나리오들을 반영하여, 기능의 정상 동작과 함께 사용성도 검증합니다.
  • 시스템 품질 확인: 결함이나 오류를 조기에 발견해, 전체 시스템의 안정성과 신뢰성을 높이는 데 기여합니다.

 

3. 기능 테스팅의 주요 프로세스

  1. 요구사항 분석 및 테스트 계획 수립:
    • 요구사항 분석: 사용자 요구사항 및 기능 명세서를 꼼꼼히 분석하여 테스트 대상 기능을 도출합니다.
    • 테스트 계획 수립: 각 기능의 검증 포인트, 테스트 방법, 테스트 환경, 기대 결과 등을 포함하는 테스트 계획서를 작성합니다.
  2. 테스트 케이스 설계:
    • 각 기능마다 정상 시나리오와 예외 사항을 고려한 다양한 테스트 케이스를 작성합니다.
    • 경계값 분석, 동등 분할 기법 등 다양한 기법을 활용하여 테스트 케이스의 커버리지를 극대화합니다.
  3. 테스트 실행:
    • 실제로 테스트 케이스를 실행하여, 입력값에 따른 시스템의 출력을 확인합니다.
    • 수동 테스트나 자동화 도구(JUnit, Selenium 등)를 활용하여 테스트 결과를 신속하게 반복 실행할 수 있습니다.
  4. 결과 검증 및 결함 보고:
    • 테스트 실행 결과와 기대 결과를 비교하여, 불일치나 오류가 발견되면 결함을 기록하고 분석합니다.
    • 발견된 결함을 개발팀에 보고하고, 수정된 후 재테스트를 실시합니다.
  5. 테스트 결과 문서화:
    • 테스트 결과, 결함 내역, 수정 및 재테스트 과정을 체계적으로 문서화하여, 향후 유지보수 및 품질 개선에 활용합니다.

 

4. 기능 테스팅의 주요 방법

  • 매뉴얼(수동) 테스팅: 테스트 담당자가 직접 시스템을 조작하며 기능을 검증합니다. 사용자 인터페이스(UI) 테스트에 주로 활용됩니다.
  • 자동화 테스팅: 반복적인 기능 검증에 효과적이며, 시간과 리소스를 절약할 수 있도록 자동화 도구를 사용합니다.
  • 회귀 테스트: 새로운 기능 추가나 수정 후에도 기존 기능에 영향을 미치지 않는지 확인하기 위해 실행됩니다.

 

5. 기능 테스팅 진행 시 주의사항

  • 요구사항과의 일치성: 모든 테스트 케이스가 요구사항 명세서에 기반하여 작성되어야 하며, 요구사항 변경 시 테스트 케이스와 기대 결과를 꼭 업데이트해야 합니다.
  • 포괄적 테스트 케이스 작성: 정상적인 상황뿐만 아니라, 예외 처리, 경계값 등 다양한 상황을 고려하여 테스트 케이스를 설계하는 것이 중요합니다.
  • 테스트 환경 구성: 실제 운영 환경과 유사한 테스트 환경에서 기능 검증을 진행해야 사용자 경험에 근접한 결과를 얻을 수 있습니다.
  • 문서화 및 추적: 테스트 과정과 결과를 꼼꼼하게 문서화하여 추후 버그 수정 및 회귀 테스트 시 신속하게 문제를 파악할 수 있도록 관리해야 합니다.

 

6. 실제 예시

예를 들어, 로그인 기능에 대한 기능 테스팅을 진행한다고 가정해 보겠습니다.

  • 요구사항:
    • 사용자가 올바른 아이디와 비밀번호를 입력 시 정상적으로 로그인되며, 사용자 대시보드로 이동해야 합니다.
    • 잘못된 아이디나 비밀번호를 입력하면, '로그인 실패' 메시지가 출력되어야 합니다.
  • 테스트 케이스 예시:
    1. 정상 시나리오: 올바른 아이디와 비밀번호 입력 → 로그인 성공 및 대시보드 진입
    2. 예외 시나리오 1: 올바르지 않은 비밀번호 입력 → 로그인 실패 메시지 출력
    3. 예외 시나리오 2: 빈 값(아이디와 비밀번호 모두) 입력 → 에러 메시지 출력
    4. 경계값 테스트: 비밀번호 길이 제한 초과 또는 미만의 입력 처리 등
  • 결과 분석: 로그인을 진행할 때, 각 시나리오에 따라 시스템이 올바른 동작을 하는지 확인하고, 예상 외의 동작이나 오류가 있을 경우 이를 기록 및 수정하도록 보고합니다.

 

 

# QA 엔지니어로서 기능 테스팅을 수행할 때 주의해야 할 점과 실제 사례

 

1. 기능 테스팅 진행 시 QA 엔지니어가 주의해야 할 점

1.1. 요구사항 명세와 테스트 케이스의 일관성 확보

  • 요구사항 분석: 기능 테스팅의 기반은 명확한 요구사항입니다.
    따라서 기능 명세서와 사용자 요구사항을 꼼꼼히 검토하여 테스트 케이스가 모든 요구사항을 커버하고 있는지 확인해야 합니다.
  • 테스트 케이스 업데이트: 요구사항이 변경되거나 추가될 경우, 이에 따른 테스트 케이스와 기대 결과를 즉시 업데이트하여 최신 정보를 반영해야 합니다.


1.2. 정상 및 예외 시나리오 모두 포함

  • 포괄적 테스트 케이스 설계: 단순한 정상 경로뿐만 아니라, 예상치 못한 입력값, 경계값, 에러 상황 등의 예외 시나리오도 포함하는 테스트 케이스를 설계해야 합니다.
  • 사용자 관점의 시나리오: 최종 사용자가 실제 사용 환경에서 경험할 시나리오를 최대한 반영하여 테스트하는 것이 중요합니다.


1.3. 테스트 환경의 실제 운영과 유사성 유지

  • 테스트 환경 구성: 실제 운영 환경과 최대한 일치하는 테스트 환경을 구성하여, 기능이 실제 상황에서 어떻게 동작하는지 정확한 결과를 얻도록 해야 합니다.
  • 데이터 설정: 실제 사용 데이터를 모방한 테스트 데이터셋을 사용하여, 데이터 입력 및 출력에서 발생할 수 있는 문제를 미리 파악해야 합니다.


1.4. 자동화와 반복 테스트의 중요성

  • 자동화 도구 활용: 반복적으로 실행해야 하는 기능 테스트는 자동화 도구(Selenium, JUnit 등)를 활용하여 테스트 효율성을 높이고, 회귀 테스트를 신속하게 진행할 수 있도록 합니다.
  • 회귀 테스트 관리: 새로운 기능 추가나 수정 후 기존 기능에 영향이 없는지 회귀 테스트를 체계적으로 관리해야 합니다.


1.5. 결함 기록 및 신속한 피드백

  • 명확한 결함 보고: 테스트 중 발견된 오류나 결함은 상세히 기록하고, 재현 방법, 예상 결과, 실제 결과 등을 명확히 기술하여 개발팀과 긴밀하게 공유합니다.
  • 빠른 재테스트: 수정된 부분에 대해 즉각적인 재테스트를 실시해, 수정 사항이 정상적으로 반영되었는지 검증해야 합니다.



2. 실제 사례

사례: 온라인 쇼핑몰의 로그인 기능 테스트

상황: 한 온라인 쇼핑몰에서 로그인 기능을 개발하였습니다. 이 기능은 사용자의 아이디와 비밀번호를 입력받아, 정상적인 경우 사용자 대시보드로 이동하고, 잘못된 경우 에러 메시지를 출력하는 것이 목표입니다.


진행 과정:

  1. 요구사항 분석:
    • 사용자 요구사항에 따라 “올바른 아이디와 비밀번호 입력 시 로그인이 성공되어 대시보드로 이동”해야 하며, “잘못된 정보 입력시 ‘로그인 실패’ 메시지 출력” 등 다양한 시나리오가 도출되었습니다.
    • QA 엔지니어는 이에 기반해 테스트 케이스를 설계하였습니다.
  2. 테스트 케이스 설계:
    • 정상 시나리오: 올바른 아이디와 비밀번호를 입력했을 때, 로그인이 성공하는지 확인.
    • 예외 시나리오 1: 올바르지 않은 비밀번호를 입력했을 때, '로그인 실패' 메시지가 출력되는지 확인.
    • 예외 시나리오 2: 아이디 입력은 했으나 비밀번호를 공백으로 두었을 때, 적절한 경고 메시지가 출력되는지 검증.
    • 경계값 테스트: 아이디나 비밀번호의 입력 길이 제한을 초과하거나 미달하는 경우에 대한 테스트 등.
  3. 테스트 환경:
    • 실제 운영 환경과 유사한 테스트 서버를 구축하여, 데이터베이스, 인증 서버 등이 실제와 동일한 조건에서 동작하도록 설정하였습니다.
    • 테스트 데이터는 실제 프로그램 사용 시 발생하는 다양한 케이스를 반영한 데이터를 준비하였습니다.
  4. 테스트 실행 및 결과 검증:
    • QA 엔지니어는 위에서 설계한 테스트 케이스를 자동화 도구를 통해 반복 실행하고, 각 시나리오별로 기대하는 결과와 실제 결과를 비교 분석하였습니다.
    • 테스트 실행 중, 일부 케이스에서 특정 브라우저(예: Microsoft Edge 특정버전)에서 로그인 버튼이 클릭되지 않는 이슈가 발견되어, UI/스크립트 수정 요청이 개발팀에 전달되었습니다.
  5. 결함 보고 및 재테스트:
    • 발견된 결함은 상세하게 기록(스크린샷, 재현 방법 등 포함)하였으며, 수정 후 재테스트를 통해 정상 동작을 확인하였습니다.
    • 변경 관리 시스템에 결함 내역을 등록하여, 추후 회귀 테스트 시에도 동일 문제가 발생하지 않도록 관리하였습니다.

이렇게 기능 테스팅 과정을 통해 로그인 기능의 정상 동작과 예외 상황 대비를 철저히 검증하였으며, 수정 요청 사항이 반영되어 최종적으로 사용자 요구사항을 완벽하게 충족하는 것으로 확인되었습니다.

 


 

기능 테스팅은 시스템의 개별 기능이 명세된 요구사항에 따라 정확히 동작하는지 확인하는 매우 중요한 단계입니다.

QA 엔지니어는 요구사항 분석, 포괄적 테스트 케이스 설계, 실제 운영 환경과 유사한 테스트 환경 구성, 자동화 및 반복 테스트, 그리고 결함 기록 및 신속한 피드백 관리에 주의하여 진행해야 합니다.

실제 로그인 기능 사례를 통해, 기능 테스팅의 전반적인 프로세스와 주의점을 이해하실 수 있기를 바랍니다.