HOME
home
오픈소스 컨트리뷰션 아카데미
home
⚒️

[삽질 코드] 사연1

# 멘토님 두 분과 함께 새벽까지 삽질한 사연을 소개합니다!
9월 말이었습니다. 저희 팀은 UTF-16 캐릭터셋 인코딩/디코딩 클래스 개발을 맡게 되었습니다. 라이브러리는 TDD로 개발되었기 때문에 클래스 구현에 앞서 유닛 테스트와 관련된 코드를 먼저 작성할 필요가 있었습니다. 그래서 저는 팀원 분들이 바로 클래스 개발을 시작할 수 있도록 먼저 유닛 테스트 관련 코드를 작성하고 빌드해두려고 했습니다.
그런데 열심히 테스트 코드를 만들고 UTF-16 클래스를 stub으로 둔 채 빌드를 해보니 유닛 테스트는 통과하는데 project build는 실패하는 것이었습니다. 출력된 에러 메시지를 구글링하고, 새로 추가된 코드를 다시 살펴봐도 도통 원인을 알 수 없었습니다. 이렇게 구글링하길 3시간이 지났을까요? 오후 5시가 되었고, github discussion에 시행착오 내역, 빌드 에러 메시지, 현재 환경, 코드 등을 자세히 적어 도움을 구했습니다.
업로드 후에 여러 멘티님이 관심을 보여주셨습니다. 오후 8시가 되자 멘토님 두 분이 discussion에 참전해주셨고 코드에서 특정 부분을 수정해보거나 build cache나 gradle cache를 제거해보는 등의 다양한 제안을 주셨습니다. 하지만 문제는 해결되지 않았습니다. 오후 10시에는 멘토님 환경에서도 문제를 재현하기 위해 코드가 이리저리 날아다녔고, 문제가 재현되지 않자 각자 브랜치를 만들어서 서로의 환경에서 테스트를 해보기도 하였습니다. 이렇게 계속 테스트를 하던 중, 밤 12시 30분에 드디어 한 멘토님이 문제 재현에 성공하셨고 해결의 실마리를 찾을 수 있었습니다.
문제 재현에 성공한 멘토님의 기기와 실패한 멘토님의 기기의 Android API 수준이 달랐던 겁니다. 그래서 API 버전을 의심하기 시작했고 이를 바꿔가며 테스트하기 시작했습니다. 그렇게 1시까지 열심히 테스트하였습니다. 하지만 테스트 결과 같은 API 버전인데 성공할 때도 있고 실패할 때도 있었습니다. 그렇게 또다시 테스트를 반복하였고... 결국, 새벽 2시에 정확한 조건을 알아냈습니다. 바로 API 28에서 gtest의 test case 수가 227개 이상일 때 기기에서 segmentation fault가 발생해서 build에 실패하던 것이었습니다. 아뿌