Чтобы быть уверенным, вам придется протестировать их все.:-)
Серьезно, хотя для этой функции вы, вероятно, используете установленный и проверенный алгоритм. Главное, что вам нужно сделать, это убедиться, что ваш код правильно реализует алгоритм.
Другое дело - убедиться, что вы понимаете пределы своего числа, независимо от того, что это такое. По крайней мере, это поставит верхний предел размера, который вы можете проверить. Например, если вы используете 32-битный беззнаковый int, вы никогда не сможете тестировать значения, превышающие 4G. Возможно, ваш лимит будет ниже этого, в зависимости от деталей вашей реализации.
Как пример того, что может пойти не так с реализацией: Простым алгоритмом для проверки простых чисел является попытка деления кандидата на все известные простые числа до квадратного корня кандидата. Функция квадратного корня не обязательно даст точный результат, поэтому, чтобы быть в безопасности, вы должны немного пройти мимо этого. Как далеко прошлое будет зависеть от того, как реализована функция квадратного корня и насколько она может быть отключена.
Другое примечание к тестированию. Помимо проверки известных простых чисел, чтобы убедиться, что ваша функция правильно идентифицирует их как простые, также проверяйте известные составные числа, чтобы убедиться, что вы не получаете «ложных срабатываний». Чтобы убедиться, что вы правильно используете эту функцию квадратного корня, выберите некоторые составные числа, которые имеют как можно более близкий коэффициент к их квадратному корню.
Также рассмотрите, как вы собираетесь генерировать свой список простых чисел для тестирования. Можете ли вы доверять этому списку? Как прошли эти номера и кем?
Вы можете рассмотреть возможность кодирования двух функций и тестирования их друг на друга. Один из них может быть простым, но медленным алгоритмом, который может быть более уверен в правильности кодировки, а другой более быстрый, но более сложный, который вы действительно хотите использовать в своем приложении, но, скорее всего, имеет ошибку кодирования.
Я не проголосовал за вас, но я бы предположил, что люди не согласны с тем, что вы сказали об этом, не являясь необходимым для проверки случаев краев. Это именно те случаи, которые требуют наибольшего тестирования. Кроме этого, я думал, что у вас хорошие моменты, особенно. о ошибках в тесте. – Clayton 2008-11-20 21:17:53
@ Clayton - Хорошо, но я не понимаю этого «крайнего» случая ... Я имею в виду ... Я знаю, это то, что вы читали в своей первой тестовой книге, но что такое «краевой случай» для этого пример? Может ли кто-нибудь сказать мне? Убедитесь, что работает 2^32? Или что -3 не делает? Хорошо, теперь скажите мне, что такое 2^32? – badbadboy 2008-11-20 21:24:34
@ Клейтон - Что я знаю о 2^32 в моем домене? Если я знаю, что это конкретный важный случай для меня - я проверю его, но почему его называют краевым тестом? Если ваша программа вылетает из-за неправильного ввода пользователя - это ошибка в обработке графического интерфейса, а не в вашем классе домена. Тем не менее, я согласен с тем, что – badbadboy 2008-11-20 21:26:36