반응형

제목: 환경적 버그 발견을 위한 뮤테이션 테스팅 확장(Extending Mutation Testing to Find Environmental Bugs)

저자: Eugene H. Spafford, 미국

문서유형: 기술문서( 12페이지), 1990

 

소프트웨어가 실행되는 환경에서의 정밀도나 용량의 제약 때문에 야기되는 환경적 버그를 찾는데 뮤테이션 테스팅 기법을 적용한 연구 보고서

(여기서는 뮤테이션 부분은 생략하고 환경적 버그에 대해서만 정리함)



환경적 버그(Environmental bugs)

  • 명세를 알고리즘과 코드로 변환 시 프로그래머가 타겟 머신의 아키텍쳐에 충분한 주의를 기울이지 않아 버그가 생겨날 수 있음
  • 이런 버그들은 운영 환경(the operational environment)에 크게 의존적이기 때문에 찾기가 어렵다. , 코드나 코드에 표현된 알고리즘은 완전히 정확해도 프로그래머가 이 코드를 개발할 때 가정했던 완벽한가상 머신과 실제 실행 환경이 달라서 버그가 나타남
  • 이런 버그는 소프트웨어 시스템이 특정 머신 상에서 또는 특정 운영 체제 하에서 실행될 때에만 나타나며, 따라서 바로 이런 버그들이 소프트웨어를 다른 시스템으로 포팅(porting)하는 것을 어렵게 만든다.


환경적 버그(environmental bugs)의 전형적인 예가 아래와 같다

  • 메모리 제한(memory limitations): 가상 메모리를 가진 머신 상이라 하더라도 어레이를 마음대로 크게 만들거나 스택(stacks)이 한계 없이 증가될 수는 없음
  • 수치적 제한(numeric limitations): 크기와 정밀도 측면에서 머신이 표현하는 숫자(numbers), 부동 소수점(floating-point), 정수(integer)가 한계를 가짐
  • 가상 메모리의 초기화 안된 메모리 페이지(또는 세그먼트)를 초기화하는데 사용된 값이 예상 못한 문제를 가져올 수 있음
  • 가정된 상수 값들의 해석이 결함을 만들 수도 있음. , 상수 포인터를 역참조하는 포팅 코드. 다른 아키텍쳐로 코드를 포팅하는 C 프로그래머가 종종 ‘‘dereferencing NULL pointers’’ 버그를 경험함
  • 예외 처리 및 보고(exception handling and reporting)가 프로그래머가 생각했던 것과 다를 수 있음
  • 시스템 에러(system errors): 컴파일러가 부정확한 코드를 생성할 수 있음, 하드웨어가 몇몇 상황에서 예상했던 것과 다르게 인스트럭션을 실행할 수 있음, 운영 체제가 사용자 코드와 관련 없는 간헐적 에러(intermittent errors)를 만들 수도 있음


정수 연산 관련 환경적 버그의 예

  • 아래 Fortran 프로그램은 코드 테스팅의 어려움을 설명하기 위해 문헌에서 널리 사용된 삼각형 예제(tritype 또는 triangle로 알려진 프로그램)의 한 코딩 버전임
  • 사용자가 세 개 정수 값을 프로그램의 입력으로 제공하며, 이 입력 값들이 삼각형의 세 변의 길이가 될 수 있는지(, 세 변의 각 쌍의 합이 남은 하나의 변보다 반드시 커야 하고 모든 변이 양수 길이를 가져야 함), 그리고 삼각형이 될 수 있다면 어떤 삼각형 형태인지(부등변 삼각형, 이등변 삼각형, 정삼각형) 나타내는 메시지를 출력함
  • 지난 몇 년간 Mothra 뮤테이션 시스템을 작업하는 연구자들이 뮤테이션 분석이 테스트 데이터 개발에 어떻게 도움이 되는지 설명하기 위해 이 코드를 사용해 옴. , 오랜 기간 아래 코드가 정확한 것으로 여겼지만 본 논문의 연구 동안 이 코드가 부정확한 결과를 출력하는 경우가 있음을 알게 됨

[삼각형 프로그램 코드]


  • 저자의 타겟 환경이 32-bit2의 보수 정수(two’s-complement integers)를 사용하는 머신들로 구성됨. , 시스템 상에서 표현 가능한 가장 큰 정수가 2,147,483,647
  • triangle 프로그램에 세 개 입력 값(2147483640, 10, 2147483640)이 주어진 경우 이것이 적법한 이등변 삼각형을 형성함에도 불구하고 삼각형이 될 수 없다는 결과가 출력됨
  • 두 개 변의 길이가 합해질 때 소리 없는 오버플로우(a silent overflow)가 일어나고 그 결과 음수의 머신 표현이 나오면서 이런 에러가 초래됨(, 환경적 버그 발생)
  • 프로그램 시작 부분을 아래 그림처럼 변경하면 정수 연산 동안 조용한 오버플로우가 발생하는 어떤 타겟 머신에서도 프로그램의 동작이 정확할 수 있음




반응형

+ Recent posts