일요일, 11월 25, 2007

[공지사항] 소프트웨어 크리에이티비티 2.0 정보

이 블로그를 RSS로 구독하고 계신 많은 독자 여러분의 성원에 보답하기 위해 소프트웨어 컨플릭트 2.0의 후속편인 소프트웨어 크리에이티비티 2.0을 준비하고 있습니다. 해커라면 반드시 읽고 넘어갈 필독서 10선에 들어가기도 했던 소프트웨어 크리에이티비티는 1판이 절판되고 나서 한 때 아마존에서 999불까지 중고 서적 가격이 책정되기도 하는 등 여러 가지 흥미로운 이야기거리를 불러 일으켰습니다. 독자들의 열화와 같은 성원에 힘입어 로버트 L. 글래스가 새롭게 글을 추가한 버전 2.0이 작년 이 무렵에 출간되었는데, 출판사인 developer.*의 사정으로 인해 라이선스를 해결하지 못해 차일피일 번역 작업이 미뤄지다가 로버트 L. 글래스와 직접 계약을 맺고 d.*와도 다시 연락이 재게되면서 한국어판으로 여러분 앞에 선을 보일 수 있게 되었습니다.

번역 작업이 진행되는 동안 이 블로그는 한시적으로 운영이 중지됩니다. 번역 작업이 끝나고 책이 출간될 무렵에 여러분을 찾아뵐 계획입니다. 다시 한번 독자 여러분의 성원에 감사드리며, "I'll be back!"

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁' 공동 역자 박재호 이해영 올림

라벨: , ,

화요일, 11월 06, 2007

[6부 3번 수필] 소프트웨어 실패: 왜 실패할까?

이번에 '초난감 기업의 조건'을 번역하면서 느낀 바지만, 소프트웨어 쪽 실패를 탐구해서 교훈을 찾으려는 시도는 무척 중요하다. 실수하지 않고서는 성장할 수 없듯이, 소프트웨어 분야에서도 실패를 하지 않고서는 제대로 커나가지 못하지만 요즘 세상에서 실패는 댓가가 너무나 혹독하기 때문이다.

로버트 L. 글래스 큰 형님은 소프트웨어가 실패하는 원인을 크게 다음과 같은 세 가지로 나눈다.

  • 예측에 대한 무능: 걸음마 단계에 불과한 소프트웨어 분야를 아직 제대로 이해하지 못하기 때문에 생기는 현상으로, 어디에 얼마를 투입하고 어느 정도 기간이 걸리는지 소프트웨어 프로세스를 파악해야 해결이 가능하다. 예측을 '관리'하려는 노력 자체도 무척 가상한데, 서서히 '예산을 초과하고 일정보다 늦어진 프로젝트'는 버그 제거에 반드시 필요한 테스트 프로세스를 건너 뛰면서 '예산을 초과하고 일정보다 늦어진데다 불안정하기까지 한 프로젝트'로 변한다. 요구 사항 수집 단계 직전이나 도중에 예측을 한 다음에 이를 100% 고수하는 행위는 문제를 제대로 파악하지 못한 상황에서 어림짐작으로 값을 뽑아내어 여기에 목을 매달기 때문에 상황을 더욱 악화시킨다.
  • 불안정한 요구 사항: 좋은 사람이 되려다보니 고객이나 사용자가 원하는 변경 사항을 거절하지 못하고 받아들인 결과 설계 프로세스를 빗나가게 만들고 일정을 엉망 진창으로 만들어버린다. 문제 본질이 계속 바뀌는 상황에서 문제를 해결할 수 없는 사람은 없지만, 우리들은 소프트웨어가 부드럽다는 사실을 증명하기 위해 오늘도 부나비가 되어 불에 뛰어든다. 로버트 L. 글래스 큰형님은 이런 현실을 한탄하는 대신에 결국 소프트웨어 유지 보수 기간동안에 벌인 변경 작업을 통해 최고의 돈벌이를 해야 한다고 주장한다.
  • 일시적 유행과 오해: 은총알 논문이 나온 이후에도 여전히 소프트웨어 위기를 극복할 획기적인 기술이 있다고 떠들어대는 사람이 있기 마련이다. 로버트 L. 글래스 큰형님 이야기에 따르면 전산 분야처럼 급변하는 환경에서 현실을 말하는 사람보다 비현실적이더라도 최신 기술을 떠벌이고 다니는 사람에게 좀더 큰 보상이 돌아가는 듯이 보이기 때문에 이런 사이비 약장수들이 설칠 수 있다고 한다. '일시적 유행과 오해'를 부추기는 사람들은 연구원들, 장사꾼들, 유행에 목매는 관리자들이 있으며, 새로운 기술에 흥미를 보인다는 사실을 제외하고 공통점은 없다.

