Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Java |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 14 15 16 17 18 19 20 21 [22] 23 вперед Ctrl→ |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
есть трёхзвенка - есть бага, скока вариантов по определению её места? вагон и маленькая тележка... |
||||
10 мар 20, 15:58 [22096265] Ответить | Цитировать Сообщить модератору |
Leonid Kudryavtsev Member Откуда: Сообщений: 9443 |
Давайте возьмем простейший случай. Простешая функция: public long add( long a, long b ); Юз кейс: функция должна возвратить сумму двух чисел, по правилам описанных в учебниках математики/арифметики начальной школы (imho 1-3 класс). Нужно написать unit test который бы 100% проверил, что ф-ция работает и в ней нет багов. Текст функции не показывается )))
Мне расказывали реальный случай: запись в журнале заявок - "отчет такой-то не печатается". Девочка на техподдержки выяснила, что там во всем подразделении (здании) света (вольтов в розетках) нету ))) |
||||||||||||
10 мар 20, 15:59 [22096267] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
|
||||
10 мар 20, 16:01 [22096269] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Я не знаю. А что не бывает бага который стоит на границе двух звеньев? Я думаю бывает. Яркий пример - перформанс баги. Это то что я говорил. Кто-то забыл обернуть SQL-запрос catch - блоком с commit/rollback транзакции. Строчка осталась заблокированной. Другие транзакции попробовали ее обновить. Поймали бесконечный (99% вангую что так) таймаут и дальше поведение вашей системы - непредсказуемо. От замороженного интерфейса - до OutOf memory exception. А всё начиналось с причины - с пустяка вобщем-то. И техподдержка будет видеть только Java OOM. |
||||||||
10 мар 20, 16:13 [22096274] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Этож классика. Кажется Фаулер об этом писал. |
||||
10 мар 20, 16:14 [22096275] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
|
||||
10 мар 20, 16:24 [22096286] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Если честно - я не знаю что делать. Я-бы просто включил log4j=TRACE и наблюдал за логами следующие сутки. Если дефект был - он оставит больше следов в логах и можно провести расследование. Уровни логгеров можно включать в онлайне и на проде и на UAT/QA/DEV вообще на всех средах. Далее - по ситуации. Если дефект снова был но сведений недостаточно - я-бы собрал отдельный билд для детализации TRACE материала который по стеку предшествует багу. Вот как-то так. Надеюсь у коллег тоже будут какие-то рецепты. Но флаки-дефекты это самые сложные в поиске. Они как квантовый эффект. Когда на них смотришь или их изменяешь через JProf/JMX/Debugger то их не видно. Они как бы прячутся. Потом снова отключился от наблюдения - они воспроизводятся. |
10 мар 20, 16:30 [22096289] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
очень смешно - а если там внутри входные лонги делят на 0? как можно написать тест не видя что внутри лежит? а если говорить про методологию TDD то при описании функции суммирования будет return a+b и тут надо лишь предусмотреть крайнии значния |
||||
10 мар 20, 16:56 [22096299] Ответить | Цитировать Сообщить модератору |
Leonid Kudryavtsev Member Откуда: Сообщений: 9443 |
а что в этом случае будет "крайнии значния"? |
10 мар 20, 16:59 [22096304] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
минус будет |
||||
10 мар 20, 17:04 [22096305] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
https://docs.oracle.com/javase/8/docs/api/java/lang/StrictMath.html#addExact-long-long- |
10 мар 20, 18:31 [22096366] Ответить | Цитировать Сообщить модератору |
Valentin Kolesnikov Member Откуда: Сообщений: 3331 |
|
11 мар 20, 09:17 [22096577] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Вот еще один кабанчик борется с ошибкой ценой в миллиард. https://www.sql.ru/forum/1324163/strannyy-npe-to-poyavlyaetsya-to-ischezaet (я здесь буду вести летопись NPE) |
8 апр 20, 11:41 [22112712] Ответить | Цитировать Сообщить модератору |
Zzz79 Member Откуда: Сообщений: 1432 |
mayton,я только сейчас оценил откуда ты)) когда уже дочитал почти блинова - и дошел до темы InetAdress)) |
8 апр 20, 20:36 [22113094] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
А что в этой теме? Напомни плиз. |
8 апр 20, 20:58 [22113119] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Прошу прощения за внезапный UP. Вот лысая голова подтверждает наши беспокойства по поводу Null. Кстати хорошая мысль насчет fast-fail. |
9 сен 20, 22:05 [22194470] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
mayton, странные аргументы null может быть таким же результатом как и то что запрашивали только это говорит о том что что-то не найдено и не факт, что надо бросать эксепшен отрицательный результат - тоже результат а где проверять на null - это уже дело конкретного кода либо в вызванном методе, и возвращать какой-то объект , обозначающий, что данных нет либо в вызвавшем методе. |
9 сен 20, 22:54 [22194482] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
На сегодня я устал. Продолжим завтра. Хотя мне казалось, тема уже исчерпана. |
9 сен 20, 23:38 [22194492] Ответить | Цитировать Сообщить модератору |
andreykaT Member Откуда: =||== Сообщений: 3399 |
правильные пацаны возвращают опшин нан. |
||||
11 сен 20, 13:37 [22195370] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Вадя будет везде ставить if (result==null). И если у него 100 зависимостей от этого метода (который возвращает null) то нужно поставить 100 проверок. Я сейчас не утверждаю что он неправ. Я просто вместе со всеми ищу ответы на вечные вопросы. А именно. Как-бы поменьше писать кода. И побольше получать денег. К сожалению когда я предлагаю писать меньше кода меня не слышат. |
11 сен 20, 13:51 [22195383] Ответить | Цитировать Сообщить модератору |
забыл ник Member Откуда: Сообщений: 3515 |
Согласен, у тебя
Может, но это говнокод и так быть не должно. Если в сигнатуре метода написано Int - значит не должен возвращаться null, это хак системы типов, из-за которого мы отгребаем десятилетиями
Поэтому сигнатура метода четко должна указывать что значение возможно не найдено. Optional<Int>
И Вадя иногда говорит правильные вещи. Вот только зачастую они не имеют отношения к топику.
Правильно, ошибочные ситуации должны обрабатываться в том контексте, где ты знаешь как их обработать. Но когда у тебя тип Optional<Int> - ты не можешь ЗАБЫТЬ обработать проверку на нулл
Ну вот ты и сам пришел к правильному ответу, пора прочитать про Optional |
||||||||||||||||||||||||
11 сен 20, 13:54 [22195387] Ответить | Цитировать Сообщить модератору |
Basil A. Sidorov Member Откуда: Сообщений: 10918 |
|
||||
11 сен 20, 14:13 [22195403] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Если-бы у нас была семантика операций наподобие SQL-ной то тогда-бы null не вызывал проблем. Его можно было-бы суммировать и агрегировать. Но null в Java не равно NULL в dbms вот какая штука. |
11 сен 20, 14:20 [22195409] Ответить | Цитировать Сообщить модератору |
Basil A. Sidorov Member Откуда: Сообщений: 10918 |
Языки высокого уровня падают не на арифметических операторах, а на "разыменовывании" объекта, из которого требуется "достать" примитивный тип. Система типов SQL не является объектной обёрткой над примитивными типами и операторы SQL "знают", что делать с null. Можно сделать так же и в любом другом языке, но вам же не понравится, что операции с типами-обёртками ещё больше просядут по скорости? |
||||
11 сен 20, 14:28 [22195412] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51166 |
Я использовал пустое значение NIL или () в языках высокого уровня и это не вызывало проблем. Более этого для этого пустого значения были опеределены операции. |
||||||||
11 сен 20, 14:31 [22195414] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 14 15 16 17 18 19 20 21 [22] 23 вперед Ctrl→ |
Все форумы / Java | ![]() |