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

496 Часть III: Управление проектами и группами

и интерпретировать содержимое этого байта как число вместо кода или наоборот. Это только один из множества возможных примеров.

Неправильное преобразование данных из одного формата в другой

Программа просит ввести число между 0 и 9. Вы вводите 1. Это сим­вол, и программа получает его код — 49. Чтобы превратить полученную информацию во введенное вами число, программа должна вычесть из зна­чения кода число 48. Вместо этого она вычитает 49 и получает 0. Каждый фрагмент программного кода, в котором выполняется преобразование формата данных, является потенциальным источником ошибок. Имейте в виду, что обычно в программе выполняется огромное количество преобра­зований — между различными форматами числовых значений, числами и строками, символами и цифрами и т.п.

Неверная формула

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

Неправильное приближение

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

Начальное и последующие состояния

Как правило, выполнение программой определенной функции начина­ется с инициализации ее переменных. Процесс инициализации заключается в объявлении переменных, определении их типов, выделении для них памяти и присвоении им начальных значений. Начальные значения часто читаются программой с диска. Что, если там не окажется файла? Иници­ализация одних данных выполняется при запуске программы, других — при первом вызове функции, а третьих — при каждом ее вызове.

Приложение: Распространенные программные ошибки 497

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

• Объявленные в функции переменные могут сохранять свои значения от одного ее вызова до другого. Такие переменные часто называют статическими. Их используют для тех данных, которые функция должна сохранить для следующего вызова. Другие переменные эта же функция может инициализировать при каждом своем запуске. Для правильной работы со статическими переменными функция должна определять, была ли она уже вызвана хотя бы раз, и, если нет, инициализировать все эти переменные.

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

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

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

Не присвоены начальные значения

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

Не инициализирована переменная, управляющая циклом

Переменная, управляющая циклом, определяет, сколько раз будут выпол­нены составляющие его операторы. Например, программа печатает первые 10 строк текстового файла. Как только достигается 11-я строка, програм­