Главная страница

Тестирование-книга. Ю. Н. Артеменко Научный редактор


Скачать 6.27 Mb.
НазваниеЮ. Н. Артеменко Научный редактор
Дата09.10.2019
Размер6.27 Mb.
Формат файлаpdf
Имя файлаТестирование-книга.pdf
ТипКнига
#89291
страница48 из 49
1   ...   41   42   43   44   45   46   47   48   49
5 2 8 Часть III: Управление проектами и группами
происходит, когда она не освобождает ресурс в течение долгого времени, проблемы этого типа кажутся менее значительными.
Разрабатывая тесты, подумайте над следующими примерами проблем.
Нет сигнала об освобождении устройства
Процесс использует принтер. Остальные процессы ждут сигнала о его освобождении. Процесс завершает работу с принтером, но сигнал не от­
правляет.
Старый файл не удален с накопителя
Программа не удалила устаревшие резервные копии или временные файлы. Как правило, количество хранящихся копий файлов строго опреде­
лено: их не должно быть ни больше ни меньше.
Системе не возвращена неиспользуемая
память
В многозадачной системе существует специальный процесс, управляю­
щий памятью и выделяющий ее остальным процессам во временное пользование. Предполагается, что, когда память процессу становится не нужна, он возвращает ее системе, послав ей соответствующее сообщение.
Однако не все программисты аккуратны в этом вопросе — проблемы, воз­
никающие из-за блокированной процессами памяти, исключительно распро­
странены.
Лишние затраты компьютерного времени
Процесс периодически проверяет флаг события, которое не может про­
изойти, или выполняет другие действия, которые были необходимы в свое время, но больше не нужны.
Нет свободного блока памяти достаточного размера
Менеджер памяти должен уметь перераспределять свободную память таким образом, чтобы она составляла блоки достаточного размера, или же в системе должен быть реализован механизм виртуальной памяти, когда память, видимая прикладным процессом как единый блок, на самом деле состоит из расположенных на расстоянии друг от друга фрагментов.
В противном случае возможно, что через некоторое время после нача­
ла работы свободная память станет сильно фрагментированной и очеред­
ной процесс не сможет получить блок памяти нужного ему размера, хотя общий объем свободной памяти будет вполне достаточным.
Приложение: Распространенные программные ошибки 5 2 9
Недостаточный размер буфера ввода или очереди
Процесс может терять информацию о нажатиях клавиш, сообщения или другие данные из-за того, что размер буфера, в который они поступают с большой скоростью, недостаточно велик, чтобы вместить их все.
Если буфер ввода процесса предназначен для хранения 10 символов, что произойдет, когда пользователь введет 11-й символ до того, как процесс успеет обработать хоть один из уже введенных и освободить в буфере место для новых данных? Возможно, программа выдаст звуковой сигнал. Если же данные поступают процессу через модем, он может попросить передающий процесс приостановить передачу.
Аналогичная ситуация возможна и с очередью сообщений (очередь — это буфер определенной структуры). Если сообщение не помещается в очередь, оно может быть просто проигнорировано, возвращено отправите­
лю с кодом ошибки и т.п. В первом случае необходимо выяснить, каковы будут последствия потери сообщения.
Не очищен элемент очереди, буфера или стека
Предположим, что программа получает сообщения и помещает их в очередь, откуда читает их, когда появляется время. Прочитанное сообще­
ние должно быть удалено из очереди, чтобы освободить место для следу­
ющих сообщений. Однако программист может об этом забыть, из-за чего через некоторое время работы программы очередь окажется полностью заполненной и программа не сможет получить больше ни одного сообще­
ния.
В более сложных случаях из очереди не удаляются только некоторые сообщения, так что ошибка проявляется далеко не сразу. Чтобы ее увидеть, программу необходимо тестировать в течение длительного времени без перезапуска. Длительность времени определяется практическими потребно­
стями пользователя. Для тестирования текстового процессора обычно суток непрерывной работы более чем достаточно, в то время как телефонная система может работать без остановки месяцами.
Потерянные сообщения
Операционная система может терять некоторые сообщения (увы, ничего не поделаешь). Может это делать и процесс-получатель, когда ему одновре­
менно приходит слишком много сообщений. Должен ли процесс-отправи­
тель знать, что его сообщение не обработано и его необходимо через некоторое время отослать повторно?
Снижение производительности
При высокой загрузке системы (повышении объемов обрабатываемых данных, большом количестве пользователей или процессов) работа всех