그리고 다음과 같은 해법을 제시한다.

  • 향후 예측을 개선할 자료 수집
  • 예측 프로세서를 분석해서 점진적인 예측이 다른 분야에서 사용하는 접근 방식과 유사하게 현실을 더욱 제대로 반영하는지 확인
  • 고객은 자신이 바라는 요구 사항 변화에 현실적인 비용을 지불한다
  • 연구자들과 장사꾼들이 내건 약속을 믿다가 뜨거운 맛을 보았던 관리자에게 더 나은 지혜가 있다고 설득
  • 실무자들이 유행과 오해를 무작정 쫓아서 협곡으로 빠지기 전에 이를 실험적으로 검증할 국립 소프트웨어 실험 연구소 설립

역시 최종적인 결론은 '은총알은 없다'로 판명이 난다. 가장 심각한 문제가 무엇인지 알기만 해도 이런 함정에 빠지지 않을텐데...

'소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁' 역자 박재호 올림

라벨: ,

금요일, 10월 19, 2007

[6부 2번 수필] '문제 해결'에 대한 당연한/기발한 생각

소프트웨어 개발의 본질은 무엇일까? 자료 처리? 전자 계산? 기술 집약적인 첨단 산업? 3D 업종? 로버트 L. 글래스 큰 형님은 소프트웨어 개발의 본질은 '문제 해결'이라고 주장한다. 너무나도 당연한 이야기이다. 그렇다면 문제를 해결하기 위해 어떤 과정을 밟을까?

  1. 문제를 정의한다
  2. 해결책을 구현한다
  3. 해결책을 점검한다
  4. 필요하다면 해결책을 지속해서 동작하게 만든다

그런데 상기 문제 해결 방식에 데자뷰가 느껴지지 않는가? 바로 우리가 악의 축(?)으로 생각하고 있던 (폭포수형) '소프트웨어 생명 주기'와 정확하게 일치한다. 그다지 놀랍지도 않는 이유는 '생명 주기'가 문제 해결에 일반적인 접근 방법이기 때문이다.

로버트 L 글래스 큰 형님은 소프트웨어 생명 주기와 관련해서 두 가지 문제점을 지적한다.

  1. 소프트웨어 업계 종사자들은 어느 생명 주기를 사용할지를 놓고 논쟁하느라 상당한 시간을 낭비한다. 여기서 모순은 생명 주기가 일반화한 방법이며 소프트웨어 개발 부문의 독창적인 개념이 아니라는 사실이다. 오랜 기간 동안 쌓여온 일반적인 문제 해결 방법을 거부하는 배짱도 종종 볼 수 있는데, 소프트웨어 분야에서는 용감한(?) 사람이 종종 눈에 띄는 모양이다.
  2. 스펙트럼의 반대쪽에 있는 또 다른 일부 용감한(?) 소프트웨어 업계 종사자는 생명 주기 개념을 전혀 이해하지 못한다. 생명 주기는 일단 '발견하고' 나면 절대불변의 신성 불가침의 규칙 집합이자, 소프트웨어 제작 과정에서 반드시 사용해야 하는 공정이자 한치도 어김없이 순서와 방법을 따라야 하는 신성 불가침한 무엇으로 신봉한다. 요구 사항을 확정하기 전에는 설계를 시작하지 못하며, 설계를 끝내기 전에는 구현을 시작하지 못하며, 구현을 끝내기 전에는 테스트를 시작하지 못한다.

