Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 25
Текст из файла (страница 25)
Обычно вместо 11 только что перечисленных тестов разрабатываются только 7. Некоторые из этих вариантов, такие как обход, могут перекрываться с тестом, созданным на основе покрытия связей. В дополнение к тестированию 11 общих ситуаций в старом программном обеспечении (например, программном обеспечении, написанном на языке ассемблер), возможно, имеет смысл протестировать особые значения числа итераций, такие как степени двойки и близкие к ним значения: 255, 256, 257, 65535, 65536 и 65537. Но не теряйте времени на особые значения, связанные с параметрами аппаратных средств, такими как байт или длина слова в таком современном языке программи- 106 Глава 4 ° Тестирование циклов рования, как С вЂ” за исключением, конечно, того случая, когда вы проверяетс реа- лизацию и видите, что имеете дело с низкоуровневым программированием.
4.4.2. Детерминированные циклы Мы обрабатываем выплату жалования. Программное обеспечение должно обрабатывать минимум одного служа~пего и максимум 20 000 служащих. Используя рассмотренные выше установки, мы сразу получим следующие тестовые варианты: Обход. Нет служащих. Один проход. Один служащий. Два прохода. Два служащих. Типичное число проходов. 700 служащих. Максимум.
20 000 служащих. Мах» 1. 20 001 служащий. Мах - 1. 19 999 служащих. М(п. Один служащий (избыточпый вариант). М)п — 1. Нет служащих (избыточный вариант). Ноль. Нет служащих (избыточный вариант). Отрицагпельное число проходов. Отрицательное число служащих? Некоторые из этих вариантов заслуживают более подробного обсуждения. Обход: неги служащих. Согласно требованиям, программное обеспечение не предполагает обработку этого случая. Но что оно сделает? Может ли этот вариант, хотя он и не имеет смысла, возникнуть? Скажем, пакет программ используется для создания платежных ведомостей для многих разных организаций. Он обрабатывает их по очереди (вложенный цикл с внутренним циклом для служащих и внешним циклом для организаций). Новый клиент добавляется в очередь для обработки недельной платежной ведомости, но мы пока что не получили данных сотрудников.
Мы не ждем, что программное обеспечение «обработает» заработную плату для сотрудников-фантомов. И наоборот, мы не ждем, что программа начнет печатать бесконечное число чеков по $0.00 для иня. фанилия. Мы тестируем. Нам платят не за привлекательность, пе за справедливость и даже не за благоразумие. Если вообще возможно смоделировать ситуацию, мы должны сделать зто и ожидать от программного обеспечения, что оно поведет себя разумно, например, скажет нам, что «название организации не будет обработано».
При проведении тестирования мы подозреваем (и надеемся), что при обработке платежной ведомости какой-либо другой организации пе будет учтен один из служащих илн ведомость будет целиком пропущена. Один проход; один служащий. Игцем пустой дополнительный платежный чек, продублированный платежный чек или недостаток одного чека для следующей организации. Два прохода: два служащих. Часто действенно, в особенности для «смешанных» циклов.
Ищите дублированную инициализацию циклов, потерю второго служагцего, два платежных чека для второго служащего или какую-нибудь ошибку для следующей организации. 4.4. Методы 107 Типичное число проходов. Неперспективно для обнаружения ошибок, но если вы это не проделаете, то, конечно, ваше тестирование может быть подвергнуто критике. Несмотря на то, что это редко бывает эффективно для обнаружения ошибок, это политически мудро. Максллиулс Все тестовые варианты, которые ориентированы на максимумы, могут потребовать больших затрат, в особенности для вложенных циклов, Например, 20 000 служащих и 1000 организаций означают 20 000 000 платежных чеков. Даже с компьютерами это накладно.
Дело не в том, что числа 20 000 и 1000 — это какие-то особенные числа, вызывающие ошибки. Дело в том, что достигнуты максимумы, вне зависимости от их значений. Если программисты предвидят возможные проблемы с тестированием, они встроят возможность изменить эти максимальные значения для тестирования, которое в большинстве случаев может быть проведено для 20 сотрудников и 10 организаций. Если возможность тестирования не была целью проектирования, у вас нет другого выбора, кроме как протестировать эти экстремальные значения, по крайней мере, один раз. Но проделайте это, скажем, для 20 000 служащих и только одной организации, и 1000 организаций, в каждой из которой всего несколько служащих.
Максимум плюс 1. Ситуация, аналогичная случаю обхода. Мы не ждем, что программа обработает больше, чем заданный максимум, но поскольку такая ситуация может случайно возникнуть, мы хотим быть уверены, что это не приведет к сбою и файлы не будут повреждены. Ищите ситуацию, когда в компании Х работает 20 001 служащий, в порядке обработки компания У следует за компанией Х и первый служащий в компании т' получает платежный чек со счета компании Х.
Отрицательное число проходов. Если число служащих может быть введено с клавиатуры, скажем, для того, чтобы начать обработку, тогда этот случай может быть потенциально продуктивным. Если вы можете всеми правдами или неправдами реализовать этот случай, попробуйте это сделать, и посмотрите, отклонит ли программа такое входное значение. Не обманывайте себя тем, что этот случай действительно будет отклонен только потому, что вам так сказали. Например, из-за ошибки ввода заявлено, что в компании Х работает — 10 служащих. Даже если этот случай, как и ожидалось, будет отклонен, то первые 1О платежных чеков для следующей в очереди организации У могут быть не обработаны. Мы имеем дело с ошибками, которые ведут к произвольному или бессмысленному поведению.
Таким образом, всегда, когда это возможно, имеет смысл использовать произвольные и бессмысленные тестовые варианты. 4.4.3. Недетерминированные циклы Мы ищем в файле неизвестной длины специфическую запись, которая может находиться в любом месте файла или, если уж на то пошло, может вообще не содержаться в файле. Здесь мы имеем две проблемы: с размером файла и с тем местом в файле, где может быть найдена искомая запись.
Два предиката управляют поведением этого цикла: предикат, управляющий получением и проверкой следующей записи, и предикат, вызывающий остановку выполнения цикла в случае, ког- 108 Глава 4 ° Тестирование циклов да искомая запись найдена. Сначала мы обсудим вопрос о размере файл вопрос о месте в файле, где найдена запись. Обход. Файл без записей. Этот вариант также является нулевым.
Н в файле нет ааписей, искомая запись не может быть найдена. Один проход. Файл с одной записью. 1. Информация найдена: искомая запись и есть первая запись. 2. Информация не найдена: искомой записи нет в файле. Два прохода. Файл с двумя записями. 3. Информация найдена в первой записи. 4. Информация найдена во второй записи. 5.
Информация не найдена. Типичное число проходов. Файл с 10 записями'. Информация найдена в первой записи. 1. Информация найдена в записи 6. 2. Информация найдена в записи 9. 3. Информация найдена в записи 1О. 4. Информация не найдена. Максимум — 1. Например, мы можем положить максимальное числ в тестируемом файле равным 50. 1.
Информация найдена в записи 48. 2. Информация найдена в записи 49. 3. Информация не найдена. Максимум. Файл, состоящий из 50 записей 1. Информация найдена в записи 49. 2. Информация найдена в записи 50, 3. Информация не найдена. Максимум и- 1. Файл, состоящий из 51 записи Информация найдена в записи 49. 4. Информация найдена в записи 50. 5. Информация найдена в записи 51. 6. Информация не найдена. а, а затем оскольку о записей ' Я выбрал 1О записей, поскольку теория и опыт говорят, что значения 1, 2, 3, 4 и 5 могут приводить к различным моделям поведения. Поскольку 5 — 1 - 4 ие является общим вариантом, 5 пропушено.
Поскольку 6 — 1- 5 — зто первый общий вариант. 5 не является хорошим значением. Первое хорошее обшес значение — зто, возможно, 7. Но степени двойки и числа, близкие им (7, 8, 9), могут быть проблемными, так что 1Π— это первое действительно хорошее типичное значение, 4.4. Методы 109 Вот мои аргументы в пользу тестового варианта МАХ + 1. Мы не предполагали, что программное обеспечение будет обрабатывать файлы, в которых более 51 записи.
Если цикл действительно недетерминированный, тогда этот факт неизвестен нам до того, как процесс закончится. То есть длина файла становится известна только после обнаружения записи КФ (конец файла). Если это действительно так, тогда не существует способа запретить обработку файла с 51 записью. В противном случае, если чрезмерно длинный файл отвергается до того, как начнется обработка, тогда длина файла должна быть известна и цикл поиска не является по-настоящему недетерминированным.
Неизвестна только точка, в которой процесс выйдет из цикла. Как много рассмотренных вариантов вы испробуете, зависит от того, что делает цикл недетерминированным. 1. Величина максимума неизвестна и не может быть найдена. В этом случае ничего не препятствует достижению максимального значения и вам обязательно следует попробовать МАХ + 1. 2. Досрочное прекращение. У нас есть однозначно детерминированный цикл, выполнение которого может быть досрочно прервано (например, оператором ВРЕАК в языке С), но где это произойдет, неизвестно. МАХ + 1 не имеет смысла, но непременно попробуйте найти искомые данные в последней записи. 3. Обработка переменной управления. Это может происходить с детерминированными и недетерминированными циклами.
Скажем, число записей было известно, и то, что мы хотели проделать, — это выборочная проверка одной из десяти записей, вместо того чтобы проверять каждую запись в файле. Это может быть реализовано увеличением переменной управления цикла на 10, но это приводит к выходу величины указателя за границу файла. Тогда нам, безусловно, следует попробовать варианты МАХ + 1. 4.4.4.
Вложенные циклы Вложенные циклы сначала должны быть протестнрованы как индивидуальные циклы. Задайте для внутреннего цикла типичное значение и протестируйте внешний цикл для случаев критических значений. Затем измените процедуру на противоположную, задайте для внешнего цикла типичное значение и прогоните внутренний цикл через критические тестовые варианты. Эти тесты должны выявить большинство ошибок, обычно попадающихся в одиночных, невложенных циклах. Проблема с вложенными циклами возникает, когда два или более вложенных цикла достигают критических значений одновременно — например, нулевых, максимальных, и так далее.