5 3 0 Часть III: Управление проектами и группами
приложений замедляется. Если программа должна отвечать на события с определенной быстротой или обрабатывать определенное количество сооб­
щений в секунду, выполнение этих условий оказывается под угрозой.
Другие программы, ориентирующиеся на ее быстрый ответ, также могут не выполнить свою работу.
Повышение вероятности ситуаций гонок
Со снижением производительности системы вероятность возникновения ситуаций гонок значительно повышается. В классическом условии гонок могут произойти два события, причем первое из них практически всегда предшествует второму. Лишь в очень редких случаях второе событие чуть- чуть обгоняет первое. Однако, когда работа системы замедляется, на гене­
рирование или регистрацию первого события уходит больше времени. При этом замедление может и не коснуться второго события (например, на клавиатурный ввод система может реагировать по-прежнему быстро). В результате второе событие будет опережать первое гораздо чаще, чем обыч­
но.
При повышенной нагрузке объем необязательных
данных не сокращается
Некоторые программы генерируют огромное количество выходных дан­
ных. На форматирование всей этой информации и вывод ее на экран или принтер уходит уйма времени. Если компьютер и так перегружен, подоб­
ные программы должны сокращать объем выходной информации. Они могут выдавать свои сообщения в сокращенной форме и не печатать их немедленно, а сохранять в файле журнала. Только самые срочные сообще­
ния должны немедленно выводиться на экран или печать.
Предложения по сокращению вывода программы следует тщательно продумать. Например, если программе-планировщику необходимо распеча­
тать план совещания, которое состоится через три минуты, она должна сделать это немедленно и в полном объеме.
Не распознается сокращенный вывод другого
процесса при повышенной загрузке
Представьте себе многопользовательскую систему, в которой все про­
граммы передают информацию о своих сбоях и других интересных собы­
тиях на консоль системного администратора. Обычно сообщение включает числовой код и текстовое описание. При повышенной загрузке системы передаются только коды, причем в сокращенном виде, так что админист­
ратору приходится искать каждый код в справочнике. Неудобно, конечно, но зато трафик системы хоть немного снижается.
Приложение: Распространенные программные ошибки 5 3 1
Теперь предположим, что сообщения сохраняются на диске. В конце дня (недели, месяца) служебная программа читает их и, возможно, пред­
принимает в ответ на некоторые из них определенные действия. Эта про­
грамма должна уметь распознавать сокращенные коды, записанные программами при повышенной загрузке системы, иначе она не сможет выполнить свою работу.
Не приостанавливаются задания с низким
приоритетом
При повышенной загрузке системы все задания, в которых нет срочной необходимости, должны быть приостановлены. В многозадачных системах процессам и пользователям обычно назначаются приоритеты. Те, у кого приоритет выше, имеют больше прав на использование ресурсов компью­
тера.
Задания с низким приоритетом вообще не
выполняются
Замену масла в автомобиле можно ненадолго отложить, но все же за­
менить его нужно. Аналогичным образом можно приостановить выполне­
ние некоторых низкоприоритетных заданий, но рано или поздно они должны быть выполнены. Для таких заданий не разрешается подолгу ис­
пользовать компьютерное время, когда система загружена, однако понем­
ногу их все же следует выполнять.
Аппаратное обеспечение
Программы могут отсылать устройствам неверные данные, игнориро­
вать возвращаемые ими коды ошибок, пытаться использовать неподклю­
ченные или отсутствующие устройства и т.д. Даже если причиной проблемы является аппаратный сбой, программная ошибка также может присутствовать — она выражается в том, что программа не распознала неработоспособность устройства и не приняла соответствующих мер.
Неверное устройство
Например, программа выводит данные на экран вместо принтера.
Неверный адрес устройства
Во многих системах, для того чтобы передать данные устройству, про­
грамма должна просто записать их по определенному адресу памяти. За физическую передачу устройству данных из этой области отвечает аппарат­
ное обеспечение. Программа может записать данные не по тому адресу.