생명 주기를 맹신하는 경직된 관점을 버려야 한다. 어느 누구도 문제 해결 단계를 특정 순서에 맞춰 따라해야 한다고 주장하지 않았지만, 소프트웨어 업계 종사자들은 이런 황당한 생각을 어디선가 접한 모양이다. 결론: '소프트웨어 개발'은 결국 '문제 해결'이므로 문제를 푸는 방법론에서 좀더 자유로워지자.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 공동 역자 박재호 올림

라벨: ,

수요일, 10월 03, 2007

[6부 1번 수필] 전산학이 진짜 과학이 되며, 소프트웨어 공학이 진짜 공학이 되려면

전산학과 소프트웨어 공학이 일반 과학과 공학 부문에 비해 미묘한 차이점이 있다는 사실은 전산학도나 소프트웨어 공학도라면 누구나 한번씩 생각을 해보았을 것이다. 어떤 사람은 전산학과 소프트웨어 공학의 연륜이 짧기 때문에 아직 미성숙한 결과라고 이야기하고, 어떤 사람은 전산학과 소프트웨어 공학이 사람 생각을 잡아서 이를 강력한 논리적 도구인 컴퓨터를 사용해서 구현해야 하기 때문에 복잡성이 높기 때문이라고도 설명한다.

그렇다면 로버트 L. 글래스 큰 형님께서는 여기에 대해 어떻게 생각하고 있을까? 다음과 같은 의견을 피력한다.

전산학이라는 과학과 소프트웨어 공학이라는 공학에는 탄탄한 실험에 기반하는 성향이 결여되어 있다.

사람 목숨이 달린 새로운 의약품, 신형 항공기, 차 세대 원자력 발전소 플랫폼에 들어가는 새로운 기술이 개발되었을 때 적용에 앞서 충분한 실험과 검토를 거치지만 소프트웨어 신기술이 등장하면 개발자들이 벌떼처럼 달려들어서 오래된 지식을 몰아내고 새 지식을 여과없이 현업에 적용하니 글래스 큰 형님가 지적한 '실험 부족'이 만연해있다고 보면 틀림없겠다. 심지어 데이비드 파나스는 전산학 수준을 '민간 신앙'에 빗대어 비아냥거릴 정도니 사태는 훨씬 더 심각하다.

그렇다면 글래스 큰 형님의 해법은? 필요한 자원을 확보한 누군가 소프트웨어 구매자 보고서(Software Consumer Report)와 같은 자료를 내놓아 실험에 기반해서 신 기술을 평가하여 생산성 향상이 어느 정도 높아지는지 객관적인 증거를 내놓으면 된다고 말한다. 여기서 문제는? 필요한 자원을 확보한 누군가(?)는 다른 엉뚱한 사고만 치고 있다는 사실이다. 전산학이 진짜 과학이 되며, 소프트웨어 공학이 진짜 공학이 되려면 여전히 목적지가 한참 남았다.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 공동 역자 박재호 올림

라벨: , ,

수요일, 9월 19, 2007

[4부 3번 수필] 생산성과 G 이론

소프트웨어 부문에서 생산성을 놓고 이런저런 말이 정말 많다. SI 업체의 횡포부터 시작해서 야근에 이르기까지 여러 가지 이야기가 나오고 있는데, 로버트 L. 글래스 큰 형님은 여기에 대해 어떻게 생각하고 있을까? G 이론이라는 아주 흥미로운 이론을 소개할테니 읽고 즐기기 바란다.

이론 G는 다음 세 가지 요소로 이뤄진다.

  • 하위 이론 G11: 대립 관계를 기반으로 하는 시스템은 커다란 타협이 거의 불가능하다.
  • 하위 이론 G12: 미국 노동 시스템은 노동-관리라는 대립 관계를 기반으로 한다.
  • 하위 이론 G13: 괄목할만한 생산성 향상은 커다란 타협을 전제로 한다.

여기에 따른 결론:

  • 이론 G1: 현 미국 노동 시스템에서 괄목할만한 생산성 향상은 거의 불가능하다
  • 이론 G1 증명: 영국 시스템을 보라. 노동과 관리가 거의 교착 상태이다. 영국의 생산성은 침체되어 있다. 증명 끝.
  • 이론 G21: 노동-관리 대립이 명확하게 정의되지 않은 시스템에서는 생산성 향상이 아직 가능하다
  • 하위 이론 G22: 전산은 새로운 분야라서 아직 노동-관리 대립 관계가 제대로 형성되지 않았다

