Вход | Регистрация
    1  2  3  4  5
1С:Предприятие :: 1С:Предприятие 8 общая

Будет ли в 1С настоящая TDD?

Будет ли в 1С настоящая TDD?
Я
   Конструктор1С
 
03.10.20 - 08:58
TDD (Test Driven Development, то есть "разработка через тестирование"). Очень популярная в тру-программировании концепция, позволяющая серьёзно повысить производительность труда программистов. В 1с инструментов для этого пока что нет, но тут виной скорее концептуальные особенности 1с. Если в той же Java есть возможность протестировать отдельный класс сам по себе, то в 1с так не сделаешь, за редким исключением (например, несложные экспортные методы общих модулей).
Да, есть такие штуки, как xUnitFor1C, Vanessa-behavoir и иже с ними. Но это скорее BDD, которое хоть и принято считать ответвлением TDD, но по сути таковым не является.

Суть TDD: модульные тесты должны писаться заранее, еще до написания кода продукта (разработка ЧЕРЕЗ тестирование). Т.е. кода (метода, например) ещё нет, а тест под будущий код уже есть. Р.Мартин выделяет три закона TDD:
"Первый закон. Не пишите код продукта, пока не напишете отказной модульный тест.
Второй закон. Не пишите модульный тест в объеме большем, чем необходимо для отказа. Невозможность компиляции является отказом.
Третий закон. Не пишите код продукта в объем большем, чем необходимо для прохождения текущего отказного теста.
Эти три закона устанавливают рамки рабочего цикла, длительность которого составляет, вероятно, около 30 секунд. Тесты и код продукта пишутся вместе, а тесты на несколько секунд опережают код продукта. При такой организации работы мы пишем десятки тестов ежедневно, сотни тестов ежемесячно, тысячи тестов ежегодно. При такой организации работы тесты охватывают практически все аспекты кода продукта" (с)

По-моему уже понятно, что все эти ванессы-шманессы ни разу не TDD, и TDD как такового в 1с нет. xUnitFor1C ещё как-то что-то похожее, но полноценным TDD там и не пахнет. Кто что думает, появятся ли для 1с удобные утилиты, позволяющие полноценно разрабатывать с применением TDD?
   PR
 
401 - 08.10.20 - 13:33
(395) Не не не, ты меня с Конструктором перепутал, это он такое предлагает
   hi1C
 
402 - 08.10.20 - 13:56
О тестах люди начинают задумываться когда им надоедает делать грустные лица перед руководством.
   Конструктор1С
 
403 - 08.10.20 - 14:59
(394) обнаружит, если тесты писали пряморукие
   Конструктор1С
 
404 - 08.10.20 - 15:05
Две очень разные ситуации:
1. Нажали на кнопку и отработало 100 строк кода
2. Нажали на кнопку и отработало 100000 строк кода

В первом случае Ванессой ещё можно покрыть. Во втором случае Ванесса просто бесполезна. Скорее всего результат будет очень сложный и/или многовариантный. Покрытие BDD будет чрезвычайно мизерным, в лучшем случае отловит ошибки падения программы, т.е. отработает самым банальным образом. В то время как юнит-тесты эти 100 тыщ строк кода могут покрыть от и до
   Злопчинский
 
405 - 08.10.20 - 16:36
(397) какие проги - так и  ломают. как построены процессы - так и ломают. с какого хрена у меня в конторе я сделал - оно годами не ломается? работает и работает. и постоянно новые костыли вхрендрячиваю разной сложности. если и ломается то в первый день. исправил и снова на года забыл. есть вещи которые я уже нафиг не помню что они есть, а все работат. и не ломаются. а тут куча прогов, тестерво и все ломается. может в консерватории надо поправить?
   Злопчинский
 
406 - 08.10.20 - 16:37
(402) я стараюсь грустнеы лица перед руководством не делать. я сижу и как 1сникдятел - ВЫДАЛБЛИВАЮ. и беру за это столько скольо беру. и перед начальством грустныве лица не делаю. долбить много - а денег мало, ну его нахрен такую работу
   Злопчинский
 
407 - 08.10.20 - 16:38
(403) почему кодеры пишут криво, а тесты кто-то внезапно будет писать прямо?
   Злопчинский
 
408 - 08.10.20 - 16:38
(404) немного потерялся что такое юнит-тесты
   PR
 
