소프트웨어 버그에 관한 단상

recypace의 이미지

모든 소프트웨어는 bug를 가지고 있다는 일반적인 전산학적
통계를 굳이 인용하지 않더라도 우리는 많은 bug들과
씨름하게 된다.
모든 사람들이 한번쯤 겪게 되는 편집하던 문서를 날린다던지
걸어 놓은 작업이 error때문에 날라간다던지.
오늘은 그중에 한가지 의문점을 제기하고자 한다.

얘기하고 싶은 문제는 바로 우리는 그 bug로 인하여
필요 이상의 피해를 본다는 것이다. 문서를 편집한다고 하자.
지금 현재 version에도 있는 powerpoint에서 객체 삽입시
그냥 powerpoint가 죽어 버리는 예를 보자. 우리가 그렇게 몹쓸짓을
했는가? 아니다. 우리는 단순히 객체를 넣고 싶었을 뿐이다.
근데 이 동작때문에 멀쩡하게 우리가 타이핑하고 우리가 이쁘게
꾸민 모든 행위들은 무시된다. 이게 말이나 되는가?
객체를 넣어 주기 싫으면 싫다고 할것이지 말이다.

그렇다면 좀더 깊이 들어가보자. 지금의 software들은 너무
직접적으로 핵심에 기능에 반영된다. 즉, 기능의 중요도에 상관없이
연관성에 상관없이 핵심 data들을 마구 건드린다는 것이다.
만일 객체 삽입이라는 것이 쪼금만 신중해 주었다면 우리는
다른 data를 잃어 버리지 않았을 것이다.

이러한 문제는 내가 보기에 2가지 측면에서 문제가 있다.
즉, 구현자는 자신이 구현한 기능이 완벽하게 동작할 것인양
수행 동작들을 너무 바로 바로 핵심 기능에 적용해 버린다.
만일 조금이라도 자신이 틀릴 수 있다고 생각했다면 뭔가
대책을 세웠을 것이다. 마치 지금의 자동 저장 처럼.
이것은 depensive programming과 일맥 상통할 것 같다.
하지만 이것은 뭔가 부족하다. 그리고, 내가 원하는 solution은
결코 아니다.

내가 원하는 것은 실패하더라도 죽지 않는 생명력 강한 놈을
원하는 것이다. 그렇다면 compiler나 OS가 담당해 줄 수 있을까?
현재도 java를 보면 exception이 나더라도 application이 죽지는
않는다. 그 기능을 수행하다 실패 했지만 우리는 그 후에도
저장이나 편집을 할 수 있다. 이때 중요한게 되도록이면
반영을 늦추자는 것이다. java또한 핵심 data를 건드리다 실패하면
문론 상처 받은 data가 되어 버려 살아있는 의미를 잊어버린다.
하지만 우리가 핵심 data에 대한 접근을 일정 경로를 통하여
신중하게 반영한다면 반영전에 난 오류때문에 핵심 data를 잃어 버릴
염려가 없어진다.

이러한 생각을 정리해 봤을때 software의 구현시 우리는
핵심 data에 대한 접근을 아주 신중하게 할 필요가 있다. 그리고
많은 방패들을 만들어야 한다. 즉, 핵심 기능은 되도록 작은
범위로 가장 신경써서 구현해야 한다는 것이다.
기능의 우선순위 및 중요도를 반영한 coding이라야 한다는 것이다.
또한 compiler들은 이와 같은 접근방법을 충분히 지원해 줄 수 있어야
한다. (아마도 지금 C, C++와 같이 native code인 경우라면
우리는 다른 process를 생성하여 부수기능을 수행해야 핵심
기능이 보호 될 지 모르겠다.) 그리고, OS는 나몰라라하면서 확실히
죽여 줄께 하는 task manager 이따위나 지원하지 말고 어떻게
해서든 살려보려는 노력을 해야 한다. 죽여 가는 놈 확실히 죽이면
자기 탓이 아닌가?

마우스 click한번 잘못했다고 내가 한 수만가지 행동이 무시되는게
말이나 되는가 말이다.

ps. 제 weblog용으로 편집을 해서 column이 좁은거 이해해 주세요. :-)

jedi의 이미지

버그라는것 보안 버그를 포함하여
이것둘이 주목 받은 것은 얼마 안되는 것 같습니다.

