2010년 9월 1일 SAC OOPS 논문 뒷얘기
몇 달의 삽질을 통해 오늘 (정확히는 9시간 전에) 지금껏 교수님과 함께 열심히 쓴 논문을 SAC OOPS 2011에 submit했다.
우리 연구실 사람들이 연구하는 주제는 기본적으로는 셋 다 포트리스에 대한 것이라는 점에서는 동일한데, 세부적으로는 상당한 차이가 있다. Formal semantics를 증명 보조기로 기계화하는 쪽도 있고, 언어 코어에 새로운 기능을 집어 넣는 사람도 있는데, 나 같은 경우 순전히 언어 내부를 안 들여다 보고 내부의 겉 기능을 가지고 뭔가를 하자는 쪽이었다. (아주 의도한 방향은 아니었는데 결국 겉 기능만 가지고 안 되긴 했다…) 그래서 얘기가 나온 것이 하스켈의 QuickCheck을 포팅하면서 좀 탐색을 해 보자…는 거였는데 최종 논문이 이 쪽으로 가긴 했다.
그래서 봄 학기 쯤에는 귀찮아서 안 쳐다 보던 하스켈 공부 좀 다시 하고, 한 번 초록(abstract)만 써 내자는 얘기를 듣고 아이디어를 급조해서 워크샵에 내 보았더니 그 워크샵이 사람 없다고 폐쇄되는 허무한 일이 일어나기도 했다. (근데 지금 생각해 보면 그 때 얘기했던 아이디어는 현재 포트리스 구현체의 상태를 볼 때 하루 이틀에 구현 가능한 건 아니었다;) 그 뒤 교수님께서 다른 워크샵에 이 주제로 논문을 내자고 하셨는데 그 때가 submission due 6주 전… 게다가 교수님은 그 기간 대부분동안 해외 출장을 가셔서 순전히 나 혼자서만 열심히 삽질을 해야 하는 상황. 뭐 그래도 어쩌나, 6주가 적은 시간은 아니지만 탐색이나 그런 걸 거쳐서 아이디어를 굳힐 만큼 많은 시간도 아닌지라 최대한 빨리 선택과 집중을 해야 했는데, 이 과정에서 앞에 썼던 대략의 초록이 도움이 되었다. 일단 아이디어는 있긴 하니까-_-; 아이디어 중에서 하기 힘들 것 같은 건 제끼고 확실히 할 수 있을 듯한 아이디어를 구체화하자, 로 가닥이 잡혔다.
그래서 6주 중 첫 주는 아마 아이디어를 굳히고 원래 초록을 가지고 논문 초안을 조금 썼던 것 같고, 그 다음 3주동안 구현을 한 뒤1 나머지 2주동안 버그 잡고 논문 마저 쓰고 했었다. 코드가 거의 제대로 돌아가기 시작한 때가 대략 due 10일 전이었고, 그 때부터 안 되는 영어로 논문 초안을 개판으로 써 놓은 뒤 교수님께서 (시간이 없으니 첨삭지도를 바로 할 수는 없고) rewriting을 하시고 내가 다시 체크를 해 보고 문제 있으면 논의하고 뭐 그렇게 진행했다. 거기에 동일한 주제로 due 사흘 후에 ROSAEC 워크샵에서 talk도 해야 해서 초긴장 상태. 다행인지 불행인지 due 당일에 1주일 연장이 되어서 조금 널럴한 환경(?)에서 rewriting 및 내부 리뷰를 끝낼 수 있었는데, 어쨌든 논문 쓰랴 코드 고치랴 발표 준비하랴 몇달치 긴장은 다 쓴 것 같다.
개인적으로는 QuickCheck이 전형적인 비방향성(undirected) 랜덤 테스팅 시스템인데 사실 이거가 방향성 랜덤 테스팅이나 일반적인 체계적(systematic) 테스팅보다 당연히 커버리지나 그런 건 낮을 수 밖에 없어서 이거 논문을 쓰긴 했는데 효용이 있을까 싶긴 했는데, 뭐 그렇다고 포트리스에서 커버리지 체크하고 어쩌구 저쩌구 하는 걸 일일이 짜고 앉아 있을 수는 없으니까2 이 방향은 진즉에 포기했고, 대신 포트리스 프로그램의 성질(property)을 기술하는 게 일반 프로그램 성질보다 좀 더 넓은 범위의 뭔가를 필요로 하고 그래서 이걸 요렇게 구현했다 식으로 서술했는데 (테스팅을 포기하고 표현력-_- 부분을 좀 강화한 셈), 먹히려나 모르겠다.
…뭐 이미 submit한 논문 가지고 이런 얘기 하는 건 뭐하니까 넋두리는 그만 하고, 결과는 10월인가에 나오니까 그 때까지는 기다려 봐야 알겠지만 일단은 쉴랜다. 근데 쉬고 싶어도 학기가 시작되어서 조교질 해야 한다. 아.
-
이것도 참 뭐한게 포트리스가 인터프리터랑 (자바 바이트코드를 타게팅하는) 컴파일러가 둘 다 있는데 전자는 구현은 잘 되어 있지만 느려 터졌고 후자는 좀 더 빠를 것 갈지만 개발 중이었다. 내가 사용해야 하는 기능은 후자에서 구현 안 된 기능을 대거 사용했으므로 전자를 써야 했는데, 포트리스 개발팀이 모조리 후자에만 집중하고 있어서 전자에 있는 버그들이 안 고쳐지고 남아 있는 게 태반… 결국 다양한 workaround를 동원해서 다 피해 가긴 했는데 막막하다. ↩
-
사실 이거 구현하면서 난수 생성 라이브러리랑 reflection 라이브러리 새로 만들었다. 표준 라이브러리에 없더라… ↩
