garbages

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ garbages ] in KIDS
글 쓴 이(By): cookie ()
날 짜 (Date): 2011년 07월 30일 (토) 오전 06시 26분 43초
제 목(Title): 교육정보시스템 NEIS의 성적처리 오류..


며칠전에 교육부의 교육행정 정보시스템 NEIS 가 오류를 일으켜 
수만명의 학생들의 성적을 잘못 처리하는 대형사고를 쳤다.
NEIS의 개발사인 삼성 SDS는 이를 일개 프로그래머의 잘못으로 
돌리며 면피를 하고 있는데 이는 잘못되어도 한참 잘못된 거다.

프로그래머는 인간이고 원래 실수를 하게 되어 있다.
아무리 유능한 프로그래머도 실수를 한다. 그러므로 개발관리나 설계는 
프로그래머는 실수한다는 것을 전제로 세워져야 한다.
그래서 그런 가능성을 줄이고 실수를 잡아내기위해 
여러단계에 걸친 설계나 시험, 공정관리 품질관리를 하는 거다.

그러니 한 개인이 뚝딱뚝딱 만든 토이 프로그램이 아니고 한 개발 조직의
성과물이라면 어떤 오류이건 그건  프로그래머의 실수를 원인이라고 
해서는 안되고 그런 실수를 최소화하고  또  이를 철저하게 탐지하고  
교정할수 있는 개발 체제 관리체제가 감리체계가 제대로 작동하지 않은것이 
원인이라고 해야 옳다.

삼성 SDS라면 적어도 SI 업계에선 우리나라 최고의 기업중에 하나이고 
인력의 수준이나 개발 체계에 있어서도 우리나라에선 최고수준의 
기업인걸로 알려져 있는데 이런 기본적인 오류가 걸러지지않고
이정도의 대형사고를 치다니 어이가 없다.
 
더구나 오류를 처음 알아차린건 일선학교에서 손으로 계산해보고 
뭔가 이상하다고 교육청에 문의를 해서 오류를 알게 되었다는데 
그말은 그 성적처리 대해 쉽게 손으로 검증해볼 수 있는 
기본적인 sanity check 도 해보지 않았다는 거다.

당국자의 설명이 기술적으로 정밀하지 않아서 확신 하기는 어렵지만 
대략 학생 성적을 처리하는 데 그걸 부동 소숫점 으 로 처리한 모양이다.
그래서 두 부동소숫점을 비교하니 같다고 나와야할 두 성적이 
다르게 판단되어 소팅등에 문제가 생긴 거 같다.

그런데 이런부동소숫점 크기 비교 에러는 기초적인 프로그래밍 과정에서 반드시 
가르치는 기본중에 기본이고 가능한 사용하지 않도록 가르치고 있다.
경력 6개월 미만의 초보도 하지 않을 기본적인 실수라는 거다.
이런 기본적 실수를 잡아내지 못했다는 건 거의 사보타지 수준이다.
이게 진짜 원인이라면 정말 더 미묘한 잡아내기 어려운 에러는 
얼마나 더 많을지 상상도 가지 않을 정도이다.

그런데 상식적으로 시험성적이나 돈계산 같이 정확성을 중시하는 값을  
부동소숫점으로 표현 하는 것 자체가 중대한 설계 에러다.

그래서 은행이나  회계 프로그램 따위에선 부동소숫점은 거의 쓰지 않고
정수나 BCD 숫자 (decimal number) 를 쓰는게 일반적이다.
이자 계산 등으로 인해 소숫점이 발생하지만 그것도 BCD 숫자로 
표현해서 쓰기 때문에 위와 같은 비교 에러는 생기지 않는다.
Database 등에서도 DECIMAL이라는 형을 따로 가지고 있는게 대부분이다.
이건 프로그래머라면 누구나 아는 상식중에 상식이다.

그러니 이건 프로그래머 에러가 아니라 원래 SDS의 시스템 설계 
자료 구조 설계,  DB 설계 오류이다. 그것도 아주 기본적인. 
이걸 프로그래머 에러라고 하는 건 완전히 잘못된 원인진단이다.

 fractional number 가 발생하는 시스템이라면 설계 자체에 
그 소숫점을 몇자리에서 어떻게 처리해야 하는지 상세하게 
정의하고 설계에 반영했어야 옳다. 

이런 기본적이고 상식적인 ABC도 되어 있지 않은게 대한민국 최고의 SI 업체 
의 현실이라니 너무 비현실적이어서 기이한 음모론의 느낌 마저 들 정도이다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.