다시 이에 대한 결론:

  • 이론 G2: 컴퓨터 개발 또는 컴퓨터 사용과 관련된 생산성이 향상될 가능성이 아직 있다
  • 이론 G2 증명: 나는 조합원이 아니다. 여러분도 조합원이 아닐 것이다. 내 관리층은 아직 내 말에 귀 기울인다. 가끔이긴 하지만. 아마 여러분의 관리층도 마찬가지이리라. 우리 분야에서는 노동-관리 대립 구도보다 노동-관리 협조 체계가 좀더 일반적이다
  • 하위 이론 G31: 동기부여는 생산성 향상의 중요한 요인이다
  • 하위 이론 G32: 전산 관리에서 동기부여보다 통제를 채택하는 경우가 더 잦다.

이에 대한 결론:

  • 이론 G3: 전산 관리는 아직 존재하는 생산성 향상의 가능성을 파괴하는 방향으로 움직이고 있다
  • 이론 G3 증명: 5년 전만큼 일을 즐기는가? 그렇지 않다고 본다.
  • G 이론 전체: 미국 시스템은 생산성을 크게 향상하기에 너무 늦었을지도 모르겠다. 전산 분야는 아직 희망이 있다. 하지만 전산 관리가 그 희망을 파괴할지도 모르겠다.

옮긴이 생각: 바로 이렇기 때문에 과학자나 공학자를 관리(?)하려는 시도는 무의미하다.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 역자 박재호 올림

라벨: ,

일요일, 9월 09, 2007

[5부 8번 수필] 전산학과 교수에게 보내는 공개 편지

로버트 L. 글래스 큰 형님 의견에 따르면 전체 전산학이라는 범주에서 빠진 연결 고리 중 가장 중요한 요소는 바로 '소프트웨어 유지 보수'라고 한다. 실제로 대한민국 소재 4년재 대학교 전산학과나 컴퓨터 공학과에서 유지 보수를 정식 과목으로 택했다는 말은 아직 들어보지 못했다(혹시 누가 사례를 알고 있다면, 이 과목에서 배우는 내용과 과제를 보내주기 바란다).

대학교 때부터 유지 보수를 배워야 하는 이유는 소프트웨어 컨플릭트 2.0을 읽은 독자라면 이미 알고 있듯이

  • 유지 보수 업무는 소프트웨어 비용 중 40~80%를 차지한다.
  • 유지 보수 담당자는 자기 시간 중 75%를 제품 개선에 쏟으며, 15%만 버그 수정에 투입한다.(리처드 K. 불 "남들이 만든 버그를 수정하는 일은 소프트웨어 유지 보수 담당자 역할이 아니다. 우리(유지 보수 담당자)는 예의상 버그를 고쳐줄 뿐이다.
로 요약할 수 있다. 이렇게 중요한 유지 보수를 학교에서 다루지 않고 있다는 사실이 신기하지 않은가?

자, 그렇다면 말이 나온 김에 신기한 사실 하나를 더 짚고 넘어가자. 이 책을 번역한 역자가 생각하는 전산학 분야에서 가장 등한시되는 요소는 무엇일까? 바로 '디버깅과 성능튜닝'이다. 개발자 중 디버깅과 성능 튜닝을 하지 않는 행운아가 있을까? 하지만 '유지 보수' 과목이 개설되지 않았듯이 '디버깅 101'이라는 과목 역시 개설된 경우는 보지 못했다. 유지 보수 업무 중에 자기가 만든 코드 디버깅에 쏟아붓는 비율을 한번 따져보면 끔찍한 기분이 들 것이다. (개인 차원이 아니라) 학교나 회사에서 제대로 된 '디버깅'에 대해 별반 신경쓰지 않는 이유를 알고 있다면 바로 댓글 부탁드리겠다.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 역자 박재호 올림

라벨:

월요일, 9월 03, 2007

[4부 9번 수필] 실패한 소프트웨어 프로젝트에 관한 전설

4부 9번 수필은 짧지만 너무나도 재미있어서(그리고 가슴 찡하기에) 전체를 소개한다. 흥미가 당기신 분들은 소프트웨어 컨플릭트 2.0 책을 구입해서 다른 글도 읽어보시길... ;) 자, 시작한다!

