Опыт тестирования api САПР платформы

Post on 15-Jun-2015

1.710 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Доклад Ильи Слободина на конференции SQA Days-12, 30 ноября-1 декабря, Минск

TRANSCRIPT

Опыт тестирования API САПР платформыОт ручных тестов к автоматизации

Илья Слободин

Клуб разработчиков nanoCAD

ЗАО «Нанософт», 2012

Об авторе

Впервые принял участие в разработке САПР в 1994 году

Разрабатывал ПО для:• архитектурной реставрации, восстановления геометрии по архивным фотографиям• производства кухонной мебели• обработки сканированных чертежей

В настоящее время: руководительпроекта «Клуб разработчиков nanoCAD»

Что такое nanoCAD?

nanoCAD – это двумерный САПР общего назначения, «электронный кульман»

Предназначен для создания чертежей

Обладает развитым API, позволяющим создавать специализированные приложения

Зачем в САПР API?

1. Автоматизация создания чертежей

2. Упрощение создания и редактирования чертежей

Виды API: COM, LISP, .NET, C++

Простейший чертёж

Создадим чертёж, состоящий из единственного отрезка из точки (0, 0) в точку (100, 100)

Мышь: Клавиатура:

Программное создание чертежа: COM

JScript:

VBScript:

Программное создание чертежа: LISP

Программное создание чертежа: .NET

Программное создание чертежа: C++

Сложно ли подвинуть стену?

Угол сюдаБаба Яга

Делай – раз!

План начерчен отрезками,встроенными в nanoCAD

525 отрезков

План начерчен стенами, окнами, дверями приложения nanoCAD СПДС

4 стены, 2 окна, 1 дверь

Настоящий чертёж

14399 объектов

Предпосылки возникновения nanoCAD

• К 2008 году нами было создано более 20 приложений на платформе AutoCAD

• Кризис: AutoCAD дорог, и заметно дороже наших приложений

• Решение: создание собственной платформы

Краткая история

• 2008 – первое приложение на платформе nanoCAD• 2008-2012 – портировано более 10 приложений

• 2011 – релиз платформы как самостоятельного продукта, открыт API,заработал «Клуб разработчиков nanoCAD»

• 2012 – выход на международный рынок

Кому страшна регрессионная ошибка?

Если появилась ошибка там, где раньше её не было:

Человек найдёт как обойти ошибку

Программа, установленнаяу пользователя, обойти ошибку в API платформы не в состоянии

Что тестируем?

• API работы с чертежами:▪ открытие, сохранение

• API взаимодействия с пользователем:▪ выбор графических примитивов▪ выбор точек на экране▪ ввод координат, чисел, строк▪ запуск команд

• События (реакторы):▪ на создание, удаление, изменение всего и вся

Этап 1. Тестирование API вручную

Этап 1. Тестирование API вручную

• Тест API – специальная команда, вызывающая функцию API со всеми основными вариантами параметров

• Команду запускает вручную тестировщик• Далее тестировщик выбирает точки на экране, вводит

координаты, и т.п. согласно тест кейсу• По завершении тест кейса анализируется лог файл

Ручной тест API

Команда: GetAngleTest

Должен быть загружен документ UnitTest.dwg

Укажите угол мышью, первая точка: 0,0,0Вторая точка: 100,100,0Проверка на отмену. Нажмите Esc: EscПроверка на ввод 0. Введите 0: 0Проверка на запрещение ввода 0. Введите 0: 0Значение должно быть ненулевым.Проверка на запрещение ввода 0. Введите 0: 1Проверка на запрещение пустого ввода. Нажмите Enter или пробел: <Enter>Проверка на запрещение пустого ввода. Нажмите Enter или пробел: <Space>Проверка на запрещение пустого ввода. Нажмите Enter или пробел: 1Проверка на пустой ввод. Нажмите Enter или пробел: <Enter>Проверка свободного ввода. Введите не число: #sqadays12Проверка на значение по умолчанию. Нажмите Enter <135>: <Space>Проверка ввода с ключевыми словами. Введите число или [Пи/Два-пи/]: ПиПроверка ввода по умолчанию с ключевыми словами. Нажмите Enter или пробел <135> или [Пи/Два-пи/]: <Enter>

