Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 39
Текст из файла (страница 39)
Такой подход делает коммуникации проще. 4. Определитесостояниетранзакциидлякаждоготнпатранзакции. Состояния должны соответствовать последовательности обработки, присущей типу транзакции. Если состояния представляют собой простую последовательность пунктов, например «шаг 1, шаг 2, шаг 3, ... выход», то достаточно будет просто составить список. Если есть признаки более сложного поведения, то вам, вероятно, будет необходимо использовать модель с конечным числом состояний (см. главу 9). 5. Определите поведение транзакции в любой момент ее жизненного цикла.
Как она порождается (или поступает в систему), как завершается (или 6 Зэк 770 162 Глава б ° Тестирование потоков транзакций выходит из системы), как происходит операция слияния (и с кем), как пог- лощается, расщепляется, порождает другую транзакцию и т. д. 6. Определите гипотетическую контрольную запись для каждого из типов транзакций. Запись должна отображать по меньшей мере тип и состояние транзакции. При этом в большинстве систем по обработке транзакций вы должны быть в состоянии использовать действительную контрольную запись транзакции, реализованную в программном обеспечении.
Для внешних транзакций, — таких как, например, транзакции, обрабатываемые другими системами илн людьми, — вам необходимо будет определить подходящую гипотетическую запись. 7. Идентифицируйте все очереди. Определите для каждой очереди источник (источники) появления транзакций, правило их упорядочения, приоритеты в пределах одного правила, а также применяемую обработку. Протестируйте ограничения всех очередей, которые имеют ограниченные максимально возможные размеры. Каким образом отдельные элементы помещаются в очередь? ° Каким образом отдельные элементы удаляются из очереди? Какая модель очереди используется — односерверная или многосерверная? Если многосерверная, каково правило выбора сервера? 8.
Идентифицируйте компоненты обработки (это не обязательно должно быть программное обеспечение). Сгруппируйте компоненты в соответствии с принципами, описанными выше в разделе 6.3.6. Возможно, потребуется переопределить типы транзакций, выполнить слияние типов транзакций, удалить очереди и т. д., если этот этап моделирования приводит к необходимости группировки нескольких компонентов для того, чтобы удовлетворить критериям раздела 6.3.6. 9. Для каждого из определенных на предыдущем этапе компонентов реши- те, каким образом вы будете тестировать отдельные компоненты. По своей внутренней структуре каждый компонент может представлять собой другую — модель потока транзакций более низкого уровня или же модель иного вида.
10. Несмотря на то, что реальные компоненты не обязательно действуют по добным способом, отделите расщепления(порождения и слияния/поглощения от связанных с ними узлов обработки путем помещения явного узла расщепленияупорождения после обрабатывающего узла и явного узла слияния/поглощения до обрабатывающего узла. 11. После выполнения предыдущих пунктов у вас должен быть набор узлов и связей, определяющих полный набор потоков транзакций, которые необхо- димо протестировать. 12.
Верифицнруйте модель, используя модельную программу, написаннук> на удобном языке программирования. Это может оказаться эффективным в моделях потока транзакций, потому что они чаще всего достаточно велики. 6Я. Методика 163 18. 19. 6.4.2. Иерархия покрытия Как и везде, в этой технике тестирования существует набор практических критериев покрытия, от самых простых (наименее трудоемких и неэффективных) до наиболее эффективных (основательных, но трудоемких). 13.
14. 15. 16. 17. Типичная система по обработке транзакций содержит много простых транз- акций. Говоря «много», я подразумеваю «тысячи». Говоря «простые», я под- разумеваю, что ветвления, соединения, расщепления, порождения, слияния и поглощения очень редки. Определите пути прохождения ваших тестов. Вы можете использовать как отдельные пути в графе, так и порожденные подграфы. Действуйте точно так же, как и при использовании других методик. Активизируйте порожденные подграфы. Предскажите итоги. Определите критерий соответствия.
Выполните тесты. Подтвердите итоги. Проверьте значения во всех промежуточных узлах. Покрытие ввода/вывода и порождения/завершения. Проведите достаточное число тестов и убедитесь, что все старты и порождения транзакций были осуществлены и что были созданы все исходящие транзакции (в том числе порожденные в данной системе). Эти тесты могут показаться слишком слабыми, однако многие системы не проходят даже их.
Рассмотрите все типы транзакций, о которых шла речь выше в разделе 6А.1 (а также те специфические транзакции, о которых я не говорил, но которые существуют в вашем приложении). Это тот минимум, который может сделать разумный человек. Исходя из здравого смысла, это эквивалентно гарантии того, что каждая строка кода была протестирована на уровне компонентов.
Если кто-то полагает, что в тестировании типа транзакций нет необходимости, то он либо уверен, что транзакция не содержит ошибок, либо считает, что она вообще не нужна. Если она не нужна, уберите ее, и у вас будет на один источник ошибок меньше. Наиболее редко используемые транзакции содержат больше всего ошибок. Дурную славу в этом отношении имеют транзакции, связанные с восстановлением.
Покрытие узлов. Покрытие узлов само по себе тоже не имеет смысла, поскольку оно только еще раз подтверждает выводы, сделанные при тестировании модели более низкого уровня, например, в ходе тестирования компонентов. Покрытие узлов — это все же лучше, чем ничего, так как мы убеждаемся, что все порождения, расщепления, слияния, поглощения и обработки в очереди транзакции ведут себя корректно. Этой проверки также могут не пройти многие системы.
164 Глава 6 ° Тестирование потоков транзакций 3. Покрытие связей. Используя тесты, обеспечивающие покрытие связей, мы проверяем не только корректность отдельных узлов, но и их взаимодействие друг с другом. Без покрытия связей тестирование системы будет неполным. Обеспечивая покрытие связей, мы убеждаемся не только в том, что все транзакции корректно обрабатываются (покрытие узлов делает это за нас), но и в том, что на каждом шаге обрабатываются именно те транзакции, которые и должны.
4. Порожденные подграфы. Понятие порожденного подграфа в этом контексте практически полностью совпадает с аналогичным понятием для потока данных (см, главу 5). Если существуют только узлы ветвления и соединения, то порожденный подграф соответствует пути «вход — выход» в созданной модели. Если существуют узлы порождения или расщепления, то порожденный подграф получается путем следования по всем связям, исходящим из узла порождения или расщепления и дальнейшего следования по пути прохождения этих транзакций до завершающего узла. Если существуют узлы слияния или поглощения, то порожденный подграф получается при следовании вдоль вхолящих связей до точки, где сливающиеся транзакции (или хищник/жертва) порождаются или входят в систему.
Более подробно мы будем говорить о порожденных подграфах в разделе 6.4.4. 6.4.3. Построение модели Я бы предпочел построить модель потока транзакций для налоговой декларации, но, поскольку в процедуре заполнения налоговой декларации отсутствуют транзакции, такая модель не подходит. Возможно, лучшим выбором в данном случае будет модель потока данных.
Однако для того, чтобы использовать налоговые формы в максимально возможном числе упражнений и чтобы показать вам, что почти любу(о модель можно использовать в любом приложении, я буду моделировать Ешр!оуее Вцтйпеьз Ехрепзе (Бизнес расходы наемного служащего), форма 2106. Я буду рассматривать каждый вход нли группу входов так, как если бы они были транзакциями. Ра1 Сба Данные об основных расходах наемного спукащето обрабатываются как единая транзакция. состоящая из.
стропи 2 (раглтпр, со1!з (парковка. подоромныдсбор)). строки 3 (Сгаче). ехс1цШ пр щеа1з апб епсегтатпщепс (коиандировочные расходы, исключая питание и развлечения)), строки 4 (отьег Ьцзтпезз ехрепзез ехс1цщ пр щеа1з апб ептегтатпщеп1 (другие бизнес расходы исключая питание и развлечения)). строки 5 (щеа1з апо епсегсатпщепг (питание и развлечения)). Зто входящая транзакция. то есть транзакция из узла зарокдения От1: С11 Оепега) чем с1е бага (данные об основных транспортных расходах), в тон числе данные иэ строк 11. 12. 13. 15. 18. 19. 20 и 21 Транспортных средств помет быть более одного.
поэтону в этом стартовон узле помет быть от 1 до и наркеров Дпя каждого внесенного транспортного средства пущен один из них. ФР1: С23 Астца) ехрепзез (Фактические расходы> в тои числе введенные в строки 23. 24а. 24Ь и 25. Ван не нумны эти данные, если вы рещили испол~зоват~ стандартную плату за перевозки Тем не менее. вы бгф. Методика 165 иошете выбрать фактические расходы Для этого стартового узла у вас могут быть значения от нуля до п Это число исмет быть иеньше, чем для От1. но не машет быть больше Оергестаттол (Аиортизаттия).