Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 35
Текст из файла (страница 35)
Активизация предыдущего примера с бланком ИПС не так уж сложна. Ваши взносы в ИПС сравниваются с $2000, и соответственно есть два возможных варианта. Ваша заработная плата в 1994 году сравнивается с $2250 — вот еще два варианта. И, наконец, взнос в ИПС вашего супруга сравнивается с $2000. Всего мы получаем восемь возможных случаев, из них шесть должны быть осуществимы. Составляя различные комбинации входных переменных, выбирая их больше или меньше той суммы, с которой они сравниваются, получаем следующие наборы значений для активизации тестов: Тест Ваш 1994 взнос Ваша за аботнав ппата в 1994 Ваш 1994 взнос Тест 1 $1900 $2251 $2060 Тест 2 $2050 $2100 $2251 Тест 3 $2!00 $1950 $3500 Тест 4 $2!00 $225! $1500 Тест 5.
$200 Ы 800 $1500 Тест б $200 $1800 $2500 Это не единственные значения, позволяющие обеспечить покрытие связей, но их легко получить. Заметьте, что я не стал брать значения констант равными $2000 и $2250. Я сделал это для того, чтобы обезопасить себя от случайной корректности. Если бы я выбрал значения $2000 для взносов и $2250 для заработной платы, тогда с некоторой вероятностью могло бы случиться так, что обе связи, входящие в узлы выбора М!й (А, В), могли бы иметь одинаковые значения.
В таком случае ошибка в предикате не сыграла бы никакой роли, поскольку мы бы получили $2000, невзирая на возможную некорректность алгоритма вычислений. 5.4. Методы 147 5.4.7. Предсказание итогов Здесь ие обсуждаются проблемы, касающиеся предсказания итогов, которые бы ие рассматривались в главе 3. Однако вы вряд ли будете строить модельную программу иа основе модели потока данных, потому что в большинстве языков программирования ие слишком удобно проектировать потоки данных.
Поскольку в вашей модели ие должио быть очень много потоков управления, для построения оракула хорошо подойдет электроииая таблица. Каждая ячейка таблицы — это явный узел, при этом оиа обеспечивает прямые отношения потоков данных между формулами в ячейках. Таблицы по своей природе являются удобным средством для работы с потоками, и так же, как и в случае графов потока данных, присутствие в них элемеитов потока управления сильно усложияет ситуацию.
5.4.8. Проверка соответствия пути Это ие проверка путей как таковая, это проверка узлов. Вы ие получите большого преимущества от тестироваиия потоков данных и останетесь иеза~цищеиными от случайной корректности, если ие будете проверять промежуточные вычисления, то есть, например, зиачеиия в узлах. Более эффективные методы тестирования подразумевают большую работу, а проверка этих промежуточных вычислеиий может оказаться очень трудоемкой.
Таким образом, и для них вам нужен оракул. Под «тестируемостью» здесь понимается возможность проверить промежуточиые вычисления. Я ие знаю, как это сделать без использования логических операторов проверки, заранее вычисленных выходных величин и символьных отладчиков.
Одним из преимушеств объектно-ориентированного программирования является то, что, наряду с надлежащим сокрытием информации, минимизирована вероятиость побочных эффектов, и результатом должна быть более устойчивая работа системы. Но сокрытие информации ие должно означать, что тестировшик действительно ие имеет доступа к этим данным. Электрические системы в вашем автомобиле имеют разъемы, иа первый взгляд ие служащие никакой полезной цели.
Вам оии ие нужны и ие стоит эксперимеитировать с ними. Но спросите вашего механика, насколько важны эти тестовые разъемы. Подобным же образом материнская плата в вашем ПК имеет разъемы и перемычки, необходимые только для тестирования, и нужно быть смелым и глупым одновременно, чтобы играть с ними. Но для тестирования оии действительно полезны. Тестирование — законное основание для доступа к так называемым собствеииым данным и для снятия завесы, скрывающей информацию.
Если вы тестируете ваше собствеииое программное обеспечение, используйте многочисленные логические операторы проверки как базовые точки тестирования. Если вы тестируете стороннее программиое обеспечение, окажите иа его разработчика максимально возможное давление, чтобы заставить внедрить нужные точки тестирования или логические операторы проверки. 148 Глава Б ° Тестирование потоков данных 5.5. Анализ приложений 5.5.1. Виды приложений Приложения охватывают почти весь спектр существующего программного обеспечения, но я бы не использовал тестирование потоков данных для низкоуровневого тестирования программного обеспечения, в котором имеется много необходимых потоков управления.
Наиболее естественно использовать рассматриваемый метод для следующих приложений; 1. Объектно-ориентированное программное обеспечение. ООПΠ— парадигма, основанная на потоках данных, вот почему графы потоков данных часто являются частью методологии разработки ООПО.
Если вы используете для атой цели тестирование потоков данных, вы должны допускать, что объекты были должным образом протестированы на более низком уровне, так что вы можете не сомневаться в их належности и заменить каждый из них соответствующим узлом. Далее вы концентрируетесь на том, правильные ли объекты активизируются, правильные ли сообщения проходят, и так далее.
2. Тестирование интеграции. Главная проблема с интеграцией не в том, работают ли интегрированные компоненты (зто должно быть проверено в ходе тестирования модулей), а в том, правильно ли они соединены и сообщаются друг с другом. Каждый компонент моделируется узлом, а граф потока данных может быть деревом вызовов функций программы. Это замечательно, поскольку у нас есть инструменты для отображения деревьев вызовов. Печально в данном случае то, что обычного дерева вызовов будет недостаточно. Если имеются глобальные переменные, вы должны рассматривать потоки данных для них.
И поскольку некоторые вызовы и межкомпонентные связи могут быть динамическими, статическое дерево вызовов, определяемое компилятором/редактором связей, не даст вам полной картины— но это будет хорошим началом работы по ее созданию. 3. Электронные таблицы. Электронные таблицы максимально адаптированы к чистому языку моделирования потока данных. Не пренебрегайте электронными таблицами, считая их лишь вспомогательным средством.
Они представляют собой реальное средство программирования для людей, создающих сложные приложения для бизнеса, но имеющих мало инструментов и методов для их проверки. Однако если вы покупаете готовые злектронные таблицы и планируете придать толчок вашему бизнесу с их помощью, некоторое тестирование перед их полноценным использованием будет не лишним. 5.5.2. Предположения об ошибках Все ошибки, для поиска которых предназначено тестирование потока управления, можно найти и при помощи тестирования потоков данных, посколь- 5.5. Анализ приложений 149 ку оно включает в себя тестирование потоков управления как составной элемент. Поскольку мы избегаем несущественных потоков управления в моделях потока данных, мы допускаем, что программисты умеют сами избавляться от простых ошибок потока управления. Это смещает акценты в сторону поиска ошибок данных.
В моей систематике ошибок 1ВЕ1290~ это ошибки 42хх. К подобным ошибкам относятся ошибки исходных и конечных значений, ошибки дублирования и искажения имен, перегрузка, неверный элемент, неверный тип, плохие указатели, аномалии потоков данных (например, аакрытие файла до его открытия). 5.5.3. Ограничения и предостережения 1. Тестирование потоков данных не может быть лучше вашей модели.
И оно не будет работать, если и вы не поработаете над несколькими типичными проблемами. 2. Вы все еще не нашли недостающие требования в спецификации. 3. Вы с большей вероятностью обнаружите неправильные характеристики программного обеспечения, если обеспечите проверку каждого вывода. 4. Тестирование потоков предпочтительнее использовать для выявления ошибок на высоких уровнях интеграции. 5. Тестирование потоков данных может потерять эффективность в том случае, если программное обеспечение и проектирование тестов выполненгя одним н тем же человеком. К тестированию потоков управления это имеет меньшее отношение, поскольку принципы, лежащие в основе тестирования потоков данных и тестирования потоков управления, настолько различны, что одна только смена принципа, вероятно, приведет к новой перспективе, даже если речь идет об одном и том же человеке.
6. Вы по-прежнему можете не заметить случайную корректность, но ее вероятность легче оценить. 7. Ваши тесты не лучше, чем ваш оракул. 8. Тестирование потоков данных вряд ли вам поможет, если вы не нашли способа проверить промежуточные узлы. 5.5.4. Автоматизация и инструментальные средства К концу 1994 года не существовало коммерческих сервисных программ, поддерживающих поведенческое тестирование потоков данных. Существует много частных программ, поддерживающих структурное тестирование потоков данных на С и Паскале [ГВАХ85, НАВВ89, НОВО92, КОКЕ85, КРВЕ88, ЕАВК90, 05ТВ91, ЪЧ1Е582].
Если у вас есть средство проектирования, поддерживающее диаграммы потоков данных, справьтесь у продавца, почему оно не обеспечивает автоматизацию проектирования тестов. 150 Глава 5 ° Тестирование потоков данных 5.6. Резюме Тестирование потоков данных — более эффективный метод, чем тестирование потоков управления. Он основан на определении модели потоков данных и использовании этой модели как основы для проектирования тестов.