전에 해커스렙에서 빌 게이츠에 관한 글을 읽을때
빌이 "사람들이 버그 퇴치에 더 관심이 더 많은가, 아니면 신기능에 더관심이
더 많은가, 더블어 어느쪽이 더 돈벌이가 되는가 우리는 돈이 되는 것을 하겠다."
라는 내옹의 예기를 하는 것을 보았습니다.
그래서 그는 엄청난 부자가 되었지요...

실제로 버그 패치를 되 받고 팔 수 있나요?
당연히 불가능 하겠죠?
하지만 신기능은 다르죠. 돈 받고 팔거던요..

개인적인 생각이었습니다...
더불어 앞으로는 버고 패치도 주목 받고 있으니 기대해 보는것도 가능할듯 한데..

+++ 여기부터는 서명입니다. +++
국가 기구의 존속을 위한 최소한의 세금만을 내고, 전체 인민들이 균등한 삶을
영위할 수 있는 착취가 없는 혁명의 그날은 언제나 올 것인가!
-- 조정래, <태백산맥> 중에서, 1986년

lsj0713의 이미지

프로그램을 한번이라도 짜보셨다면, 왜 버그없는 프로그램이 불가능한지 금방 이해하실 수 있을 겁니다. -_-;; 제가 짜본 프로그램 중에서 가장 긴 프로그램은 PHP게시판으로, 소스길이가 압축해서 고작 120KB밖에 안됩니다만, 짜고 있자니까 내가 코드인지 코드가 나인지 환상과 현실의 경계가 점차 허물어 지더군요-_-;;

하물며 모질라 소스 코드의 경우에는 용량이 27MB가 넘습니다. 소설책 한권이 300KB라고 치면, 90권이란 얘기입니다. 90권 분량의 소설을 쓰면서 오타 하나 없이 쓸수 있습니까? -_-;; 프로그래밍에서는 작은 오타 하나도 치명적이고 찾기도 힘든 오류와 연결될 수 있습니다.

오타가 없었다고 하더라도, 수백개가 넘는 변수, 함수, 클래스간의 상관관계를 모두 다 완벽하게 이해하고 파악하지 못하면 숨겨진 오류는 얼마든지 발생할 수 있습니다. 인간의 능력으론 도저히 역부족이죠-_-;;

할수 있으면 왜 안하겠습니까-_-;; 우리가 모두 가우스나 아인슈타인 같은 천재가 아닌 만큼, 어쩔수없는 한계라는게 존재합니다. -_-;;

recypace의 이미지

바로 그 Bug가 있을 수 밖에 없는 점 때문에 멀쩡하게
잘 짜여져서 돌아가고 있는 소프트웨어의 다른 부분들이
보호받을 방법이 필요하다는 것이죠. :D

maylinux의 이미지

에러처리가 없는것은 아니지만.. 에러처리부분에서도 또한 버그가 있을수밖에 없다고 생각합니다..

소스가 길어지면 길어질수록 에러처리부분이 많아집니다..

30%가 실행루틴이라면
70%가 에러처리루틴이라더군여..

(전 이렇게까지 많이 필요한거 짜본적은 없습니다만...그렇다고 하더군여)

아무리, 에러처리부분을 늘린다고 할지라도...
그 에러처리부분또한 버그가 있고.. 버그의 버그가 숨어있는 현상은 계속이어질것이라고 생각합니다...

버그가 없는 프로그램은..없습니다..

단지 버그가 상대적으로 적은 프로그램이 있을뿐이지여.

그리고.. 다른부분이 보호받는 방법이라면...
다른프로그램을 사용하지 않고, 자체로만 돌아간다면 가능하겠지만..
효율적으로는 나쁘다고 생각합니다.

사실 그래서, 기본명령어, 기본유틸외에는 자체로만 돌아가는것은 거의 없지여

그러므로, 다른부분을 같이 사용하게 되고, 그렇다보니
버그에 의해서 다른 프로그램도 영향을 받게된다고 생각합니다...

버그는 줄일수 있지만.. 없앨수도 없다..

그래서, 매트릭스의 네오도 없앨수없다??
(뭔 소리여?)

아바타 제작기간~~ 무려 5초!!!