Ответ на
»сообщение 22« (Cepгей Poщин)
___________________________
Вы не поверите, но в недалеком 2003 году таким образом "валились" многие Linux'овые сетевые демоны
Если не ошибаюсь, этот подход называется "фаззинг".
Ответ на
»сообщение 21« (Мухтар )
___________________________
Проблема нетривиальных ошибок Да уж, это проблема :o( Отлавливать Exception это не проблема, а так, мелочи жизни, вроде как подметать пол.
Лично я не вижу вариантов решения кроме как в цыкле выполнять некоторые случайные действия со случайными входными данными с протоколированием работы чтобы можно было узнать что же такое мы сделали что всё упало. Если пару часов/дней/недель всё проработало нормально, то всё хорошо.
Я уже перестал удивляться тому, что многие идеи лежат на поверхности, и подавляющее большинство из них уже реализовано. Так вот, есть системы, которые заточены на определенный язык программирования, и анализируют код на ошибки. Многие из них умеют строить трассировочные деревья, чтобы определить место ошибки, которое может проявится в неожиданном месте.
Я думаю, в данной плоскости существует две проблемы:
1) Проблема полноты поиска ошибок.
Данную проблему можно решать, двигаясь снизу вверх. Т.е., сначала определить по возможности места эксепшнов, вызовов с некорректными аргументами, зацикливаниями и прочих шаблонных ошибок (шаблоны можно расширять). Затем, при проверке кода модифицировать его таким образом, вставляя всевозможные проверки, чтобы скомпилированный код сам по себе представлял тестовую программу.
Тут есть проблема, которая сродни поиску оптимального решения в шахматах. Т.е., число вложенностей и возможных вариантов может быть слишком велико.
В таком случае можно совместить тестирование с помощью данного подхода, с написанием. И если тест не может создать 100%-но покрытие ошибок, то модифицировать код программы до тех пор, пока тест не будет пройден.
2) Проблема нетривиальных ошибок.
Данную проблему можно решать от данных. Т.е., провести анализ угроз появления некорректных данных, их раскрытия, и т.п. Затем выявить все места работы с данными и создать граф всевозможных вариаций влияния одних частей трассы данных на другие. Опять же, если тест не может обработать 100% вариантов, значит следует модифицировать программу до тех пор, пока тест не обработает все ошибки, исходя существующих шаблонов.
Ответ на
»сообщение 16« (Geo)
___________________________
Это программа такая? Типа того. Можно записать последовательность действий (куда переместили мишь, какую кнопку нажали), а потом это можно воспроизводить. Задумка не плохая, но реализация хромает (может это только у меня).