2012-05-21 2 views
0

Я сделал слияние, которое объединяет массив из трех частей вместо двух, чтобы отсортировать его, и я написал некоторый код для проверки моего слияния, если он работает правильно. Вот код для проверки:Код отладки/тестирования двух массивов

while (true){ 

    Random rand = new Random(); 

    int[] randArray = new int[rand.nextInt(2000)]; 

    for (int i = 0; i < randArray.length; i++) { 
     randArray[i] = rand.nextInt(); 
    } 

    int[] temporary = new int[randArray.length]; 

    System.arraycopy(randArray, 0, temporary, 0, randArray.length); 

    mergesort(randArray); 

    Arrays.sort(temporary); 

    if (Arrays.equals(randArray, temporary)){ 
     System.out.println("YES"); 
    } else { 
     break; 
    } 

    }  
} 

Что я делаю каждый раз, когда создается массив до 2000 целых чисел и заполнить массив случайных чисел, а затем сохранить этот массив во временном массиве, после такого использования my mergesort в исходном массиве и использовать метод Arrays.sort() для временного массива, тогда, если два массива равны, напечатайте YES или иначе выйдите из цикла while.

К настоящему времени он не сломался из цикла while и указывает, что мой алгоритм правильный, поэтому я спрашиваю, правильно ли я сделал это и правильно написал тестовый код.

EDIT: Это печатает ДА ​​постоянно, не нарушая из цикла, так что я считаю, что это работает, но я прошу, чтобы я мог быть уверен, что

+0

Если это не печать 'YES' или окончание, то это означает, что в вашей функции' mergesort() 'есть некоторый сот бесконечного цикла, вам может потребоваться опубликовать это, если вы хотите получить помощь по этой проблеме , – 101100

+0

no it is print YES постоянно –

+0

Единственный способ, которым заканчивается ваш цикл, когда он выходит из цикла, и единственный раз, когда это происходит, когда слияние сортируется. Вы можете изменить цикл на подсчитанный цикл, а затем он будет проверять только определенное количество случайных массивов, это то, что вы хотите? – 101100

ответ

0

Ваш тестовый код кажется, хорошо для меня, и это означает, что ваш алгоритм в основном хорошо. С другой стороны, пожалуйста, не поймите меня неправильно, но этот вид тестирования можно считать только быстрой и грязной проверкой. Если вы хотите сделать надлежащее тестирование, вы должны проверить следующее:

  • счастливого путь с простыми примерами
  • граничных условиями
  • условия ошибки

Вы должны также рассмотреть возможность использования автоматизированной базы тестовой как JUnit.

И, наконец, использование случайного ввода в тесте не является хорошей практикой, так как результаты тестов могут меняться от запуска до запуска.

+0

Я начинающий программист, и я никогда не использовал автоматическую тестовую структуру, честно говоря, я не знал, что такая вещь существует. Легко ли использовать для начинающего программиста, как я? Кстати, я изменил вывод YES на число, которое указывает, сколько правильных массивов я отсортировал. Остальное осталось, так как я просто сделал это, чтобы посмотреть, сколько у меня к настоящему времени, и у меня более двух миллионов различных тестов, поэтому я думаю, что я могу быть хорошим, но в любом случае JUnit прост в использовании или я смучусь? –

+0

JUnit очень легко учиться, просто попробуйте. Он интегрирован со многими IDE, такими как eclipse. Это будет необходимо в вашей дальнейшей карьере, если вы планируете карьеру в развитии Java в любом случае. –

Смежные вопросы