Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестирование программного обеспечения. Фундамен...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
935.81 Кб
Скачать

120 Часть I: Основы

дурой обработки ошибок, а может быть и результатом сбоя в рабо­те самой программы, которая потеряла контроль над ситуацией.

Несколько курсоров. Если на экране появилось сразу два курсора, это может означать, что программа находится в промежуточном состоянии или что ее нормальная работа нарушена.

Сдвинутый текст. Строки текста на экране или на бумаге слегка сдвинуты. Может быть, сместилась только одна строка, а возможно, несколько.

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

Горящий индикатор активности устройства, которое не должно участвовать в работе. Индикаторы активности имеются у многих устройств — они показывают, когда компьютер читает или записы­вает данные в их память. Если, например, индикатор активности диска загорелся, когда точно известно, что программа не должна обращаться в это время к диску, это может означать, что, работая на языке достаточно низкого уровня, программист записал данные не по тому адресу, и вместо определенного места памяти они попали на диск. При низкоуровневом программировании это достаточно рас­пространенная ошибка, последствия которой могут быть самыми разрушительными.

Отслеживание действий программы

Чтобы лучше отследить работу программы, можно воспользоваться от­ладчиком исходного кода. С его помощью можно узнать много полезного, например, какой процесс в данный момент активен, какой объем памяти и сколько других ресурсов компьютера он использует, насколько заполнен стек и т.д. Вот примеры ошибок, о которых можно узнать с помощью отладчика.

• Определенная подпрограмма забывает освобождать после себя стек,

и, если она выполнится много раз, это приведет к его переполне­нию.

• После получения сообщения от другого процесса определенный процесс программы забывает сообщить операционной системе, что она может освободить выделенную для этого сообщения память. (Сообщения, которыми обмениваются процессы, — это просто структуры данных в памяти. При создании сообщения операцион­ная система выделяет для него память, а после его получения адре­

Глава 5: Документирование и анализ ошибок 121

сатом должна эту память получить обратно.) Если процессы актив­но обмениваются сообщениями, в определенный момент из-за их неаккуратности свободная память может быть исчерпана. Это вы и увидите в отладчике, как и то, кто является узурпатором.

Это только два примера, но они показывают, какие возможности рас­крываются перед тестировщиком, владеющим основами программирования. Однако не стоит тратить на работу с отладчиком слишком много времени. Не забывайте, что основная ваша работа — это тестирование “черного ящика”, а с отладчиком программист может поработать и сам.

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

Если содержимое экрана очень быстро меняется, можно попробовать поработать на менее скоростном компьютере, или найти еще какой-нибудь способ замедлить работу программы — например, эксплуатировать ее в многопользовательской среде с повышенной нагрузкой. В результате иногда можно увидеть нечто важное, что в противном случае мгновенно промель­кнет на экране и останется незамеченным.

Выявив критический шаг, тщательно протестируйте его последствия

Предположим, что если пользователь выполняет шаги А, Б, В, то на шаге В что-то происходит не так. Вы выяснили, что виновником происше­ствия является шаг Б. Попробуйте поменять последовательность действий, посмотрите, как поведет себя программа, если после шага Б выполнить не В, а Г. Будут ли последствия такими же? Возможно, обнаружится более серьезная проблема, чем та, которую вы встретили вначале. Например, программа не просто отобразит неверную информацию, но вообще “завис­нет”.

Поищите дальнейшие ошибки

Даже если вам не удалось точно установить, на каком именно шаге в программе происходит ошибка, все равно продолжайте ее тестировать, чтобы посмотреть, как она поведет себя дальше. За найденной ошибкой с большой вероятностью последуют другие, и информация об этих послед­ствиях первой ошибки может очень помочь программисту в ее поиске и исправлении. Однако не забывайте, что следующая найденная вами ошибка не обязательно является следствием предыдущей. Поэтому постарайтесь протестировать ее отдельно, особенно если ее можно вызвать каким-нибудь другим способом, в котором первая ошибка участвовать не будет.