Щоб скласти аспекти кількох відповідей разом і додати мою 2p ...
Примітка: мої коментарі стосуються тестування баз даних , а не тестування інтерфейсу (хоча, очевидно, це стосується)
Бази даних настільки ж потребують тестування, як і фронтальні програми, але, як правило, проходять тестування на основі "чи працює це з лицьовим кінцем?" чи "чи дають звіти правильний результат?", який, на мою думку, тестується дуже пізно в процесі розробки баз даних і не дуже надійний.
У нас є ряд клієнтів, які використовують звичайне тестування блоків / інтеграцій / систем для своєї бази даних сховища на додаток до звичайного UAT / продуктивність / та ін. тести. Вони виявляють, що за допомогою постійної інтеграції та автоматизованого тестування вони вирішують багато проблем перед тим, як перейти до традиційного UAT, тим самим заощаджуючи час в UAT та збільшуючи шанси на успіх UAT.
Я впевнений, що більшість погодиться з тим, що аналогічна суворість повинна застосовуватися до тестування баз даних, як до тестування переднього або звіту.
Ключовим моментом тестування є тестування малих простих сутностей, забезпечення їх правильності, перш ніж переходити до складних комбінацій сутностей, забезпечення їх правильності перед розширенням на більш широку систему.
Отже, даючи певний контекст моїй відповіді ...
Тестування одиниць
- має тестовий фокус, щоб довести, що блок працює, наприклад, таблиця, перегляд, функція, збережена процедура
- слід 'заглушити' інтерфейси для усунення зовнішніх залежностей
- надасть власні дані. Вам потрібен відомий початковий стан даних, тому, якщо є ймовірність наявності даних попереднього тесту, то усічення / видалення повинні відбуватися перед сукупністю
- буде ідеально працювати у власному контексті виконання
- очистить після себе і видалить дані, які він використовував; це важливо лише тоді, коли заглушки не використовуються.
Перевагами цього є те, що ви усуваєте всі зовнішні залежності від тесту і проводите найменший обсяг тестування, щоб довести правильність. Очевидно, що ці тести неможливо виконати на виробничій базі даних. Можливо, існує кілька типів тестів, які ви будете робити, залежно від типу блоку, включаючи:
- Перевірка схеми, деякі можуть назвати це "випробуванням даних"
- значення стовпців, що проходять через
- здійснення логічних шляхів з різними значеннями даних для функцій, процедур, поглядів, обчислених стовпців
- крайовий тест - NULL, неправильні дані, негативні числа, занадто великі значення
(Одиниця) Інтеграційне тестування
Мені здається, що цей пост в SE корисний для розмови про різні типи тестування.
- має фокус тестування, щоб довести, що одиниці інтегруються разом
- виконується на ряді одиниць разом
- слід 'заглушити' інтерфейси для усунення зовнішніх залежностей
- надасть власні дані, щоб зняти наслідки зовнішніх впливів даних
- буде ідеально працювати у власному контексті виконання
- очистить після себе і видалить створені дані; це важливо лише тоді, коли заглушки не використовуються.
Переходячи від одиничних тестів до цих інтеграційних тестів, часто буде трохи більше даних, щоб перевірити більшу кількість різноманітних тестових випадків. Очевидно, що ці тести неможливо виконати на виробничій базі даних.
Це потім переходить на тестування системи , інтеграційне тестування системи ( так званий кінець 2-кінець тестування), зі збільшенням обсягів даних і збільшення обсягу. Усі ці тести повинні стати частиною системи регресійного тестування. Деякі з цих тестів можуть бути обрані користувачами для виконання як частини UAT, але UAT - це тести, визначені користувачами , а не такі, як визначено ІТ - поширена проблема!
Тож тепер, коли я дав деякий контекст, щоб відповісти на ваші фактичні запитання
- Популяризація даних для тестування модулів та інтеграції може спричинити помилкові помилки тесту і цього слід уникати.
- Єдиний спосіб забезпечити послідовний тест - це не робити припущень щодо вихідних даних та жорстко контролювати їх.
- важливий окремий контекст виконання тесту, щоб переконатися, що один тестер не суперечить іншому тестувальнику, який виконує ті самі тести на іншій гілці коду бази даних, керованого джерелом.