반응형

에러 추측 기법(Error Guessing Technique)

  • 숙련된 테스터들은 앞선 테스팅 경험을 통해 특정 타입의 애플리케이션에서 어떤 문제가 흔히 발생하는지(어떤 부분이 특히 에러가 많고, 개발자들이 어떤 실수를 자주 하는지)에 대해 인지하고 있음  
  • 소프트웨어 테스팅 분야에서 에러 추측(error guessing)은 테스터의 기술, 직감, 경험을 기반으로 흔히 나타나는 에러를 추측하고 테스트 케이스를 생성하는 테스팅 기법을 지칭함. ‘Fault attack’ 또는 경험 기반 기법(Experience-based Techniques)’이라는 이름으로도 불려짐
  • 정형적인 테스팅 기법(formal testing techniques)으로 찾기 힘든 결함(, 명세서나 문서에서 누락된 이슈)을 식별하기 위하여 다른 체계적인 테스팅 기법들을 보완하는 역할로 사용됨
  • 테스팅을 위한 특정한 규칙 없이 테스터의 과거 경험과 능력에 전적으로 의존하므로 참여한 테스터의 개인 역량에 따라 테스트 결과(성과)도 천차만별이다. , 재능 있고 경험 많은 테스터만이 수행할 수 있으며, 하나의 기법이라기 보다는 잘 함양할 필요가 있는 스킬로 보는 편이 더 적절함

 

 

전형적인 에러(Typical errors)

프로그램에서 흔히 볼 수 있는 에러의 예로 아래와 같은 것들이 있다.

  • 경계 값(boundary values)
  • 0으로 나누기(divide by zero)
  • 텍스트 필드를 빈 칸(blank spaces)으로 두고 엔터
  • 유효하지 않은 값 입력(entering invalid values)
  • 값을 입력하지 않은 채 submit 버튼 클릭
  • 최대 한계치를 넘는 파일 업로드
  • 널 포인터(null pointers)
  • 유효하지 않은 패러미터(invalid parameters)
  • 텍스트 값에 특정 언어나 특수 문자가 주어짐(National and special characters for text values)
  • 입력이 없거나 중복된 입력(Missing and duplicated input)
  • 너무 많은 입력(Too much input)
  • 메모리 부족(Low memory)
  • 리소스가 가용하지 않음(Unavailable resources)

 

테스터가 이런 전형적인 문제를 찾는데 항상 조금 더 노력을 기울일 필요가 있다.

 

 

에러를 추측하는데 활용될 수 있는 요소(factors)

에러 추측 기법에서 아래와 같은 요소들이 에러를 추측하는데 사용될 수 있다.

  • 과거 릴리즈에서 얻은 교훈(Lessons learned from past releases)
  • 테스터의 직감(Tester’s intuition)
  • 역사적인 교훈(Historical learning)
  • 이전 결함(, 기존 결함 로그)
  • 리뷰 체크리스트(Review checklist)
  • 애플리케이션 사용자 인터페이스(Application UI) 
  • 앞선 테스트 결과(Previous test results)
  • 애플리케이션의 리스크 보고서(Risk reports of the application)
  • 테스팅을 위해 사용된 다양한 데이터(Variety of data used for testing)
  • 일반적인 테스팅 규칙(General testing rules)
  • 테스트 대상 애플리케이션에 대한 지식(Knowledge about AUT)

 

 

에러 추측을 위한 가이드라인(Guidelines for Error guessing)

  • 앞서 문제가 되었던 영역(부분)을 기억: 테스터가 자신의 테스팅 업무를 하던 중에 흥미로운 버그를 마주칠 때마다 후일 참고하기 위해 기록해 놓는다. 특정 타입의 애플리케이션에서 공통적으로 발생하는 에러가 있는 것이 일반적이므로, 자신이 작업해 왔던 애플리케이션 타입의 공통 에러 목록을 참고한다.
  • 기술적 이해도 높이기: 테스터는 개발자와 의사소통을 통해 소프트웨어 아키텍쳐와 설계 패턴이 어떠하며, 코드가 어떻게 작성되었고, 널포인터, 어레이, 인덱스, 경계치, 루프 등의 개념이 어떻게 코드에서 구현되었는지 체크한다. 또한 애플리케이션이 호스팅되는 기술적 환경(서버, 운영체제, 데이터베이스)에 대한 지식을 확보한다.
  • 에러를 코드에서만 찾지 말고 요구사항, 설계, 빌드, 테스팅, 시스템 사용 등에서의 에러나 모호한 사항들을 찾는다.
  • 테스트 대상 시스템을 이해한다.
  • 축적된 과거 데이터와 테스트 결과를 평가한다.
  • 전형적인 구현 에러(typical implementation errors)에 대해 지속적으로 습득한다.

 

 

 

반응형

+ Recent posts