• ,

Нужно ли сделать более разнообразными ответы валидатора при отправке задач на проверку

Предположим, валидатор при отправке задач на проверку явно указывал, скажем, причину, по которой задача не проходит проверку. Т.е. не просто «не прошла тестирование», в явном виде указывать, что не так.
Одна из самых частых проблем это «мой код отрабатывает правильно, но не проходит проверку, как так?». Когда люди пишут «отрабатывает правильно», иногда это им только кажется. Но бывают случаи, когда действительно вроде все ровно, но проверку не проходит.

14 комментариев

SonicBIast
Всем привет! Ну это вопрос с подвохом. С одной стороны когда отправляешь на проверку было бы конечно хорошо когда валидатор говорил бы, где ошибка! Но с другой стороны получается, что когда пишешь код не задумываешься об алгоритме, следовательно не до конца понимаешь что ты вообще написал!
Лучше всего тестить программу самому и если уж все хорошо, и результат такой какой должен быть, тогда уже пробовать сдавать её. Зачастую просматривая топики, вижу задачи, которые люди сами себе усложняют, чёто сами придумывают, какие то проверки, и т.д. короче код который решается в несколько строк растягивают до невозможного. Дробите задачу на небольшие задачки, и решайте постепенно, шаг за шагом.
Бывают моменты когда на 100% уверен, что решил правильно, а не принимается. Но лично я занимаясь по этому курсу понял одну истину. Если не приняло значит 100% накосячил. И когда находишь свою ошибку это чувство удовлетворения не передать. Вот на начальных уровнях такое кажется есть, когда решаешь задачу онлайн. Там вроде бы пишут, забыли поставить ";" или ")" или «пробел». Мне кается этого достаточно, т.к. если валидатор будет вам ещё и отправлять смс где что-то не так, тогда знаний меньше будете получать.
P.S.Кстати есть ещё дебагер вот им ещё нужно научится пользоваться!!!
EvIv
Когда проходил на coursera курс Algorithms and Data Structures, увидел как должен работать хороший валидатор.
Спустя 2-5 минут после отправки на сайт zip с кодом (в этом аспекте у JavaRush лучше) напротив записи с попыткой появляется процент прохождения, например, 88.54% и появляется кнопка для просмотра подробного отчета. Там представлен полный лог тестирования: соответствие представленных проверке классов запрошенному API (набор публичных методов и полей должен соответствовать заданию, не должно быть лишних публичных полей и методов), лог findbugs, лог checkstyle, несколько групп тестов: на функциональность, на граничные значения (показываются входные данные, ожидаемый и фактический результат, процент прошедших тестов); на потребление памяти, на время выполнения (несколько тестов с разным объемом входных данных, ожидаемые и фактические значения занимаемой памяти и затраченного на работу времени).
Причем при ошибках API или findbugs далее тестирование не проводится, выставляется результат 0%.
В-общем, после выставления оценки можно четко понять, какие аспекты задачи не проработаны или проработаны недостаточно: не учтены граничные случаи (передача в параметре null, массива из 0 элементов, пустой строки, граничных значений Integer и т.п.), некоторые рабочие случаи, работает ли программа неприлично медленно или жрёт памяти как не в себя.
Понимаю, что там задач всего 12 штук (правда, объемных) на целый курс, а тут более 1000, также понимаю, что при фиксированных тестовых данных никто не помешает сдать задачу простым «switch(input) {case input1: output expected1; break; ...}», но в этом направлении можно попробовать подумать — получается очень ценный feedback.
Чтобы не позволить сдать задачу простым хардкодом, можно тестовые данные генерить автоматически, делать более «интеллектуальные» тесты.
saul
  • saul
  • 0
