На первом этапе тестирования выполнялась программа с одним процессом (в
предыдущем цикле вместо оператора CREATE использовался оператор CALL). После
завершения этого этапа тестирования было сделано предположение о том, что тело
функции дейстует корректно (при условии, что не выполнялись другие операторы
CREATE и не производилось обращение к разделяемым переменным где-либо помимо
финальной критической секции). Тестирование параллельного варианта программы
выявило сумбурность ее поведения. Никакие два тестовых прогона не давали
одинакового результата и никакой результат не совпадал с известным правильным
ответом.
Даже повторные прогоны при одном и том же значении N давали разные
результаты. Сначала была сделана проверка в критической секции, чтобы убедиться,
что каждый раз к общей сумме прибавляется только одно полученное значение. Это
программное обеспечение действительно оказалось правильным. На следующем шаге
отладки критическая секция не использовалась и каждый процесс отдельно записывал
свои частичные результаты в массив (значение I использовалось для указания места
записи результата). Следующее множество прогонов показало, что несколько позиций
в массиве не получило никаких значений (или если значения и были, то они
равнялись нулю). Каждый прогон показывал, что безрезультатными оказывались
вычисления в различных подынтервалах, однако наибольшая их концентрация
наблюдалась у левой границы интервала (А,В). Кроме того, сумма записанных в
массив значений была значительно меньше, чем общий результат, полученный путем
суммирования в разделяемой переменной всех значений, вычисленных процессами.
Дальнейшее тестирование показало, что каждый процесс выполнял некоторые
вычисления для своего подынтервала и записывал результаты в массив. Было
выявлено, что в то время, как некоторые подынтервалы игнорировались, другие -
обрабатывались более чем один раз. Кроме того, распределение повторно
используемых интервалов изменялось от прогона к прогону, и никакой корреляции
обнаружить не удалось. Наконец, было замечено, что не каждый процесс получал
различные значения I. Некоторые процессы получали одно и то же число, в то время
как другие значения I не использовались ни одним из процессов.