metaclass: (Default)
[personal profile] metaclass
По мотивам предыдущего поста про taucraft: решарпер там или не решарпер, но Test-Driven-Development штука (вроде бы) объективно полезная.

При этом я почти уверен, что я TDD не использую, т.к. уже 15 лет занимаюсь всякой хренью в экстренном темпе, тесты у меня все заключаются в "проверить 10 раз чтобы миграция 30 Гб БД прошла успешно" и "отчетность видна от имени пользователя, который ей будет пользоваться".

Правильность же реализации/рефакторинга/замены всего с нуля проверяется за счет двойной записи бухгалтерии, наличия нескольких путей расчета одной и той же цифры и статических гарантий (т.е., например, я никогда не стану делать отчет отдельными запросами по списку аналитических кодов, если его можно сделать одним select/group by, при этом в него нужная аналитика попадет гарантированно). Плюс функциональщина, статические типы, кодогенерация - ну невозможно ошибится в коде, если у тебя источник информации для кода всегда один. А ошибки вида "не так спроектировали" - тестами не лечатся.

Еще я не использую разного рода современные инструменты, версии студии меняю через 2-3 года после их выхода, склонен использовать самодельные компоненты вместо готовых и вообще страдаю ретроградством.

Проблема в том, что у меня совершенно нет критериев оценки, где я прав и пропускаю ненужные buzz-words мимо ушей, а где не прав, и упускаю полезные инструменты. Потому что на всех работах инструменты/платформы/методики работы выбираю я и обсудить этот выбор на адекватном уровне не с кем.
Раньше хотя бы был вменяемый критерий "успеем проект сдать вовремя или не сделаем вообще", а сейчас и он смысл потерял - это вообще перестало зависеть от используемых технологий, а стало зависеть от наличия бабла у клиентов и правильной организации труда.

Т.е. та же проблема, что в любых НИИГиТ - сидит 50летний мега-гуру, всю жизнь варившийся в собственном соку, который уже не в состоянии различить, где бессмысленная гонка за новизной или просто неподходящая технология, а где реально нужно отрывать жопу от стула и менять себе мозг.

Date: 2012-09-25 09:47 am (UTC)
From: [identity profile] metaclass.livejournal.com
1. Фиксирует требования в виде достаточно простого кода (тестов).
2. Требует программиста переработать архитектуру для тестируемости. Для ФП не так актуально, но тоже достаточно ценно.

Эти два пункта есть, TDD нет :)

Базы данных кстати, тестируются. Я каждый раз для тестов запускаю автоматическую генерилку данных и далее паралллельно заполняю ей БД и выполняю по БД расчеты-аналитику-тесты бизнес логики итд.

UI тяжело, да. Особенно если глаза замылены и этот интерфейс уже 5 год видишь.

Date: 2012-09-25 09:49 am (UTC)
From: [identity profile] blackyblack.livejournal.com
"2. Требует программиста переработать архитектуру для тестируемости. Для ФП не так актуально, но тоже достаточно ценно."

и

"Базы данных кстати, тестируются. Я каждый раз для тестов запускаю автоматическую генерилку данных и далее паралллельно заполняю ей БД и выполняю по БД расчеты-аналитику-тесты бизнес логики итд."

Нет ли здесь взаимоисключающих параграфов?

Date: 2012-09-25 09:56 am (UTC)
From: [identity profile] metaclass.livejournal.com
А что здесь взаимоисключающее?
У меня архитектура изначально проектировалась из соображения "должна проверятся из консольной проги в три строчки".

Date: 2012-09-25 10:06 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Если у вас расчёта и логика без БД не пашет, то это непорядок. Как раз пункт про переработку архитектуры. То есть, если мы оставляем работу с фичами БД, то тогда нужно обеспечить возможность оторвать настоящую БД и прикрутить in-memory. Это всё не из любви к искусству делается, а уменьшает связность модулей и в перспективе даёт возможность совсем отвязаться от БД, если производительность не критична.