409 - 08.10.20 - 16:45
(403) Вся идея тестов завязана на том, что прогеры криворукие
Если они изначально пряморукие, то тесты вообще не нужны
Более того, такая идея никому бы и в голову никогда не пришла
Но да, да
Криворукие епланы пишут код, а пряморукие программисты пишут тесты, ага, все именно так
   PR
 
410 - 08.10.20 - 16:51
(408) Это когда ты для функции СложитьДваЧисла(Число1, Число2) пишешь тесты, которые проверят, что
СложитьДваЧисла(1, 1) вернет 2,
СложитьДваЧисла(2, 2) вернет 4,
СложитьДваЧисла(5, 7) вернет 12
и т. д.

Точнее, Конструктор все перепутал нахрен и на самом деле тесты пишутся сначала в качестве ТЗ разработчику, типа нужно разработать функцию СложитьДваЧисла(Число1, Число2), которая:
Для параметров 1 и 1 вернет 2,
Для параметров 2 и 2 вернет 4,
Для параметров 5 и 7 вернет 12
и т. д.
А после реализации функции как раз запускаются тесты и проверяют, не налажал ли разработчик

Но это уже такое, не будем придираться
   Злопчинский
 
411 - 08.10.20 - 16:55
не, тесты конечно полезная вещь, но строить процесс разработки опираясь на них.... как-то это неправильно...
пока все что я осилил - пишу сверху вниз, крупные кирпичи, потом, начинаю детализировать. крупный кирпич осматирвиаю со всех сторон, пытаюсь понять где засады возможны (типа тест разрабатываю). ставлю заглушки на всякую хрень.. и так постпенно - постепенно  наполняю кодом. Похоже на разработку через тестирвоание. но чем больше подробности пишешь тем "тестирование" сложнее делать... может тут и пригодились бы тесты.. но если для крупных кирпичей тест придумывать писать просто, то для кучи мелких кирпичей которые с собой вяжутся хитрым обраазом - тесты придумывать да и тестировать все сложнее и сложнее. обычно ПРОСТО ТУПО НЕТ ВРЕМЕНИ. просто тупо такой бюджет. если платили бы за аджал - то да, было бы зашибись..
но наполовину рабочее - никто гне хочет. даже несли участок полностью рабочий. это типа как в ВМС например заавтоматизировать приемку достаточно легко. но продать чтобы заплатили только за приемку, с отсутсвием гарантий что будет сделана отгрузка - хрен там. нет отгрузок - приемка смысла лишена... хотя самодаостаточно и работает.
   PR
 
412 - 08.10.20 - 16:58
(411) Смотришь в суть
Именно поэтому TDD практически никто и не использует, долго, дорого и бесполезно
   Конструктор1С
 
413 - 08.10.20 - 16:59
(410) ты сам как себе представляешь, чтобы тесты писались в качестве ТЗ? Имена классов и методов с потолка берутся?
   PR
 
414 - 08.10.20 - 17:02
(413) Как ты задрал, а
Открой https://ru.wikipedia.org/wiki/Разработка_через_тестирование и читай "сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест" до просветления
   Конструктор1С
 
415 - 08.10.20 - 17:03
(412) вот ты снова нифига не понял. Юнит-тестирование - общепризнанный стандарт в разработке ПО. Им пользуются все, за редким исключением. В 21-м веке ни один серьёзный продукт не пишется без юнит-тестирования, разве что поделки на 1с пишут без юнит-тестов. А TDD это эффективный способ получения тех самых юнит-тестов
   PR
 
416 - 08.10.20 - 17:05
+(414) Еще раз, мне абсолютно пофигу, пишется код по тестам как по ТЗ или пишется по отдельно поставленному ТЗ, а тесты запускаются потом
Главное, что я в подавляющем большинстве случаев не вижу практически никакого смысла в тестах, которые будут постоянно проверять, действительно ли функция СложитьДваЧисла(Число1, Число2) возвращает результат сложения двух чисел
   Конструктор1С
 
417 - 08.10.20 - 17:05
(414) хорошь тупить, разработчик сам пишет тест. И тесты пишут не заранее, а во время разработки. Маленький тест - код под него, маленький тест - код под него. Может всё-таки почитаешь, что такое TDD? Уже пятую страницу метаешь какашки в TDD, а сам даже не удосужился вникнуть, что же это такое
   PR
 
418 - 08.10.20 - 17:07
(417) Я все в (242) написал про целесообразность TDD, но ты, судя по всему, не поймешь
   Конструктор1С
 
