← 최신 논문
💻 computer science

Accelerating Accurate Assignment Authoring Using Solution-Generated Autograders

이 논문은 제공된 정답을 활용하여 수동적인 테스트 케이스 열거 없이도 정확하고 확장 가능한 자동 채점기를 자동으로 생성하는 방법인 "솔루션 생성형 자동 채점(solution-generated autograding)"을 소개하며, 이는 4년 동안 약 800개의 프로그래밍 문제를 지원하며 대규모 CS1 강의를 성공적으로 뒷받침한 Questioner 시스템을 통해 입증되었다.

원저자: Geoffrey Challen, Ben Nordick

게시일 2026-08-10
📖 5 분 읽기🧠 심층 분석

원저자: Geoffrey Challen, Ben Nordick

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

당신이 수천 명의 학생들에게 완벽한 초콜릿 케이크를 굽는 법을 가르치려는 교사라고 상상해 보세요. 예전 같으면, 모든 학생의 케이크를 채점하기 위해 당신이 직접 하나하나 맛을 봐야 했을 것입니다. 하지만 학생이 수천 명이라면 그것은 불가능한 일이죠. 그래서 당신은 대신 맛을 봐줄 로봇 요리사를 만듭니다. 이 로봇은 '자동 채점기(autograder)'입니다. 보통 이 로봇에게 무엇이 '좋은' 케이크인지 가르치려면, 당신은 방대하고 지루한 규칙 목록을 작성해야 합니다. "만약 케이크가 너무 건조하면 낙제. 너무 달면 낙제. 프로스팅이 파란색이면 낙제." 당신은 학생이 저지를 수 있는 모든 가능한 실수를 추측해서 규칙으로 적어야 합니다. 만약 단 하나라도 놓친다면, 로봇은 나쁜 케이크를 통과시키거나, 더 심하게는 당신이 '블루베리' 케이크를 위해 파란색 프로스팅도 괜찮다고 알려주는 것을 깜빡해서 완벽한 케이크를 탈락시킬 수도 있습니다. 이 규칙을 작성하는 과정은 느리고 지루하며, 종종 똑똑하지 못한 로봇을 만들어냅니다.

이 논문은 그 로봇 요리사를 만드는 새로운 방법에 관한 것입니다. 규칙의 긴 목록을 쓰는 대신, 교사는 자신이 직접 구운 '완벽한 케이크'를 단순히 로봇에게 보여주기만 하면 됩니다. 그러면 로봇은 그 완벽한 케이크를 보고 스스로 무엇이 '좋은' 케이크인지 알아냅니다. 로봇은 완벽한 케이크와 실제 실수를 구별할 수 있는지 확인하기 위해, 완벽한 케이크를 수백만 가지의 약간 '틀린' 방식으로 직접 구워보는 과정을 거칩니다. 이 방법을 '솔루션 생성형 자동 채점(solution-generated autograding)'이라고 부릅니다. 이 방식은 지루한 규칙 작성 업무를 즐거운 '틀린 그림 찾기' 게임으로 바꾸어 놓으며, 코딩을 배우는 학생들을 위한 방대한 연습 문제 라이브러리를 훨씬 빠르게 만들 수 있게 해줍니다.

문제점: "규칙 작성"의 덫

학생들이 프로그래밍을 배울 때, 그들은 수백 개의 서로 다른 퍼즐을 풀며 연습해야 합니다. 이것이 제대로 작동하려면, 교사는 학생의 코드를 즉각적으로 확인할 방법이 필요합니다. 여기서 자동 채점기가 등장합니다. 전통적으로 자동 채점기를 만드는 것은 특정 침입자만을 찾아낼 줄 아는 보안 요원을 만드는 것과 같습니다. 교사는 수동으로 테스트 케이스 목록을 작성해야 합니다. "입력이 2일 때 출력이 5라면 정답. 만약 6이라면 오답."

이러한 접근 방식에는 세 가지 큰 문제가 있습니다. 첫째, 매우 지루합니다. 당신은 학생이 실수할 수 있는 모든 가능성을 추측해야 하는데, 이는 복도에서 누군가 넘어질 수 있는 모든 방법을 목록으로 만드는 것과 같습니다. 둘째, 당신의 목록이 충분히 좋은지 알기 어렵습니다. 까다로운 실수를 놓치지는 않았을까요? 만약 모른다면, 당신의 자동 채점기는 부정확하여서 나쁜 코드를 통과시키거나 좋은 코드를 탈락시킬 수 있습니다. 셋째, 이러한 테스트 목록은 학생들을 혼란스럽게 할 수 있습니다. 테스트가 실패했을 때, 학생은 자신의 코드가 틀린 것인지 아니면 교사의 테스트 목록이 잘못 작성된 것인지 알 수 없습니다.

해결책: "완벽한 케이크" 전략

저자인 제프리 챌런(Geoffrey Challen)과 벤 노딕(Ben Nordick)은 영리한 반전을 제안합니다. 규칙 목록을 쓰는 대신, 교사는 단지 솔루션(정답 코드), 즉 문제를 해결하는 완벽한 코드를 제공하기만 하면 됩니다. 그들은 이 도구를 Questioner라고 부릅니다.