Date: 2012-09-25 10:23 am (UTC)
From: [identity profile] metaclass.livejournal.com
Не получится. У меня БД - это ядро всей системы, все проектирование начинается с ее схемы. Часть кода находится внутри нее. Некоторые критичные части бизнес-логики основаны на транзакциях БД.

Отвязываться от БД в моем случае - более чем бесполезное занятие.
Возможно, сменить БД на другую, добавив в кодогенератор ее поддержку - ок.
Возможно, некоторые подсистемы, не совсем адекватно ложащиеся на RDBMS (сложные графы+иммутабельность+версионность), придется из нее выселять. Но результатом все равно будет очередной колхоз с функциональщиной для запросов.

Date: 2012-09-25 10:33 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Что и требовалось доказать. Архитектура уже изрядно запоганена, то что называется легаси код. Из соображений производительности люди завязываются на БД, но для свежего проекта так, конечно, делать не стоит.

Date: 2012-09-25 10:42 am (UTC)
From: [identity profile] bydlorus.livejournal.com
А что, в свежих проектах производительность не требуется?

Date: 2012-09-25 10:43 am (UTC)
From: [identity profile] blackyblack.livejournal.com
По умолчанию нет.

Date: 2012-09-25 10:45 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Это заметно.

Date: 2012-09-25 11:02 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да, 30 гиг база и фуллскан.

Date: 2012-09-25 12:04 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Для хорошего проекта и стопицотядерного с 256G памяти не жалко.
Неужели жалеть каких-то там N kбаксов на хорошую, работающую вещь?

Date: 2012-09-25 12:12 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
а что если N == 9 и разработка на живой бд занимает 1 лишний месяц для 3х разработчиков 1 го тестера и 1го менеджера/юриста? Имо если проблема бизнеса решается раньше или лучше - им плевать с бд или без или с фп или без.

Date: 2012-09-25 12:23 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Да ну, ерунда какая ;-)

Date: 2012-09-25 11:01 am (UTC)
From: [identity profile] metaclass.livejournal.com
Если не завязываться на БД - код превращается в адскую индусятину из DAO/DTO/POCO, паттернов, ООП и ада.
Зачем это?

Date: 2012-09-25 12:07 pm (UTC)
From: [identity profile] gineer.livejournal.com
Ради чистоты ТДД, разве не понятно? :))

О прагматичном программировании чел и не слышал.
Что реальность -- она чтой-то совсем не такая как в разноцветных книжечках описана.

Date: 2012-09-25 06:38 pm (UTC)
From: [identity profile] blackyblack.livejournal.com
Я вообще-то только прагматичным программированием и занимаюсь. А то, что я описываю - это прекрасное далёко. Редко-редко получается с хорошими инструментами и хорошей идеологией побаловаться.

Date: 2012-09-26 07:02 am (UTC)
From: [identity profile] gineer.livejournal.com
Ну, как бы должно быть понятно и очевидно,
что прагматичность бывает разная. ;)
Вот у вас, "прагматичность" какой системы? :)

Date: 2012-09-26 07:12 am (UTC)
From: [identity profile] blackyblack.livejournal.com
У меня "прагматичность" устройств охранно-пожарной сигнализации.

Date: 2012-09-25 11:17 am (UTC)
From: [identity profile] norguhtar.livejournal.com
Вы целостность данных тоже внешними средствами обеспечиваете?

Date: 2012-09-25 11:27 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Ага. Это плохо? :)

Date: 2012-09-25 05:57 pm (UTC)
From: [identity profile] Дмитрий Васильев (from livejournal.com)
Это невозможно

Date: 2012-09-26 02:12 am (UTC)
From: [identity profile] norguhtar.livejournal.com
Да это плохо. Причем сильно плохо.

Date: 2012-09-25 11:31 am (UTC)
From: [identity profile] metaclass.livejournal.com
Вы сейчас произнесете запретное слово constraint!

Date: 2012-09-25 06:38 pm (UTC)
From: [identity profile] blackyblack.livejournal.com
Я ещё и private не использую и констами брезгую. :)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 8th, 2025 04:16 pm
Powered by Dreamwidth Studios