실시간 뉴스



SW에 'Silver Bullet'은 없다


 

미국에서 사용하는 용어 중에 'Silver Bullet'이라는 것이 있다. 원래는 무엇이든지 뚫는 총탄인데 만병통치약을 의미한다. 보통 획기적인 것을 찾는 사람들에게 쓸데없는 노력하지 말라는 의미로 'There is no silver bullet' 이라는 격언을 사용하는데 "이 세상에 만병통치약은 없다"는 뜻이라고도 할 수 있다.

소프트웨어에서도 마찬가지이다. 소프트웨어의 문제를 쉽게 해결할 수 있는 기술도 없고 프로세스도 없다. 이런 것에 관한 책으로 'No Silver Bullet' 이라는 저서도 있었다.

필자의 제한된 경험으로도 이 세상 일에 왕도는 없었다. 노력한 만큼 서서히 개선되는 것이지 획기적인 방법을 가르치거나 판매하는 것은 거의 모두가 사기이거나 불법 혹은 비도덕적인 것이라고 보면 된다. 하지만 그럴 듯 하게 보이기 때문에 그런 것을 필요로 하는 사람에게는 감정적으로 현혹되어 정확한 판단을 하기가 쉽지 않을 뿐이다.

어떤 신기술이 나와서 현재 소프트웨어가 가지고 있는 문제를 모두 해결해 준다는 것을 기대한다는 것은 너무나도 어리석은 생각이다. 반대로 만병통치약은 없어도 나쁜 약은 많다. 나쁜 방법을 택하면 문제가 많을 것은 당연하고 최선의 방법을 택했다고 하더라도 천천히 그 효과를 볼 수 있는 것이 소프트웨어분야이다. 다른 분야도 크게 다르지 않을 것이라고 생각한다.

사실 신기술이라는 것은 갑자기 나타나지도 않는다. 획기적인 신기술이라고 하더라도 잘 분석해 보면 지금까지 있던 문제를 해결하거나 개선하기 위해 부단히 노력한 경험에 기초해서 진화하면서 나타나는 것이다.

80년대에 필자가 스탠포드대학원 재학중에 그 당시의 'Silver Bullet'이라고 했던 인공지능을 전공하는 학생이 많았는데, 그 후에는 많이 수그러들어서 지금은 소수의 학생을 제외하고는 인공지능에 그리 매력을 느끼지 않는 것 같다.

그 분야의 연구는 계속 진행되고 신기술이 나오겠지만 인공지능이 소프트웨어에 혁신적인 기여는 하지 않았다. 케이스 툴 역시 소프트웨어 프로젝트의 많은 부분에서 자동화와 관리를 통해 개발을 쉽게 도와주겠다는 아이디어는 전혀 나무랄 데가 없으나 현실에서 소프트웨어 개발이 툴(Tool)로 만들어서 정형화 할 수 있을 만큼 그렇게 쉽게 일반화되지는 않았다.

90년대에는 객체지향이란 말이 유행이었다. 객체지향 언어만 사용하면 프로그래밍이 쉽게 될 것 같은 착각을 불러 일으키게 했다. 객체지향언어를 사용하더라도 이전의 구조지향언어의 문제를 경험하지 않은 사람은 진정한 효과를 보기 힘들다. 객체지향언어인 C++의 전신인 구조지향언어 C도 잘 사용하면 C++의 많은 효과를 얻을 수 있다. 반대로 C++을 제대로 사용하지 못하면 득보다 실이 클 수도 있다.

객관적으로 객체지향언어가 구조지향언어보다 뛰어난 언어이긴 하나 그 자체가 문제를 풀 수는 없다는 것이다. 잘 사용할 수 있는 사람에게만 진정한 효과가 나타나는 것이다. 그러기 위해서는 많은 시간이 걸린다. C++을 안다고 해도 경험이 1년인 사람과 5년인 사람과는 천지차이다. 그 차이는 경험이 생겨보면 깨닫게 된다.

소프트웨어 프로세스 개선을 위한 방법으로 CMM, CMMI, SPICE 같은 것들이 있다. 알고 보면 아주 유용한 것들이다. 프로세스에 관해 좋은 가이드를 해준다. 문제는 이를 'Silver Bullet'인 것 처럼 맹신을 하는 것이다.

미국의 경우 CMM에서 프로세스가 전혀 정립되어 있지 않은 'Level 1'에서 가장 높은 'Level 5'를 이루는데 평균 98개월이 걸리는 것으로 나와 있다. 아무리 CMM과 같이 좋은 개선 방법이 있더라도 그 만큼 프로세스가 정립되기 위해서는 오랜 시간이 걸린다는 것이다. 시간을 줄여 수년만에 인증을 받을 수 있을지는 모르지만 그 내용은 부실할 수 있다. 시간이 걸리는 것에는 그 적절한 이유가 있다.

Component Based Development의 약자인 CBD는 제대로만 수행된다면 원하는 기능들을 콤포넌트(Component)별로 '레고 블럭'처럼 만들어, 필요한 곳에서는 조립하듯이 쉽게 사용할 수 있게 만들자는 좋은 아이디어이다. 소프트웨어 개발의 단계에서 코드재사용, 함수재사용, 객체재사용보다 한 레벨 위로 올린 콤포넌트를 재사용하기 위한 목적이다. 하지만 지금까지 진정한 콤포넌트로써 누구나 사용할 수 있는 것을 개인적으로 접해보지 못했다. 어떤 특수한 분야에서는 가능하겠지만 이 개념이 활용되기 위해서는 많은 도전이 필요한 것으로 보인다.

Silver Bullet이라고 주장하는 것들은 항상 그럴 듯하다. 경험없는 사람이 보기에는 그 효용성을 판단하기가 불가능하다. 그래서 현혹되기 쉽다. 모든 사람에게 좋은 것도 없고 모든 문제를 풀어주는 것도 없다. Silver Bullet에 현혹되어 새로운 툴도 도입하고 시도도 해보고 하지만 결과적으로 많은 경우에 시행착오로 인한 시간 낭비와 돈 낭비가 되기 쉽다. 많은 툴 회사들이 Silver Bullet을 주장하지만 그 판단은 각자의 능력에 달려있다.

'신기술을 사용하지 않아 실패한 프로젝트 없다'고 Silver Bullet은 경우에 따라 어느 정도의 혜택은 기대할 수 있지만 모든 문제를 다 해결할 수는 없다. 소프트웨어를 잘 하기 위해서 Silver Bullet에 의존하면 안 된다. 다시 말하지만 그런 것은 없다.

소프트웨어의 새로운 기술이건 새로운 프로세스이건 생산성을 높이고 성공적인 소프트웨어를 만들기 위해서는 옳은 방법을 가이드할 수 있는 선생이 있어야 하고 많은 시간과 노력을 들여 그것을 습득해야 하는 것이 필수적이다.

소프트웨어에서의 성패의 핵심은 Silver Bullet같은 획기적인 기술의 도입이 아니라 현재의 기술을 제대로 사용하는 경험있는 전문가에 달려 있다.

/김익환 SW컨설턴트 ik_kim@yahoo.com








alert

댓글 쓰기 제목 SW에 'Silver Bullet'은 없다

댓글-

첫 번째 댓글을 작성해 보세요.

로딩중
포토뉴스