소프트웨어 테스팅이란 무엇인가요?
10년 전 제가 JMP에서 일을 시작했을 때, 소프트웨어 테스팅이 무엇이냐고 묻는다면 제가 주로 쓰는 웹 검색(혹은 요즘은 AI LLM 조수)을 해서 다음과 같은 답을 얻었을 겁니다. 소프트웨어 테스팅이란 소프트웨어 애플리케이션이나 제품을 평가하여 의도한 대로 작동하고 사용자 요구 사항을 충족하는지 확인하는 프로세스입니다.
그러나 동료 Joseph Morgan과의 많은 논의를 통해 저는 Glenford Myers[1]가 간결하게 언급한 소프트웨어 엔지니어링의 정의를 채택했습니다.
"테스트는 오류를 찾기 위해 프로그램을 실행하는 프로세스입니다."
이 정의가 그렇게 다른가요? 저는 그렇다고 주장하고 싶습니다. Myers et al. [1]이 이에 대해 훌륭한 논의를 하고 있지만, 대부분의 사람들에게는 무언가가 작동하는지 누군가에게 확인해 달라고 요청하는 것과 그것을 깨려고 시도하는 것 사이에 심리적 차이가 있습니다. Myers의 정의를 채택함으로써 테스트 엔지니어는 오류를 찾는 목표를 갖게 됩니다. 이것은 구조를 제공할 뿐만 아니라 이러한 오류(또는 우리가 생각할 수 있는 버그)를 일찍 신중하게 찾아서 수정 함으로써 의도한 대로 작동하고 사용자 요구 사항을 충족하는 소프트웨어가 탄생합니다.
벌레는 어디에 있나요?
아직 저와 함께 있고 테스트 정의에 익숙해졌다면, 자연스럽게 다음 질문은 소프트웨어를 깨려고 시도하는 곳을 찾는 것입니다. 이를 위해 Boris Beizer[2]에게 문의할 수 있습니다.
"벌레는 구석에 숨어 있고 경계에는 모인다."
이를 두 부분으로 나누어 보겠습니다. 먼저 입력이란 소프트웨어에 반응을 얻거나 해당 정보로 어떤 일을 하는 데 사용하는 일종의 데이터나 정보를 말합니다.
버그는 경계에 모인다 : 이는 버그가 일반적으로 시스템이 처리하도록 설계된 것의 가장자리에서 발견된다는 것을 강조합니다. 예를 들어, 함수가 0과 1 사이의 입력을 허용하도록 되어 있다면 경계(0과 1)와 경계 바로 바깥을 테스트해야 합니다.
버그는 구석에 숨어 있다 : 이는 버그가 종종 두 개 이상의 입력을 포함하는 시스템 부분에 숨어 있다는 것을 암시합니다. 즉, 우리가 상호작용에 대해 생각하는 것과 매우 비슷하게, 이러한 조합을 테스트하지 않는 한 버그를 찾을 수 없습니다.
이제 어디로 가야 할까?
앞으로 몇 주 동안, 저와 제 동료들로부터 검증(우리가 올바른 제품을 만들고 있는가?) 및 테스트(버그 찾기, 소프트웨어 작동 확인)와 관련된 다양한 주제에 대해 들어보게 될 것입니다. 저에게 특히 흥미로운 점은 테스트와 실험 설계(제가 이야기하는 것을 좋아하는 또 다른 주제) 사이에 깊은 연관성이 있다는 것입니다.
여러분이 자신의 애플리케이션을 구축하든, 자신의 테스트 과제에 직면하든, 또는 그저 이 주제에 관심이 있든, 계속 읽어주시기를 바랍니다. 다루고 싶은 주제가 있나요? 댓글로 알려주세요!
그리고 블로그는 사진 없이는 완전하지 않은 듯하니, 1947년 하버드 대학의 그레이스 호퍼가 포함된 팀의 일부에서 발생한 최초의 "컴퓨터 버그" 사진입니다.

1988년 버지니아주 달그렌에 있는 해군 수상전 센터의 호의로, 최초의 컴퓨터 버그, 1945년 , 퍼블릭 도메인으로 표시됨, 자세한 내용은 Wikimedia Commons 에서 확인하세요.
참고문헌.
- G. Myers, C. Sandler 및 T. Badgett, 소프트웨어 테스팅의 기술, 3 판 , 뉴저지, John Wiley & Sons, Inc, 2011.
- B. Beizer, 소프트웨어 테스트 기술 , Van Nostrand Reinhold 전기/컴퓨터 과학 및 엔지니어링 시리즈, 1983
안녕하세요 @Ryan_Lekivetz !
이렇게 훌륭한 소개글을 올려주셔서 감사합니다. 소프트웨어 테스트를 위해 배열을 덮는 방법이나 기타 오류 지역화 방법을 사용하는 방법에 대해 더 자세히 알아보고 싶습니다.