5 3 2 Часть III: Управление проектами и группами
Устройство недоступно
См. вышеприведенный раздел "Требуемый ресурс недоступен".
Устройство возвращено не в тот пул
Например, в многозадачной системе может быть много лазерных и матричных принтеров. Программа использует матричный принтер, а затем сообщает, что он свободен. Однако, возвращая его в пул доступных уст­
ройств, она по ошибке указывает не пул матричных принтеров, а пул ла­
зерных.
Данному пользователю или программе использование
устройства запрещено
Например, рядовым сотрудникам компании может быть запрещено использование дорогостоящих, сложных или хрупких устройств. Програм­
мы, работающие с такими пользователями (пользовательскими ID), долж­
ны уметь обрабатывать данный отказ.
Данный уровень привилегий не позволяет получить
доступ к устройству
Эта проблема похожа на предыдущую, только запрет использования устройства определяется не идентификатором пользователя, а его уровнем привилегий, который программа должна сообщить системе.
Шумы
Программа начинает работу с устройством, например, принтером или модемом. Компьютер связан с этим устройством через коммуникационный канал. Однако электрические наводки, временные проблемы и другие при­
чины могут вызвать искажение передаваемых по каналу сигналов (компь­
ютер отправляет 3, а устройство получает 1). Как программа выявляет ошибки обмена данными и как она о них сообщает? Что она делает для их исправления?
Прерывание связи
Один компьютер отправляет данные другому через телефонную линию
(и модемы с двух сторон). На середине передачи один из модемов отклю­
чается. Как каждый из компьютеров узнает, что связь прервана, сколько времени это занимает и что предпринимается далее? Аналогичным образом как компьютер узнает, что принтер, к которому он подключен, перестал печатать?
Приложение: Распространенные программные ошибки 5 3 3
Проблемы тайм-аута
Программа посылает устройству сигнал и некоторое время ждет отве­
та. Не получив его, она решает, что устройство сломано или отключено. Но что, если она просто ждала недостаточно долго?
Неверный накопитель
Программа ищет данные, записанные на накопитель — дискету, смен­
ный жесткий диск или магнитную ленту. Не найдя необходимых файлов, она может сообщить об этом пользователю и попросить вставить другой накопитель или же сначала поискать данные на другом устройстве. Одна­
ко возможен и просто программный сбой. А в одной особенно свирепой операционной системе программы могли разрушить каталог дискеты, пы­
таясь найти файл, которого там нет.
Не проверяется содержимое текущего диска
Вставьте один диск, поработайте с ним, затем вытащите его и вставьте в тот же дисковод другой диск. Некоторые операционные системы не за­
мечают замены. Они копируют каталог диска в память и не считывают его повторно до тех пор, пока пользователь об этом явно не попросит. Пыта­
ясь записать данные на диск или считать их с диска, такие операционные системы пользуются старой информацией каталога и иногда даже портят файлы или читают неизвестно что.
Не закрыт файл
Завершив работу с файлом, программа должна его закрыть. В против­
ном случае внесенные ею в файл изменения не будут записаны на диск.
При выключении компьютера открытый файл может быть запорчен. Поэто­
му завершая свою работу, программы обязательно должны закрывать все свои открытые файлы.
Неожиданный конец файла
Читая файл, программа достигает маркера его конца. Предположим, что программа ожидала найти необходимые данные далее. Как она поступит: возможно, проигнорирует маркер конца файла и продолжит чтение даль­
ше? А может быть, произойдет сбой?
Ошибки, связанные с длиной файлов и дисковыми
секторами
Информация хранится на дисках небольшими фрагментами фиксиро­
ванного размера, называемыми секторами. Их размер обычно составляет несколько килобайтов. Некоторые программы сбоят при попытке сохране-

