Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 14 15 16 17 18 19 20 21 [22] 23   вперед  Ctrl
 Re: unit-тестирование  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18768
mayton
Но мой вопрос по сценарию воспроизведения так и остался висеть в воздухе.

Подумайте.
а что тут думать....
есть трёхзвенка - есть бага, скока вариантов по определению её места? вагон и маленькая тележка...
10 мар 20, 15:58    [22096265]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9443
asv79
смотря насколько качественно и полно описаны описаны юзкейсы в тестах

Давайте возьмем простейший случай. Простешая функция:

public long add( long a, long b );

Юз кейс: функция должна возвратить сумму двух чисел, по правилам описанных в учебниках математики/арифметики начальной школы (imho 1-3 класс).

Нужно написать unit test который бы 100% проверил, что ф-ция работает и в ней нет багов. Текст функции не показывается )))

вадя
PetroNotC Sharp
ты счас рассказал про работу тех поддержки. Девочек на телефоне.
да, но с этого и начинается....


Мне расказывали реальный случай: запись в журнале заявок - "отчет такой-то не печатается". Девочка на техподдержки выяснила, что там во всем подразделении (здании) света (вольтов в розетках) нету )))
10 мар 20, 15:59    [22096267]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18768
Leonid Kudryavtsev
Мне расказывали реальный случай: запись в журнале заявок - "отчет такой-то не печатается". Девочка на техподдержки выяснила, что там во всем подразделении (здании) света (вольтов в розетках) нету )))
умная девочка в техподдержке оказалась.
10 мар 20, 16:01    [22096269]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
вадя
mayton
Но мой вопрос по сценарию воспроизведения так и остался висеть в воздухе.

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

Я не знаю. А что не бывает бага который стоит на границе двух звеньев? Я думаю бывает.
Яркий пример - перформанс баги. Это то что я говорил. Кто-то забыл обернуть SQL-запрос
catch - блоком с commit/rollback транзакции. Строчка осталась заблокированной. Другие
транзакции попробовали ее обновить. Поймали бесконечный (99% вангую что так) таймаут
и дальше поведение вашей системы - непредсказуемо. От замороженного интерфейса - до OutOf
memory exception. А всё начиналось с причины - с пустяка вобщем-то. И техподдержка
будет видеть только Java OOM.
10 мар 20, 16:13    [22096274]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Leonid Kudryavtsev

Давайте возьмем простейший случай. Простешая функция:

public long add( long a, long b );

Юз кейс: функция должна возвратить сумму двух чисел, по правилам описанных в учебниках математики/арифметики начальной школы (imho 1-3 класс).

Этож классика. Кажется Фаулер об этом писал.
10 мар 20, 16:14    [22096275]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18768
mayton
Я не знаю. А что не бывает бага который стоит на границе двух звеньев? Я думаю бывает.
Яркий пример - перформанс баги. Это то что я говорил. Кто-то забыл обернуть SQL-запрос
catch - блоком с commit/rollback транзакции. Строчка осталась заблокированной. Другие
транзакции попробовали ее обновить. Поймали бесконечный (99% вангую что так) таймаут
и дальше поведение вашей системы - непредсказуемо. От замороженного интерфейса - до OutOf
memory exception. А всё начиналось с причины - с пустяка вобщем-то. И техподдержка
будет видеть только Java OOM.
один из кучи вариантов.
10 мар 20, 16:24    [22096286]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Если честно - я не знаю что делать. Я-бы просто включил log4j=TRACE и наблюдал за логами следующие сутки.
Если дефект был - он оставит больше следов в логах и можно провести расследование. Уровни логгеров
можно включать в онлайне и на проде и на UAT/QA/DEV вообще на всех средах.

Далее - по ситуации. Если дефект снова был но сведений недостаточно - я-бы собрал отдельный билд
для детализации TRACE материала который по стеку предшествует багу.

Вот как-то так. Надеюсь у коллег тоже будут какие-то рецепты. Но флаки-дефекты это самые сложные
в поиске. Они как квантовый эффект. Когда на них смотришь или их изменяешь через JProf/JMX/Debugger
то их не видно. Они как бы прячутся. Потом снова отключился от наблюдения - они воспроизводятся.
10 мар 20, 16:30    [22096289]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3090
Leonid Kudryavtsev


Текст функции не показывается )))

очень смешно - а если там внутри входные лонги делят на 0? как можно написать тест не видя что внутри лежит?
а если говорить про методологию TDD то при описании функции суммирования будет return a+b и тут надо лишь предусмотреть крайнии значния
10 мар 20, 16:56    [22096299]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9443
а что в этом случае будет "крайнии значния"?
10 мар 20, 16:59    [22096304]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3090
Leonid Kudryavtsev
а что в этом случае будет "крайнии значния"?

минус будет
10 мар 20, 17:04    [22096305]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
https://docs.oracle.com/javase/8/docs/api/java/lang/StrictMath.html#addExact-long-long-
10 мар 20, 18:31    [22096366]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3331
11 мар 20, 09:17    [22096577]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Вот еще один кабанчик борется с ошибкой ценой в миллиард.

https://www.sql.ru/forum/1324163/strannyy-npe-to-poyavlyaetsya-to-ischezaet

(я здесь буду вести летопись NPE)
8 апр 20, 11:41    [22112712]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Zzz79
Member

