Для початку, давайте розберемо поняття тест-дизайну. Якщо коротко – це один з етапів процесу розробки програмного продукту. Тобто стадія проєктування, створення і впорядкування тестів у набори на основі аналізу вимог і функціональності продукту. Тест-дизайн можна порівняти з аналізом вимог, але він вже є результатом цього аналізу. Складнощі виникають у випадку незнання і нерозуміння функціоналу, для якого необхідно створити тестову документацію. Під час аналізу вимог і тест-дизайну дуже важливо розуміти, як влаштована навіть найпростіша функціональність, оскільки в подальшому саме вона може викликати проблеми. Поверхневий підхід на етапі аналізу і тест-дизайну недопустимий, потрібно розібратися в системі досконально, щоб розуміти, що як працює і що з чим пов’язане у програмі. Саме одна з технік тест-дизайну, яка буде розглянута у цій статті, дозволяє не просто написати тести, а спробувати знайти помилки як наслідок роботи чи взаємодії тієї чи іншої функціональності.

Причина/Наслідок – математичний взаємозв’язок, який на практиці у тестуванні можна відобразити введенням комбінацій умов (причин) для того, щоб отримати відповідь від системи (наслідок).

Графічне представлення причини і наслідка

Тестування причинно-наслідкового ефекту – це техніка тест-дизайну, в якій для проєктування використовується графічне відображення вхідних даних (причин) і вихідних даних (наслідків). Різні комбінації причин можуть призвести до різних результатів. Для використання метода потрібне розуміння булівської логіки (логічних операторів - і, або, не). Аналіз побудованих зв’язків дає можливість комплексно обирати високорезультативні тести. Завдяки цьому методу з’являється можливість на ранньому етапі виявляти недоліки вимог чи специфікацій.

Тести будуються в декілька етапів:

  • специфікація розбивається на робочі ділянки;
  • у специфікації визначаються безліч причин і наслідків. Під причиною розуміється окрема вхідна умова або клас еквівалентності. Наслідок являє собою вихідну умову або перетворення системи. Тут кожній причині і наслідку присвоюється номер;
  • на основі аналізу семантичного змісту специфікації будується таблиця істинності, в якій послідовно перебираються всілякі комбінації причин і визначаються результати (наслідки) для кожної комбінації причин.

Таблиця забезпечується примітками, які задають обмеження і описують комбінації, які неможливі. Недоліком цього підходу є погане дослідження граничних умов.

Використання методу тестування причинно-наслідкових зв’язків

Шаблони тестів з використанням даної техніки потрібно писати за специфікаціями або сценаріями користувача (Use case). В цьому документі описуються кроки і очікувані результати тесту, але без конкретних даних. Вони вже будуть представлені на наступному етапі розробки тест-кейсів.

Приклад:

Summary:  Причина 
Steps to reproduce:

 

  1. Крок для досягнення наслідку.
  2. Крок для досягнення наслідку.
  3. Крок для досягнення наслідку.
Expected result: Наслідок

Це та техніка, яка допомагає скласти кейси для функціональності, враховуючи усі елементи, що взаємодіють і впливають один на інший.

Щоб застосовувати дану техніку, необхідно знати:

  • які саме параметри на вході (з чим оперує дана функціональність);
  • які дані на виході (для чого взагалі ця функціональність, що вона робить);
  • як вхідні параметри впливають на результат.

Кожна попередня комбінація може бути пронумерована і записана в окремі таблиці істинності, в яких істина позначена як «1», неправда - як «0». Для невизначених станів використовують позначку «Х», що може бути як «1», так і «0».

Усі рядки таблиці істинності перетворюються в тести. При цьому:

  • за можливості потрібно поєднувати тести із незалежних таблиць, використовуючи попарне тестування;
  • для класів еквівалентності потрібно додатково прописувати вхідні умови.

Цей метод дозволяє відштовхуватися від причин того, що потрібно зробити в рамках тестового сценарію і плавно переходити до наслідків. Як і всі техніки тест-дизайну, вона допомагає визначити найменшу кількість тестів для того, щоб знайти більше дефектів. З’ясовуючи усі підстави і результати можна переконатися, що під час будь-яких маніпуляцій у системи буде відповідь. Також ця техніка дозволяє знайти недоліки в логіці опису додатка, що в подальшому допоможе покращити документацію.

Приклад із сайту інтернет-магазина:

Функціональність: реєстрація.

Параметри на вході:

  • поля вводу на формі реєстрації;

Параметри на виході:

  • користувач зареєстрований, є запис в базі даних.

На основі цієї причини і наслідка, можна робити різні варіації. Спробувати зробити так, щоб в базу нічого не потрапило і не записалось або зробити повторний запис. Різні сценарії можна спроєктувати на початковому етапі.

Другий приклад із соціальної мережі:

Функціональність: стрічка новин користувача.

Параметри на вході:

  • поточний користувач;
  • друзі користувача;
  • групи користувача, на які він підписаний;
  • чорний список.  

Параметри на виході:

  • стрічка новин користувача.

Якщо наш друг або спільнота щось запостили – ми це бачимо в стрічці, але ми не побачимо нічого, що додане до чорного списку.

Підсумуємо: аналіз причинно-наслідкових зв’язків – техніка тестування, яка відображає вхідні дані і відповідь системи в комбінації. Завдяки використанню цієї техніки можна суттєво зменшити кількість тестів, а також приділити більше уваги більш важливим і вразливим ділянкам функціонала.