옛날 옛적에 아주 거대한 난관에 봉착한 소프트웨어 실무자가 있었다. 이 실무자가 처한 곤경을 얘기하자면, 소프트웨어는 예산을 초과했고 일정을 놓쳤으며 불안정했다.

소위 소프트웨어 위기에 관한 글을 읽어보았다면 ‘별로 대단한 일이 아니잖소?’라고 말할지도 모르겠다.

하지만 이 사람에게는 대단한 일이었다. 덧붙이자면, 여러분이 생각하는 정도보다 훨씬 심각했다. 이 소프트웨어 실무자는 전산 분야에서 둘째가라면 서러울 대학을 졸업했다. 졸업 후에는 여러 해 동안 탄탄한 프로그래밍 경력을 쌓았다. 심지어는 수년 동안 실무에서 배운 지식과 학교에서 배운 지식의 정수를 조화시키는 방법까지 익혔다.

다시 말하면, 이 소프트웨어 실무자는 우수한 소프트웨어 실무자가 갖출 조건을 모두 갖춘 셈이다. 그렇다면 무엇이 잘못되었을까?

모든 문제는 맨 처음, 해결할 문제가 처음으로 등장했던 때로 거슬러 올라간다. 회사에 큰 돈을 벌어줄, 아주 중대한 문제였다. 관리층이 그렇게 말했다. 마케팅도 그렇게 말했다. 특별한 문제로 취급해야 한다는 사실에는 의심의 여지가 거의 없었다.

첫번째로 특별히 취급해야 할 사항은 특정 날짜까지 끝내야 한다는 점이었다. 관리층이 그렇게 말했다. 마케팅도 그렇게 말했다. 담당할 소프트웨어 실무자가 그 날짜까지 불가능하다고 생각해도 소용이 없었다. 무조건 날짜를 맞춰야 했다.

협조적인 태도를 보이느라, 실무자는 우려에도 불구하고 일을 시작했다. 관리층이 그의 우려에 귀를 기울이기는 했다. 실무자가 소프트웨어를 개발하는 동안, 관리층은 원하는 답이 나올 때까지 비용 예측 모델링 프로그램을 돌렸다. 그리고는 회심의 미소를 띄우며 이렇게 말했다. “봤죠? 시간 내에 소프트웨어를 개발할 수 있다니까요.”

시간이 흐르고 기한이 다가오면서, 우리의 실무자는 점점 더 초조해졌다. 처음에는 자신의 품질 기준에 맞춰서 소프트웨어를 개발했다. 요구사항을 주의 깊게 검토하고, 철저히 설계한 다음에, 프로그램을 실행하기 전에 코드 행 한줄한줄을 신중하게 검토 desk-checkin했다.

그러나 기한이 코앞에 닥치면서, 그는 우수한 기법을 생략하기 시작했다. 요행을 바라면서 테스트를 대충 해버렸다. 어떤 모듈은 테스트하지 않은 채로 통합하기도 했다. 제품은 자체 표준 테스트도 통과하지 못한 상태에서 베타 테스트로 돌입했다. 그러나 기한은 꿈쩍할 가능성이 없어 보였고, 결국 압박감을 견디다 못해 덜 중요해 보이는 사항을 희생하게 되었다.

결국 우리의 실무자는 기한을 맞추지 못했다. 프로젝트는 그가 처음 예측했던 날짜대로 그만큼 늦어졌다. 당연히 비용은 예상보다 많이 들었다. 낙관적인 일정에 맞추어 비용을 예측했으니까. 안정성? 실무자가 기한을 맞추려고 이것저것 건너뛰는 바람에 안정성도 역시 문제였다. 사람들이 말하는 소프트웨어 위기 그대로였다. 일정을 놓치고 예산을 초과하고 불안정한 소프트웨어 프로젝트가 하나 더 생겨났을 뿐이었다.