Questioner가 어떻게 작동하는지 재미있는 비유로 설명해 보겠습니다. 교사가 로봇에게 완벽하고 노릇노릇하게 구워진 케이크(참조 솔루션)를 건네준다고 상상해 보세요. 로봇은 단순히 그것을 바라보는 데 그치지 않고, 그것을 망가뜨리려고 시도합니다. 로봇은 특별한 '변이(mutation)' 도구를 사용하여 완벽한 케이크에 작고 어처구니없는 실수를 가합니다. 예를 들어 설탕 대신 소금을 넣거나, 오븐 온도를 1도 바꾼다거나, 혹은 달걀 섞는 것을 잊어버리는 식입니다. 이것들이 바로 '변이체(mutants)'입니다.

그러면 로봇은 스스로에게 묻습니다. "나는 나의 망가진 케이크와 완벽한 케이크의 차이를 구별할 수 있는가?" 로봇은 케이크를 테스트하기 위해 수천 개의 무작위 재료(입력값)를 생성합니다. 만약 로봇이 무작위 재료를 사용해 망가진 케이크와 완벽한 케이크의 차이를 찾아낼 수 있다면, 로봇은 그것이 좋은 테스트임을 알게 됩니다. 만약 차이를 구별할 수 없다면, 로봇은 구별할 수 있을 때까지 더 많은 무작위 재료를 계속해서 생성합니다.

이것이 마법입니다. 로봇은 완벽한 솔루션을 사용하여 무엇을 받아들이지 않을 것인지를 스스로 배웁니다. 로봇은 교사가 "하지 말아야 할 것"의 목록을 써줄 필요가 없습니다. 로봇은 완벽한 솔루션을 망가뜨려 보면서 어떤 일이 일어나는지 관찰함으로써 정답의 경계를 스스로 찾아냅니다.

연구 결과

연구팀은 Java와 Kotlin을 위한 Questioner를 구축했고, 이를 일리노이 대학교의 거대한 입문 컴퓨터 과학 과정에서 4년 동안 사용했습니다. 그들은 수천 명의 학생이 사용하고 수백만 건의 제출물을 평가하는 데 쓰인 약 800개의 프로그래밍 문제를 만들었습니다.

그들의 경험을 통한 핵심 요점은 다음과 같습니다:

  • 속도와 재미: Questioner를 사용하여 문제를 만드는 것은 전통적인 테스트 세트를 작성하는 것보다 훨씬 빠르고 즐거웠습니다. 한 강사는 3년 동안 매 근무일마다 약 하나의 새로운 문제를 작성할 수 있었고, 이를 통해 771개의 문제 은행을 구축했습니다.
  • 정확성: 로봇이 실제 완벽한 솔루션을 기준으로 테스트하기 때문에, 옳고 그름을 매우 잘 구별합니다. 퀴즈를 진행하는 동안 자동 채점기가 부정확해서 문제를 폐기해야 했던 적은 한 번도 없었습니다.
  • 풍부한 피드백: 시스템은 단순히 "맞음" 또는 "틀림"이라고만 말하지 않습니다. 또한 코드의 품질도 확인할 수 있습니다. 예를 들어, 학생의 코드가 (너무 많은 단계를 사용하는 등) 지나치게 복잡한지 완벽하고 우아한 솔루션과 비교하여 알려줄 수 있습니다. 심지어 수업의 목표가 재귀(recursion)와 같은 특정 기법을 사용하는 것이었다면, 학생이 그 기법을 사용했는지도 확인할 수 있습니다.
  • 까다로운 문제 처리: 때때로 무작위 재료만으로는 부족할 때가 있습니다. 예를 들어, 어떤 문제가 작동하기 위해 "88"이라는 특정 숫자를 필요로 한다면, 로봇이 우연히 그것을 맞히기는 어려울 것입니다. 이런 경우, 교사는 로봇에게 시도해 볼 몇 가지 "특별한 재료" 목록을 줄 수 있습니다. 하지만 이 경우에도 교사가 전체 테스트 세트를 작성할 필요 없이, 로봇은 여전히 완벽한 솔루션을 사용하여 채점을 수행합니다.

이것이 중요한 이유

이 논문은 우리가 좋은 자동 채점기를 만들기 위해 반드시 "테스트 케이스 열거자(test case enumerators)"가 될 필요는 없다는 점을 시사합니다. 솔루션 자체가 테스트를 생성하도록 함으로써, 우리는 훨씬 더 빠르게 방대한 연습 문제 은행을 구축할 수 있습니다. 이는 더 많은 학생이 코딩에 대해 즉각적이고 정확한 피드백을 받을 수 있음을 의미하며, 학생들이 혼란스러운 오류 때문에 막히지 않고 학습할 수 있도록 돕습니다.

저자들은 또한 이것이 Java만을 위한 것이 아니라고 언급했습니다. 그들은 이미 Python을 위한 버전인 Snapact를 개발 중이며, 초기 완벽한 솔루션을 작성하는 데 AI를 활용하는 방법도 탐구하고 있습니다. 비록 어떤 시스템도 완벽할 수는 없지만(학생이 '브루트 포스(brute force)' 해킹으로 시스템을 우회할 수도 있음), 그들의 방식은 이를 우회하기 훨씬 어렵게 만들고 교사가 고품질의 학습 자료를 만드는 것을 훨씬 쉽게 만듭니다.

요약하자면, 모든 실수를 잡기 위해 백만 개의 규칙을 쓰는 대신, 교사는 단지 정답을 로봇에게 보여주기만 하면 되고, 로봇이 나머지를 스스로 알아내도록 하는 것입니다. 이는 차세대 프로그래머를 가르치는 더 빠르고, 스마트하며, 덜 좌절감을 주는 방법입니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →