
Evgeniy
05.10.2017
10:27:19

Anonym
05.10.2017
10:27:52
В какой программе лучше всего писать код на C++

Ilia
05.10.2017
10:27:56
теория unit-test говорит мне "развяжи зависимость модуля", они забывают добавить, как я должен развязать зависимость модуля, который требует данных операционной системы
Идея же простая. Мы делаем трактор.
Он состоит из корпуса, двигателя и гусениц. И бака с горючим.
Чтобы всё работало вместе, НЕОБХОДИМОЕ условие, чтобы всё работало по отдельности.
Работало — значит, выполняло свою функцию.
Бак с горючим не должет течь в ненужных местах, а должен из топливопровода.
Берём бак, заливаем что-то ...
Смотрим .
Из бензопровода течёт? Течёт, ок.
Из других мест течёт, ? Нет.
ОК, С баком всё в порядкп.

Google

Ilia
05.10.2017
10:28:09

Berkus
05.10.2017
10:28:24

Ilia
05.10.2017
10:28:53
Идея же простая. Мы делаем трактор.
Он состоит из корпуса, двигателя и гусениц. И бака с горючим.
Чтобы всё работало вместе, НЕОБХОДИМОЕ условие, чтобы всё работало по отдельности.
Работало — значит, выполняло свою функцию.
Бак с горючим не должет течь в ненужных местах, а должен из топливопровода.
Берём бак, заливаем что-то ...
Смотрим .
Из бензопровода течёт? Течёт, ок.
Из других мест течёт, ? Нет.
ОК, С баком всё в порядкп.
Глядим далее.
Двигатель должен крутиться, должен заводится, набирать обороты с опред. параметрами, выдавать нужную мощность.
....
Берём и смортим.
Вот тут кстати нужен СТЕНД (mocking)

Дед Пегас
05.10.2017
10:28:58

Berkus
05.10.2017
10:29:29

Ilia
05.10.2017
10:30:34

Berkus
05.10.2017
10:30:41

Ilia
05.10.2017
10:31:26


Constantine
05.10.2017
10:33:03
Глядим далее.
Двигатель должен крутиться, должен заводится, набирать обороты с опред. параметрами, выдавать нужную мощность.
....
Берём и смортим.
Вот тут кстати нужен СТЕНД (mocking)
Я понимаю логическую компоненту unit-test, я не понимаю пользу от них. Смотри, по сути речь идет о фасаде, отгораживающем C++ код от winapi и дающем адекватную C++ модель. Ты мне говоришь - поставь стенд вместо системы и тестируй. Вот поверь, код, который проверен человеком по протоколу тестирования на этом фасаде будет проходить ВСЕ тесты, которые основаны на ДОКУМЕНТИРОВАННОМ поведении операционной системы. Написание этого стенда и последующее его использование для тестов займет время, в ТОЧНОСТИ равное написанию всего фасада, поскольку стенд В ТОЧНОСТИ основан на ТОЙ ЖЕ САМОЙ документации, что и фасад

Дед Пегас
05.10.2017
10:33:39

Constantine
05.10.2017
10:33:51
Ручное тестирование в два раза дешевле разработки кода

Дед Пегас
05.10.2017
10:33:59
Оно же не даёт понимания причины выявляемых проблем.

Google

Berkus
05.10.2017
10:34:21

Дед Пегас
05.10.2017
10:34:45
Тебе придётся как-то воспроизводить ситуацию, дебажить...
Это трата времени разаботки.

Constantine
05.10.2017
10:35:09
@berkus вот что тебе не нравится? ты хочешь сказать, что стенд на самом деле не повторит логическую модель фасада с другой стороны?

Дед Пегас
05.10.2017
10:35:21
А можно было это потратить на написание теста и проще находить проблемы.

Constantine
05.10.2017
10:35:32
Которому СООТВЕТСТВУЕТ стенд

Evgeniy
05.10.2017
10:35:53

Constantine
05.10.2017
10:36:14
как ты думаешь, насколько часто меняется реализация фасадов операционной системы?