419 - 08.10.20 - 17:09
(418) это твоё абсурдное видение ситуации, основанное на НЕпонимании принципов модульного тестирования и принципов TDD. Что-то типа забивания микроскопом гвоздей, ой какой плохой микроскоп...
   Злопчинский
 
420 - 08.10.20 - 19:10
(417) "разработчик сам пишет тест." - если разраб тупой, то тест он напишет нормальный? три раза хахаха. если разраб не сообразит что в коде надор предусмотреть что нет 30 февраля, то он не сообразит что надо написать тест, которые проверяет на 32 число любого месяца.
   PR
 
421 - 08.10.20 - 19:22
(420) +1
   Стаканов
 
422 - 08.10.20 - 19:28
(419) Блин, да прекрати ты модульное тестирование к TDD приравнивать, ну ведь как галимый теоретик выглядишь.
   MadHead
 
423 - 08.10.20 - 21:08
(420) в данном случае разработчик скорее всего не проверит такой кейс мануально. Но как только пишешь тест то сразу рассуждаешь о граничных точках для проверки. При написании тестов почти всегда нахожу баги в своем коде.
(417) TDD не для всех задач подходит, так как нужно видеть архитектуру в целом перед началом написания кода. Там где проверяют разные варианты реализации и выбирают лучший тесты лучше начать писать когда костяк архитектуры заложен.
   080808Ник
 
424 - 08.10.20 - 23:30
Какое TDD в 1ц? о чем вы? Опомнитесь, еретики! Мне сегодня прилетела задача. Есть документ, в нем расчёт показателей идет. А задача заключается в том, что бы один реквизит удалить и завязанные на него расчеты переписать без его учета. А это третья часть всех формул документа. Только реквизит этот добавили три месяца и переписали полдокумента под него. Теперь расскажите как вы будете разрабатывать через тесты, если через месяц у вас полностью меняется функционал?
   PR
 
425 - 08.10.20 - 23:44
(424) Некогда объяснять! Суй помидоры в жопу!
   MadHead
 
426 - 09.10.20 - 00:34
(424) Зависит от гранулярности тестов.
Для простоты представим примитивный приходный документ с полями "товар", "ко-во" и замудренная логика как этот товар будет распределен по складам.
Допустим входящие параметры описаны в JSON
input: [
  {"товар": "отвертка", "ко-во": 1000}
]

и ожидаемый результат в регистре тоже описан в json
output: [
  {"товар": "отвертка","ко-во": 20, "склад": "главный"}
  {"товар": "отвертка","ко-во": 980, "склад": "не главный"}
]

По сути это и будет описание требований.
Таким образом логика может значительно поменяеться, но правка теста будет не значительной.

Примерно так я вижу автотестирование 1с, на более низкие уровни спускаться не стоит. Если на каждую функцию написать тесты, то действительно на тесты будет тратиться очень много времени при изменении логики
   Конструктор1С
 
427 - 09.10.20 - 02:20
(422) а я их не приравниваю. Но кроме модульных тестов никакие другие не напишутся во время написания кода...

(424) так как раз в том и суть, что при TDD вместе с кодом меняются и тесты. Кстати, у тебя типичный пример 1сного говнокодерства. М.Фаулер плохие подходы в написании кода называет "запахи". У тебя как раз код с душком. Вот конкретный "запах":

Стрельба дробью
При выполнении любых модификаций приходится вносить множество мелких изменений в большое число классов (в нашем случае пусть будет процедур, хотя даже не уверен, что автор выделил всё это в отдельные процедуры)

(426) тестировать всё до малейшей функции никто не призывает. Некоторые функции могут быть протестированы только в связке с другими
   Стаканов
 
428 - 09.10.20 - 07:46
А так, как пример уместности тестов в 1С, можно посмотреть, как сделана библиотека HTTP: https://github.com/vbondarevsky/Connector Хорошая библиотека, кстати, рекомендую.
   080808Ник
 
429 - 09.10.20 - 09:54
(427) на счет говнокодерства не спорю, но расскажи как тогда без дроби обойтись когда есть некий коэфициент который в разных формулах используется по разному, например у тебя есть Коэффициент К. И вот у тебя: В=А*К; D = (C+ E)/К; M = (L+H)/P-K. А теперь тебе нужно сделать B тянется из регистра в зависимости от выбранного показателя; D = (C+E);  M = (L+H)/P-N. Как здесь "не стрелять дробью"? "так как раз в том и суть, что при TDD вместе с кодом меняются и тесты" вот поэтому и не подходит разработка через тестирование. Потому что дорого. Сначала ты пишешь тесты, потом код. Потом прилетает изменение и ты переписываешь тесты, потом переписываешь код. И тебе приходится не только код писать но и тесты. а времени нет, потому что у тебя на задачу выделено 4 часа и заказчик платить больше не хочет. На крупных проектах возможно и есть место такому подходу когда ты пишешь самописку. Но когда ты делаешь доработки уровня не больше подсистемы - а большая часть работы 1сников и заключается в мелких доработках типовых конфигураций, - то такой подход неоправданно дорогой.
   Злопчинский
 