5 3 4 Часть III: Управление проектами и группами
ния или чтения файла, размер которого кратен размеру сектора. Например, если размер сектора равен 1 Кб, программе не удается правильно сохранить файлы размером в 1, 2, 3 Кб и т.д.
Последний символ каждого сектора или последний символ файла может быть скопирован неправильно, скопирован дважды или потерян. Иногда программа даже портит весь записываемый файл и файл, следующий за ним на диске.
Неверный код операции или команды
Программа посылает терминалу команду сдвинуть курсор на экране, а он вместо этого меняет видеорежим. Программа посылает принтеру коман­
ду прогона страницы, а он выполняет перевод строки.
Устройства не стандартизированы. Для выполнения одного и того же действия два принтера могут использовать разные команды. То же касается и любых других устройств. Поэтому программа должна знать, с каким именно устройством она работает, и передавать ему правильные команды.
Неверно интерпретирован код состояния или
возврата
Программа посылает принтеру команду включить курсив. Принтер может ответить, сообщив, возможно или нет выполнение этой команды. Он также может сообщить о причине неудачи (отсутствует бумага, лента, не- известная команда, не установлен дополнительный модуль). Многие про­
граммы игнорируют коды ошибок или ищут их в устаревшем или неверном списке.
Ошибка протокола обмена с устройством
Коммуникационный протокол, используемый для взаимодействия ком- пьютера и внешнего устройства или пары компьютеров определяет, когда компьютер отправляет данные, с какой скоростью и каковы их характери­
стики (четность, стоповые биты и т.п.). Кроме того, протокол определяет, как устройство сообщает о получении данных и готовности принимать следующие или о необходимости приостановки передачи.
Устройства могут отправлять данные и отвечать невпопад, или же фор­
мат данных может быть неверным.
Неполное использование возможностей устройства
Если принтер может печатать полужирным шрифтом, зачем пытаться имитировать этот шрифт, печатая каждую строку по нескольку раз? Про­
грамма может быть разработана для старых устройств и не изменена с расширением их возможностей.
Приложение: Распространенные программные ошибки 5 3 5
Устройство может иметь собственные встроенные шрифты, набор кодов ошибок и т.д., но программа не распознает его сообщений и не использу­
ет расширенных возможностей.
Проблема может быть и в другом. Программист знает о возможностях устройств, но все они управляются разными командами, и реализация полноценного управления ими всеми обходится слишком дорого.
Игнорируется или неправильно используется
механизм страничного управления памятью
Память компьютера может быть логически разделена на участки, назы­
ваемые страницами. Однако программа может неверно переключаться между страницами или неправильно с ними обращаться.
Страницы часто используются для организации виртуальной памяти.
Программа обращается к данным по определенному адресу, не зная, нахо­
дятся ли они в оперативной памяти или выгружены на диск. Если програм­
ма обращается к отсутствующей странице, происходит ошибка, в ответ на которую страница считывается в память. Впрочем, операционные системы обычно скрывают от программ механизм организации виртуальной памя­
ти, хотя некоторые программы пытаются реализовывать его самостоятель­
но. В этом случае программа может случайно затереть содержимое страницы в памяти, не сохранив его на диске.
Игнорирование ограничений канала
Примеры:
• Программа пытается пересылать данные со скоростью 100 символов в секунду, в то время как через соединение может передаваться только 10 символов в секунду.
• Программа может пересылать данные с большой скоростью, пока входной буфер устройства не заполнится. Затем она должна прекра­
тить передачу до тех пор, пока устройство не освободит буфер.
Некоторые программы не распознают сигналов устройств и продол­
жают передачу.
Предположения о наличии или отсутствии устройства
или его инициализации
Перед отправкой текста на печать текстовый процессор посылает прин­
теру инициализирующее сообщение, в котором говорится, что данные должны печататься с таким-то разрешением и таким-то шрифтом. Необхо­
димо ли это сообщение? Возможно, что принтер уже инициализирован.

5 3 6 Часть III: Управление проектами и группами
Программируемые функциональные клавиши
Программируемые функциональные клавиши могут генерировать при нажатии любую заданную последовательность кодов. Эта последователь­
ность должна быть правильно запрограммирована и соответствовать теку­
щему режиму программы. Например, если на экране написано: "Для печати нажмите ", — генерируемая при нажатии этой клавиши последовательность кодов должна инициировать печать, а не выход из программы.
Если программа полагается на программируемые клавиши, при ее за­
пуске необходимо убедиться, что с ними связаны правильные последова­
тельности кодов.
1   ...   41   42   43   44   45   46   47   48   49


написать администратору сайта