본 논문은 나폴리 페데리코 II 대학교 운영체제 수업에서 시행된 정적 분석을 활용한 시스템 프로그래밍 과제 자동 평가 사례 보고서입니다.
시스템 프로그래밍은 동시성 및 자원 관리 측면에서 기존의 자동 평가 시스템으로는 정확하게 평가하기 어려운 문제점을 지니고 있습니다. 특히 테스트 케이스 실행만으로는 재현하기 힘든 동시성 및 자원 관리 버그는 시스템 프로그래밍 교육 과정에서 학생들의 코드를 정확하게 평가하고 피드백을 제공하는 데 큰 어려움을 야기합니다. 본 연구는 이러한 문제점을 해결하기 위해 맞춤형 정적 분석을 활용한 자동 평가 방식을 제안하고, 실제 교육 현장에서의 적용 가능성과 효과를 검증하고자 합니다.
본 연구에서는 GitLab 및 GitHub Classroom 환경에서 시스템 프로그래밍 과제를 설계하고, Semgrep을 활용하여 과제별 맞춤형 정적 분석 규칙을 개발했습니다. 학생들은 제공된 템플릿 코드를 기반으로 과제를 수행하고 코드를 제출하며, 제출된 코드는 자동으로 빌드, 실행, 정적 분석 단계를 거쳐 평가됩니다. 각 단계별 평가 결과는 학생들에게 피드백으로 제공되어 코드 개선을 돕습니다.
과제는 세마포어, 모니터 구조, 스레드, 메시지 큐 등 다양한 동시성 및 자원 관리 개념을 다루도록 설계되었으며, 각 과제는 여러 개의 프로그램으로 구성됩니다. 템플릿 코드는 프로그램의 기본 구조, 함수 프로토타입, 동기화 및 자원 관리 코드가 없는 비즈니스 로직을 포함하고 있으며, 학생들이 과제 수행에 필요한 부분을 명확히 파악할 수 있도록 "TBD" 주석을 제공합니다.
Semgrep을 사용하여 과제별 맞춤형 정적 분석 규칙을 YAML 기반의 도메인 특화 언어로 작성했습니다. 이 규칙은 소스 코드에서 특정 패턴을 감지하고, 예상되는 코드 구조 및 API 사용의 정확성을 검증합니다. 예를 들어, 세마포어 할당 및 초기화, 동기화 API 사용 순서, 자원 관리 시스템 호출 사용 등을 검사하는 규칙을 포함합니다.
실험 결과, 정적 분석을 통해 기존의 동적 검사(테스트 케이스 실행)로는 찾기 힘든 상당한 양의 시스템 프로그래밍 오류를 효과적으로 감지할 수 있었습니다. 특히 첫 번째 과제에서 정적 분석을 통해 높은 비율의 오류가 발견되었는데, 이는 학생들이 시스템 프로그래밍 및 시스템 호출에 익숙하지 않아 발생하는 오류를 정적 분석이 효과적으로 감지했음을 시사합니다.
본 연구는 맞춤형 정적 분석이 시스템 프로그래밍 교육에서 학생들의 코드를 정확하게 평가하고 상세한 피드백을 제공하는 데 효과적인 방법임을 보여줍니다. 특히 테스트 케이스 실행만으로는 감지하기 어려운 동시성 및 자원 관리 버그를 효과적으로 찾아내어 학생들의 시스템 프로그래밍 이해도 향상에 기여할 수 있습니다.
Egy másik nyelvre
a forrásanyagból
arxiv.org
Mélyebb kérdések