Windows Confidential현명하게 일하지 말고 그냥 힘들게 일하라?

Raymond Chen

소프트웨어 개발자에게 Windows 오류 보고의 커다란 장점 중 하나는 이를 통해 프로그램의 오류 양상에 대한 실제 환경의 정보를 수집할 수 있다는 것입니다. 소프트웨어 공급업체는 winqual.microsoft.com에서 온라인으로 등록만 하면 이 오류 보고를 이용할 수 있습니다. 물론 테스트 환경에서 철저히 테스트를 실행할 수도 있지만 테스트 환경의 조건과 실제 환경의 조건 사이에는 항상 차이가 있습니다. 이러한 차이로 인해 테스트에서는 나타나지 않는 버그가 고객을 괴롭히곤 합니다.

필자는 몇 년 전에 제품 안정성 팀이 요청한 일을 의뢰 받은 한 프로그래머의 이야기를 들었습니다. 제품 안정성 팀은 특정 구성 요소에서 충돌 및 기능 중단을 유발하는 핵심 원인을 해결하고자 했습니다. 양쪽은 약간의 협상을 거쳐 이러한 유형의 오류 수를 절반으로 줄인다는 목표점을 세우는 데 합의했습니다. 이들은 Windows 오류 보고의 측정에 따라 해당 구성 요소에서 발생하는 충돌 및 기능 중단의 원인 중 최소 50%에 해당하는 버그를 수정하고자 했습니다.

누구나 알듯이 오류는 골고루 분산되지 않습니다. 상대적으로 말하자면 어떤 오류는 드물고, 어떤 오류는 흔하고, 어떤 오류는 도처에 만연할 정도로 발생합니다. 엔지니어링에는 타협이 수반됩니다. 즉, 자원(시간, 비용, 인력)은 한정되어 있으므로 가장 큰 효과를 낼 수 있는 부분에 이러한 자원을 집중해야 합니다. 여기서의 목표는 충돌과 기능 중단의 횟수를 줄이는 것이므로 합리적인 접근 방식은 Windows 오류 보고에서 보고되는 가장 일반적인 오류를 연구하고 그 근본 원인을 파악한 후 이러한 일반적 오류를 수정하는 것입니다.

fig00.gif

프로그램 오류에 대한 실제 환경 정보를 제공하는 Windows 오류 보고 (더 크게 보려면 이미지를 클릭하십시오.)

이 프로그래머는 오류 데이터를 연구했고 5가지 충돌 및 기능 중단이 보고의 60% 이상을 차지한다는 사실을 파악했습니다. 이 5가지 오류를 유발하는 버그를 수정한다면 충돌 및 기능 중단의 횟수를 목표인 절반을 넘어 2/5까지 줄일 수 있다는 이야기입니다.

Microsoft 자체에서 Windows 오류 보고 데이터를 분석한 결과 Windows 충돌 및 기능 중단에는 약 20%의 버그가 오류의 80%를 일으킨다는 Pareto의 법칙이 신기할 정도로 잘 들어맞았습니다. 그런데 더욱 놀라운 사실도 발견되었습니다. 바로 1%의 버그가 50%의 오류를 일으킨다는 것입니다. 모든 버그가 애초에 균등하지 않다고는 하지만 그 분포의 불균형은 놀라울 정도입니다.

이 5가지 오류를 더 신중하게 살펴본 프로그래머는 5가지 오류 모두 원인은 하나라는 사실을 밝혀냈습니다. 모든 충돌과 기능 중단은 똑같은 버그의 각기 다른 발현이었던 것입니다. 이 프로그래머는 픽스를 개발해 테스트한 후 품질 보증 팀 직원들과 함께 이 픽스를 다음 패치에 넣기 위한 단계에 착수했습니다. 이 하나의 버그 픽스를 통해 해당 구성 요소의 문제 발생률은 이론적으로 2/5로 낮아졌습니다. 프로그래머는 하나의 간단한 코드 픽스만으로 업무를 완수했습니다.

필자는 이 이야기를 들었을 때 그 구성 요소에 대한 오류 분포 곡선의 불균형이 Windows 곡선의 불균형 더 심하다는 사실에 놀라움을 느꼈습니다. 모든 충돌 및 기능 중단의 절반 이상이 하나의 버그로 인해 유발된 것입니다. 이러한 사실은 Windows 오류 보고 등을 통해 수집되는 데이터가 없다면 결코 알 수 없는 부분입니다.

아마도 제품 안정성 팀은 그렇게 빨리 목표를 달성했다는 사실이 몹시 기뻤을 것입니다. 상호 합의된 목표가 불과 2주만에, 하나의 픽스로 초과 달성되었으니까요. 그런데 사실 제품 안정성 팀은 몹시 언짢았다고 합니다.

두 달에 걸쳐 진행될 것으로 예상했는데 너무 일찍, 쉽게 끝났기 때문이라나요. 아마 이들은 프로그래머가 머리를 쓰기보다는 그냥 고생스럽게 일하기를 바랐던 모양입니다.

Raymond Chen은 자신의 웹 사이트 The Old New Thing에서 Windows의 역사와 Win32 프로그래밍에 대해 다루고 있으며 동명의 저서에서도 이에 대해 다루었습니다. 그는 20%의 옷이 전체 세탁물의 80%를 차지한다고 합니다.