-
Pull request를 날려보다!체험록 2019. 11. 3. 01:18
Discover RA-SZZ repository
이번 여름방학동안 SZZ 알고리즘(BFC(Bug Fixing Commit)으로부터 BIC(Bug Inducing Commit)을 알아내는 알고리즘)에 대해 약 10년 전 나온 최초의 논문부터 가장 최근의 논문까지 모두 읽고 공부했다.
가장 최근 나온 SZZ 알고리즘은 RA-SZZ (Refactoring-Awareness SZZ)인데 BIC를 찾을 때 refdiff라는 툴을 사용해서 refactoring 여부도 따져주는 SZZ 알고리즘이다.
이번 학기 내 연구의 목표는 우리 ISEL 연구실에서 개발한 BugPatchCollector (https://github.com/HGUISEL/BugPatchCollector)에서 BIC를 가져올 때 RA-SZZ를 사용해서 noise data를 줄이는 것이었다.
그래서 최근 몇 주간 아래 repository를 clone받아서 계속 코드 분석을 하고 있었다.
https://github.com/danielcalencar/ra-szz
하지만 최근 RA-SZZ 개발하신 분들이 raszzprime이라는 repository(https://github.com/danielcalencar/raszzprime)를 만들었다는 것을 발견했고 친절한 README로부터 그것이 현재 개발중이거나 어느 정도 개발을 마친 오픈소스 라이브러리임을 알 수 있었다.
Two kinds of problems
README를 따라 build하려 했지만 type-casting과 encoding 문제로 build에 실패했다.
encoding관련 에러 메시지들을 읽어보니 UTF-8로는 mapping이 불가능한 character라고 한다.
대충보니까 포르투칼어나 스페인어 그 쪽 언어같았다.
Approach to solving encoding problem
처음에는 포르투칼어, 스페인어 인코딩 형식을 검색해보려고 했다. 하지만 이내 굳이 그럴 필요가 없을지도 모른다는 생각이 들었다. 왜냐하면 아래와 같이 Atom에서 encoding auto detection을 지원해주기 때문이다.
그래서 해당 코드를 그대로 빈 파일에 복붙한 후 auto detect을 이용하면 어떤 encoding 형식을 사용해야 하는지 알 수 있으리라 생각했다. 그래서 그렇게 해보니 "Windows-1252"라는 encoding 형식이 선택되었다.
각 module들을 build할 때 build.xml이 사용되는데 java로 작성되었으니 javac 부분이 있을 것이고 그곳에 encoding 형식을 Windows-1252로 지정해주면 해결되리라 생각했다. 그래서 아래와 같이 모두 수정했다.
그리고 다시 build해보니 모두 BUILD SUCCESSFUL이다!
Approaches to solving type-casting problem
아래는 type-casting과 관련된 에러 메시지이다.
읽어보면 Enumeration<TreeNode>가 Enumeration<DefaultMutableTree>로 convert될 수 없다고 한다.
난 Enumeration, TreeNode, DefualtMutableTree 아무것도 모른다. 하지만 겁낼 필요가 전혀 없다. 우리에겐 javadoc이 있기 때문이다. 일단 해당 파일을 열고 TreeNode, DefulatMutableTree라는 class 혹은 interface가 어떤 라이브러리로부터 왔는지 확인했다. 그 결과 아래와 같이 Swing으로부터 왔다는 것을 알 수 있었다.
그래서 swing javadoc을 구글링해서 아래와 같은 javadoc을 찾았다.
https://docs.oracle.com/javase/8/docs/api/javax/swing/tree/TreeNode.html
https://docs.oracle.com/javase/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html
javadoc을 통해 TreeNode가 DefaultMutableTreeNode의 super class라는 것을 알 수 있었고 그래서 아래와 같이 code를 수정했다.
그리고나서 다시 build해보니 아름다운 BUILD SUCCESS를 볼 수 있었다.
Let's do the pull request!
이제 pull request를 날릴 모든 준비가 끝났다. 내 repository에 fork한 후 코드를 수정해서 push했다. 그리고나서 아래와 같은 pull request를 날렸다! 이제 개발자로부터 답장이 오길 기다려야 한다. 제발 merge되고 contributor 명단에 내 이름을 올려줬으면 좋겠다.
제바라ㅏㅏㅏ라아ㅏ아알~~~~
https://github.com/danielcalencar/raszzprime/pull/1
+) I got a reply!
2019년 11월 13일에 daniel로부터 답장이 왔다.
답장 전문은 아래와 같다.
daniel은 아래와 같은 두 가지 이유로 내 pull request를 close했다.
먼저 그는 내가 언급한 error들을 생산할 수 없다고 했다. 즉, 본인은 제대로 작동한다는 것이다.
마지막으로 내가 추가한 windows encoding (정확히는 Windows-1252)가 mac user같은 경우 문제가 생길수도 있다고 했다.
전부 맞는 말이지만 그래도 아쉬운 마음이 가시지 않는다 :~(
그래도 daniel같은 박사님 (아마?)께서 나중에 UTF-8 encoding도 추가한다고 하셨고 연구 열심히 하라고 격려도 해주셔서 기분이 좋다 히히헤헿
'체험록' 카테고리의 다른 글
face-api.js 체험기 (0) 2019.07.30