www.luxoft.com
Magic uncovered: test frameworks.
Dmitry Dolzhenko
30-03-2017
www.luxoft.com
About:
 Probabilistic perception
 Computer vision
 Machine learning
 Systems architecture
 Formal proof systems
 Autonomous driving
 Failsafe software development
www.luxoft.com
Зачем писать тесты?
www.luxoft.com
Unit testing. Получаем первое задание:
 Написал код?
 Протестируй.
 В нашей комманде все сами пишут тесты.
 А как?
 Ну посмотри там как у других написано в CPPUnit
www.luxoft.com
Unit testing. Получаем первое задание:
www.luxoft.com
Тут я понял что тесты мне не нравятся...
www.luxoft.com
Эффект Даннинга — Крюгера
Когнитивное искажение которое заключается в том, что люди, имеющие низкий уровень
квалификации, делают ошибочные выводы, принимают неудачные решения и при этом не
способны осознавать свои ошибки в силу низкого уровня своей квалификации
Конфуций («Истинное знание — в том, чтобы знать пределы своего невежества»)
www.luxoft.com
Зачем писать тесты? Научный подход
www.luxoft.com
Зачем писать тесты? Научный подход
www.luxoft.com
Зачем писать тесты? Инженерный подход
www.luxoft.com
Зачем писать тесты? Инженерный подход
www.luxoft.com
Зачем писать тесты? Процесс разработки
www.luxoft.com
Какие бывают тесты?
www.luxoft.com
www.luxoft.com
TDD or not TDD?
www.luxoft.com
TDD or not TDD?
www.luxoft.com
Попытка номер 1:
// attempt 1.
void test_min_element() {
assert(0 == min_element({4}));
assert(0 == min_element({1, 0, 3, 4}));
// ...
}
www.luxoft.com
Попытка номер 1:
// attempt 1.
void test_min_element() {
assert(0 == min_element({4}));
assert(0 == min_element({1, 0, 3, 4}));
// ...
}
www.luxoft.com
// attempt 2.
bool test_equals(int expected, int computed) {
using namespace std;
bool ok = expected == computed;
if(!ok) {
cerr << "failed: " << expected << " != " << computed << endl;
}
return result;
}
void test_min_element() {
test_equals(0, min_element({4}));
test_equals(0, min_element({1, 0, 3, 4}));
// ...
}
www.luxoft.com
// attempt 3.
void expect_true(const char* file, int line,
const char* expected, bool ok) {
if(!ok) {
cerr << file << ":" << line << ": failed: " << expected << endl;
}
return result;
}
#define EXPECT_TRUE(expr) 
expect_true(__FILE__, __LINE__, #expr, expr)
#define EXPECT_EQ(expr1, expr2) 
EXPECT_TRUE((expr1) == (expr2))
void test_min_element() {
EXPECT_EQ(0, min_element({4}));
EXPECT_EQ(0, min_element({1, 0, 3, 4}));
// ...
}
www.luxoft.com
// attempt 4.
#define EXPECT_TRUE(expr) 
expect_true(__FILE__, __LINE__, #expr, expr)
#define EXPECT_EQ(expr1, expr2) 
EXPECT_TRUE((expr1) == (expr2))
class TestCase {
public:
void expect_true(const char* file, int line,
const char* expected, bool ok);
};
class TestMinElement : public TestCase
public:
void test1() {
EXPECT_EQ(0, min_element({4}));
EXPECT_EQ(0, min_element({1, 0, 3, 4}));
// ...
}
}
www.luxoft.com
// attempt 5:
#define TEST(name, ...) test_ ## name = [__VA_ARGS__]()
TEST(my_min_element) {
EXPECT_EQ(0, min_element({4}));
EXPECT_EQ(0, min_element({1, 0, 3, 4}));
};
int main(int argc, char const *argv[])
{
test_my_min_element();
}
www.luxoft.com
int my_sqare(int x) { return x*x; }
LTEST(my_sqare) {
LTEST(degenarated) {
EXPECT_EQ(0, my_sqare(0));
};
LTEST(trivial) {
EXPECT_EQ(1, my_sqare(1));
};
LTEST(positive) {
EXPECT_EQ(4, my_sqare(2));
EXPECT_EQ(16, my_sqare(4));
};
LTEST(negative) {
EXPECT_EQ(4, my_sqare(-2));
EXPECT_EQ(16, my_sqare(-4));
};
};
www.luxoft.com
Что же делать?
 Осознать
 Учиться
 Повторить
www.luxoft.com
Опыт что-то значит
www.luxoft.com
Thank you

More Related Content

PDF
Алексей Андросов - Debugger: Отладка кода
DOCX
Lecture5
PPT
WTF Code @ jug.lv
PDF
Ruby exceptions
PDF
Филипп Ковалев — Путь в npm
PPTX
Нетривиальная обработка ошибок
PPTX
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
PPTX
Андрей Зайцев - TDD в кровавом энтерпрайзе
Алексей Андросов - Debugger: Отладка кода
Lecture5
WTF Code @ jug.lv
Ruby exceptions
Филипп Ковалев — Путь в npm
Нетривиальная обработка ошибок
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Андрей Зайцев - TDD в кровавом энтерпрайзе

What's hot (20)

PPTX
Максим Щепелин. "Unittesting. Как?"
PPT
4. java lecture exceptions
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
Владимир Горбенко «Использование блоков в Objective-C»
PDF
Статический анализатор кода для InterSystems Caché Object Script
PPTX
PPTX
Вещи в Java, о которых вы (возможно) не знали
PDF
Parallel STL
PPTX
Григорий Демченко, Универсальный адаптер
PDF
Тестируем тесты с PIT (мутационное тестирование)
PDF
C++ refelection and cats
PDF
По колено в Си++ г... коде
PDF
практические советы по улучшению качества кода
PDF
Использование юнит-тестов для повышения качества разработки
PDF
Очередной скучный доклад про логгирование
PPTX
Контрактное программирование
PPTX
Bytecode
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
PPTX
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
PPTX
Статический анализ кода
Максим Щепелин. "Unittesting. Как?"
4. java lecture exceptions
Многопоточность в браузере. Модель акторов — Константин Крамлих
Владимир Горбенко «Использование блоков в Objective-C»
Статический анализатор кода для InterSystems Caché Object Script
Вещи в Java, о которых вы (возможно) не знали
Parallel STL
Григорий Демченко, Универсальный адаптер
Тестируем тесты с PIT (мутационное тестирование)
C++ refelection and cats
По колено в Си++ г... коде
практические советы по улучшению качества кода
Использование юнит-тестов для повышения качества разработки
Очередной скучный доклад про логгирование
Контрактное программирование
Bytecode
Григорий Демченко, Асинхронность и неблокирующая синхронизация
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
Статический анализ кода
Ad

Similar to Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» (20)

PPTX
Alexei Sintsov - "Between error and vulerability - one step"
PPTX
статический анализ кода
PDF
Пояснения к статье про Copy-Paste
PPTX
Оптимизация трассирования с использованием Expression templates
PPTX
Оптимизация трассирования с использованием Expression templates
PPTX
Принципы работы статического анализатора кода PVS-Studio
PPTX
Статический анализ кода: Что? Как? Зачем?
PPTX
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PDF
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
PDF
static - defcon russia 20
PDF
20130429 dynamic c_c++_program_analysis-alexey_samsonov
PDF
Статический анализ исходного кода на примере WinMerge
PDF
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
PPTX
Deep Dive C# by Sergey Teplyakov
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PPTX
Современный статический анализ кода: что умеет он, чего не умели линтеры
PPTX
PowerShell
PDF
Как выглядит современный фронтенд
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PPTX
Статический анализ: вокруг Java за 60 минут
Alexei Sintsov - "Between error and vulerability - one step"
статический анализ кода
Пояснения к статье про Copy-Paste
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Принципы работы статического анализатора кода PVS-Studio
Статический анализ кода: Что? Как? Зачем?
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
static - defcon russia 20
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Статический анализ исходного кода на примере WinMerge
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Deep Dive C# by Sergey Teplyakov
Тестируй это / Виктор Русакович (GP Solutions)
Современный статический анализ кода: что умеет он, чего не умели линтеры
PowerShell
Как выглядит современный фронтенд
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Статический анализ: вокруг Java за 60 минут
Ad

More from LogeekNightUkraine (20)

PPTX
Face recognition with c++
PPTX
C++20 features
PPTX
Autonomous driving on your developer pc. technologies, approaches, future
PDF
Orkhan Gasimov "High Performance System Design"
PPTX
Vitalii Korzh "Managed Workflows or How to Master Data"
PDF
Yevhen Tatarynov "From POC to High-Performance .NET applications"
PDF
Oleksii Kuchuk "Reading gauge values with open cv imgproc"
PDF
Oleksandr Kutsan "Using katai struct to describe the process of working with ...
PDF
Pavlo Zhdanov "Mastering solid and base principles for software design"
PDF
Serhii Zemlianyi "Error Retries with Exponential Backoff Using RabbitMQ"
PDF
Iurii Antykhovych "Java and performance tools and toys"
PDF
Eugene Bova "Dapr (Distributed Application Runtime) in a Microservices Archit...
PPTX
Aleksandr Kutsan "Managing Dependencies in C++"
PDF
Yevhen Tatarynov "My .NET Application Allocates too Much Memory. What Can I Do?"
PDF
Alexandr Golyak, Nikolay Chertkov "Automotive Testing vs Test Automatio"
PPTX
Michal Kordas "Docker: Good, Bad or Both"
PPTX
Kolomiyets Dmytro "Dealing with Multiple Caches, When Developing Microservices"
PPTX
Shestakov Illia "The Sandbox Theory"
PPTX
Dmytro Kochergin “Autotest with CYPRESS”
PPTX
Ivan Dryzhyruk “Ducks Don’t Like Bugs”
Face recognition with c++
C++20 features
Autonomous driving on your developer pc. technologies, approaches, future
Orkhan Gasimov "High Performance System Design"
Vitalii Korzh "Managed Workflows or How to Master Data"
Yevhen Tatarynov "From POC to High-Performance .NET applications"
Oleksii Kuchuk "Reading gauge values with open cv imgproc"
Oleksandr Kutsan "Using katai struct to describe the process of working with ...
Pavlo Zhdanov "Mastering solid and base principles for software design"
Serhii Zemlianyi "Error Retries with Exponential Backoff Using RabbitMQ"
Iurii Antykhovych "Java and performance tools and toys"
Eugene Bova "Dapr (Distributed Application Runtime) in a Microservices Archit...
Aleksandr Kutsan "Managing Dependencies in C++"
Yevhen Tatarynov "My .NET Application Allocates too Much Memory. What Can I Do?"
Alexandr Golyak, Nikolay Chertkov "Automotive Testing vs Test Automatio"
Michal Kordas "Docker: Good, Bad or Both"
Kolomiyets Dmytro "Dealing with Multiple Caches, When Developing Microservices"
Shestakov Illia "The Sandbox Theory"
Dmytro Kochergin “Autotest with CYPRESS”
Ivan Dryzhyruk “Ducks Don’t Like Bugs”

Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»