Может быть, помогло бы указание в процентах: «Ваше решение совпадает с верным более чем на 90%, но окончательно решение неверно.».
blizzard
Опять же, нужно ли «намекать» как-то где эти 10% находятся?
saul
Иногда я думаю, что наличие некой дополнительной игровой валюты могло бы тратиться на подсказку в виде доступа к итоговым тестам задания.
Сейчас я на 18-м уровне, имею 77 кораблей и 30 единиц тёмной материи — ресурсы, вроде, избыточны для прохождения игры.
Некоторые задачи вызывают у меня затруднения, которые можно было бы решить быстрее, будь у меня знания, какие тесты не проходятся.
k1per
А зачем? Не вижу смысла. Либо ты правильно делаешь, либо нет. Не делай ошибок и все будет хорошо. Если делаешь ошибки, то никакие тебе 80%-правильного-решения не помогут стать программистом.
EvIv
Детализация по тестам поможет распознать, где студент сам накосячил/не учел что-то, а где условие неочевидно построено и уже тесты покажут, что именно ожидается от программы. Это повысит эффективность траты времени на задачи, ведь иногда по несколько часов или дней приходится играть в «угадайку» с валидатором, что никак не приближает студента к цели стать программистом.
Чтобы не избаловать студентов готовыми тестами и приучить тестировать программы самим перед отправкой, можно функцию детализации по тестам включать после скажем, третьей попытки сдать задачу Кто заботится о своем рейтинге по задачам, будет стараться тщательно тестировать и сдать задачу в первые попытки, а когда уже три-четыре раза сервер задачу не принял, уже начинает копиться раздражение «что же ему еще не хватает?!», вот тут как раз и подоспеет ответ.
k1per
Ни разу не играл в угадайку с валидатором, всегда были проблемы, когда я писал полный бред. А если были какие-то нюансы, то я спокойно их смотрел на форуме javarush.ru или гуглил.
Чем мне и нравится программирование(я закончил МГУ факультет психологии), что ты не можешь заниматься словесными спекуляцией на тему материализма/идеализма с валидатором и компилятором. Либо ты пишешь правильно, либо нет.

На счет раздражение: смотрел курс Stanforda по Java. Там индус читает. Он сказал, что самое ужасное, что ты можешь сделать, когда у тебя есть баг, это паниковать.
EvIv
  • EvIv
  • 0
  • Комментарий отредактирован 2015-12-11 10:25:12 пользователем EvIv
О панике я и не говорил. Раздражение появляется от осознания, что эти часы и дни мог бы потратить более эффективно.
Что касается нюансов — на них как раз тратится много времени: на то, чтобы переключиться на форум, чтобы найти темы (иногда десятки тем по одной задаче), чтобы в сотне комментов найти упоминание релевантного твоему случая, изучая тонны чужого кода. Да, тоже навык, но смежный для программиста и от этих нюансов можно было бы избавиться. Задания на гугление и поиск информации всё-таки в курсе отдельно присутствуют, чтобы еще и в задачах неявно это требовать.
ЗЫ: сейчас прошел почти 26 уровней, не решена не сдана одна задача — bonus3 на 18 уровне (crud2)
laz_a_rus
  • laz_a_rus
  • 0
  • Комментарий отредактирован 2015-12-11 14:43:36 пользователем laz_a_rus
*ОФФТОП*
А какие именно затруднения у вас вызвала задача crud2? При правильной реализации первой версии (что настоятельно рекомендуется авторами) со второй проблем возникнуть не должно.
В этой теме я несколько раз писал о самой распространенной ошибке в первой задаче. Вот здесь краткое ее описание, а здесь примеры моего кода.
Во второй задаче требуется несколько раз вызвать методы аналогичные методам из первой задачи и все.
Если будут вопросы — задавайте, либо в соответствующей теме, либо в личку.
EvIv
Затруднения как обычно — по-моему, всё работает, а сервер не принимает. Crud1 выполнен и сдан. Могу в личку кинуть код.
laz_a_rus
Не вижу смысла в этой теме… Уже было сказано вот здесь:
Из ближайших:
1) регистрция на стажировку
2) большие задачи 29, 32 (уже готовы) и 33 уровней
3) переход на джава 8
4) навигация по лекциям

Из отдаленных:
1) смена дизайна
2) развернутый ответ, почему не прошла задача
3) нелинейный сценарий доступа к материалу
4) много другой внутренней работы
Так что это в любом случае будет реализовано, вопрос только в том как скоро. Возможно это не так легко реализуемо как кажется, а о полезности никто и не спорит.
blizzard
Я с поиском поработал до того, как эту тему создать. На этот пост, конечно, не наткнулся. Иначе бы не стал создавать.
Ну, тем не менее, все же по своему вопрос интересный.
VitaliyHTC
Тем кто говорит что не надо, типа не* говнокодить,
А вы господа собственно уверены на 100% в правильности валидатора и задачи?
Если вы так думаете то вы плохой программист.
Надо понимать 1 момент. Все что создано человеком — не может гарантировать 100% идеальность и отсутствие изъянов.

Потому надо сделать подсказки.
Так как уже есть 2 биг задачи 27, и 28-го левела, где перечитан весь хелп и инфо по етих задачах, да не едет…
И в задачах иногда находятся баги, и в тестах, поетому не будет лишним понимать чего не нравится валидатору.

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

Поэтому могу сказать одно. Если проект JavaRush исправляет баги, помогает понять ученикам их косяки, делает новые фичи, добавляет задачи,… Значит он развивается и стает лучше. И это правильный путь. А не утверждения что ты сделал неправильно сам виноват, как некоторые здесь.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.