Результаты испытаний системы PROUST

Система PROUST была испытана на большом числе программ, написанных начинающими программистами. Учебному классу начинающих программистов была дана задача об осадках (обобщение задачи вычисления среднего арифметического), показанная в табл. 5.

Компилятор для языка Паскаль, которым пользовались в этой работе, был модифицирован таким образом, чтобы сохранялись копии всех синтаксически верных программ, которые студенты отдавали на компиляцию. Это позволяло анализировать не только окончательное решение, полученное студентом, но и промежуточные варианты его программы. Поскольку первые варианты, как правило, наиболее ошибочны, возникала возможность испытать систему PROUST в самых сложных условиях.

Таблица 5. Задача об осадках, предложенная классу начинающих программистов с целью проверки эффективности системы PROUST (a), и результаты использования этой системы (б)

а

Составить программу на языке Паскаль, которая будет просить пользователя вводить с терминала числа, каждое из которых соответствует количеству осадков в шт. Нью-Хейвен за какой-либо из дней. Замечание: поскольку осадки не могут выражаться отрицательными числами, программа должна отказываться воспринимать отрицательные величины. Из полученных таким образом данных программа должна вычислять следующие статистические характеристики:

  1. среднее количество осадков в день;
  2. число дождливых дней;
  3. число допустимых входных данных (за вычетом любых недопустимых данных, которые могли бы быть прочитаны программой);
  4. максимальное количество осадков в день.

Программа должна читать данные до тех пор, пока пользователь не наберет на терминале число 99999, которое является сигнальным значением, указывающим на окончание ввода данных. Не включайте 99999 в вычисления. Предполагается, что если входное значение неотрицательно и не равно 99999, то оно допустимо.

б

Общее число программ

206

 

Число программ с ошибками

183

(89%)

Число полностью проанализированных программ

161

(79%)

Общее число ошибок

570

 

Верно узнанные ошибки

533

(94%)

Пропущенные ошибки

29

(6%)

Случаи ложной тревоги

55

 

Число программ, проанализированных частично

35

(17%)

Общее число ошибок

191

 

Верно узнанные ошибки

71

(37%)

Изъятые из анализа ошибки

70

(37%)

Пропущенные ошибки

50

(26%)

Случаи ложной тревоги

19

 

Число программ, которые система не анализировала

9

(4%)

Результаты использования системы PROUST в процессе решения задачи об осадках представлены в таблице. В ходе проведенного испытания было рассмотрено 206 попыток решить эту задачу. В 79% случаев система достигла полного понимания студенческой программы, обнаружив 94% всех сделанных при этом ошибок, т. е. качество работы системы намного превосходило возможности преподавателей. Из приведенной таблицы видно, что 6% ошибок остались неузнанными, а 55% найденных ошибок оказались «ложной тревогой» При этом мы считали ошибку пропущенной, если она либо действительно была пропущена системой, либо опознана неправильно. К «ложной тревоге» относятся случаи, когда обнаруженная ошибка либо на самом деле отсутствует в программе, либо неверно указан тип ошибки. Таким образом, неверно диагностированные ошибки подсчитывают я и как «ложная тревога», и как неузнанные, что приводит к некоторому завышению общего числа ошибок в диагнозе.

Когда системе PROUST не удается полностью разобраться в программе студента, ее возможности по узнаванию ошибок резко падают. 17% всех программ были проанализированы лишь частично. В этих случаях система PROUST вычеркивала из описаний анализ тех ошибок, которые были под вопросом вследствие неполного понимания программы. Оставшиеся (из этих 17%) описания ошибок часто оказывались неверными, но при этом система PROUST могла предупредить студента, чтобы он относился к результатам анализа критически. Остальные 4% студенческих программ были столь далеки от того, что ожидала система PROUST, что она вообще оказалась не в состоянии их проанализировать (в таких случаях система не давала никаких сообщений об ошибках).

Пока мы не настолько удовлетворены качеством работы, системы PROUST, чтобы целиком отдать ее в пользование студентам: необходимо снизить долю ложных тревог, увеличив при этом долю полностью проанализированных программ. Если система PROUST не в состоянии проанализировать часть какой-то программы, то она должна попытаться определить, почему ее невозможно проанализировать, и как-то прокомментировать эту часть программы. Если это удастся сделать, то можно ожидать, что система будет успешно справляться с 80—85% из общего числа анализируемых программ.