Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 40
Текст из файла (страница 40)
Сюда входят данные из строк 30. 31. 33 и 36. Этот стартовый узел не иошет иметь больше маркеров, чеи ФР1, поскольку вам не обязательно эксплуатировать все ваши транспортные средства. Стартовый узел с незалолненной формой 2106 (за исключением каше. зос!а! зесцгтту лцюбег, оссцрагтал !имени, номера социал~ного страхования и рода деятельности)) Эта форма будет обработана и отослана обратно, на с~року 20 бланка А где она и возникла Ф1а - узел ветвления.
в нем делается выбор в будут обрабатываться транслартчые расходы или не будут (С1) здес~ сответсгвует ветке НЕТ. Транзакции в форме 2106 могут пойти либо ло этой ветке. либо ло ветке Ф1д. не не ло двум одновременно. Зто ветка ДА. соответствующая наличию хотя бы одного транспортного средства С1 - зто узел соединения. в который лрихадит либо транзакция 2106 из узла Ф1а (нет транслортных расходов). либо из узла Т1 (транслортные расходы залолнены). узел логлошения. в которон логлащаются данные об основных расходах наемного слушащего (Ра!). Фориа 2106 является хищникои. а Ра1 - мертвой и Ра! перестает существоват~. Выход (лрохошдение транзакции обратно в бланк А). СПа - это узел лорошдения где вы даете начало необходииоиу числу транзакций. ло одной на кашдое транспортное средство Место, в ко~ором вы лроидя форму 2106. ошидаете челтс!е бебцсттол (налоговых льгот на транспортное средство) Т! - зто узел поглощения.
в котором налоговые льготы на транспортное средство вводятся в форму 2106. Тсум - это узел. в котором сливаются данные або всех транспортных средствах. Детали. оставленные для вас в качестве улрашнения (2). Аи1. СЗО Ф1 Ф1а Ф1а. С1 Ф1д С1: Сба Сба; С10 С10: Ф1д: С11а Т! Т1 С! Тсуи Т1 Спа: Тсуи 6.4.4. Выбор путей и/или порожденных подграфов тестирования Следует рассмотреть несколько ситуаций, зависящих от того, есть ли в исследуемой модели узлы порождения/расщепления и/или слияния/поглощения. В любом случае мы предполагаем, что у нас иет циклов или что циклы могут Модель содержит соответствующие пояснительные примечания. С11, С11а и СЗΠ— это строки во вспомогательной модели, в которой выполняется большая часть обработки данных.
На уровне нашей модели мы предполагаем, что обработка выполняется корректно, и ее результат приходит в узел тсуи. Вам предлагается разработать более детальную модель этой обработки в упражнении 2. После того как вы разработаете модель потока транзакций для обработки, вы, надеюсь, согласитесь со мной, что в данном случае уместнее было бы использовать модель потока данных, или модель потока управления. Выбранный мной способ разбиения па части данной модели был удобен для меня, и он в точности повторяет структуру форм, предложенную ВНС. У вас может быть свое собственное мнение на этот счет, и оно приведет к другому, но не менее эффективному разбиению проблемы на части. 166 Глава б ° тестирование потоков транзакций присутствовать во вспомогательных моделях.
Поскольку модели потоков транзакций, как правило, состоят из множества маленьких независимых субмоделей, то, скорее всего, даже если вы решите использовать модель потока транзакций, может оказаться, что некоторые из субмоделей лучше описываются при помощи модели потока данных или модели потока управления. Ниже приведены некоторые наиболее часто встречающиеся случаи: 1.
Чистая модель потока управления, есть только ветвления и соединения. 2. Узлы слияния и поглощения, нет ветвлений, нет соединений. 3. Узлы слияния и поглощения с ветвлениями и соединениями. 4. Управляющие потоки с расщеплениями и порождениями, но без слияний и поглощений. 5. Общий случай. Случай 1: Чистая модель потока управления Этот случай полностью идентичен случаю тестирования потока управления. Если все потоки транзакций подобны потокам управления, то лучше выбрать модель потоков управления. По сравнению с моделями потоков управления модели потоков транзакций имеют три отличия. 1.
Обычно приходится рассматривать много потоков транзакций, несмотря на то, что все они относительно простые. 2. Большая вероятность существования моделей с числом входов и выходов, отличным от единицы. Транзакции могут приходить из разных источников и вследствие этого помещаться в различные очереди на обработку. Транзакции могут направляться в различные точки назначения и вследствие этого помещаться в различные выходные очереди. Нам недостаточно убедиться в корректности обработки транзакций, необходимо также проверить, что транзакции прошли правильным маршрутом. В принципе вас не должно удовлетворять простое покрытие связей, вы должны обеспечить такое покрытие для всех имеющих смысл комбинаций «вход — выходгь 3. Кроме того, вам еще надо рассмотреть и проверить правила упорядочения в очередях.
Случай 2: Узлы слияния и поглощения, нет ветвления, нет соединения Как обсуждалось в главе 5, разделе 5.4.4, это случай чистой модели потока данных. Вы можете создать порожденный подграф для каждого возможного выхода. Вы начинаете его строить из выходного узла и идете в обратном направлении к стартовым узлу(ам) лля данного выхода. Включите все обратные ветвления, поскольку все они вносят свой вклад в обработку данных. В нашем примере, строя порожденный подграф, идущий назад из П0, мы придем в Сбм Затем мы должны включить в него связь из узла с1 (и все, что в него входит) и связь из Рз1, поскольку обе связи поставляют в сьз данные, необходимые для обработки.
6.4. Методика 167 Случай 3: Узлы слияния и поглощения с ветвлением и соединением В этом случае порождения и расщепления отсутствуют. Несколько транзакций входят в модель, и меньшее их число выходит. Остальные транзакции поглощаются в процессе прохождения модели. Этот случай идентичен случаю 3 раздела 5АА главы 5. Если вы прочли эту главу, то вам надо прочесть то, что относится к данному случаю еще раз, и интерпретировать его на языке потоков транзакций. Если вы не читали про этот случай, то прочитайте, игнорируя все, что касается узлов выбора. Убедитесь, что вы, по крайней мере, охватили достаточное количество путей, чтобы обеспечить покрытие связей. Вы создаете порожденный подграф так же, как в предыдущем случае, за исключением того, что после узлов соединения вы должны следовать по обеим входящим в этот узел соединения связям, чтобы убедиться, что вы включили в порожденный подграф все источники данных. Этот порожденный подграф определяет набор тестовых вариантов.
Рассмотрим существующие в модели узлы ветвления. Каждое значение параметра, управляющего ветвлением, определяет выбор одного из альтернативных путей. Выберите один из них. Теперь некоторые входные транзакции уже не нужны, следовательно, их можно убрать.
Продолжайте этот процесс до тех пор, пока у вас не останется только один определенный путь (и соответствующие входные транзакции). Проделайте зто еше раз, выбрав другую ветвь для другого варианта тестового варианта. Перебор следует продолжать до тех пор, пока вы не обеспечите покрытия связей.
Случай 4: Управляющие потоки с расщеплениями и порождениями, но без слияний и поглощений Это достаточно простой случай, Начните с выхода и сделайте порожденный подграф для каждой транзакции, приходящей в выходные узлы. Сделайте один порожденный подграф (от выхода до всех стартовых узлов, имеющих к нему отношение) для каждой выходной транзакции. Поделите этот порожденный подграф на более мелкие части (больше тестовых вариантов), чтобы обеспечить покрытие связей для узлов ветвления.
Случай 5: Общий случай В данном случае не существует простых рецептов. Общая идея состоит в том, чтобы сделать порожденный подграф для каждой выходной транзакции. Включите в него все входные транзакции, обеспечивающие данные. Если в каком-либо из этих порожденных подграфов существуют управляющие потоки, убедитесь, что вы разделили их и получили дополнительные тестовые варианты, гарантирующие покрытие связей в каждом из порожденных подграфов. Может показаться, что мы создаем избыточные тестовые варианты, поскольку порожденные подграфы перекрываются, — и, обеспечив покрытие связей для транзакции типа А, мы можем проделать это заново для транзакции типа В (в другом порожденном подграфе, включающем в себя некоторые ветви из предыдущего порожденного подграфа). Для мотивировки этого, казалось бы, избыточного действия достаточно 188 Глава 6 ° тестирование потоков транзакций задать себе вопрос; «Что является целью тестирования»?» Я уже ранее говорил, что системное тестирование — это не проверка работы отдельных узлов, а проверка того, правильно ли транзакции проходят от обработки к обработке.
Поскольку ббльшая часть обработки (в случае потоков транзакций) включает в себя условные ветви, которые частично зависят от типа транзакций, то не лишним будет проверить одну и ту же логику для различных типов транзакций. По сути, такое «избыточное» покрытие связей может оказаться единственным способом проверить глубоко скрытые составные преднкаты. Используя данные выше рекомендации, мы получаем два семейства тестов. С10! Сба! ра1, Сба! С!! Ф!а1Ф! С10/Сба/ра!, Сба/С!!Т!УФ!0/Ф1а/Ф!.