Лучший способ проверить приложение 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

  • Стоит ли это?

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

  1. Будет ли это хорошим способом тестирования?

Я бы сказал, что правильный набор тестов DUnit - лучший первый шаг. Однако, если у вас есть большая база кода, которая не спроектирована для тестирования, настройка функциональных тестов еще больнее, чем настройка тестов GUI.

  1. Результат теста должен быть в моей базе данных (Oracle), есть ли путь в testcomplete, чтобы проверить эти значения (несколько полей в нескольких таблицах)?

TestComplete имеет интерфейсы ADO и BDE. Или вы можете использовать интерфейс OLE в VBScript для доступа ко всему доступному.

  1. Есть ли способ в testcomplete указать параметры командной строки для exe?

Да.

Ответ 6

Один из способов интродуции unittesting в (старом) приложении может заключаться в создании "начальной базы данных" (например, функции "Flashback", описанной Rich Adams). Программа som unittest использует DUnit для управления графическим интерфейсом. Выделите "GUI-тестирование с помощью DUnit" на http://delphixtreme.com/wordpress/?p=181

Каждый раз, когда тест запускается путем восстановления в "Запустить базу данных", потому что тогда может использоваться известный набор данных.

Ответ 7

Мне нужно настроить тестовую базу данных для выполнения всех автоматизированных тестирования, был бы простой способ автоматизировать повторную установку теста db?

Использовать транзакции: выполнить откат при завершении теста. Это должно вернуть все в исходное состояние.

Рекомендуемое чтение:

http://xunitpatterns.com/