﻿# Как фидбек помог улучшить наш C\+\+ квиз

Ранее в нашем блоге мы рассказывали о квизе для C\+\+ разработчиков\. С момента запуска мы тщательно собирали обратную связь\. Часть из неё касалась ошибок в работе квиза, которые мы естественно решили исправить\.

![0985_fix_the_quiz_ru/image1.png](https://import.viva64.com/docx/blog/0985_fix_the_quiz_ru/image1.png)

Для тех, кто пока не знает о каком квизе идёт речь, расскажем кратко: мы отобрали несколько ошибок, найденных нашим анализатором в Open Source проектах\. Участнику предоставляются 10 случайных фрагментов кода, в которых нужно найти и отметить ошибку\. На каждый фрагмент выделено 60 секунд\.

Вы можете почитать о квизе подробнее в [заметке](https://pvs-studio.ru/ru/blog/posts/cpp/0960/) или [пройти его](https://quiz.pvs-studio.com/ru/cpp/)\.

Вернёмся к теме\. Мы получили много комментариев от тех, кто прошёл наш квиз\. И часть из них была о проблемах при прохождении\. Являясь апологетами качества кода, мы стремимся к тому, чтобы улучшать и наши собственные проекты\.

Мы обработали комментарии с нескольких площадок, где разместили информацию о квизе, включая Habr, соцсети, тематические форумы и сайты\. По итогу выделили 2 момента, требующие исправления\. С первым столкнулись многие, прошедшие квиз – мы собрали немало комментариев по поводу способа выделения и подсчёта ошибок\. Вторая же ошибка не была так распространена, о ней был лишь один комментарий\. Ирония в том, что мы сознательно её допустили\. Но обо всё по порядку\.

## Ошибка 1\. А как попасть в правильный ответ?

Изначально механика квиза предоставляла возможность множественного выбора ответа \(т\. е\. нескольких элементов\)\. В примере ниже ошибкой является clip\-\>GetSequence\.

![0985_fix_the_quiz_ru/image2.png](https://import.viva64.com/docx/blog/0985_fix_the_quiz_ru/image2.png)

Ранее вы могли выбрать как правильный ответ, так и дополнительно \(специально или случайно\) отметить знаки \= или  \(\), и даже всю строку\. По сути, вы нашли ошибку, но ответ засчитывался как неверный из\-за лишних символов\.

Теперь можно выделить не более одного элемента\. Но это не значит, что выбранный элемент может быть единственным правильным\. В качестве верного ответа часто нами размечено несколько мест в коде, поэтому выбор любого из них будет корректным\.

Наглядно увидеть, как и что изменилось вы можете на видео:

### Было

<https://www.youtube.com/watch?v=8h08bwQBKb8&ab_channel=PVS-StudioRu>

### Стало

<https://www.youtube.com/watch?v=nPC_5hJ5T4w&ab_channel=PVS-StudioRu>

Недавно мы подводили итоги двухмесячной работы квиза и рассказали о том, как почти [2 000 разработчиков в сумме заработали 3,5 балла из 10](https://pvs-studio.ru/ru/blog/posts/cpp/0964/)\. Не исключаем, что способ подсчёта отчасти мог повлиять на итоговый результат\.

## Ошибка 2\. Наш мини\-фейл

Писать о своих багах всегда неловко, но делать это нужно\. Вернёмся немного назад, в период разработки квиза\. Изначально при прохождении был баг: как только задание появлялось на экране, ему ставился статус "время закончилось"\. Почему это происходило:

* при загрузке задания таймер обнулялся и запускался заново;
* далее таймер запускался от 60 до 0 и каждый тик проходил проверку: если таймер \=\=\= 0, то ставим флаг "время закончилось", но т\. к\. в начале таймер обнулялся, то проверка на ноль проходила сразу\.

**Если объяснить просто, то:**

открывается задание \-\> таймер обнуляется \-\> сразу проходит проверка на \=\=\= 0 и выдаётся "время истекло"\.

**А должно было работать так:**

открывается задание \-\> таймер обнуляется \-\> таймер запускает отсчёт \-\> через 60 секунд проходит проверка на \=\=\= 0 и выдаётся "время истекло"\.

Чтобы не тратить время мы решили поставить таймер от 60 до 1\. После этого таймер спокойно обнулялся, а флаг "время закончилось" ставился при проверке "если таймер \=\=\= 1"\.

Решение не изящное, но быстрое\. Мы были уверены, что никто не станет косплеить героев боевиков 90\-х и нажимать "Отвечаю" на последней секунде\. Но, если разработчику кажется, что всё будет работать именно так, как он задумал, – найдётся тот, кто "споткнётся о костыль"\)

2 месяца мы со спокойной душой не думали об этой ошибке\. Пока в одном из комментариев нам не прилетел скриншот:

![0985_fix_the_quiz_ru/image3.png](https://import.viva64.com/docx/blog/0985_fix_the_quiz_ru/image3.png)

Получается, что, пообещав 60 секунд на ответ, мы на самом деле давали участникам 59 секунд\. Что ж, ошибку признали, поправили и теперь каждый участник может со спокойной душой нажимать кнопку ответа на последней секунде\. Но лучше, конечно, не затягивать, если ответ вы нашли быстрее\.


> Этот опыт в очередной раз доказал, как важна обратная связь и работа с ней\\\.

Кстати, все эти моменты мы учли при разработке квиза по C\#, который уже [доступен к прохождению](https://quiz.pvs-studio.com/ru/csharp/)\. Проходите его сами, скидывайте друзьям, которые пишут на C\#, и, конечно же, делитесь своими результатами\. А если вдруг попадётся баг, то обязательно пишите нам – будем чинить\.

И не забывайте, что каждому прошедшему квиз доступен промокод на 30\-дневную лицензию PVS\-Studio\.