Файл: Отладка и тестирование программ: основные подходы и ограничения (Основные методы тестирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 15.05.2023

Просмотров: 334

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Когда проблему можно воспроизвести, значит, что:

  1. Тестировщик может описать, как перевести программу в определенное состояние.
  2. Тестировщик может указать на место, при котором программа проводит к ошибке.

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

Главные цели анализа таковы:

  1. Выявить серьёзные последствия проблемы.
  2. Найти краткий путь к ее воспроизводству.
  3. Найти альтернативный путь к этому результату.
  4. Выявить связанные проблемы.

Наиболее серьёзные последствия проблемы

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

Сбой программы – это:

  1. Её переход в непредусмотренное программистом состояние
  2. Передача управления блоку обработки ошибки.

В непредусмотренном состоянии ошибки неминуемы. Часто случается, что блок ошибок сам содержит ошибку гораздо более серьёзную. Если программа сообщает об ошибке, искажает информацию или делает что либо, следует ждать дальнейших ошибок. [43] (Cem Kaner, 1999)

Кратчайший путь воспроизведения ситуации

Бывает такое, что воспроизвести ошибку не так-то просто. Но в любом случае, когда описываете путь её воспроизведения имейте в виду:[44]

  1. Если ошибка понятна и её легко будет исправить, это будет сделано.
  2. Если для исправления ошибки требуется много времени и усилий, программист возьмется за нее с большой неохотой.
  3. Если проблема выходит при самых типичных действиях, то руководство будет заинтересовано в её исправление.
  4. Если кажется, что недостатка почти никто не заметит, он будет последним в очереди.

Уменьшая количество шагов, это упрощает область поиска источника ошибки. Благодаря этому ошибку в программе найти легче.

Альтернативный способ показа ошибки.

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

Чтобы изменить это мнение, можно найти другие действия. Два разных способа вызвать ошибку – это уже гораздо больший сигнал тревоги.

Связанные проблемы.

Ошибка – это всегда новая возможность программиста. После неё программа переходит в совершенно новое состояние, которое может быть недостижимо. Обычно выполняется код обработки.


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

Выделение критического момента.

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

Выполняя каждый шаг воспроизведения ошибки, внимательно наблю­дайте за происходящем в программе, стараясь заметить любое отклонение, малейший намек на то, если что-то пойдет не так. Такие незначительные от­клонения легко пропустить, а между тем, они могут быть первыми симптомами анализируемой вами ошибки. Вот примеры симптомов. (Cem Kaner, 1999)

  1. Сообщение об ошибках – нужно выяснить точно, в какой момент появилась эта ошибка.
  2. Задержка обработки данных – всегда обращайте внимание на любые задержки и тщательно проверяйте полученные данные.
  3. Мигание и обновление экрана – если экран вдруг, неожиданно мигнул, это может обозначать, что было обновлена обработка ошибок.
  4. Перемещение курсора – курсор может переместиться в другое место. Это может быть сделано процедурой ошибки.
  5. Несколько курсоров – если на экране появилось сразу два курсора, это означает, что программа находится в промежуточном состоянии или её работа нарушена.
  6. Сдвинутый текст – текст на экране слегка сдвинуты. Может быть, сместилась только одна строка
  7. Повторяющееся или пропущенные символы – компьютер печатает слово “ошииибка” вместо ошибка, это может быть опечаткой.
  8. Горящий индикатор активности устройства – индикаторы активности имеются у многих устройств – они показывают, когда компьютер записывает данные в их память.[45]

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

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

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

Это только два примера, они показывают, какие возможности раскрываются перед тестировщиком владеющим программированием.


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

Еще одним способом анализа является распечатка её экранов и изменений в файле данных.

Если содержимое очень быстро меняется, можно попробовать менее скоростной компьютер. (Cem Kaner, 1999)

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

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

Даже если не удалось найти на каком этапе в программе находится ошибка, все равно нужно продолжить тестировать и смотреть, как она ведет себя дальше. После найденной ошибки с большей вероятностью последуют и другие, и информация о последствиях первой ошибки может очень помочь программисту. Но не нужно забывать, что следующая найденная ошибка не обязательно является следствием предыдущей. Поэтому старайтесь тестировать её отдельно.[46] (Cem Kaner, 1999)

Поиск способа воспроизведения ошибки.

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

Бывает такое, что повторить ошибку не получается. Тогда нужно вспомнить всё что вы помните, перед тем как вышла ошибка, желательно вспомнить более ранние действия до появления, чтобы понять, почему же вышла эта ошибка.

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

Если простое повторение пользователя не срабатывает, это ничего не значит. Существует множество ошибок, которые проявляют­ся только при определенных условиях, иногда в неожиданных. Ошибка на самом деле воспроизводима. Вопрос только в том, как найти условия, которые ее вызывают. И это проще сделать программисту, перед глазами которого программный код. Вот направления поиска источника ошибки.[47] (Cem Kaner, 1999)


Ошибка обращения данных[48] – используются ли переменные с неустановленными значениями, лежать ли индексы вне заданных границ, есть ли нецелые индексы.

Ошибки описания данных – все ли переменные описаны, понятны имена переменных, корректно ли произведено описание класса.

Ошибки при сравнениях – сравниваются ли величины несовместимых типов, сравниваются величины разных видов, правильны ли отношения сравнения, правильный ли порядок следования операторов.

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

Ошибки интерфейса – соответствуют ли единицы измерения, не изменяет ли метод аргументы, являющееся только входными.

Ошибки ввода-вывода – правильны ли файлы, соответствует ли формат спецификации, подходит ли размер буфера, размеру записи, открыты ли файлы. (И.В, 2006)

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

Пропущенные детали - Если программа тестируется без строгого плана, тестиров­щик может упустить какую-ни­будь мелкую деталь, которая была ключевой. Но даже при плановом тестировании можно отвлечься и случайно выпол­нить что-либо дважды или просто нажать не на ту клавишу. Причиной неудачи с воспроизведением ситуации может быть собственная ошибка или слу­чайное действие. В этом случае нужно постараться как можно точнее вспомнить, до какого момента работы все шло по плану и где именно вы отвлеклись. (Cem Kaner, 1999)

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


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

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

Ошибка появляется при первом запуске – когда программа загружается первый раз, программы начинают считывать с диска информацию. Если при первом запуске программы файлы не содержат нуж­ной информации, программа может вести себя неправильно. Но при выходе программа сохранит в этих файлах правильные данные, и дальше все пойдет как нужно. Данная ошибка проявляется только один раз. Еще одна подобная ошибка может быть в неправильной программе собственной неинициализированной памяти. Такая ошибка может проявляться при одной последовательности выполнения программы и отсутствовать во всех других случаях[50]. (Cem Kaner, 1999)

Ошибка с разрушенными данными[51] - если данные в программе разрушены, это может быть вызвать сбой в её работе. Программа может увидеть разрушение данных и выдать сообщение об ошибке, а может просто вести себя странно.

Аппаратные сбои – если в аппарате имеются проблемы, они носят регулярный характер. Бывает из-за плохого контакта или из-за резких изменений в напряжении происходит единовременный сбой. Когда происходит сбой, может быть повреждена память, хранилище данных или программный код.

Не стоит торопиться с вывода, аппаратный сбой ошибку следует списывать в последнюю очередь.

Зависимость от ресурсов – пока один процесс печатает данные, другой должен ждать освобождения принтера. Если первому процессу выделено 90 % оперативной памяти, второму процессу придется тратить оставшиеся 10 %.