Непсихологические тесты Крис Касперски ака мыщъх Спецвыпуск: Хакер, номер #053, стр. 053-060-3 Чтобы локализовать ошибку, разработчику недостаточно знать, что "программа упала", необходимо сохранить и затем тщательно проанализировать ее состояние в момент обрушения. Как правило, для этого используется аварийный дамп памяти, создаваемый утилитами типа "Доктора Ватсона" (входит в штатный комплект поставки операционной системы) или, на худой конец, значение регистров процессора и содержимое стека. Поскольку не все ошибки приводят к аварийному завершению программы, разработчик должен заблаговременно предусмотреть возможность создания дампов самостоятельно - по нажатию специальной комбинации клавиш или при срабатывании внутренней системы контроля. Бета-тестирование Собрав все протестированные модули воедино, получаем минимально работоспособный продукт. Если он запускается и не падает - это уже хорошо. Говорят, посади за компьютер неграмотного человека, и пусть он давит на все клавиши, пока программа не упадет. Ну да как же! Тестирование программы - это серьезная операция, и такой пионерский подход здесь неуместен. Необходимо проверить каждое действие, каждый пункт меню, на всех типах данных и операций. Бета-тестер может и не быть программистом, но он обязан иметь квалификацию продвинутого пользователя. Уронив программу (или добившись от нее выдачи неверных данных), бета-тестер должен суметь воспроизвести сбой, то есть выявить наиболее короткую последовательность операций, приводящую к ошибке. А сделать это ой как непросто! Попробуй-ка вспомнить, какие клавиши были нажаты! Что? Не получается?! Су. Используй клавиатурные шпионы. На любом хакерском сайте их валом. Пусть поработают на благо народа (не вечно же пароли похищать). Шпионить за мышью намного сложнее: приходится сохранять не только позицию курсора, но и координаты всех окон или задействовать встроенные макросредства (по типу Visual Basic'a в Word). В общем, мышь, по-моему - это саксь и маст дай. Нормальные бета-тестеры обходятся одной клавиатурой. Полный протокол нажатий сужает круг поиска ошибки, однако с первого раза воспроизвести сбой удается не всегда и не всем. В процессе тестирования приходится многократно выполнять одни и те же операции. Это раздражает, это ненадежно и непроизводительно. В штатную поставку Windows 3.x входил клавиатурный проигрыватель, позволяющий автоматизировать такие операции. Теперь же его приходится приобретать отдельно. Впрочем, такую утилиту можно написать и самостоятельно, в чем тебе помогут функции FindWindow и SendMessage. Тестируй программу на всей линейке операционных систем: Windows 98, Windows 2000, Windows 2003 и т.д. Различия между некоторыми очень значительны. Что стабильно работает под одной осью, может падать под другой, особенно если она перегружена кучей конфликтующих приложений. Хорошо если это кривая программа Васи Пупкина (тут на пользователя можно и наехать), но если твоя программа не уживается в MS Office или другими продуктами крупных фирм, бить будут тебя. Никогда не меняй конфигурацию системы в процессе тестирования! Тогда будет трудно установить, чей это баг. Хорошая штука - виртуальные машины (VM Ware, Microsoft Virtual PC). На одном компьютере можно держать множество версий операционных систем с различной комбинацией установленных приложений - от стерильной до полностью захламленной. При возникновении ошибки состояние системы легко сохранить на жесткий диск, обращаясь к нему впоследствии столько раз, сколько потребуется. |