Little Jay

[Study] 코드 표절검사 by Stanford Moss 본문

Univ/Study

[Study] 코드 표절검사 by Stanford Moss

Jay, Lee 2022. 5. 18. 19:13

 최근에 알고리즘 수업을 들으면서 Kruskal Algorithm을 기반으로 한 Strongly Connected Component를 구하는 과제를 수행했었다. DFS를 두번 수행하는 이 알고리즘은 구현의 난이도가 Tarjan's Algorithm보다 쉽기때문에 인터넷에 많이 올라와 있었다. 그래서 내 코드의 표절률에 대해 궁금해졌고, 비교군의 파일 하나와 내 코드를 비교해보았다.

 

이 방식은 인도인 유튜브에 있는 방식을 한글로 받아 적고, 다른 곳에서 정리된 것을 내가 모은 것임을 알리고 시작한다.

https://www.youtube.com/watch?v=5CyOTf2DHSg 

 먼저 moss@moss.stanford.edu 에게 메일을 보내야한다

제목은 상관없고 본문에

registeruser

mail 자기이메일

이 양식대로 본문에 써서 보낸다.

 

 3개정도 메일을 돌려보았는데, 네이버와 학교 이메일로는 답변이 오지 않았고, gmail에만 답변이 왔다.

답변이 오면 아래와 같이 메일이 왔을 것이다

 이 메일을 보면 cut here 이라고 나와있는 부분 전체를 복붙해서 moss.pl이라고 저장한다.

txt 파일에 모든파일 저장 형태로 저장을 하면 확장자에 맞게 바뀌게 된다. 

 

 그 다음 할 일은 폴더를 하나 만들어서 비교군의 파일과 moss.pl파일을 저장한다. 

이때 모든 이름은 ASCII 코드로 저장되는 형식이라 파일들의 한글 이름을 쓰면 제대로 실행이 되지 않는다.

 

 .pl파일은 윈도우 환경에서 바로 실행이되지 않기때문에 윈도우환경에서 UNIX System의 환경을 지원해주는 Strawberry Perl for Windows를 설치한다. 이를 직접 설치하지 않고 Portable버전으로 설치할 수 있는데, 뭘 까는 것보다는 이렇게 하는 것이 더 편해서 Portable 버전으로 하는 것을 추천한다. 

https://strawberryperl.com/releases.html

 

Strawberry Perl for Windows - Releases

 

strawberryperl.com

 위의 링크에서 5.28.2.1 버전을 본인의 환경에 맞게 다운로드 한 후 ZIP 파일을 C드라이브에 myperl 이라는 이름의 폴더에 저장해준다. Strawberry Perl은 portableshell 파일을 실행시키면 커맨드 창이 뜨게 된다. 자세한 설명은 README에 나와있다. 

 

 perl의 커맨드 창에 들어오게되면, 아까 코드와 moss.pl이 들어있는 디렉토리로 이동해야 한다. cd ../를 입력하여 C드라이브로 나가고, 다시 cd ./디렉토리이름 커맨드로 입력해 그 디렉토리로 이동한다. 이동을 했으면 마침내 moss.pl을 실행시킬 차례이다. 명령어는 아래와 같다. 

perl moss.pl -l cc temp1.cpp temp2.cpp

 perl은 perl을 실행시킨다는 의미이고, moss.pl은 moss파일을 실행한다. -l 은 language option을 주는 것인데, cc는 c++을, c는 c를, java는 java파일을 의미한다. 이 코드를 치게 되면 조금 기다리면 moss.stanford.edu로 시작하는 사이트가 나오는데 그것을 복붙해서 chrome이나 edge에 치게되면 표절률에 대한 검사를 보여준다.

 위의 그림은 Strawberry Perl을 실행한 결과이고, 그 아래의 그림은 표절 검사된 부분이다. 지금 노트북의 인코딩이 좀 잘못되서 그러는데 이게 왜 이런지는 잘 모르겠다...... 여튼 예전에 내가 만든 코사라주 알고리즘 파일과 비교를 해보니까 각각 파일에서 16, 22퍼센트의 표절률이 검출되었다. 코드를 표절이 의심이 가는 부분에 대해서 저렇게 색깔을 표시해주는데, dfs를 수행하는 부분, Digraph를 전치하는 부분, 두 번째 dfs를 수행하는 부분에서 표절이 의심이된다고 나와있다. 사실 그럴 수 밖에 없는게, dfs를 수행하는 부분은 recursive하게 visit하고 stack에 push해주는 것이고, 그래프의 방향을 전치해주는 부분도 단순히 거꾸로 push_back해주면 되기때문에 크게 표절이라기 보다는 이렇게 수행할 수 밖에 없을 것 같기 때문에 넘어갈 수 있을 것 같다.

 아쉬운점은 이게 전체 인터넷에 공개된 코드를 분석해주는 것이 아닌 비교군과 대조군에 대한 차이를 분석해주는 거라 copy killer처럼 전체 코드와 비교하는 것이 아니라 아쉽다. 근데 또 그렇게 되면 github같은 클라우드도 참조할텐데, 표절이 안걸릴 수 있나?라고 생각이 되기는 하다. 

 여튼 오늘의 포스팅은 여기서 마치겠다. 

 

Comments