метод проверки домашних заданий для школ – как поощрять передовой опыт и дизайн и уменьшить зависимость от корректуры?

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

У моего коллажа проблемы с системой тестирования домашних заданий, и я хотел бы предложить им обновить или перестроить их систему тестирования.

Мой метод тестирования коллажей — полностью черный ящик. Учащиеся пишут все, что хотят, при условии, что они проходят автоматические тесты, проводимые на школьном сервере.

Затем ассистент преподавателя корректирует код всех учащихся, комментируя ошибочную логику и неправильные методы. Проблема в том, что по-человечески невозможно проверить весь этот код.

Мой вопрос таков:

Какой, на ваш взгляд, лучший метод проверки домашних заданий, который побудит (или, лучше, заставит ) студентов писать хороший код, а во-вторых, в результате сведет к минимуму задачу ассистента преподавателя по корректуре.

--Мы программируем на C++ под Linux.

Спасибо за ваши комментарии.

Ответы (1)

Вы запрашиваете полностью автоматизированный конвейер проверки кода, также известный как Святой Грааль.

По частям:

  • Ошибочная логика: теоретически это можно обнаружить при тестировании. Но если бы это было так просто, программное обеспечение не содержало бы ошибок. Если задание достаточно простое, чтобы его можно было выполнить одним-единственным способом, вы можете предсказать алгоритмы и спроектировать крайние случаи для проверки. Если существует более одного способа (и люди, особенно новички, найдут другой способ, каким бы запутанным он ни был), вам придется просмотреть их, посмотреть, какие алгоритмы они используют, и получить среднее значение по ним.
  • Стиль кода: есть автоматизированные инструменты для проверки стиля и хороших практик, такие как cppcheck , но они довольно глупы. Некоторые настройки переусердствуют, и они совершенно не способны разглядеть общую структуру, найти слишком длинные функции или навязать единую ответственность. Кроме того, они предназначены для того, чтобы дать программисту предложения, которые он оценит, если это уместно («Мне действительно нужно документировать эту вспомогательную функцию длиной в 3 строки с совершенно четким именем и подписью?»).

Так что, в общем, нет, это невозможно. Единственный способ, который я могу придумать, — упростить расширение вашей системы тестирования и оценки. Когда ТА находит ошибку в программе, добавляется тест, и все они проходят через пайплайн, и становится на одну проверку меньше.

Лучшее, что я могу придумать, чтобы обеспечить соблюдение хороших практик, - это заставить приложение увеличивать назначение за назначением. Если он плохо закодирован, его расширение и поддержка потребуют значительных усилий, и преимущества передового опыта станут очевидными. По моему мнению, создание больших баз кода — это единственный способ действительно понять и поверить в то, почему шаблоны и соглашения полезны, а не являются продуктом каких-то придирчивых парней с ОКР.

Но вы можете обмануть. Например, вы можете вручную тщательно проверить материалы с наименьшими оценками стиля, которые проходят все тесты (предполагая, что они будут плохо закодированы), и найти их крайние случаи, когда они не пройдут, и добавить их в свою батарею тестов. Однако это несправедливо, поскольку вы нацеливаете свое наказание на конкретные представления.

Вот список инструментов для статического анализа кода; вам может быть полезно: en.wikipedia.org/wiki/… Как объясняет Дэвид, это не решит вашу проблему. Тем не менее, они могут быть полезны в качестве обучающего инструмента для студентов, чтобы они могли запускать свой собственный код.