Berkus
05.10.2017
10:37:18
ну и юнит тестами ты тестируешь не винапи
мое мде было про это

Constantine
05.10.2017
10:37:42
в этом и проблема

Berkus
05.10.2017
10:37:50
ты тестируешь адекватность поведения своей прослойки

Constantine
05.10.2017
10:38:08

Berkus
05.10.2017
10:38:11
не исключая варианта что ты хочешь тестировать вообще не то что надо тестировать

Andrei
05.10.2017
10:38:43

Ilia
05.10.2017
10:38:49
Я понимаю логическую компоненту unit-test, я не понимаю пользу от них. Смотри, по сути речь идет о фасаде, отгораживающем C++ код от winapi и дающем адекватную C++ модель. Ты мне говоришь - поставь стенд вместо системы и тестируй. Вот поверь, код, который проверен человеком по протоколу тестирования на этом фасаде будет проходить ВСЕ тесты, которые основаны на ДОКУМЕНТИРОВАННОМ поведении операционной системы. Написание этого стенда и последующее его использование для тестов займет время, в ТОЧНОСТИ равное написанию всего фасада, поскольку стенд В ТОЧНОСТИ основан на ТОЙ ЖЕ САМОЙ документации, что и фасад
Ну, Я как мог, разъяснил...
Более детально не смогу...

Constantine
05.10.2017
10:39:06
в windows vista исправляют ошибку windows xp в comctrl, что поведение одной из функций не соответствует документации - и все ложится, но стенд соответствует не windows vista

Google

Constantine
05.10.2017
10:39:35

Igor
05.10.2017
10:40:48

Alex Фэils?︙
05.10.2017
10:41:13

Andrei
05.10.2017
10:41:33
И зря.

Constantine
05.10.2017
10:41:41

Andrei
05.10.2017
10:42:41
Async-await сделает невозможным использовать легаси в асинхронном контексте, потому что возвращаемые значения надо либо разворачивать, либо заражать future<>

Alex Фэils?︙
05.10.2017
10:43:04
И зря.
ща посмотрел пример в stdcpp.ru, там они возвращают футуру. а в шарпе возрващают итератор (IEnumerator)

Andrei
05.10.2017
10:43:09
Лучше бы breakable-context-ы завезли.
По-моему это очень сильный шаг с awaitable значением не туда.
Я уже несколько лет работаю на плюсах с корутинами другого типа и представляю их удобства.
Тем более что если хочется, то одно через другое выражается.

Igor
05.10.2017
10:47:07

Andrei
05.10.2017
10:47:41
Это функциональное, а не unit тестирование.

Igor
05.10.2017
10:48:00
Чому нет?

Ilia
05.10.2017
10:48:03
Ну я уже пытался это втолковать.

Andrei
05.10.2017
10:49:23
Unit тестирование, это скорее вайтбокс тестирование, когда ты знаешь код, и юнит-тесты как правило тестируют оооочень маленький кусочек. В идеальном мире, на каждый if в коде должно быть два юнит-теста, которые создают условия для попадания в разные бранчи и проверяют, что код в них попал.

Ilia
05.10.2017
10:49:48
Нет
Не так.

Google

Ilia
05.10.2017
10:50:07
Юнит не об этом.

Igor
05.10.2017
10:50:49
Ну, перед тем как тестировать симуляции, я писал отдельные тесты аля "если шарик сдвинуть на Х, он 1) сдвинется 2) на Х а не на чтонибудь еще"

Andrei
05.10.2017
10:51:34
Да нет, именно об этом. Главное назначение юнит-тестов — проверить, что после изменения кода, ничего не сломалось в тех местах, где код не менялся.

Ilia
05.10.2017
10:51:43
Ты хочешь построить дом. ТЕбе нужны крепкие кирпичи и балки.
Если хоть одна балка ломается — у тебя весь дом упадёт.
Тебе надо СНАЧАЛА проверить каждый кирпич и балку, ПОТОМ собирать дом.
Это НЕ ДАСТ гарантии, что Дом целиком будет стоять.
Но ЕСЛИ балка или кирпич будут ломанными, дом ТОЧНО УПАДЁТ.