Этап 1. Тестирование API вручную

• Достоинства:▪ API может быть проверен

• Недостатки:▪ высокая трудоёмкость и низкая эффективность ручных

тестов

Автоматизируем?

Главный вопрос автоматизации

Как мы будем поддерживать автотесты в актуальном состоянии?

Что мешает автоматизации?

Специфика САПР: координаты, пиксели, масштабы

На координаты влияют:• Размеры и взаиморасположение окна приложения и

его панелей управления• Отображение элементов управления в разных

версиях ОС, стили оформления ОС• Многомониторные конфигурации• И многое, многое другое…

Как найти нужный пиксель?

Экран

(401, 18)

Чертёж

(100, 100, 0)

Как найти нужный пиксель?

Экран

(207, 128)

Чертёж

(100, 100, 0)

Как найти нужный пиксель?

Экран

(315, 161)

Чертёж

(100, 100, 0)

Координаты: из чертежа в пиксели

Вывод: Координаты должны храниться в системе координат чертежа

COM модель расширена методами преобразования координат:

nanoCAD.Utility.CoordFromPixelToWorld()

nanoCAD.Utility.CoordFromWorldToPixel()

Этап 2. Традиционная автоматизация

• Последовательность действий тестировщика записана в виде сценария системы автоматизированного тестирования

• Результат выполнения теста сохраняется в специальный объект САПР платформы

• Система автоматизированного тестирования читает результат через COM

В поисках идеального рекордера

Стандартный скрипт автоматизации:

Как автоматизировать это преобразование при записи?

Надёжный скрипт автоматизации:

Этап 2. Традиционная автоматизация

• Достоинства▪ высокая скорость тестирования, низкая вероятность

ошибок, связанных с человеческим фактором

• Недостатки▪ тесты сложно поддерживать, приходится синхронизировать

две разделённые части теста:1. тест API, загружаемый в САПР платформу

2. сценарий автоматизированного теста

Этап 2. Традиционная автоматизация

Q. Как создать легко поддерживаемый тест?

A. Объединить две разделённые части автотестав один модуль

Вариант 1. Адаптер для nanoCAD

Логика теста только в системе автоматизированного тестирования, в nanoCAD загружен адаптер

Не подходит. Мы теряем возможность прогона теста вручную

Вариант 2. Адаптер для системы автотестов

Логика теста только в nanoCAD, в систему автотестов загружен адаптер, «универсальный проигрыватель»

Подходит. Тесты можно прогнать вручную. Есть теоретическая возможность замены системы автотестирования

Изобрели велосипед?

Этап 3. Универсальный проигрыватель

Этап 3. Универсальный проигрыватель

• Сценарий автотеста содержит лишь название теста и код запуска универсального проигрывателя

• Универсальный проигрыватель запрашивает у модуля тестов список действийи последовательно их выполняет

Этап 3. Универсальный проигрыватель

• Достоинства:▪ тесты легко поддерживать:

при изменениях исправлениявносятся только в один модуль

• Недостатки:▪ Большая трудоёмкость создания автоматизированного теста

по сравнению с традиционным подходом:1. запись сценария в системе автоматизированного

тестирования

2. перенос сценария в модуль тестов

Требования к системе автотестирования

Система должна позволять:

• Автоматизировать мышь и клавиатуру

• Создать универсальный проигрыватель

• Прочитать через COM список действий и результат выполнения тестов

Как мы выбирали систему автотестирования

Когда мы начинали думать обавтоматизации, отдел тестированияуже использовал TestComplete

Мы работаем в Visual Studio, основной язык разработки: С++

Первые ручные тесты были написаныдля .NET API на С#

Мы решили попробовать Coded UI TestУ нас получилосьТам и остались

P.S. Всё ли автоматизировано?

Что автоматизировано?• Тесты исправленных

ошибок в API• Тесты нового API

Что не автоматизировано?• Тесты API, написанные

до решения проблемы автоматизации

Времени не хватает: вперёд, только вперёд!

Точка роста твоей карьеры

Тесты, которые ещё не автоматизированы == Курс молодого бойца

top related