Оптимизация интерактивного тестирования с использования метрики «покрытие кода»   Роман Григорьев 06/2010
План Постановка задачи
Метрика  «покрытия кода»  Операции с  «покрытием кода»  Анализ текущего состояния
Результаты и их интерпретация
Выводы
Q&A
Постановка задачи Объём ежедневного запуска на ночных сборках  ~ 30000 автоматических тестов
~ 900 интерактивных. принято решение о выделение некоторого подмножества тестов позволяющих без значительного уменьшения покрытия кода снизить кол-во тестов до приемлемых величин(~100).
Метрика «покрытия кода»  Покрытие кода ― показатель количества кода( строк,блоков, условий,веток) из тестируемой программы который был вызван во время тестирования. Для  java  можно сопоставить каждый блок с типом API( public   classes / methods ,  protected   classes / methods ,  classes / methods   private ) и сделать на базе этого приоритеты для блоков.
Для  native  кода мы используем только подсчет покрытия по строкам.
Метрика «покрытия кода»  Операции с ней Общее покрытие - это сумма покрытий (объединение множеств покрытых блоков)  всех тестов
Вычитание между покрытиями двух тестов(т.е. разность множеств  покрытых блоков) - насколько отличается покрытие тестов.

Оптимизация интерактивного тестирования с использованием метрики Покрытие кода

  • 1.
    Оптимизация интерактивного тестированияс использования метрики «покрытие кода» Роман Григорьев 06/2010
  • 2.
  • 3.
    Метрика «покрытиякода» Операции с «покрытием кода» Анализ текущего состояния
  • 4.
    Результаты и ихинтерпретация
  • 5.
  • 6.
  • 7.
    Постановка задачи Объёмежедневного запуска на ночных сборках ~ 30000 автоматических тестов
  • 8.
    ~ 900 интерактивных.принято решение о выделение некоторого подмножества тестов позволяющих без значительного уменьшения покрытия кода снизить кол-во тестов до приемлемых величин(~100).
  • 9.
    Метрика «покрытия кода» Покрытие кода ― показатель количества кода( строк,блоков, условий,веток) из тестируемой программы который был вызван во время тестирования. Для java можно сопоставить каждый блок с типом API( public classes / methods , protected classes / methods , classes / methods private ) и сделать на базе этого приоритеты для блоков.
  • 10.
    Для native кода мы используем только подсчет покрытия по строкам.
  • 11.
    Метрика «покрытия кода» Операции с ней Общее покрытие - это сумма покрытий (объединение множеств покрытых блоков) всех тестов
  • 12.
    Вычитание между покрытиямидвух тестов(т.е. разность множеств покрытых блоков) - насколько отличается покрытие тестов.
  • 13.
    Вычитание несимметрично (т.е. A\B != B\A) и для поиска интересующих нас результатов мы произведем вычитание каждого тесты из каждого теста для каждого теста.
  • 14.
    Метрика «покрытия кода» Пороги Наши пороги которые должны быть достигнуты перед выпуском продукта. Public+protected methods in core classes ( порог обычно 95-100%)
  • 15.
    Blocks in public+protectedmethods in core classes ( порог обычно 90-100%)
  • 16.
    Private methods incore classes (более 70)
  • 17.
    Blocks in privatemethods in core classes (более 70)
  • 18.
    Анализ текущего состоянияПокрытие продукта различными наборами тестов Methods (% от общего кол-ва методов) Blocks (%от общего кол-ва блоков) Auto SQE + Auto compatibility + Interactive compatibility 53 36 Interactive SQE 83 73 All compatibility + All SQE 86 76 SQE interactive тесты дают значительную часть покрытия native и java. Compatibility - это обязательные тесты(для нашего SQE процесса) и они дают дополнительное покрытие.
  • 19.
    Результаты и ихинтерпретация : Диаграмма «Суммарное покрытие» Сходство тестов(отсортировано по кол-ву похожих блоков) X: номер теста Y: процент покрытия теста покрытый другими тестами Логика построения: К сумме покрытий прибавляем тест дающий минимальный прирост покрытия
  • 20.
    Результаты и ихинтерпретация : Сходство тестов Сходство тестов(отсортировано по кол-ву совпадающих блоков между тестами) X: Номер теста Y: Фиолетовый : кол-во совпадающих блоков с предыдущими тестами Синий : кол-во схожих тестов (по кол-ву совпадающих блоков) с предыдущими тестами
  • 21.
    Результаты и ихинтерпретация : Сравнение покрытия две метрики используемые для оценки «похожести»: уникальность ― кол-во блоков покрытых только этим тестом
  • 22.
    избыточность ― кол-воблоков уже покрытых «уникальным» тестов По результатам исследования выбраны ~130 «уникальных» тестов Сравнение покрытия для полного(Interactive SQE) и урезанного(«Unique» interactive SQE) набора тестов. Типы покрытия Покрытие методов(всех типов) (%) Покрытие блоков(всех типов)(%) Покрытие строчек кода(%) Interactive SQE Java 83 73 N/A Native N/A N/A 59 «Unique» interactive SQE Java 47 45 N/A Native N/A N/A 50 Потери: 25% покрытия в java( много!) и 9% покрытия в native( тоже плохо!)
  • 23.
    Результаты и ихинтерпретация : Сравнение покрытия II Оценка покрытия включая все автоматические тесты и интерактивные compatibility тесты Типы покрытия Покрытие методов (%) Покрытие блоков (%) Покрытие строчек кода(%) automated + interactive compatibility + interactive SQE Java 85 76 N/A Native N/A N/A 71 automated + interactive compatibility + «Unique» interactive SQE Java 73 57 Native N/A N/A 69 Потери: потеря 12% процентов в java и всего лишь 2% в native
  • 24.
    Выводы «Покрытие кода» - мощный инструмент позволяющий оценить качество тестирования
  • 25.
    После анализа мыполучили в 6 раз меньший (c ~800 до ~130 ) набор интерактивных тестов имеющих достаточное покрытие и используемый для регулярного исполнения.
  • 26.
    С помощью покрытияможно выделить подозрительные на полное дублирование тесты Однако, «Покрытие кода» не является «серебряной пулей»! Необходимо учитывать множество нюансов и исследовать применимость этой метрики. Вы предупреждены!