니콜라이의 팀은 CI/CD 파이프라인에서 간헐적인 빌드 실패를 경험했으며, 테스트는 약 0.5%의 확률로 실패했습니다. 이 짜증나는 문제로 인해 니콜라이는 독립적으로 조사를 시작했습니다. 실패한 테스트는 UUID 알고리즘의 래퍼인 Microsoft의 GUID 구현과 관련이 있었습니다. 특정 단언은 Assert.DoesNotContain("000", transactionId.ToString());였으며, 이는 GUID 문자열에 "000"이 포함되어 있는지 확인했습니다. 이는 빈 UUID를 감지하기 위한 것이었지만, "000"이 유효한 GUID 문자열에 절대 나타나지 않을 것이라는 가정은 잘못되었습니다. 니콜라이는 이 문자열 표현이 0.5527%의 확률로 발생하며, 대략 181개 중 1번꼴로 나타난다는 것을 발견했습니다. 이 테스트는 잘못 설계되었으며 더 강력한 검사로 개선될 수 있었습니다. 더 나은 접근 방식은 모든 비트가 0으로 설정된 UUID를 나타내는 내장 GUID.Empty 상수를 활용하는 것입니다. 이 글의 저자는 개발자들이 이러한 명백한 상수를 사용하지 않을 수 있다는 점에 좌절감을 표현하며, 문서를 참조하면 그 존재를 알 수 있을 것이라고 제안합니다. 이 글에는 NuGet 가이드 광고가 포함되어 있습니다.
Assert.DoesNotContain("000", transactionId.ToString());였으며, 이는 GUID 문자열에 "000"이 포함되어 있는지 확인했습니다. 이는 빈 UUID를 감지하기 위한 것이었지만, "000"이 유효한 GUID 문자열에 절대 나타나지 않을 것이라는 가정은 잘못되었습니다. 니콜라이는 이 문자열 표현이 0.5527%의 확률로 발생하며, 대략 181개 중 1번꼴로 나타난다는 것을 발견했습니다. 이 테스트는 잘못 설계되었으며 더 강력한 검사로 개선될 수 있었습니다. 더 나은 접근 방식은 모든 비트가 0으로 설정된 UUID를 나타내는 내장GUID.Empty상수를 활용하는 것입니다. 이 글의 저자는 개발자들이 이러한 명백한 상수를 사용하지 않을 수 있다는 점에 좌절감을 표현하며, 문서를 참조하면 그 존재를 알 수 있을 것이라고 제안합니다. 이 글에는 NuGet 가이드 광고가 포함되어 있습니다.