430 - 09.10.20 - 10:43
Крупные проекты - это сколько? от 20 миллионов?
 
 Рекламное место пустует
   080808Ник
 
431 - 09.10.20 - 15:42
(430) это от функционала)
   Стаканов
 
432 - 09.10.20 - 16:06
(431) А я думал, это от количества пользователей :)
   MadHead
 
433 - 09.10.20 - 16:33
От цены ошибки )
   Злопчинский
 
434 - 09.10.20 - 18:10
что считать крупным функционалом?
   Конструктор1С
 
435 - 09.10.20 - 18:11
(429) "заказчик платить больше не хочет"

Это наивный заказчик. Он просто не знает, что ему в любом случае придется заплатить. Не за тестирование, так за ошибки. Плата за вторые может оказаться намного выше
   Конструктор1С
 
436 - 09.10.20 - 18:14
(429) а не стрелять дробью довольно просто - достаточно освоить принцип инкапсуляции и делать нормальную декомпозицию
   080808Ник
 
437 - 09.10.20 - 20:48
(436)  я привел пример, покажи в нем как сделать нормальную декомпозицию.
   MadHead
 
438 - 10.10.20 - 01:58
(437) В начале пишем некий конструктор формул с тестами. Отделяем получение данных от конструирования формул. После этого конструируем нужный набор, мокаем получние данных и пишем тест на каждую формулу.
   Злопчинский
 
439 - 10.10.20 - 03:08
(435) фигня полная. бизнес заказчика просто не доживет до того как вылезет ошибка.
   Конструктор1С
 
440 - 10.10.20 - 05:28
(437) вводных данных маловато. Но что-то мне подсказывает, что вычисления происходят прямо в запросе. Это такая распространённая болезнь среди 1сников, приводящая к стрельбе дробью. Например, когда ставка НДС поменялась, в одном несчастном перечислении добавилось пару значений, а в коде вносили изменения в 100500 местах. Этого не произошло бы, если бы извлечение данных было отделено от вычислений
   Конструктор1С
 
441 - 10.10.20 - 05:36
(439) смешно. Обычно бизнес вляпывается в первые ошибки только открыв поделие 1сника, ещё несколько ошибок отлавливается в первые дни эксплуатации. Метод ХХП не щадит времени ни заказчика, ни разработчика
   Конструктор1С
 
442 - 10.10.20 - 05:51
И не знаю, о каких узких рамках от бизнеса вы тут пишете. Обычно всё-таки разработчик оценивает трудозатраты и сообщает их бизнесу. Если бизнес выкручивает вам руки, говоря "нефиг заниматься этим 30 часов, сделай за 5 часов к сегодняшнему вечеру", то это минус в вашу же карму профессионала. Программисту виднее, что и как делать. Настоящий профессионал не допустит, чтобы им помыкалы в ущерб качества его работы. Если идти на поводу у бизнеса, то это будет похоже на выкатывания требований пациента перед врачом: операцию делайте не два часа, а максимум час, и не тратьте время на мытьё рук. По-моему такие наставления пациентом врача выглядят совершенно нелепо, не говоря о явном вреде
   Стаканов
 
443 - 10.10.20 - 08:15
ТС, а ты сам то пользовался хот-бы xddTestRunner?
   Конструктор1С
 
444 - 10.10.20 - 10:42
(443) нет. Чем он примечателен?
   Стаканов
 
445 - 10.10.20 - 10:44
(444) А что ты тогда вообще использовал? xddTestRunner - это вроде как развитие xUnitFor1C, такому фанату тестирования, как ты, стыдно не знать.
   Конструктор1С
 
446 - 10.10.20 - 10:49
(445) я использовал полноценные модульные (юнит) тесты. Не на 1с правда. В 1с платформа не позволяет полноценно выполнять юнит-тесты
   Конструктор1С
 
