PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/11/10 23:09:02
Name 무제
Subject 치팅 검사 프로그램에 대해서

주로 프로그래밍 코드를 짜는 과목에서 다른 사람 코드를 베꼈나 안 베꼈나
어떤 프로그램을 돌려서 확인을 한다고 하는데요,

교수님이 말씀하시기를 변수이름 바꾸는건 당연하고 코드가 작동하는 구조를 조금 변경한것이라도
남의 것을 베낀것이라면 100% 잡아낼 수 있다고 자신하십니다. 미국 대학에서 널리 쓰인다고 하는데..

그런 프로그램들이 어떻게해서 치팅을 잡아내는지 그 원리가 궁금합니다.

ps. MOSS 말고도 유사한 프로그램이 있나요? 있다면 그 원리는 어떤것인가요.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
포프의대모험
09/11/11 01:41
수정 아이콘
어엄청 복잡한게 아니라면 짜는 과정에서 상당히 비슷해질 수 있을거같은데 의도한거랑 아닌거랑 구별해낸다는게..
프로그래밍쪽은 잘 모르지만 고등학교 선생님들이 흔히 써먹으신
"훼이크다 비읍시옷드라!" 아닐까 조심스레..?(피해의식에 찌들었음 ㅠㅠ)
이디어트
09/11/11 01:51
수정 아이콘
치팅프로그램이랑 같은 구조인진 모르겠지만, 저희학교는 레포트 검사기가 있습니다.
워드파일로 낸 레포트를 글자가 얼마나 똑같은지로 검사를 하는 원리인데요..
(문단 위치좀 바꿔주고, 글자 크기, 자간, 스타일 따위는 바로바로 들통난다고 하네요)
저희학교에선 교수님들에게 배포했다고 하더군요.

이런 원리랑 같은거라면.. 프로그래밍을 안해봐서 잘 모르겠네요;;

글 같은거라면 남의것을 배끼는게 글자같은거만 봐도 충분히 알수있다고 생각되긴 하지만..
프로그래밍은 전혀 다른사람 두명이 짠다고 완전 다른 알고리즘을 가져가나요??;;
그렇게 복잡한 프로그래밍을 해본적이 없어서..
주로 프로그래밍 짜는 수업이라면 전공이 프로그래밍 짜는건 아니고, 교과 커리큘럼안에 있다는 말씀 같은데.. 그런 수준이라면 좀 쉬운 문제가 나온다고 생각이 되는데..
만약 그런식으로 단순한 알고리즘이라면 교수가 내민 카드는 노페어로 뻥카치는게 아닐까 싶네요..

전공 수준으로 어렵게 낸다면.. 배낀거 백퍼 들킬수도 있다고 생각합니다;;
MoreThanAir
09/11/11 03:07
수정 아이콘
원리야 뭐 코드의 진행방식 (루프의 위치나 변수의 할당 위치 등등) 해서 구조적으로 파악하는 것이겠죠. 그렇게 때문에 변수 이름 몇 개 바꾼다고 소용도 없을껍니다. 일종의 Machine learning방식으로 여러 데이타를 축적해서 표절을 판별할 수도 있을껍니다.

참고로 뻥카는 아니니깐 절대 베낄 생각은 하지 마세요. 제가 걸려봐서 압니다. 지난 학기 네트워크 과목 들었던 선배코드를 참고로 해서 IP를 정수에서 스트링으로 바꾸거나 등등의 기본적인 툴 함수만 몇 개 가져다 썼는데도 교수가 작년 들었던 그 선배 아이디까지 바로 알고 그 사람이 누구길래 코드를 준거냐고 다그치더군요. 프로그램 뼈대는 베낀 것이 아니고 간단한 툴함수만 가져다 썼다고 해서 겨우 academic integrity 문제로는 안 넘어갔습니다만 조심하셔야 합니다.

프로그래밍언어도 우리가 일반적으로 쓰는 언어보다 훨씬 간단한 언어형태이니 충분히 베낀걸 잡아낼 수 있습니다. 우리가 쓰는 복잡한 언어로 쓰는 논문 등도 표절을 찾아내는 소프트웨어가 있거든요. 재미삼아 말씀드리면 얼마 전 타임지 기사에 표절을 잡아내는 소프트웨어를 이용하여 세익스피어의 새로운 소설을 찾아내었다는 내용도 있었습니다-
정신놓은너구
09/11/11 07:04
수정 아이콘
해당 프로그래밍 언어의 스캐너 및 파서를 구현해서 AST(abstract syntax tree) 를 생성한 다음, 축적된 여러 데이터와 비교해서 유사도를 측정하는 방식으로 알고 있습니다. 뭐 억지로 예를 들자면 영어에서 보면 1형식 부터 5형식(...이었던가;;) 문장 구조가 있지 않습니까. 프로그래밍 언어 또한 그 빌어먹으실 노암 촴스키 교수의 언어학에서 기반하기 때문에 소스에서 해당 프로그래밍 언어의 문장 구조를 분석한 다음 그걸 매치시켜 보는거죠.

단순히 글자 매칭이나 라인 별 매칭이 아니라 프로그램 구조에 대한 비교이기 때문에, 탐지율은 상당히 높습니다. 뭐, 아예 작정하고 바꾼다면 안걸릴 수는 있습니다만 그런 수고를 할 능력과 시간이 있다면 차라리 직접 소스를 짜는게 훨씬 스트레스 덜 받을 겁니다.;;;;
목록 삭게로! 맨위로
맨 위로