Size: a a a

2021 April 08

CD

Constantine Drozdov in C++ Together 2.0
не юзлес когда тебе надо выискивать где хуйня
источник

CD

Constantine Drozdov in C++ Together 2.0
скажем так, в лучших олимпиадных традициях насиловать стрессами в поисках хуйни бывает полезно
источник

CD

Constantine Drozdov in C++ Together 2.0
можно много интересных вещей найти
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
Подвид системного тестирования, суть которого заключается в том, что ты тестируешь взаимодействие двух или более модулей, а функциональное тестирование это валидация функциональных требований (проверка соответствия входных данных выходным)
Интеграционный тест это всего лишь тест, который проверяет что некоторые части ПО взаимодействуют корректно, согласно заранее оговоренным контрактам.
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
Еще их называют "Contract Tests" - Контрактные тесты
источник

AF

Aidar Fattakhov in C++ Together 2.0
чем соответствие от взаимодействия отличается?
источник

AF

Aidar Fattakhov in C++ Together 2.0
или во втором просто про формат джейсона ?
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
Функциональные тесты бывают разных размеров)
источник

AF

Aidar Fattakhov in C++ Together 2.0
ну пока что звучит так что все тесты функциональные)
источник

CD

Constantine Drozdov in C++ Together 2.0
то есть проверка типов это интеграционный тест? 🤔
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
если ты пишешь тесты-миксы, то да
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
они все проверяют соответствие кода функциональным требованиям
источник

CD

Constantine Drozdov in C++ Together 2.0
нужен пример/метафора
источник

AF

Aidar Fattakhov in C++ Together 2.0
ок мб тест фаззером не попадает под это как раз
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
Хорошо
источник

CD

Constantine Drozdov in C++ Together 2.0
по-моему абстрактные понятия надо с них начинать)
источник

CD

Constantine Drozdov in C++ Together 2.0
ты там уже двухтомную монографию написал :)
источник

AF

Aidar Fattakhov in C++ Together 2.0
хз мы проходили это все на программной инженерии но ячет все забыл
источник

CC

Chris Calvin 🦖 in C++ Together 2.0
Предположим что имеется некая функция add со странной логикой:
(Весь код ниже написан на выдуманном псевдокоде)

int sum(int a, int b) {
   if (a == 2 && b == 2) return 5;
   return a + b;
}


Юнит тесты

При модульном(или юнит) тестировании мы полагаемся на сакральные знания имплементации и валидируем что мы правильно понимаем суть написанного. Определяем все бранчи(куда может завернуть нас то, или иное исполнение) и на каждый из бранчей составляем тест на соответствие:
Конкретные входные данные(или некое множество входных данных) на выходе дадут вполне конкретное значение. Напишем 2 юнит-теста:

test_first_case() {
   sum(2, 2) equals 5
}

test_second_case() {
   sum(4, 10) equals 14
}


Очевидно, что эти тесты очень чуствительны к имплементации, ведь нетрудно убедиться, что если мы изменим какие-либо проверки, то один или более тестов упадут. Все верно, они позволяют нам проверить что выполняется именно тот код, который мы нарисовали у себя в голове. И что транзисторы делают именно то, что нам хочется.

Функциональные тесты

Мы получили ответ на вопрос "Делает ли мой код, то, что я думаю", но теперь мы хотим получить ответ на вопрос "А делает ли он то, что я хочу?".
Чтобы это проверить необходимо составить дополнительный(дополнительные) тест(тесты) без знания внутренней имплементации. То есть при их составлении оперировать только сигнатурой и документацией:

test_for_additivity() {
   for (a in range(MIN_INT, MAX_INT), b in range(MIN_INT, MAX_INT)) {
           sum(a, b) equals (a + b)
   }
}


Тут-то можно четко понять разницу между модульным и функциональным тестированием.
(Продолжение следует)
источник

CD

Constantine Drozdov in C++ Together 2.0
ну вот, молодежь, всему учить надо
вопрос был про интеграционные тесты :)
источник