Paper Review: Intramorphic Testing

Paper Review: Intramorphic Testing

Test Engineering Notes

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

Тому дозвольте представити Вам цикл дописів, де я буду ділитися основними тезами з дослідницьких робіт. Щось на кшталт блогу Morning Paper. Сподіваюся, такі дописи також буде цікаво читати поміж звичних статей про інструменти чи підходи.

Сьогодні до уваги підписників я пропоную роботу Manuel Rigger та Zhendong Su під назвою Intramorphic Testing A New Approach to the Test Oracle Problem.

Про test oracles та способи їх тестування

Test oracle - це механізм перевірки правильності output програми для набору вхідних даних. В ідеалі ці оракли повинні бути у формі вимог. Але не завжди усі вимоги відповідають тому коду, який реально написано. Тому дуже часто використовують "часткові тестові оракли" у формі регресійних тестів (автоматичних чи мануальних).

На даний момент декілька способів вирішення проблем часткових тестових ораклів, такі як differential testing та metamorphic testing. Обидва з них можна віднести до black-box методів тестування.

Автори у своїй роботі пропонують новий підхід - під назвою intramorphic testing.

У чому суть методів?

Differential testing

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

Metamorphic testing

У цьому виді тестування ми використовуємо вхідне та вихідне значення системи для генерації нових вхідних значень. Наприклад для того ж алгоритму сортування, маючі вхідний масив [3,1,2] а вихідне значення [1,2,3] ми можемо модифікувати вхідне значення до [3,1] а перевірити, що вихідне значення також змінилося.

Intramorphic testing


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

Приклади

Але як щодо приктичних прикладів використання intramorphic testing?

У статті наводяться такі приклади:

  • Infix, prefix, postfix формати відображення даних.
  • Симуляція Монте-Карло. Інтраморфне тестування в цьому випадку дозволяє модифікувати вхідні дані (робити вибірки більше) задля того, щоб довести, що результати стали кращими.
  • Knapsack problem. Тут greedy імплементацію алгоритму порівнюють з альтернативною імплементацію та зазначають, що вона повинна бути не менш точною, ніж перша.

Report Page