2014년 6월 5일 목요일

SWEBOK 해설 시리즈 - 소개



SWEBOK 시리즈  #1 - 2014-06-04



SWEBOK에 대한 소개



Software Engineering Body of Knowledge (SWEBOK, 소프트웨어 공학 지식체계)은 소프트웨어 공학의 지식체계에 대한 ISO/IEC 국제 표준이다. 필자가 그 내용의 심오함에 감탄한 문서이기도 한다. 그 감탄은 필자가 수십 년간 소프트웨어 개발을 해 왔기 때문에 가능한 것이지 충분한 경험 없이는 감동을 느끼기는 어려울 것이라고 생각한다. 이 문서는 법적인 표준이 아니라 소프트웨어 업계에서 일반적으로 공감하는 내용으로서 전 세계 수백 명의 소프트웨어 전문가들이 자발적으로 참여해서 만든 문서이다. 2004년에 V2가 발간되었고 2014년에 V3가 발간되었다. SWEBOK은 거의 모든 소프트웨어 공학활동의 기반이 되는 바이블 같은 문서인 만큼 모든 경우를 설명하는 세세한 내용을 담을 수는 없고 어느 정도 추상적인 수준으로 작성되었다는 것은 자연스러운 일이다.



대부분의 실리콘밸리 소프트웨어 회사에서의 실무적인 경험은 체계적이기는 하지만 공학이론에서 시작한 것이 아니라 현실에서 정립된 방법론이었다. 그런 상황에서 우연히 SWEBOK을 처음 접했을 때 이렇게 훌륭한 문서가 있나 하는 느낌을 받았다. 필자의 수십 년 개발경험의 핵심을 그대로 적어 놓은 것 같았다. 그런 면에서 소프트웨어 공학의 바이블이라고 불리는 것도 전혀 놀랍지 않다. 하지만 그렇게 훌륭한 문서임에도 불구하고 현실적인 이용가치는 거의 없다는 것이 필자의 생각이다. 마치 멋진 예술 작품을 보는 느낌이다. 멋진 그림을 실제로 그릴 수 있게 차근차근 공부해 나가는 것이 이 시리즈의 목적이다.



SWEBOK을 읽고서 이해하고 훌륭한 소프트웨어를 개발한다는 것은 망상이다. 현실과 연결하는 고리가 없기 때문이다. 추상적인 이론은 하나지만 현실은 백이면 백 모두 다르다. 다양하게 응용해서 적용하는 것은 각자 알아서 해야 하는 일이다. 그럼에도 불구하고 소프트웨어 공학의 바이블답게 모든 핵심과 함께 심지어는 가끔가다 요령이나 힌트까지 적혀 있다. 그런 점에서 순수 이론만을 강조하는 문서는 아니지만 각자 처한 환경에 맞게 해석해서 현실에 어떻게 적용하는 지는 최고 경험자가 아니면 불가능한 수준이다. 손자병법과 같이 훌륭한 내용이지만 응용하는 것이 어렵다.



먼저 SWEBOK에 들어가기 전에 근본적으로 소프트웨어 공학에 대한 실체를 이해해 볼 필요가 있다. 소프트웨어의 역사가 60년이 넘어가면서 그 동안에 쌓인 Know-how가 미국의 소프트웨어 산업계에 녹아 들었다. 실리콘밸리에서는 'Software Engineering' 이라는 용어조차도 생소하다는 것은 현실적인 소프트웨어 개발 역량과 소프트웨어 공학 이론을 안다는 것과는 인과관계가 별로 없다는 것을 의미한다. 소프트웨어 공학이 선구자의 입장에서 학계의 연구의 필요성은 있겠지만 현실에서 무조건 받아들이는 것은 조심해야 할 일이다.



소프트웨어 공학은 현실에서 소프트웨어를 잘 개발하는 방법을 연구하는 학문이다. 이론이 현실을 논한다는 데서 모순이기도 하다. 먼저 소프트웨어 공학 자체가 너무 추상적인 단어이기 때문에 종교적인 신념과 같이 사람에 따라 받아들이는 정도가 다르다. 소프트웨어 공학 이론의 세계적인 대가라고 할 수 있는 이바 야콥슨(Ivar Jacobson)조차 그의 저서에서 소프트웨어 공학의 문제점에 대해 다음과 같이 언급했다.



