나는 내가 일하러 도착한 그 날을 분명히 기억할 수 있습니다 - 2003 년 말 - 6시 이전에 쉽게있었습니다. 저는 NASA 제안을위한 테스트 환경을 프로토 타이핑하는 작은 팀을 이끌고있었습니다. 필자는 두 명의 프로그래머가 완전히 재 설계된 인공위성 시뮬레이션 환경을 시연하는 것을 보면서 놀랐다. 잠깐 - 며칠 만 지나면 FORTRAN의 30,000 줄과 어셈블리 코드의 4,000 줄 가까이를 다시 썼습니다. 그들은 어떻게 했습니까? 그들은 그것을 :goop:이라고 불렀습니다. :손 세정제?:나는 물었다. 아니요, LabVIEW (내쇼날 인스트루먼트)의 :GOOP:라는 새로운 개발 언어를 언급하고있었습니다. 그래픽 기반 객체 지향 프로그래밍.
민간 견적 소프트웨어
프로그래머가되는 것을 그만두기로 결심 한 날이었습니다. 나는 내 시대에 최신 프로그래밍 패러다임 (그리고 :패러다임 (paradigm):과 같은 현지어)에 더 관심을 갖지 않았습니다. 나는 과거를 포기하고 프로그램 관리자로서의 나의 역할을 포용하기로 결정했습니다. 하지만 이제 다시 되돌아 보면 나는 몇 가지 질문을 더했으면 좋겠다..
측정 실패
1995 년 보스톤의 IT 프로젝트 관리 연구 및 컨설팅 회사 인 The Standish Group은 최초의 CHAOS Summary 보고서를 발표했습니다. 보고서는 IT 프로젝트의 성공 또는 실패를 측정하기위한 업계 점수 카드가되었습니다. 이는 보고서에 공개 된 실패한 프로젝트의 놀라운 부분에 기인합니다. 이 보고서는 모의 된 것으로 보인 모닝콜의 역할을했다. 실패한 프로젝트의 비율이 절반 이상 감소했다는 CHAOS의 10 주년 기념 보고서가 발표되었다. 그러나 아쉽게도, 불과 5 년 만에 실패한 프로젝트의 수가 다시 증가하고 있습니다. 2009 Standish Group CHAOS 보고서는 거의 4 개의 프로젝트 중 1 개가 파멸하고 있음을 나타냅니다. 그러나 왜?
원래 1995 년 CHAOS 보고서에 따르면 성공 확률을 높이기 위해서는 프로젝트가 복잡해지고 소프트웨어가 :성장:해야합니다. 소프트웨어를 더 작고 관리하기 쉬운 부분으로 축소하여 바깥쪽으로 개발하는 것이 좋습니다. 이보고 된 실패한 프로젝트의 감소가 믿어 진다면 소프트웨어 산업은 더 작은 요소 (1)를 사용하여 :성장하는:프로젝트에 부지런한 것처럼 보입니다. 그러나 이해해야 할 점은 해당 프로젝트가 더 작은 크기의 :조각:으로 구성되어 있다는 것입니다.
1995 년 소프트웨어의 크기를 결정하는 가장 일반적인 방법은 소스 코드 줄 수 (SLOC)를 계산하거나 기능 점수를 계산하는 것이 었습니다. 소프트웨어 사이징은 소프트웨어 복잡성과 결함 확률 (버그)을 측정하는 데 사용할 수있는 추가 측정 기준 및 프로세스를 자동화하는 데 사용할 수있는 수많은 도구를 사용하여 20 년 이상에 걸쳐 확립 된 성숙한 방법론이었습니다. 프로젝트의 규모가 이해된다면 이전 성과 측정치 (및 기타 여러 매개 변수)를 적용하여 일정과 노력을 예측할 수있는 능력을 쉽게 모델링 할 수 있습니다. 개발주기 초기에 현실적인 예측을 예측함으로써 프로젝트의 성공 확률은 시간, 예산, 약속 된 기능에서 상당히 높았으며 결과적으로 실패는 거의 없었습니다..
미래로 귀환
다시 2003 년입니다. 그래픽 구성 요소를 사용하여 누구나 소프트웨어를 만들 수있는 새로운 방법론에 관해서 방금 들었습니다. 이것은 정말로 새로운 것이 전부는 아니 었습니다. 1990 년대 중반에서 2000 년대 초반까지 :시각적:및 :휴대용:언어가 업계에서 인정을 받아 개발 환경을 지배하기 시작했습니다. 불과 몇 년 만에 환경에 의해 :생산 될:수있는 언어가 언어가되었습니다. 결국, 소프트웨어 제조 도구가 :비주얼:프로그래밍을 사용하여 생성 할 수있는 엄청난 규모의 경제와 누가 논쟁 할 수 있습니까? 그리고 특히 - 팀원이 3 일간 :깡패:를 꾸리는 것을 지켜본 후 - 저는 경영자에게 영웅이었습니다..
그러나 기다림 - 위에서 언급 한 카오스 연구에서의 타임 라인과 소프트웨어 실패의 재발에 주목하십시오. 나는 인과 관계의 큰 지지자는 아니지만 적어도 잠시 시간을내어 소프트웨어 실패의 추세에 기여할 수있는 잠재력을 탐구 해 봅시다. 첫째, TIOBE Programming Community (2)의 그림 - 프로그래밍 언어로 인기가있는 비공식적 인 관리자.
5 년 동안 가장 많이 성장한 언어는 자바, C #, JavaScript, Ruby 순입니다. 유행중인 일부 오래된 언어로는 Perl, C 및 Visual Basic이 있습니다. 왜? 아마도 이러한 언어의 대부분이보다 정교 해지고 통합 개발 환경에 싸여 있으며 생산성 향상의 유일한 목적으로 자리 잡았 기 때문일 수 있습니다. 다시 말해서, :시각적:이되었습니다. 코드를 작성하는 것이 더 쉬울 수 있지만 생성 된 코드의 :크기 조정:방법에 대한 고려는 거의 없습니다. 실제로 환경 빌더는 간신히 필요로하는 것을 자랑합니다 두건의 밑에 두려워하기 위하여; 그리기, 클릭 및 실행 - 실행되는 인스턴트 코드.
크기 문제
소프트웨어 구축에 소요되는 시간, 비용 및 노력에 대한 가장 중요한 요인은 구축 대상의 범위 (또는 크기)이므로 정확한 추정에서 가장 중요한 요인 중 하나입니다. 소프트웨어 추정의 대부가 (Barry W. Boehm) - :오늘날의 알고리즘 소프트웨어 비용 모델을 사용하는 가장 큰 어려움은 사운드 사이징 추정치를 제공하는 문제입니다:(3)라고 경고했습니다. 어떻게 추정기가 :GOOP:를 측정하고 코드 생성기가 삽입하는 코드 라인이 얼마나 많이 필요합니까? C ++ 템플릿 중 몇 퍼센트를 제거하고 (우리가 감히) 클래스를 근본적으로 안정적으로 유지할 수 있습니다 - 간결합니다. 마크 트웨인 (Mark Twain)은 :글쓰기에서 가장 어려운 부분은 모든 여분의 단어를 제거하는 것:이라고 말했습니다.
소프트웨어 코드 줄 수를 더 이상 계산할 수 있습니까? 사용할 수있는 최상의 코드 계산 도구를 사용한다고해도 불필요한 많은 코드 줄을 계산하는 것이 아닙니까? 또는 역으로 - 계산되지 않아야하는 모든 코드를 제거하는 데 프로그래머가 얼마나 많은 시간을 할애 했습니까? 내 의혹은 모든 코드가 그대로 유지된다는 것입니다 (FAA DO-178B와 같은 엄격한 기준이 시스템을 확인하지 않는 한).
Ada와 FORTRAN에 어떤 일이 일어 났는지를 코드 계산 주제로 다루었습니다. 셀 수있는 80 년대와 90 년대의 맹렬한 언어? 아아, 그들은 지금 24 위와 25 위입니다; 다시 한번, 인과 관계가 가정되지 않습니다. (그렇지만 내 혀는 뺨에 단단히 심어 져 있습니다.) 견적은 그 때 매우 쉬워 보였다. 음악 큐.
흠, Standish 보고서에 분명히있는 것이 있습니다. 통계학자가 :확인 오류:라고 부르는 것을 만들지 않는다고 가정하십시오. 아마도 업계에서는 소프트웨어의 크기를 너무 복잡하게 잡아서 결과적으로 좋은 비용 견적을 정확하게 산출 할 수있는 능력을 갖추게 될 것이라고 제안 할 것입니다. 궁극적으로 업계가 :셀 수있는:언어에서 벗어나 :시각적:표현으로 옮겨가는 경우 크기에 대한 노력을 정확하게 연관시킬 수있는 메커니즘이 필요하거나 그 반대의 경우도 있습니다.
IBM Rational Rose, RSA Integration 및 Rhapsody와 같은 그래픽 요구 사항 및 디자인 도구를 구매하는 데 사용 된 수천 달러를 생각해보십시오. 이러한 유스 케이스 모델의 출력을 사용하여 유스 케이스 포인트 (조정되지 않음)를 계산 한 다음 파라 메트릭 모델에 공급할 수 있습니다. :디자인 패턴:을 구축하고 있습니까? 좀 더 많은 시간을 소비하고 COSMIC 기능 점수를 계산하여 패턴과 함께 게시하면 왜 패턴을 구현하는 비용을 계산할 수 있습니다. 최소한 요구 사항에서 코드로 전달하기 전에 파라 메트릭 모델에서 허용하는 일부 :기능적:크기를 계산하려고 시도한 다음 나중에 다시 돌아가 함수 당 가정 노력이 올바른지 확인하십시오.
소프트웨어 공동체는 생산성 향상을위한 도구를 만드는 데 큰 진척을 보였습니다. 그러나 우리는 절반의 방법을 중단했기 때문에 우리의 추정치가 잘못되었습니다! 소프트웨어 비용과 관련된 소프트웨어 크기를 재구성하고 식별해야하며 정확한 추정을 계산하기위한 매개 변수 도구가 필요합니다. 그때까지는 새로운 제품 개발을 평가하고 기존 애플리케이션을 수정할 때 부족 지식에 대한 맹목적인 신뢰를 얻는 것이 전적으로 추측됩니다. 결국 - GOOP을 만드는 데 얼마나 오래 걸릴까요??
The Standish Group의 Jim Johnson 회장은 IT 프로젝트의 성공률 하락을 관찰하기 위해 너무 놀랐다 고 말하면서 CHAOS 보고서를 발표하기 전에 4 개월 동안 기다렸다가 결과가 정확하다는 것을 확인했습니다. 그는 IT 프로젝트의 실패가 2007 년 12 월에 시작된 경제 침체에 따른 경기 침체에 기인한다고 지적하고 후속 예산 삭감.
2- http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
3- 소프트웨어 엔지니어링 - 소프트웨어 개발, 관리 및 연구에 대한 Barry W. Boehm의 평생 기여, Richard W. Selby 편집, Wiley-IEEE Computer Society Pr; Reprint edition (2007 년 6 월 4 일) 소프트웨어 견적 방법 일부 주택 소유자는 개조 및 개조와 관련하여 비전과 계획에 아무런 문제가 없습니다. 단지 일부 개개인이 일반적인 개조 아이디어를 생각한 후에 계획을 세우고 그 계획을 많은 도움없이 볼 수있는 것 같습니다. 그러나 주택 소유자 대다수의 경우에는 그렇지 않습니다. 홈 개선 소프트웨어가 도움이 될 수있는 곳입니다..
모든 컴퓨터 프로그램이 모든 상황에 완벽하지는 않지만 대부분의 주택 소유자는 개조 / 개보수 프로젝트를보다 원활하게 진행하는 데 큰 도움이 될 계획 프로그램 및 비용 견적 소프트웨어를 찾을 수 있습니다. 이것은 do-it-yourself 유형의 사람들과 프로젝트를 전문가에게 넘기기 전에 비용에 대한 아이디어를 얻고 자하는 사람들에게 해당 될 수 있습니다.
아주 기본적인 개장 작업을 원하거나 가정에서 단순히 무언가를 업그레이드하려는 일부 부동산 소유주는 계획 및 비용 견적 프로그램 중 가장 간단한 것을 선택할 수 있습니다. 이것들은 많은 상황에서 아주 잘 작동 할 수 있습니다. 그러나 계획 및 비용 산정 모두를위한 대부분의 주택 리모델링 소프트웨어의 전문 버전이 있습니다. 이것들은 조금 더 비싸지 만 집주인에게 몇 가지 선택권을 줄 것입니다 (그리고 아마도 더 자세한 비용 추정치를 줄 것입니다).
물론 집주인이 업무를 수행 할 계획이없고 비용에 대한 세부 사항이 중요하지 않은 경우 계획 및 재무 소프트웨어가 필요하지 않을 수도 있습니다. 리모델링 작업을하는 대부분의 전문가는 계획하고 추정하는 컴퓨터 소프트웨어를 가지고 있습니다. 보통 원래 계획, 인건비 및 재료비 등을 감당할 수있는 충분한 경험이없는 사람들.
가정 개조 소프트웨어에서 무엇을 찾아야하는지에 대한 몇 가지 기본적인 아이디어는 프로젝트의 초기 단계를 원활하게 진행하는 데 도움이됩니다. 이 계획 / 추정 소프트웨어는 일반적으로 목재를 자르거나 손톱을 넣기 전에 잘 설계되어 있음을 기억하십시오. 이는 주택 소유자 또는 프로젝트를 돕는 다른 사람이 재료를 구입하기 시작할 때 중요합니다. 대부분의 계획 및 비용 견적 소프트웨어는 재료 목록을 인쇄 할 수 있으며 심지어 전체 프로젝트의 보고서를 제공합니다. 집주인이 도면, 평면도 및 예산 세부 사항에 대한 소프트웨어로 돌아 가기 전에 예비 계획 및 비용 견적을 확인하는 것도 중요합니다. 일반적으로 계획 및 추정 프로세스는 천천히 그리고 여러 단계로 수행되어야합니다.
꽤 좋은 자유 소프트웨어 프로그램이 있습니다. 이 중 일부는 웹 사이트에서 다운로드 할 수 있습니다. 리모델링 프로젝트의 원래 아이디어 / 비전에 가장 적합한 소프트웨어 유형을 얻으려면 몇 가지주의를 기울여야합니다. 가장 신중한 계획과 최고의 소프트웨어로도 도전과 변화가있을 수 있습니다 (일부는 예상 할 수 있고 다른 것은 기대할 수 없음). 대부분의 경우, 일부 소프트웨어 만 사용하면 도움이됩니다. 작업에 적합한 소프트웨어를 사용하여 욕실을 개조하거나 단순히 작업대를 구축하면 문제가있는 프로젝트와 원활하게 진행되는 프로젝트의 차이가 발생할 수 있습니다..