Розглянемо метод випадкового переміщення елементів у масиві. Як би ви написали простий, але надійний блок-тест, щоб переконатися, що це працює?
Я придумав дві ідеї, обидві з яких мають помітні вади:
- Перемішайте масив і переконайтеся, що його порядок відрізняється від попереднього. Це звучить добре, але виходить з ладу, якщо перетасовка трапляється в тому ж порядку. (Неможливо, але можливо.)
- Перемішайте масив з постійним насінням і перевірте його на попередньо визначений вихід. Це спирається на випадкову функцію, яка завжди повертає однакові значення, задані тим же насінням. Однак іноді це недійсне припущення .
Розглянемо другу функцію, яка імітує рулони кісток і повертає випадкове число. Як би ви протестували цю функцію? Як би ви перевірили цю функцію ...
- ніколи не повертає число за межами заданих меж?
- повертає числа у дійсному розподілі? (Уніфікована для одного штампу, нормальна для великої кількості кісток.)
Я шукаю відповіді, які пропонують зрозуміти тестування не лише цих прикладів, але й випадкових елементів коду взагалі. Чи єдині тут правильні рішення? Якщо ні, то які випробування?
Для того, щоб полегшити всім розум, я не пишу власний генератор випадкових чисел.