마이크로소프트(MS)가 일부 소프트웨어에 숨어있을 윤년 버그에 대한 가이드를 공유했다.
3일(현지시간) 미국 지디넷에 따르면, MS 수석 소프트웨어 엔지니어 맷 존슨은 마이크로소프트 애저 블로그를 통해 윤년 버그 예방법을 소개했다.
올해는 1년 일수가 366일인 윤년이다. 윤년은 주로 C나 C++ 기반 소프트웨어에서 심각한 버그를 초래한다.
맷 존슨은 “윤년은 대부분의 사람에게 단지 하루를 더 지내는 것에 불과하겠지만, 소프트웨어 개발자에게 심한 고통을 야기할 수 있다”며 “만약 이제 막 윤년 버그를 당신의 코드에서 검사할 생각이었다면, 더 빠르게 움직여야 한다”고 밝혔다.
그는 체크사항을 3가지로 요약했다.
▲데이터 레인지 쿼리를 사용하는 데이터 필터링에 관련한 사소한 실수로 발생하는 논리적 오류(off by one)
▲예상치못한 혹은 원하지 않은 움직임
▲잠재적인 예외(exceptions), 고장(crashes), 엣지케이스(edge case)
존슨은 “유닛 테스트는 여러 경우에 충분치 않다”며 “개발자의 코드가 클라우드에 있든 아니든 문제는 계속 나타난다”고 지적했다.
그는 2012년 애저 클라우드에서 일어났던 윤년 관련 작동불능 사태를 상기시켰다. 그는 당시의 경험을 바탕으로 조언을 한다는 점이라고 강조했다.
그는 “윤년 버그는 어떤 언어, 어디서든 발견될 수 있지만, 대부분의 위험은 C/C++ 코드에 있다”며 “애플리케이션 고장이나 보안 위험인 버퍼 오버플로우를 야기할 수 있다”고 적었다.
C/C++에서 ‘연(years)’을 추가하거나 제거한 코드, 1년 각 날짜값의 배열을 선언한 코드 등은 윤년 문제에 영향받기 쉽다.
2월29일만 윤년으로 영향받는 게 아니다. 12월 31일도 1년 전체 일수를 366일로 계산하지 못해 문제를 일으킬 수 있다.
윤년 버그로 인한 사건으로 2012년 MS 애저 중단, 톰톰GPS 탐색 버그, 2010년 소니 플레이스테이션네트워크(PSN) 중단, 2008년 MS 준 디바이스 벽돌버그 등이 거론됐다.
2012년 MS 애저 중단 사태는 인증서 만료일을 잘못 계산해 12시간 동안 서비스를 불능상태에 빠뜨렸다.
톰톰 GPS 탐색 버그는 현재위치를 식별하지 못해 발생했다. 2010년 PSN 중단 사태는 시스템이 2010년을 윤년으로 잘못 인식해 벌어졌다. 2008년 MS 준 디바이스 벽돌 버그는 12월31일 인식에 따른 논리적 오류였다.
그는 30년된 로터스 1-2-3의 1990년을 잘못 계산하는 문제가 오늘날 MS 엑셀에도 영향을 미치고 있다고 적었다.
관련기사
- B급 코드 가득..."정말 MS 광고 맞아?"2016.02.04
- MS, 바닷속 데이터센터 구축 실험2016.02.04
- 'IBM vs MS' 기업 클라우드 시장 승자는?2016.02.04
- MS, 교육용 마인크래프트 ‘C++’로 개발2016.02.04
그는 3가지 원인별로 코드에 어떤 문제를 담고 있는 지 설명하고, 몇가지 예방법을 들며 정밀하게 코드를 살펴보라 조언했다. 유닛 테스트에서 1년 전체의 일자를 가상으로 넣어 검증하라고 덧붙였다.