요약하자면, 옛날 옛적에 우수한 소프트웨어 실무자가 실패한 소프트웨어 프로젝트를 내놓았다. 마음 속으로는 대충 건너뛰면 안 된다는 사실을 알았다. 하지만 동시에 마음속으로는 개발 과정에서 저지른 실수가 하나뿐이라는 사실도 알았다.

그가 저지른 실수는 소프트웨어를 제작한 방식이 아니었다. 처음부터 잘못된 일정에 맞추려는 시도 자체가 실수였다.

소프트웨어 실무자가 관리층으로부터 성과 평가를 받았을 때, 그는 실패한 프로젝트로 인해 자신의 업무 평가가 낮아졌음을 발견했다.

그는 궁금했다. 나와 같은 입장에서 괴로워하는 사람들이 얼마나 많을까? 순전히 잘못된 예측이나 대충 꾸며댄 예측 탓으로 생기는 소프트웨어 위기가 얼마나 많을까?

아직도 그는 궁금해한다.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 역자 박재호 올림

라벨: ,

일요일, 8월 19, 2007

[4부 8번 수필] 소프트웨어 제품에서 '품질'을 관리할 수 있을까?

소프트웨어 업계에서 입에 익은 관용구처럼 사용하고 있는 단어 중 하나가 바로 '품질 보증'이다. 일단 여느 업계와 마찬가지로 '품질'에 '보증'이 붙게 되면 '품질'은 관리 문제로 바뀌고 만다. 하지만 '품질'에서 '보증'을 떼내고 싶어 안달이 난 로버트 L. 글래스 큰 형님은 품질이 관리 문제가 아니라고 강조한다.

소프트웨어 개발 과정에서 관리층은 품질 프로세스를 도입하면 품질을 관리할 수 있다고 착각하지만 실제로는 품질은 테스트는 고사하고 관리조차 못한다는 중요한 사실을 모르고 있다. 로버트 L. 글래스 큰형님에 따르면 품질은 내밀한 소프트웨어 특성이며, 이해 용이성과 수정 용이성이라는 특성을 포함하고 있다. 품질 프로세스를 도입하면 이해 용이성과 수정 용이성이 덩달아 좋아지면 얼마나 좋겠느냐만은 사실상 관리층은 이해 용이성과 수정 용이성을 판단하는 데 필요한 기술적 업무에 익숙하지도 않으며 익숙해서도 안 된다. 또 한가지 품질 속성에 들어가는 요소는 신뢰성과 이식성인데, 역시 관리 관점이 아니라 기술적인 관점에서 살펴봐야 할 요소이다.

결국 21세기 소프트웨어 관리자에게 맞는 소프트웨어 공식은

소프트웨어 제품 = 일정 + 예산
이 아니라
소프트웨어 제품 = 품질 + 일정 + 예산
이 되어야 한다고 강력하게 주장하며, 품질이라는 문제는 관리적으로 고려할 사항이라기 보다는 기술적으로 고려할 사항이 훨씬 더 복잡하다고 결론 내린다.

로버트 L. 글래스 큰 형님이 품질보증에 쐬기를 박는 마지막 말을 한번 들어볼까?

간단한 연습을 해보자. 내가 '품질'이라고 말할테니, 관습적인 추가어인 '보증'을 붙이지 않고 꾹 참아본다.
품질
잘했다. 별로 어렵지 않은 일이다. 그렇지 않은가?
"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 역자 박재호 올림

라벨:

월요일, 8월 06, 2007

[4부 2번 수필] 소프트웨어 생산성을 바라보는 새로운 방법

소프트웨어 생산성을 높이기 위해 여러 가지 이론과 기법과 제품이 등장했다. 물론 이런 여러 가지 방법을 동원해서 생산성을 수십, 수백 배로 높인 경우도 있을지 모르겠지만(혹시 이런 환상적인 경우를 아는 사람이 있다면, 알려주기 바란다), 대부분 몇 % 상승에 그치고 만다. 베리 뵘이 말하듯이 생산성에 관한 한 방법론, 언어, 기타 기술적인 방법은 사소한 향상밖에 가져오지 못한다.

