2009년 1월 15일 목요일

소프트웨어 공학이 뭔가?

필자가 소프트웨어 공학(소프트웨어 엔지니어링)이란 용어를 안 것은 얼마 되지 않았습니다. 소프트웨어 공학이라는 용어를 접하고 그 내용을 보니 오랫동안 소프트웨어를 개발하면서 해왔던 그 방법 그대로를 적어 놓은 것에 불과했습니다. 물론 소프트웨어 공학에 포함된 전체 내용은 상당히 방대하지만 그 근본 원리와 핵심적인 내용들은 아주 익숙한 내용들이었습니다.

지금 글을 읽고 계신 분께서 소프트웨어를 아주 잘 개발하고 있다면 이들은 이미 소프트웨어 공학의 대가입니다. 단순히 머리가 좋아서 혼자서 잘 개발을 잘하는 것을 제외하고 여러 명의 팀을 이끌고 복잡한 시스템을 짧은 시간에 가장 적은 비용으로 품질 높은 제품을 이미 만들어 내고 있다면 소프트웨어 공학이란 말을 한번도 들어본 적이 없어도 이미 전문가입니다.

대부분의 뛰어는 개발자들은 소프트웨어 공학에 익숙합니다. 비록 소프트웨어 공학의 수많은 용어를 사용하지 않는 다고 하더라도 이미 잘하고 있습니다. 뛰어난 개발자란 뛰어난 프로그래머, 코더가 아닙니다. 

대학에서 소프트웨어 공학을 전공 과목으로 배웠다고 하더라도 실무에서 제대로 된 개발 방법을 경험한 개발자에 비해서는 그 이해도가 택도 없이 모자랍니다. 심지어는 대부분의 대학생들은 소프트웨어 공학에서 가르치는 대부분의 내용을 진정으로 이해하지도 못합니다.
소프트웨어 공학을 실무 경험은 없이 대학에서 가르치기만 하는 사람은 오히려 그 형식에 치중에서 전문가라고 보기 어려운 경우가 많습니다. 

그렇습니다. 현실에 적용해서 진짜로 시간과 비용을 줄일 수 없다면 진짜 소프트웨어 공학이 아닙니다. 좋은 방법론을 적용했더니, 개발시간이 더 오래 걸리고, 맨날 밤을 세야 하고, 개발자들의 사기도 떨어진다면 제대로 적절하게 적용한 것이 아닙니다.

소프트웨어 공학의 본질을 알아야 겠습니다. 근본은 바뀌지 않지만 그 방법은 소프트웨어 기술의 변화와 발전에 따라서 계속 바뀌어 나갈 것이라는 것을 쉽게 예측할 수 있습니다. 꾸준히 좋은 개발팀과 회사를 유지하려면 끊임 없는 개선이 필요합니다.

댓글 6개:

  1. 저도 소프트웨어 공학(테스트 부터) 이론은 업무를 진행한 후에 알았습니다. 제가 이렇게 해 보면 어떨까?해서 적용했던 방법(프로세스, TC 작성 방법, 인프라 구축)이 나중에 "아~ 이게 이거구나?"하는 것을 많이 느꼈습니다. 그 때는 좀 체계적으로 공부하고 싶다는 생각도 들곤 했습니다. 그러나 SE는 실무에서 나온 아이디어와 경험많이 당장의 개선에 도움이 된다는 확신이 섰습니다. 물론 선행 SE를 위한 노력도 해야겠지만 저하고는 잘 맞지 않은 것 같습니다. ^,.^;

    답글삭제
  2. 정의의소님. 사실 미국에서도 개발자들이 이건 "소프트웨어 공학"에 입각하여 이렇게 하는 것이다 라고 생각하고 일하지 않죠. 그냥 다들 그렇게 하고 그렇게 하는 것이 당연하니까 하는 것들일 뿐인 경우가 대부분이죠. 어떻게 보면 그것이 당연한 것입니다.
    우리나라는 아직 너무 주먹구구식으로 개발하는 곳이 많아서 현실에서 배우기 어려우니 좀 체계적으로 따로 공부하고 경험자에게 배우고 토론하면 소프트웨어 공학을 별도록 익힐 필요가 있습니다.

    답글삭제
  3. Software Engineer와 Engineering을 굳이 구분할 필요가 있을까요?
    뛰어난 Engineer가 뛰어난 Engineering을 한다는건 당연하겠지만
    현업에서는 둘을 다르게 보고 있는게 아쉽네요. 왜일까요?

    답글삭제
  4. YUZI님 안녕하세요.
    현업에서는 아직 Software Engineering에 대한 인식은 별로 없는 것 같습니다.

    답글삭제
  5. 궁금한 점이 있습니다. 소프트웨어 공학의 원리와 바뀌지 않는 근본은 무엇인가요?

    답글삭제
  6. [1002]님 안녕하세요.
    참 멋진 질문입니다. ^^

    세상의 어떤일이 근본과 원리를 한 문장에 설명할 수 있을까요? 예를 들어 성철 스님이 "산은 산이요, 물은 물이요"라고 세상의 원리를 한문장에 압축해서 말을 하지만, 이를 이해하는 사람은 거의 없죠. 이를 이해하는 사람은 이미 세상의 원리를 깨달은 사람이겠죠. 소프트웨어 공학의 목적은 소프트웨어를 "최소의 비용으로 최단 시간에 개발하는 것"입니다. 이것을 하나의 방법 또는 방법론으로 제시할 수 없는 이유이기도 합니다. 그리고 많은 실무 경험과 지식에 의한 깨달음이 있어야 그 근본은 알 수 있을 것입니다. 또, 자신은 어느정도 터득했다고 생각했어도 아닌 경우도 많습니다.

    제가 저술한 "소프트웨어 개발의 모든 것"이라는 책도 이런 저런 다양한 방법을 기술하기보다는 소프트웨어 공학의 근본 즉, 소프트웨어를 잘 개발하는 기본 원리에 포커스해서 기술한 책입니다. 소프트웨어 공학의 근본에 대해서 어느 정도 깨닫고 있다면 이책을 보고 거의 모든 내용을 공감하거나 오히려 자신의 의견도 피력할 수 있을 것입니다. 그리고 나면 저와 더 심도 있는 얘기를 할 수 있을 것 같습니다.

    답글삭제