Перехватить компилятор / Перехватить вывод метода (C # - c ++) - PullRequest
0 голосов
/ 02 марта 2011

Ну, для начала, скажи, что мне нужно делать.

Мне нужно составить программу, чтобы студенты могли загрузить код на C ++ из упражнения.И этот загруженный код нужно сравнить с «лучшим кодом» из этого упражнения.И из этих сравнений сервер возвращает некоторую обратную связь, если ученик загрузил хороший или плохой код.Например: упражнение состоит в том, чтобы составить список от 1 до 10, чтобы учащийся мог загрузить свой код.Затем сервер сравнивает его с другим кодом и выдает обратную связь.

Это проще сказать, чем сделать, потому что он не может быть просто средством сравнения файлов из-за различных переменных, которые пользователь может кодировать.Вот почему я думал об использовании внешних компиляторов для получения некоторого вывода и сравнения этого вывода с выводом «лучшего кода».Или более подробно, чтобы получить хук внутри компилятора, чтобы я мог проверить каждый метод и каждую переменную.

Или любая другая идея, как я могу проверить это или сравнить?Или уже существует программа?

Большое спасибо, Майкл

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

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

Этот подход был бы намного более масштабируемым, и есть много бесплатных инструментов, особенно для c ++ и java, которыебыло бы легко настроить автоматизированную систему тестирования.

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

0 голосов
/ 02 марта 2011

Существуют системы, которые оценивают результаты всей программы (например, ejudge , она используется в качестве системы соревнований), и, на мой взгляд, их проще использовать, потому что указание условий на Программный код сам по себе не является тривиальной задачей (если ваши ученики пишут нетривиальные программы). Вы можете использовать языки формальной спецификации, такие как ACSL, чтобы установить условия ввода и вывода и доказать, что программа работает правильно.

...