Exceptional Behaviors: How Frequently Are They Tested?
이 논문은 25개의 파이썬 시스템에 대한 실증적 연구를 제시하며, 실행된 메서드의 21.4%가 예외를 발생시키지만 이러한 예외적 동작들이 빈번하게 실행됨에도 불구하고(중앙값 10회 호출당 1회) 종종 테스트되지 않은 채로 남아 있음을 밝히며, 이에 따라 개선된 테스팅 도구와 예외 발생 시나리오의 희소성에 대한 재평가를 권고한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신이 바쁜 레스토랑을 운영하는 셰프라고 상상해 보세요. 대부분의 시간 동안 당신은 완벽한 요리를 만들어 행복한 고객들에게 제공합니다 (이것은 정상적인 동작입니다). 하지만 때때로 상황이 잘못될 때가 있습니다. 오븐이 고장 나거나, 고객이 재료를 주문했는데 재료가 없거나, 배달이 늦어지는 경우입니다 (이것들은 **예외(exceptions)**입니다).
컴퓨터 프로그래밍의 세계에서, 이러한 "잘못되는 일들"을 **예외(exceptions)**라고 부릅니다. 개발자들은 이러한 오류를 포착하고 우아하게 처리하기 위해 특별한 코드를 작성하여, 레스토랑 전체가 불타버리는 일이 없도록 합니다.
이 논문은 마치 25개의 서로 다른 실제 레스토랑(소프트웨어 시스템)에 들어간 음식 검사관 팀과 같습니다. 이들은 직원들이 일상적인 훈련(테스트 스위트) 중에 이러한 재난 상황을 얼마나 실제로 연습하는지 확인했습니다.
연구 결과는 다음과 같으며, 이해하기 쉽게 나누어 설명합니다:
1. "훈련" vs "실전"
검사관들은 셰프(개발자)들이 완벽한 요리를 하는 법은 매우 잘 연습하지만, 오븐에 불이 붙었을 때 어떻게 해야 하는지는 거의 연습하지 않는다는 것을 발견했습니다.
- 통계: 검사한 100개의 조리대(메서드) 중 약 21개만이 훈련 중에 실제로 문제를 경험했습니다.
- 비유: 이는 100명 중 79명이 화재 경보기가 울리는 상황조차 전혀 흉내 내지 않고 그저 요리만 계속하는 화재 훈련과 같습니다.
2. 실제로 실수가 얼마나 자주 발생하는가?
문제가 발생할 수 있는 조리대들에 대해, 검사관들은 그 실수가 얼마나 자주 발생하는지 살펴보았습니다.
- 통계: 문제를 겪을 수 있는 조리대의 경우, 평균적으로 10번의 요리 시도 중 단 1번만이 실제로 문제가 발생했습니다.
- 비유: 스테이크를 태울 수도 있는 셰프를 상상해 보세요. 만약 그가 100개의 스테이크를 굽는다면, 10개만 태웁니다. 나머지 90개는 완벽합니다. 대부분의 경우, "태우는 것"은 드문 사건입니다.
3. "희귀한" 재난 vs "흔한" 재 disaster
검사관들은 두 가지 매우 다른 유형의 "재난 취약" 조리대를 발견했습니다.
- "희귀한" 재난 (80%의 사례): 문제를 일으킬 수 있는 대부분의 조리대는 거의 문제를 일으키지 않습니다. 예를 들어, 어떤 조리대에는 "고객이 '유니콘 버거'를 주문하면 화를 내라"라는 규칙이 있을 수 있습니다. 하지만 아무도 유니콘 버거를 주문하지 않기 때문에, 셰프는 화를 낼 일이 없습니다.
- "흔한" 재난 (20%의 사례): 어떤 조리대들은 끊임없이 실패합니다. 예를 들어, 어떤 조리대가 "고객이 '글루텐 프리 피자'를 주문하면 화를 내라"라고 되어 있다고 상상해 보세요. 만약 고객의 90%가 글루텐 프리 피자를 주문한다면, 이 셰프는 끊임없이 화를 내게 됩니다.
- 반전: 이러한 드문 경우에, "화를 내는 것(예외를 발생시키는 것)"은 사실 해당 조리대가 작동하는 정상적인 방식입니다! 논문은 컴퓨터 코드가 에러를 던진다고 해서 그것이 항상 무언가 "고장 났거나" "비정상적"이라는 뜻은 아니라고 주장합니다. 때로는 그 에러 자체가 기대된 결과일 수 있습니다.
4. "숨겨진" 에러
가장 흥거로운 발견 중 하나는 "매니저(테스트 스위트)"에게는 보이지 않는 에러에 관한 것입니다.
- 비유: 수셰프가 접시를 떨어뜨렸지만, 헤드 셰프가 노이즈 캔슬링 헤드폰을 쓰고 있어서 소리를 듣지 못한다고 상상해 보세요. 수셰프는 재빨리 접시를 줍고 다시 요리를 계속합니다. 매니저는 모든 것이 괜찮다고 생각하지만, 사실 접시는 떨어졌었습니다.
- 현실: 연구에 따르면 많은 에러가 코드 내부에서 발생하고, 안전망(
try/except블록)에 의해 즉시 포착되어 상위 레벨의 테스트까지 도달하지 못합니다. 테스트는 이러한 에러가 발생했다는 사실조차 알지 못하지만, 에러는 실제로 발생했습니다.
5. "비싼" 안전망
마지막으로, 논문은 에너지 낭점에 대해 지적합니다.
- 비유: 셰프가 혹시 모를 상황을 대비해 가스레인지 바로 옆에 크고 무겁고 비싼 소화기를 계속 두는 것을 상상해 보세요. 하지만 그 소화기는 일 년에 한 번 쓸까 말까 합니다. 그것은 들고 다니기에 무겁고 공간만 차지합니다.
- 제안: 논문은 에러가 매우 드물게 발생하는 조리대(앞서 언급한 "유니콘 버거" 예시와 같은 경우)의 경우, 요리를 시작한 후에 무거운 소화기를 준비하기보다, 요리 전에 주문이 유효한지 미리 확인하는 것이 더 나을 수 있다고 제안합니다. 이렇게 하면 주방을 더 빠르고 효율적으로 만들 수 있습니다.
요약
이 논문은 우리에게 다음을 알려줍니다:
- 대부분의 에러는 희귀합니다: 현실 세계에서 에러가 자주 발생하지 않기 때문에, 우리는 "만약 잘못된다면"이라는 시나리오를 거의 테스트하지 않습니다.
- 어떤 에러는 정상입니다: 특정 작업의 경우, "실패"하는 것이 실제로 시스템이 작동하는 표준 방식입니다.
- 우리는 숨겨진 에러를 놓칩니다: 많은 에러가 발생하고 즉시 해결되므로, 우리의 테스트는 그것이 일어났다는 사실조차 인지하지 못합니다.
- 우리는 더 효율적일 수 있습니다: 때때로 우리는 거의 일어나지 않는 문제를 위해 너무 무겁고 비싼 안전 장치를 사용하고 있으며, 이를 더 간단한 확인 절차로 바꿀 수 있습니다.
저자들은 셰프(개발자)들이 이러한 희귀한 재난 시나리오를 더 잘 연습하고, 어떤 안전망이 너무 무거운지를 판단할 수 있도록 돕는 더 나은 도구가 필요하다고 제안합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.