Лучший способ проверить приложение Delphi
У меня есть приложение Delphi, у которого много зависимостей, и было бы сложно реорганизовать его на использование DUnit (он огромный), поэтому я думал об использовании чего-то вроде AutomatedQA TestComplete для тестирования из интерфейсного интерфейса.
Моя основная проблема заключается в том, что исправление или новая функция иногда прерывает старый код, который ранее был протестирован (вручную) и использовался для работы.
Я установил приложение для использования ключей командной строки для открытия определенной формы, которую можно было протестировать, и я могу создать набор значений и кликов, которые необходимо выполнить.
Но у меня есть несколько вопросов, прежде чем я сделаю что-нибудь решительное... (и до покупки чего-либо)
- Стоит ли это?
- Будет ли это хорошим способом тестирования?
- Результат теста должен быть в моей базе данных (Oracle), есть ли простой способ в testcomplete проверить эти значения (несколько полей в нескольких таблицах)?
- Мне нужно настроить тестовую базу данных для выполнения всех автоматических тестов, будет ли простой способ автоматизировать повторную установку тестового db? Кроме каскада drop drop, создайте пользователя,..., impdp.
- Есть ли способ в testcomplete указать параметры командной строки для exe?
- Есть ли у кого-то подобные переживания.
Ответы
Ответ 1
Я в подобной ситуации. (Большое приложение с большим количеством зависимостей). Практически нет автоматизированного тестирования. Но есть большое желание исправить эту проблему. И вот почему мы будем решать некоторые проблемы с каждым новым выпуском.
Мы собираемся выпустить первую версию нового продукта. И первые признаки хороши. Но это была большая работа. Поэтому в следующем выпуске мы обязательно должны каким-то образом автоматизировать процесс тестирования. Вот почему я уже представляю модульные тесты. Хотя из-за зависимостей, это не настоящие модульные тесты, но вы должны что-то начать.
Что мы сделали:
- Ввел более OO-подход, потому что большая часть кода все еще была процедурной.
- Перемещено между файлами.
- Если это возможно, устраняются зависимости.
Но в списке требований гораздо больше, что обеспечивает достаточную работу для всей команды до выхода на пенсию.
И, может быть, я немного странный, но очистка кода может быть интересной. Рефакторинг без единичных тестов является опасным делом, особенно если есть много побочных эффектов. Мы использовали парное программирование, чтобы избежать глупых ошибок. И множество тестовых сессий. Но в итоге у нас есть более чистый код, и количество новых введенных ошибок было крайне низким.
О, и убедитесь, что вы знаете, что это дорогостоящий процесс. Это занимает много времени. И вам нужно бороться с тенденцией решать более чем одну проблему подряд.
Ответ 2
Я бы предположил, что вы планируете использовать как DUnit, так и что-то вроде TestComplete, поскольку каждый из них выполняет разные задачи.
DUnit отлично подходит для тестирования модулей, но его сложно использовать для общего тестирования приложений и тестирования пользовательского интерфейса.
TestComplete является одним из немногих автоматизированных продуктов тестирования, которые фактически поддерживают Delphi, и наш инженер QA говорит мне, что их поддержка очень хорошая.
Помните, что автоматическое тестирование - это большая и трудоемкая работа. Если вы решительно применяете модульное тестирование и тестируете UI, вы можете легко получить больше тестового кода, чем код производства.
С большим (существующим) приложением вы находитесь в сложной ситуации с внедрением автоматизированного тестирования.
Моя рекомендация - сначала настроить Unit Testing в сочетании с автоматическим сервером сборки. Каждый раз, когда кто-то проверяет что-либо в исходном контроле, тесты Unit автоматически запускаются. НЕ пытайтесь настраивать модульные тесты на все подряд - это слишком большая работа для существующего приложения. Не забудьте создавать модульные тесты, когда вы добавляете новые функции, и всякий раз, когда вы собираетесь вносить изменения. Я также настоятельно рекомендую, что всякий раз, когда сообщается об ошибке, вы создаете unit test, который воспроизводит ошибку до того, как вы ее исправите.
Ответ 3
Я не могу ответить на все, так как я никогда не использовал testcomplete, но могу ответить на некоторые из них.
1 - Да. Регрессионное тестирование того стоит. Это довольно неловко для вас, как разработчика, когда клиент возвращается к вам, когда вы сломали что-то, что раньше работало. Всегда хорошая идея, чтобы убедиться, что все, что раньше работало, все еще делает.
4 - Oracle имеет нечто, называемое Flashback, которое позволяет создать точку восстановления в базе данных. После того, как вы проверили свое тестирование, вы можете просто вернуться к этой точке восстановления. Вы также можете писать сценарии, чтобы использовать его, FLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);
и т.д.
Ответ 4
Мы рассматриваем использование VMWare для изоляции некоторых наших тестов.
Вы можете начать с сохраненного моментального снимка, поэтому у вас всегда есть согласованная среда и состояние локальной базы данных.
Действия VMWare могут быть написаны сценарием, поэтому вы можете автоматически устанавливать свою последнюю версию из сетевого расположения, запускать тесты и затем закрывать их.
Ответ 5
Возможно. Настройка и поддержание тестов может быть большой работой, но когда у вас их есть, тесты могут выполняться очень легко и последовательно. Если ваш проект развивается, какой-то набор тестов очень полезен.
- Будет ли это хорошим способом тестирования?
Я бы сказал, что правильный набор тестов DUnit - лучший первый шаг. Однако, если у вас есть большая база кода, которая не спроектирована для тестирования, настройка функциональных тестов еще больнее, чем настройка тестов GUI.
- Результат теста должен быть в моей базе данных (Oracle), есть ли путь в testcomplete, чтобы проверить эти значения (несколько полей в нескольких таблицах)?
TestComplete имеет интерфейсы ADO и BDE. Или вы можете использовать интерфейс OLE в VBScript для доступа ко всему доступному.
- Есть ли способ в testcomplete указать параметры командной строки для exe?
Да.
Ответ 6
Один из способов интродуции unittesting в (старом) приложении может заключаться в создании "начальной базы данных" (например, функции "Flashback", описанной Rich Adams).
Программа som unittest использует DUnit для управления графическим интерфейсом.
Выделите "GUI-тестирование с помощью DUnit" на http://delphixtreme.com/wordpress/?p=181
Каждый раз, когда тест запускается путем восстановления в "Запустить базу данных", потому что тогда может использоваться известный набор данных.
Ответ 7
Мне нужно настроить тестовую базу данных для выполнения всех автоматизированных тестирования, был бы простой способ автоматизировать повторную установку теста db?
Использовать транзакции: выполнить откат при завершении теста. Это должно вернуть все в исходное состояние.
Рекомендуемое чтение:
http://xunitpatterns.com/