Top-Down and Bottom-Up Approach for Model-Based Testing of Product Lines

Hartmut Lackner, Martin Thomas, Florian Wartenberg, and Stephan Weißleder. 2014. Model-Based Test Design of Product Lines: Raising Test Design to the Product Line Level. In Proceedings of the 2014 IEEE International Conference on Software Testing, Verification, and Validation (ICST '14). IEEE Computer Society, Washington, DC, USA, 51-60. DOI=10.1109/ICST.2014.16 http://dx.doi.org/10.1109/ICST.2014.16

В статье описаны и разобраны на примере два метода автоматизации тестирования на основе моделей (Model-Based Testing) линейки продукции.

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

Были рассмотрены “Top-Down” и “Bottom-Up” методы тестирования на примере онлайн магазина. Онлайн магазин включал в себя несколько обязательных пунктов: Каталог товаров, Система оплаты и Безопасность транзакций; опционально можно добавить Поиск товара, а Система оплаты представляла из себя один или несколько способов оплаты как Банковский перевод, Электронные деньги и/или Кредитная карта, а Безопаность транзакций может быть Простой либо Усиленной. К тому же, оплата Кредитной картой требует Усиленный уровень Безопасности. Для данного примера были построены диаграмма функций и диаграмма состояний для одной модели. Диаграмма состояний является необходимым инструментом для написания тестов, покрывающих все возможные действия пользователя, так как она содержит в себе описание переходов между состояниями. В качестве критерия теста авторы выбрали оценку покрытия всех переходов в данной диаграмме (All-Transitions coverage criteria). Данный метод широко известен и хорошо изучен как метод тестирования одной модели, авторы же применяют его для линейки продукции.

Так как линейка продукции содержит несколько моделей, строится так называемая “150% диаграмма состояний”. Это диаграмма состояний, в которую включаются всевозможные состояния и переходы между ними, которые могут возникнуть в этих моделях. По сути, это диаграмма состояний для “максимально функциональной” модели. При помощи диаграммы функций и 150\% диаграммы состояний строится диаграмма соответсвий между функциями и состояниям, которые за неё отвечают. Таким образом можно будет указать, как меняется диаграмма состояния для модели, включающей в себя те или иные функции.

Данный метод основывается на стандартной модели тестирования обычных продуктов. Вначале генерируются разные варианты продуктов по некоторому критерию покрытия функций. Данный критерий задает множество моделей, которые мы будет тестировать. Затем для каждой полученной модели строится тестовый пример (test case), который удовлетворяет уже критерию покрытия модели. В данном случае это критерий покрытия всех переходов в диаграмме состояний. После построения тестов (test case), каждый продукт тестируется на соответствующем ему тесте.

В данном методе мы контролируем как степень покрытия разных моделей, так и эффективность тестирования каждой модели. Но возникает такая ситуация, что некоторые, а иногда и многие, переходы будут покрыты несколькими тестами, то есть протестированы несколько раз. Это является большим минусом данного метода, так как некоторые части модели будут протестированы несколько раз одним и тем же способом, т.е. без дополнительной информации.

Применительно к данному примеру онлайн магазина было рассмотрено 2 модели: со всеми функциями (без Кредитной карты) и самая простая (с Кредитной картой). Всего в 150% диаграмме состояний 22 перехода, а суммарное количество переходов в тестах 43, то есть почти в 2 раза больше. Если добавить другие модели, то количество тестовых переходов увеличится еще сильнее, что показывает неэффективность данного подхода.

Данный метод основывается на тестировании 150% модели, а потом применении тестов к обычным моделям. Для всех опциональных состояний добавляется переменная, которая показывает, включена или отключена данная функция. Затем для всех переходов на диаграмме, которые ведут в соответствующие опциональным функциям состояния, добавим условие-guard, которое связано с переменной для функции. Для данной модернизированной 150% модели строится тест (test case), удовлетворяющий критерию покрытия (например покрывает все переходы). Затем каждую необходимую модель мы тестируем при помощи полученного теста, не забыв выставить значения переменных в соответствии с функциями модели.

В примере с онлайн магазином был получен тест, содержащий в себе 27 переходов, которые покрывают все 22 перехода на диаграмме, что по сравнению с предыдущим методом более эффективно.

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