시스템 프로그래밍 작업에 드는 시간 추정에 있어 두 가지 사항을 유념해야 한다:
전체의 6분의 1 정도에 불과
하고, 그에 대한 추정이나 비율이 잘못된 경우 터무니 없는 결과가 나올 수 있다.이 수치들은
작업에 드는 노력이 프로그램 크기의 거듭 제곱에 비례하여 늘어남
을 시사한다.
시스템 디벨롭먼트 코퍼레이션(System Development Corporation, SDC)의 네이너스와 파에 의한 연구 결과에 의하면 거듭 제곱의 지수는 1.5 이다:
찰스 포트먼의 데이터에 따르면 개발 팀이 일정을 절반 정도밖에 지키지 못한다는 것을 발견했다. 각 작업은 애초 추정한 것보다 대략 두 배의 시간이 소요되었다.
개발자들에게 하루 시간을 어떻게 썼는지에 대한 상세한 기록을 요청했고 그 결과, 개발 팀들이 실제 프로그래밍과 디버깅에 쓸 수 있었던 시간은 전체의 50%
밖에 되지 않았다.
요컨데, 원래의 추정은 기술적인 업무를 처리할 시간에 대해 비현실적인 가정을 깔고 있었던 것이다.
그는 아홉 개의 시스템을 프로그래머간의 상호 작용 정도에 따라 나누었으며, 그 생산성에 대해 다음과 같은 결과에 도달했다:
- | 단위 프로그램 개수 | 프로그래머 수 | 소요 기간 (년) | 투입 맨이어 | 프로그램 크기(워드) | 맨이어당 워드 수 |
---|---|---|---|---|---|---|
운영 | 50 | 83 | 4 | 101 | 52,000 | 515 |
유지 관리 | 36 | 60 | 4 | 81 | 51,000 | 630 |
컴파일러 | 13 | 9 | 2 | 71 | 38,000 | 2230 |
번역기 (데이터 어셈블러) | 15 | 13 | 2 | 11 | 25,000 | 2270 |
생산성도 마찬가지로 두 부류로 나뉜다. 제어 프로그램의 경우 맨이어당 600워드, 언어 번역기는 2200워드였다. 네 프로그램 모두 크기는 비슷하지만 작업 그룹 크기, 시간 길이, 모듈 수에서 차이가 난다.
ESS 데이터에 의하면 프로그래밍, 디버깅 예측치와 실제 진척도, 그리고 프로그램 크기에 대한 월별 추정치의 경우 다음과 같다:
아론, 하, OS/360 데이터 모두, 작업 자체의 복잡도 및 난이도와 관련된 생산성의 차이가 현저함을 확인해준다. 복잡도 추정이라는 난감한 작업에 대한 내 조언은, 컴파일러는 통상적인 일괄 처리 응용 프로그램보다 세 배, 운영 체제는 컴파일러보다 세 배 복잡하다는 것이다.
하와 OS/360 의 데이터는 둘 다 어셈블리 언어(???) 로 프로그래밍한 경우였다. 시스템 프로그래밍에 더 고수준 언어가 사용되었을 때의 생산성 자료는 MIT 의 프로젝트 맥 소속인 코르바토에 의하면, 크기가 100만 ~ 200만 워드 사이인 멀틱스 시스템의 평균 생산성이 맨이어당 디버깅된 PL/I 코드 (이딴게... 고수준?) 단위로 1200 라인이라고 한다.
이를 통해 알 수 있는 중요한 결론은 이하와 같다:
솔직히 어셈블리로 작성된 시스템이라고 생각을 전혀 못했다가 마지막 코르바토의 데이터에서 깜짝 놀랐다. 현대에도 이와 같은 이유로 다층의 추상화 과정이 이뤄지고 있으며 최신 트렌드가 확장성있는 방식으로 빠르게 (대형 설계 자체를 피하는 방식으로) 개발하고 배포한다는 점을 생각해보면 그의 혜안에 놀라지 않을 수 없다.
[책] 맨먼스 미신: 소프트웨어 공학에 관한 에세이 (프레더릭 브룩스 지음, 강중빈 옮김)