Мы используем реализацию Twitter HyperLogLog в Algebird. Учитывая число N и проверку в нашей системе, которая использует HyperLogLog для оценки текущего размера постепенно растущей коллекции и теста, если она больше или меньше N, как мы можем написать интеграционный или системный тест, который проверяет эту проверку и является почти гарантированно пройдет, если наш код, который вызывает HyperLogLog, правильный? Испытуемая система не является детерминированной, поскольку, с одной стороны, она многопоточная.Надежный интеграционный тест для кода с использованием HyperLogLog?
Моя первая мысль заключалась в том, что правильный способ написать интеграционный тест, который является надежным для этого варианта использования, - это «отказаться от наших стандартов». Итак, какое количество позиций (M) должно быть отправлено в конечную точку, чтобы убедиться, что HyperLogLog будет оценивать общее количество элементов как больше N, с вероятностью, скажем,> = 0.999999?
Или есть лучший подход?
Стандартные границы ошибок настраиваются, но это напрямую не говорит нам о максимальных границах ошибок, которые мы могли бы увидеть некоторое время - это то, о чем я забочусь, чтобы избежать случайных сбоев в построении CI на основе master впустую время и вытягивание волос!
Я также обеспокоен тем, что способ генерации случайных данных в тестах может не генерировать равномерно распределенные случайные данные в соответствующих отношениях, что может существенно повлиять на вычисления вероятности.
У вас есть возможность вставить «поддельные предметы» с «высотой»/«числом ведущих нулей» на ведро? –
@GregoryNisbet Я не думаю, что для этого существует метод API. –