JavaRush/Java блог/Random/Валидатор, понять и простить

Валидатор, понять и простить

Статья из группы Random
участников
Даже после окончания курса jr, я все равно иногда захожу сюда, в раздел помощи, чтобы что-то подсказать и помочь. Почти всегда вопрос начинается с фразы «Я все сделал правильно, но валидатор не пускает» или похожей. Именно такие заголовки и заставили меня сюда написать. С этого момента предлагаю принять за правду – валидатор всегда прав. Иногда выскакивают баги, но с каждым разом их все меньше и меньше. Поэтому получая отказ от валидатора предлагаю вам исходить из того, что вы где-то ошиблись. А теперь, чтобы не биться головой о стену, надо начинать осваивать тестирование. На эту тему тут есть несколько статей (JUnit part I JUnit part II). При чем тестировать надо не «удобные случаи». Например, возьмем задачу task1916. Очень часто, после написания решения, люди проверяют на идеальных вариантах. Идеальный вариант проходит, значит можно сдавать задачу. И тут прилетает отказ. Значит что надо сделать? Правильно, написать ещё тестовый пример. А потом ещё один и ещё, пока не пройдет тестирование валидатора. Например, как код отреагирует на пустой второй файл? А на пустой первый? Вот из последних примеров https://javarush.com/help/15861 Вам сейчас важно понять, что разработчик не только пишет код, он должен его протестировать сам, а не надеяться на тестировщика. Если честно, мне до сих пор немного страшно, когда разработка переходит на этап тестирования. Я считаю, что мой код должен работать нормально и ошибок быть не должно. Мне всегда неудобно, если я отдал код, который не работает. Получается, я что-то написал и не проверил, т.е. потратил чье-то время. Конечно, потом на работе у вас будет список требований и у тестировщика вы сможете получить набор тест кейсов вашего ПО и подстроиться под него и будет проще, но я бы на это не рассчитывал. Ваш код – ваша ответственность, а тесты помогают быть уверенным, что все работает как надо. Сейчас у вас есть отличная возможность прокачать скилл тестировщика. Заходя в раздел помощи, не пишите автору ответ в виде кода. Придумайте тестовый пример, который у него не отработает. Таким образом вы прокачаетесь сами и поможете автору не решая задачу за него.
Валидатор, понять и простить - 1
Комментарии (17)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JaFFar
Уровень 18
8 февраля 2022, 14:32
У валидатора не нравится не информативность,нет конкретики,а лишь сильно поверхностные рекомендации.
Сергеев Виктор
Уровень 40
Master
8 февраля 2022, 23:31
конкретные рекомендации на мой взгляд будут только вредить. Раньше валидатор просто писал, что тестирование не пройдено. Сейчас он стал более лояльным и объясняет, что примерно не нравится. Тут же вопрос упорства и способности решать проблемы. Если научиться решать только с подсказками, то дальше будет сложнее.
vinsler
Уровень 35
Expert
14 февраля 2019, 21:13
Вспоминаю, как я первый раз научился дебажить. ))) Без брекйпойнта правда нельзя. Почитал про классы эквивалентности, пары мин хватило понять, тут же критика, они уменьшают кол-во тестов, но они не проверяют разные значения, которые могут граничить с пограничными. Например нельзя вводить спец символы, в тест пихнем @#!$##$^%$@^#$&, и вуаля тест отрицательный. Однако один символ все же может пройти и только в единичном варианте или другой символ в сочетании с возможным, однако этого нет в тесте, мы же их сократили. ))) Хотя могу ошибаться с пониманием, читал первые пару ссылок с гугла. ))) И кстати да, умение юзать JUnit даст помощь в понимании валидатора на джавараше, но она не даст понимания, почему валидатор не пропускает ваше решение, которое выдает правильные ответы. )
Стас Пасинков Software Developer в Zipy Master
4 февраля 2019, 15:01
лично я вот вопросы типа "все работает валидацию не проходит" - даже не открываю. там скорее всего что-то неинтересное. то, что уже и так 1000 раз было сказано в других вопросах по этой же задаче. варианты с опечатками, ну или более общий вариант, когда человек не удосужился даже запустить свою задачу перед проверкой и потестить ее сам даже на "хороших" данных - не понимаю зачем мне за него в этом разбираться. насчет хорошего примера - это да, это высший пилотаж))) но лично у меня трудно с примерами) мне проще написать 20 строк текста с объяснением)) это просто быстрее будет, чем придумывать хороший пример)) так что в этом вам завидую, да) я тоже стараюсь, но видимо больше люблю потрындеть, хехе))
Сергеев Виктор
Уровень 40
Master
4 февраля 2019, 20:19
ну да, найти багу а потом придумать тест это не сразу получается, но зато хороший опыт )
Kovis
Уровень 9
11 февраля 2019, 09:10
Стас, прошу не обижаться, но если Вы не можете придумать пример негативного теста, то слабовато у Вас с тестированием. Это я Вам как тестировщик говорю. Программист конечно не обязан быть тестировщиком, но юнит-тесты без знания классов эквивалентности не напишешь.
Сергеев Виктор
Уровень 40
Master
11 февраля 2019, 18:27
что за классы эквивалентности? тест кейсы обычно пишутся по фт, а фт составляет аналитик ) ну у нас так
Kovis
Уровень 9
11 февраля 2019, 19:39
Там всё исключительно просто, рекомендую настоятельно потратить час-полтора. Аналитики тоже люди, а во-вторых, допустим, в Вашем следующем проекте не будет аналитика и не будет тестера, тогда придется самому отвечать за качество. Ваша статья очень полезная для новичков с смысле необходимости уметь себя проверять, сделать проверку своего кода правилом и считать частью процесса разработки. К сожалению, людям совсем начинающим трудно понять где кончается их невнимательность и начинается их непонимание материала. Валидатор тут не слишком дружественный - он же машина... Отсюда и паника, сам таким был, к счастью моя команда очень сильная и объяснять не отказываются по десять раз.
Сергеев Виктор
Уровень 40
Master
11 февраля 2019, 20:00
мне кажется если на проекте будет 1 джун без аналитика и тестировщика, то проект можно закрывать сразу ) Если не джун, то он уже сам может провести аналитику и описать фт, а по ним потом написать кейсы и по желанию их автоматизировать, но денег такой разработчик возьмет так же за троих ) ну и возвращаясь к вашему утверждению: "юнит-тесты без знания классов эквивалентности не напишешь" я же не спросил насколько там просто, я попросил коротко пояснить о чем вы говорите (иначе зачем вы говорите). И мой ответ, я не знаю что за классы эквивалентности, что не мешает мне писать юнит тесты с хорошим покрытием (мутационные тесты включены)
Kovis
Уровень 9
11 февраля 2019, 20:44
я тут такой ответ накатал, а лимит в 195 символов... если желаете могу написать Вам приватно (скажите куда)
Kovis
Уровень 9
11 февраля 2019, 20:50
грубо говоря, знание самых основ тестирования, таких как "метод граничных значений" (основывающийся на классах эквивалентности) помогает сэкономить время для написания минимального количества необходимых тестов.
Сергеев Виктор
Уровень 40
Master
12 февраля 2019, 13:24
Мне кажется это отличная возможность для вас написать статью, если желаете поделиться знаниями. А на тему "куда" - тут есть личные сообщения
Эдуард
Уровень 24
4 февраля 2019, 13:20
С общим смыслом поста согласен. Вначале психовал на валидатор, но потом стал думать на него в последнюю очередь, т.е. если что -то не проходит, то ошибка скорей всего у меня. Но хотел бы затронуть смежную тему, это постановка самой задачи. Иногда вообще не понятно что нужно сделать, такое ощущение, что разработчики данного ресурса некоторые задачи составляли уже на иссякшей фантазией и силами. Но лучше бы сделали задач меньше, но более качество проработали и текст и сам смысл задачи. Пример из недавно решаемых мной: Задача "Знакомство с графами", лично я не очень понял зачем эта задача нам - джунам. Нет, конечно графы интересная штука, но как это к jave относится - не очень понятно. Решение задачи - это просто проимплементить Serializable, тогда зачем нам изучать что такое графы. Или вот еще пример - задачи на логику "Кроссворд", "Алгоритмы-прямоугольники". Для получения решения этой задачи надо пошевелить мозгами, при этом используемый синтаксис, примитивный. Пошевелить мозгами, конечно, тоже надо, но если сравнить сколько времени потрачено на задачу и сколько я получил знаний от этого решения, то лучше бы этой задачи я не решал. Конечно, такие задачи просто пропускать, но я не могу спокойно спать, когда есть не решенные задачи. Думаю некоторые меня поймут Я понимаю, что если мы больше тратим времени на задачу, мы дольше проходим курс, и больше тратим на подписку, и больше разрабатывают создатели данного ресурса. Но если бы разработчики данного ресурса позаботились о моем времени и задачи были проработаны более качественно и я бы при минимальном затраченном времени получал максимум от решения задачи. Я бы за курс готов платить в 2 раза больше
Стас Пасинков Software Developer в Zipy Master
4 февраля 2019, 16:04
в смысле графы не нужны? структуры данных и алгоритмы - тоже? знать как оптимизировать наивные решения - разве ж это плохо?
Viacheslav
Уровень 3
4 февраля 2019, 16:38
Как говорит мой начальник, код писать можно научить и обезьяну. Задача программиста - думать. Те, кто хорошо получают, как раз таки разрабатывают всякие рекомендательные системы, всякие обработчики и т.п. И вот там не хватит "просто проимплементить Serializable". В общем, это "общекомпьютерная грамотность". И если JR такие задачи даёт - они молодцы. На правах личного мнения.
Эдуард
Уровень 24
4 февраля 2019, 21:07
Да, согласен, не плохо, но данный ресурс больше рассчитан на джунов, как писать оптимальный код -это для уже более опытных которые отлично разбираются в синтаксисе и знают что работает быстро, а что нет. Уровень джуна - это хоть как то реализовать задачу и что бы без багов.
Viacheslav
Уровень 3
3 февраля 2019, 23:11
В копилку плюсов. Есть такой сервис - называется Codility. Через него могут собеседовать, давая задачу. Смысл в том, что для решаемой задачи там тоже есть свой валидатор. Есть некоторые "публичные тесты", вроде тех самых "В правильных условиях работает правильно". Но есть и скрытые, вроде переполнения и т.п. И вот заказчик увидит, пройдёт ли ваше решение все тесты, даже скрытые. Там есть задачи на пробу, учебные. На них можно посмотреть, как может отличаться результат )