Система PROUST была испытана на большом числе программ, написанных начинающими программистами. Учебному классу начинающих программистов была дана задача об осадках (обобщение задачи вычисления среднего арифметического), показанная в табл. 5.
Компилятор для языка Паскаль, которым пользовались в этой работе, был модифицирован таким образом, чтобы сохранялись копии всех синтаксически верных программ, которые студенты отдавали на компиляцию. Это позволяло анализировать не только окончательное решение, полученное студентом, но и промежуточные варианты его программы. Поскольку первые варианты, как правило, наиболее ошибочны, возникала возможность испытать систему PROUST в самых сложных условиях.
Таблица 5. Задача об осадках, предложенная классу начинающих программистов с целью проверки эффективности системы PROUST (a), и результаты использования этой системы (б)
а Составить программу на языке Паскаль, которая будет просить пользователя вводить с терминала числа, каждое из которых соответствует количеству осадков в шт. Нью-Хейвен за какой-либо из дней. Замечание: поскольку осадки не могут выражаться отрицательными числами, программа должна отказываться воспринимать отрицательные величины. Из полученных таким образом данных программа должна вычислять следующие статистические характеристики:
Программа должна читать данные до тех пор, пока пользователь не наберет на терминале число 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% из общего числа анализируемых программ.