자 그렇다면, 생산성 향상을 위해 무엇을 해야 하나? 로버트 L. 글래스 큰 형님은 _사람_에 주목한다. 소프트웨어 제작 인력이 우수하면 생산성이 높아진다는 말이다. 결국 소프트웨어 분야에서 기술 사회학에 주목해야 생산성 향상을 달성한다. 그렇다면 우수한/숙련된/전문 인력과 덜 우수한/미숙한/초보 인력의 차이점은 무엇인가? 사람과 관련하여 어떤 요소가 생산성에 강력한 영향을 미쳤는지 정리한 내용을 여기에 요약해보겠다.

  1. 목표와 하위 목표를 더 많이 설정했고, 목표로부터 하향식으로 일했다.
  2. 과거에 풀었던 문제와 유사성을 밝혔고, 밝혀낸 유사성을 기반으로 모델을 만들었다.
  3. 더욱 체계적이었다. 더 많은 전략을 말로 표현했으며, 가정과 제약과 기대치를 기록했다. 최종 제품을 더 구체적으로 묘사했다(즉, 시스템 분석가는 요구사항을 더 많이 작성했다)
  4. 더 많은 가설을 세우고, 시도하고, 포기했다. 더 많은 전략을 수정했다.
  5. 여러 방면에서 좀더 사람을 고려하는 성향을 보였다. 시스템 분석가는 사용자 관계를 더욱 효율적으로 관리했다. 유지보수 담당자는 원래 코드를 짠 개발자의 구현 방식과 성격을 분석하며 사람과 코드를 연관지었다.

요즘 나오는 여러 가지 소프트웨어 공학 책을 읽다보면 위에서 제시한 각종 요소를 알기 쉽게 풀어서 설명하는 내용을 접하곤 한다. 구체적이고, 반복적이고, 체계적인 접근 방법을 고려하면 소프트웨어 생산성을 높일 수 있으리라는 희망이 보인다. :)

'소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁' 역자 박재호 올림

라벨: , , ,

목요일, 7월 05, 2007

[3부 4번 수필] 표준과 표준 준수: 정말 소프트웨어 품질을 높이는 데 도움이 되나?

사람들은 흔히 소프트웨어 표준만 있으면 제품 품질이 저절로 올라간다는 착각을 한다. 물론 제품 품질 향상을 위해 소프트웨어 표준이 있으면 좋긴 하겠지만, 표준만으로 제품 품질을 올리기는 무척 어렵다.

무엇이 문제일까? 바로 표준 정립과 표준 준수가 따로 놀기 때문이다. 표준 정립 자체가 표준 준수를 의미하면 좋겠지만, 대부분 표준을 만드는 사람과 이행하는 사람은 동일하지 않기 때문에 삐걱거리기 마련이다.

로버트 L. 글래스 큰 형님은 표준 정립과 관련한 잘못된 관례에 대해 일침을 가한다.

대다수 소프트웨어 회사에서는 적어도 100페이지는 족히 되는 멋진 소프트웨어 제작 규칙을 빽빽하게 기술한 표준 메뉴얼이 존재한다. 아마도 (1) 동료들에 비해 재능이 떨어져서 소프트웨어 개발팀에서 밀려났거나 (2) 자신이 '최고' 소프트웨어 제작 방법을 발견했다고 생각해서 모두가 그대로 따라야 한다고 믿는 사람들이 작성한 메뉴얼이다.

우와. 그렇다면 어떤 관례가 올바를까? 다음과 같은 세 가지를 생각해보자.

  1. 표준은 간결하고 핵심적이어야 한다. 길게 만든 문서는 표준이 아니라 지침으로 남기자.
  2. 표준은 회사에서 프로그래밍 기량이 가장 뛰어난 사람이 작성하고 검토해야 하며, 시간이 남는다고 아무에게나 맡겨서는 안 된다. 모두에게 강조하고 준수하도록 만들 규약이므로 마땅히 최고 두뇌에게 맡겨야 한다.
  3. 표준 준수는 의무적이어야 하며, 시간이 남으면 따른 선택이 되어서는 안 된다.

과연 여러분이 몸담고 있는 회사에서는 표준을 누가 만드는지 생각해보자. 그리고 표준을 따르지 않는 이유도 함께 고민해보기 바란다.

"소프트웨어 컨플릭트 2.0: 시대를 뛰어넘는 즐거운 논쟁" 역자 박재호 올림

라벨: ,