Откуда:
Сообщений: 1432
mayton,я только сейчас оценил откуда ты))
когда уже дочитал почти блинова - и дошел до темы InetAdress))
8 апр 20, 20:36    [22113094]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
А что в этой теме? Напомни плиз.
8 апр 20, 20:58    [22113119]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Прошу прощения за внезапный UP.

Вот лысая голова подтверждает наши беспокойства по поводу Null.
Кстати хорошая мысль насчет fast-fail.

9 сен 20, 22:05    [22194470]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18768
mayton,
странные аргументы
null может быть таким же результатом как и то что запрашивали
только это говорит о том что что-то не найдено
и не факт, что надо бросать эксепшен
отрицательный результат - тоже результат
а где проверять на null - это уже дело конкретного кода
либо в вызванном методе, и возвращать какой-то объект , обозначающий, что данных нет
либо в вызвавшем методе.
9 сен 20, 22:54    [22194482]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
На сегодня я устал. Продолжим завтра.
Хотя мне казалось, тема уже исчерпана.
9 сен 20, 23:38    [22194492]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
andreykaT
Member

Откуда: =||==
Сообщений: 3399
вадя
mayton,
странные аргументы
null может быть таким же результатом как и то что запрашивали
только это говорит о том что что-то не найдено
и не факт, что надо бросать эксепшен
отрицательный результат - тоже результат
а где проверять на null - это уже дело конкретного кода
либо в вызванном методе, и возвращать какой-то объект , обозначающий, что данных нет
либо в вызвавшем методе.

правильные пацаны возвращают опшин нан.
11 сен 20, 13:37    [22195370]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Вадя будет везде ставить if (result==null).

И если у него 100 зависимостей от этого метода (который возвращает null) то нужно
поставить 100 проверок.

Я сейчас не утверждаю что он неправ. Я просто вместе со всеми ищу ответы на вечные
вопросы. А именно. Как-бы поменьше писать кода. И побольше получать денег.

К сожалению когда я предлагаю писать меньше кода меня не слышат.
11 сен 20, 13:51    [22195383]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
забыл ник
Member

Откуда:
Сообщений: 3515
вадя
странные аргументы

Согласен, у тебя


вадя
null может быть таким же результатом как и то что запрашивали

Может, но это говнокод и так быть не должно. Если в сигнатуре метода написано Int - значит не должен возвращаться null, это хак системы типов, из-за которого мы отгребаем десятилетиями

вадя
только это говорит о том что что-то не найдено

Поэтому сигнатура метода четко должна указывать что значение возможно не найдено. Optional<Int>



вадя
и не факт, что надо бросать эксепшен
отрицательный результат - тоже результат

И Вадя иногда говорит правильные вещи. Вот только зачастую они не имеют отношения к топику.

вадя

а где проверять на null - это уже дело конкретного кода

Правильно, ошибочные ситуации должны обрабатываться в том контексте, где ты знаешь как их обработать. Но когда у тебя тип Optional<Int> - ты не можешь ЗАБЫТЬ обработать проверку на нулл

вадя

либо в вызванном методе, и возвращать какой-то объект , обозначающий, что данных нет
либо в вызвавшем методе.

Ну вот ты и сам пришел к правильному ответу, пора прочитать про Optional
11 сен 20, 13:54    [22195387]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10918
забыл ник
Если в сигнатуре метода написано Int - значит не должен возвращаться null, это хак системы типов
Int - объектный тип. null - отсутствие объекта. Если принять как данность, что объект может отсутствовать, то жить станет проще.
11 сен 20, 14:13    [22195403]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Если-бы у нас была семантика операций наподобие SQL-ной то тогда-бы null не вызывал проблем.
Его можно было-бы суммировать и агрегировать. Но null в Java не равно NULL в dbms вот какая штука.
11 сен 20, 14:20    [22195409]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10918
mayton
Его можно было-бы суммировать и агрегировать. Но null в Java не равно NULL в dbms вот какая штука.
Вообще никакой связи.
Языки высокого уровня падают не на арифметических операторах, а на "разыменовывании" объекта, из которого требуется "достать" примитивный тип.
Система типов SQL не является объектной обёрткой над примитивными типами и операторы SQL "знают", что делать с null.
Можно сделать так же и в любом другом языке, но вам же не понравится, что операции с типами-обёртками ещё больше просядут по скорости?
11 сен 20, 14:28    [22195412]     Ответить | Цитировать Сообщить модератору
 Re: unit-тестирование  [new]
mayton
Member

Откуда: loopback
Сообщений: 51166
Basil A. Sidorov
mayton
Его можно было-бы суммировать и агрегировать. Но null в Java не равно NULL в dbms вот какая штука.
Вообще никакой связи.
Языки высокого уровня падают не на арифметических операторах, а на "разыменовывании" объекта, из которого требуется "достать" примитивный тип.
Система типов SQL не является объектной обёрткой над примитивными типами и операторы SQL "знают", что делать с null.
Можно сделать так же и в любом другом языке, но вам же не понравится, что операции с типами-обёртками ещё больше просядут по скорости?

Я использовал пустое значение NIL или () в языках высокого уровня и это не вызывало проблем.
Более этого для этого пустого значения были опеределены операции.
11 сен 20, 14:31    [22195414]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 14 15 16 17 18 19 20 21 [22] 23   вперед  Ctrl
Все форумы / Java Ответить