2016-05-15 1 views
0

фонКак определить уровень вклада конкретного модульного теста?

Я знаю принципы TDD (Test Driven Development) и модульного тестирования, а также различных показателей охвата. В настоящее время я работаю над проектом Linux C/C++, где должно быть достигнуто 100% branch coverage.

Вопрос

Кто-нибудь знает технику/метод автоматического определения этих тестовых единиц, которые вносят наибольший вклад в достижения определенной цели покрытия? Каждый единичный тест затем может быть связан со ставкой взносов (в процентах). Имея эти цифры, единицы-тесты могут быть заказаны по их ставке вклада.

+1

Мне интересно узнать, почему тестовый корпус с низким охватом не лучше других. Другие должны быть покрыты нормальной работой, –

+0

@Ed Heal Я не имел в виду, что тестовый пример с более низким тестовым случаем не лучше! Я заинтересован в заказе тестовых случаев по их ставке взносов. – orbitcowboy

+0

Почему? Просто запустите все. Выпейте пиво в пабе по соседству, когда они бегут. –

ответ

0

Greedy algorithm может помочь здесь. Простыми словами:

  1. Из всех испытаний выбрать один с самым высоким охватом
  2. Вычислить дельта покрытия между оставшимися кандидатами и тестами уже.
  3. Выбери кандидат, который дает самой большой дельту
  4. Повторять как шаг 2, пока все тесты не будут введены в рейтинг

В результате вы получите возможность сортировки, который выглядит как один генерируемой Squish Coco для GNU Coreutils:

Optimized Execution Order

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

Хороший случай для этой сортировки - это оптимальный порядок выполнения тестов дыма, который имеет ограниченное время для запуска. Разумеется, для полного тестирования вам лучше всего управлять всем комплектом.