447 - 10.10.20 - 11:49
(443) скачал, посмотрел. Такая милота... Уже при открытии обработка начинает ругаться на модальность. Ладно, включил в конфигурации модальность (в рабочей базе это не пройдёт, никто ради внешней обработки менять ключевые свойства конфигурации не будет). Едем дальше. Обработка требует каких-то плагинов. Что за плагины удалось выяснить только через отладчик. Автор не удосужился снадбить обработку поясняющими сообщения. Оказывается нужны другие внешние обработки ("плагины"). Загрузил из того же репозитория. Снова обработка xddTestRunner падает в ошибку...

Это что за нафиг? Утилита как бы тестирования, падающая в "красную" ошибку. У меня прям диссонанс...
   Стаканов
 
448 - 10.10.20 - 12:40
(447) А вот я скачал, 10 минут почитал документацию, и ничего, кроме самих тестов, никуда не падает. Сдаётся мне, что вы сугубый теоретик.
   Злопчинский
 
449 - 10.10.20 - 13:11
(441) обычно бизнес вляпывается просто открыв типовую конфигу.
а потом уже 1Сники сие поделие доводят до ума.
   Злопчинский
 
450 - 10.10.20 - 13:13
(442) Вопрсо: какого МПХ в типовых тогда столько ошибок? там-то кто кому руки выкручивает?
   Злопчинский
 
451 - 10.10.20 - 13:15
(447) убедился, ть! я писал выше - то есть код пишут кривой. а тесты будут писать прямые? юзай, суко, сабж! ;-) он не только тесты он еще и для тестов и он по определению правильный! это ты тупой! ;-)
   Стаканов
 
452 - 10.10.20 - 13:44
(451) Не, ну если документацию не читать и использовать ПО не по назначению - так оно и будет :)
   Конструктор1С
 
453 - 10.10.20 - 13:55
(448) интересные у тебя умозаключения. Из-за того, что у меня не запустилась малоизвестная народная поделка, я дескать теоретик... Что скажешь про использование модальности обработкоц? У меня на работе нет конфигураций, в которых была бы разрешена модальность
   Конструктор1С
 
454 - 10.10.20 - 13:57
(451) смешно, ага. Тестирование нужно не для хронических рукозадов, таким уже ничего не поможет. Тестирование для беспокоящихся о качестве кода
   Конструктор1С
 
455 - 10.10.20 - 14:06
(450) по сравнению с народными поделиями, концентрация ошибок в типовых ничтожно мала
   Стаканов
 
456 - 10.10.20 - 14:21
(453) Скажу, что у тебя руки кривые. Я просто почитал документацию и открыл обработку в своей конфе, никаких там модальностей не надо.
   Конструктор1С
 
457 - 10.10.20 - 14:26
(456) для начала ты меня дезинформировал. Написал про xddTestRunner. А это НЕ самостоятельная обработка
   Стаканов
 
458 - 10.10.20 - 14:31
(457) Ну ты это... всегда сначала скачиваешь, а потом начинаешь разбираться, что это и как работает? А ещё что-то тут про тестирование с умным видом рассказывать пытаешься? Ладно, успехов. А я займусь модульным тестированием, как раз задачка на него хорошо ложащаяся в работе.
   Конструктор1С
 
459 - 10.10.20 - 14:31
(456) "никаких там модальностей не надо"

ты заблуждаешься. Код из обработки:

НайденныеФайлы = НайтиФайлы(КаталогПлагинов, "*.epf", Ложь);

чтобы этот код заработал в конфе с отключенными синхронными вызовами, должно использоваться НачатьПоискФайлов(), иначе просто будет выпадать в ошибку "Использование синхронных методов на клиенте запрещено!"
   Стаканов
 
460 - 10.10.20 - 14:34
(459) Рукалицо. Ты чего, не понимаешь разницы между синхронностью и модальностью? Ладно, это уже совсем не интересно, всё ясно про тебя.
 
 Рекламное место пустует
   Конструктор1С
 
461 - 10.10.20 - 14:35
(458) ты же сам в (443) и написал про xddTestRunner. Я просто не мог знать, что ты меня дезинформируешь
   Конструктор1С
 
462 - 10.10.20 - 14:39
(460) прекрасно понимаю, у меня за спиной около двух месяцев опыта перевода большой конфы на асинхронные и немодальные вызовы (два месяца только этим и занимался). К чему твой этот пафос?
   Вафель
 
463 - 10.10.20 - 15:03
xUnit теперь называется vanessa.
а сам xunit более не поддерживается
  1  2  3  4  5

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.