Здравствуйте, Коллеги.
Подскажите, пожалуйста, как правильно тестировать такие функции, перебором всех возможных вариантов или ещё как-то?
Ссылки на статьи и мат.часть очень приветствую.
/* С++ */
static bool IsReadJournalDone(bool FullReadDone, bool SessionFullReadDone, bool ReadAlwaysFull, bool NeedFullRead, bool EventOld, bool EventNull)
{
/* определим надобность дальнейшего чтения журнала */
if (SessionFullReadDone)
{
return true;
}
if (ReadAlwaysFull)
{
return false;
}
if (NeedFullRead && !FullReadDone)
{
return false;
}
if (EventNull)
{
return true;
}
return EventOld;
}
Здравствуйте, Alexander Pazdnikov, Вы писали:
AP> Здравствуйте, Коллеги.
AP>Подскажите, пожалуйста, как правильно тестировать такие функции, перебором всех возможных вариантов или ещё как-то?
AP>Ссылки на статьи и мат.часть очень приветствую.
AP> static bool IsReadJournalDone(bool FullReadDone, bool SessionFullReadDone, bool ReadAlwaysFull, bool NeedFullRead, bool EventOld, bool EventNull)
Рефакторингом в сторону избавления от булевских параметров?
Видя такую функцию, сразу приходит в голову мысль, что из 2^6 = 64 возможных вариантов программная логика предусматривает максимум пять или шесть возможных сочетаний, то есть 10%. Заменить часть этих состояний на enum-ы, часть на overload-ы и написать switch вместо ифов может быть и некрасиво, но с точки зрения "тестируй всё и считай code coverage" — самое то.
AP>Ссылки на статьи и мат.часть очень приветствую.
Черноножкин Сергей Константинович. "Методы и инструменты метрической поддержки разработки качественных программ".
"Предложен способ формального описания критериев тестирования с помощью понятий: множество требуемых элементов и покрытия данного множества, разработан комплексный критерий тестирования для Модула-2/Оберон-2-программ, включающий семь критериев структурного тестирования, три из которых предложены и сформулированы впервые; разработан простой язык описания тестовых условий для их описания и задания во вновь сформулированных критериях. Изучена проблема построения минимального дугового покрытия для ассемблерных и Модула-2-программ, разработан алгоритм его построения."
Диссертация есть в препринте, Google найдёт. Стоимость где-то ~500 р.