Alex Фэils?︙
05.10.2017
10:52:09
гарантии, что дом будет стоять дают интеграцинные тесты ?

Ilia
05.10.2017
10:52:13
А white или black box для юнит-тесте — НЕ ВАЖНО.

Admin
ERROR: S client not available

Constantine
05.10.2017
10:52:44

Alex Фэils?︙
05.10.2017
10:53:13
про тесты рендереров вообще тема очень туманная

Ilia
05.10.2017
10:53:34

Constantine
05.10.2017
10:53:39

Alex Фэils?︙
05.10.2017
10:53:49

Ilia
05.10.2017
10:53:56

Igor
05.10.2017
10:54:01

Ilia
05.10.2017
10:54:46

Andrei
05.10.2017
10:55:03
Юнит-тесты и являются по назначению регрессионными. Из всех регрессионых — они самые детальные. И по этой же причине — они обычно whitebox, и пишутся программистом, и дёргают не за публичные интерфейсы. Я здесь исключительно о практике говорю.

Constantine
05.10.2017
10:55:44

Igor
05.10.2017
10:56:12

Andrei
05.10.2017
10:56:47
Всё в кучу. Регрессионность ортогональна функциональности.

Google

Andrei
05.10.2017
10:57:45
Gtest/gmock. Но это скорее для unit тестов. Для интеграционных или функциональных по понятным причинам какой-то универсальный фреймворк написать сложно.

Ilia
05.10.2017
10:59:30
Некоторые фт можно и на базе юниттест фреймворков делать. Часто просто сами пишут, это просто
Очень часто там специфика прет, поэтому универсальный фреймворк не прокатит

Igor
05.10.2017
11:07:22
Gtest/gmock. Но это скорее для unit тестов. Для интеграционных или функциональных по понятным причинам какой-то универсальный фреймворк написать сложно.
ну, вот, как-то так да(
на лекциях нам много рассказывали какая замечательная штука функциональные/системные/интеграционные тесты, но боевой пример был всего один, с вебом, когда какая-то фиговина эмулировала нажатия на кнопочки и переходы по ссылочкам, и проверяла что попала на ту страницу куда нужно
это было очень здорово, но как функционально/системно/интеграционно тестировать какую-нибудь передачу видеопотока, работу CAD, и прочие прочие области далёкие от переходов по страницам, мне не смогли объяснить(


Constantine
05.10.2017
11:10:28
ну, вот, как-то так да(
на лекциях нам много рассказывали какая замечательная штука функциональные/системные/интеграционные тесты, но боевой пример был всего один, с вебом, когда какая-то фиговина эмулировала нажатия на кнопочки и переходы по ссылочкам, и проверяла что попала на ту страницу куда нужно
это было очень здорово, но как функционально/системно/интеграционно тестировать какую-нибудь передачу видеопотока, работу CAD, и прочие прочие области далёкие от переходов по страницам, мне не смогли объяснить(
забудьте, чему вас учили в университетах (с)

Andrei
05.10.2017
11:11:18

Tema
05.10.2017
11:11:21

Constantine
05.10.2017
11:12:39

Tema
05.10.2017
11:13:26

Berkus
05.10.2017
11:13:33
Чуваки, плюсоните плс https://gitlab.kitware.com/cmake/cmake/issues/16708#note_326478

Constantine
05.10.2017
11:13:45

Tema
05.10.2017
11:14:08

Constantine
05.10.2017
11:14:22

Tema
05.10.2017
11:14:34

Berkus
05.10.2017
11:14:43

Constantine
05.10.2017
11:15:43
Я с трудом представляю доктора наук, который на первой лекции по прикладному ПО скажет "сейчас я вас научу правильно ставить костыли"
Но это уже какой-то полный офтоп предлагаю /thread
А вот как в той же Qt написаны unit-test надо посмотреть

Stanislav
05.10.2017
11:19:41
https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html