* 단기적인 유행(FAD)과 패션(Fashion)에 의한 흥행

* 검증되지 않은 미숙한 이론에 근거

* 비교할 수도 없는 너무 많은 방법론

* 평가할 수 있는 실험 결과의 부재

* 학계의 연구와 산업계의 실용성의 차이



이 말은 소프트웨어 공학을 맹목적으로 믿고 따라하기 보다는 생각할 만한 요소가 많다는 것을 말해준다. 야콥슨의 말을 한마디로 요약하면 실전을 다루는 소프트웨어 공학을 이론적으로 접근했다는 것이 문제이다. 이론과 현실의 괴리이다. 많은 소프트웨어 개발자들이 소프트웨어 공학에 현혹되어 불필요한 활동을 하게 된 데에는 이론에 너무 집착했기 때문이다.



결론적으로 필자가 SWEBOK의 심오함에 감동했음에도 불구하고 최고 전문가가 아닌 사람들이 실제 현실에 적용하기에는 너무 어렵다. 그래서 그 간극을 메워주기 위한 노력으로 마치 바이블을 해석하듯이 국내 현실에 맞게 시리즈로 설명해보려고 한다.



지금부터 본격적으로 SWEBOK에 대한 해석을 시작해 보자. 필자의 주석은 (***필자주석)으로 표시하였고 나머지 부분은 SWEBOK을 번역한 부분이다.



SWEBOK는 다음의 5가지 목적으로 작성되었다.

1. 세계적으로 소프트웨어 공학에 대해 일관성 있는 정보를 전달한다

2. 소프트웨어 공학의 범위를 명확히 정하고 전산학, 수학, 프로젝트 관리와 같은 다른 활동과의 차이를 명백히 한다

3. 소프트웨어 공학의 내용을 설명한다

4. 소프트웨어 공학의 지식체계에 대한 쉬운 Top-Down 접근방법을 제공한다.

5. 인증이나 자격증의 교과 과정을 위한 기반을 제공한다


(***필자주석) 공식적인 문서답게 딱딱한 용어로 표현되었지만 소프트웨어 공학(즉 개발을 잘하는 방법)에 대해 혼란을 없애고 본질을 이해시키는 것이 목적이다.



이 목적을 위해 15개의 지식영역(KA, Knowledge Area)으로 분류한다.


(***필자주석)  소프트웨어 전문가가 되기 위해 알아야 할 영역이 15개라는 것을 의미한다. 동시에 많은 시간이 걸린다는 것을 의미한다. 심지어는 Software Requirements와 같이 한 분야에 5년 10년이 걸려도 잘 하기 어려운 분야가 있다. 진정한 소프트웨어 전문가가 된다는 것은 프로그래밍을 잘 한다는 것 외에도 많은 것이 필요하다.



1  Software Requirements (소프트웨어 요구사항)
2  Software Design (소프트웨어 설계)
3  Software Construction (소프트웨어 구현)
4  Software Testing (소프트웨어 테스팅)
5  Software Maintenance (소프트웨어 유지보수)
6  Software Configuration Management (소프트웨어 형상관리)
7  Software Engineering Management (소프트웨어 공학 관리)
8  Software Engineering Process (소프트웨어 공학 프로세스)
9  Software Engineering Models and Methods (소프트웨어 공학 모델과 방법론)
10  Software Quality (소프트웨어 품질관리)
11  Software Engineering Professional Practice (소프트웨어 공학 전문가 기량)
12  Software Engineering Economics (소프트웨어 공학 경제학)
13  Computing Foundations (컴퓨팅의 기반)
14  Mathematical Foundations (수학적 기반)
15  Engineering Foundations (공학적 기반)



각 지식영역(KA)은 다시 2 혹은 3 수준의 토픽(Topic)으로 나누어져서 원하는 토픽를 쉽게 찾을 수 있도록 했다.


(***필자주석) SWEBOK이 소프트웨어 생명주기의 모든 영역을 다루므로 책 한두 권으로 전문가가 될 수 있는 것은 아니다. 하나의 KA만 해도 평생을 향상시키면서 가는 것이기 때문에 배우면 배운 만큼 향상된 것으로 생각해야지 언제 완성시킨다는 개념은 없다.



이제 긴 여행을 시작해 보자.

댓글 없음: