따라서 일부 개발자 / 관리자는 작업을 수행하기 위해 코드를 적게 작성하여 가치를보고 유지 관리 할 코드가 줄어 듭니다.
이것은 실제 목표에 대한 시야를 잃어 버리는 문제입니다.
중요한 것은 개발에 소요되는 시간을 줄이는 것 입니다. 그것은 코드 라인이 아닌 시간 (또는 동등한 노력)으로 측정됩니다.
이는 자동차 제조업체가 각 나사를 넣는 데 0이 아닌 시간이 걸리기 때문에 나사를 적게 사용하여 자동차를 만들어야한다는 말과 같습니다. 이는 정확하지만 자동차의 시장 가치는 나사 수에 따라 정의되지 않습니다 또는 없습니다. 무엇보다도 자동차는 성능이 뛰어나고 안전하며 유지 관리가 용이해야합니다.
나머지 답변은 깨끗한 코드가 어떻게 시간을 늘릴 수 있는지에 대한 예입니다.
벌채 반출
로깅이없는 애플리케이션 (A)을 가져옵니다. 이제 동일한 애플리케이션 A이지만 로깅이있는 애플리케이션 B를 작성하십시오. B에는 항상 더 많은 코드 줄이 있으므로 더 많은 코드를 작성해야합니다.
그러나 많은 시간이 문제와 버그를 조사하고 무엇이 잘못되었는지 알아내는 데 시간이 걸립니다.
응용 프로그램 A의 경우 개발자는 코드를 읽고 계속해서 문제를 재현하고 문제의 원인을 찾기 위해 코드를 단계별로 실행해야합니다. 즉, 개발자는 사용 된 모든 계층에서 실행 시작부터 끝까지 테스트해야하며 사용 된 모든 논리를 관찰해야합니다.
어쩌면 그는 그것을 즉시 찾아내는 것이 운이 좋을지 모르지만 아마도 대답은 그가 생각하는 마지막 장소에있을 것입니다.
응용 프로그램 B의 경우 완벽한 로깅을 가정하면 개발자는 로그를 관찰하고 결함이있는 구성 요소를 즉시 식별 할 수 있으며 이제 어디를 볼지 알 수 있습니다.
이것은 분, 시간 또는 일 절약의 문제 일 수 있습니다. 코드베이스의 크기와 복잡성에 따라
회귀
전혀 건조하지 않은 응용 프로그램 A를 가져 가십시오.
DRY 인 애플리케이션 B를 가져 오지만 추가 추상화로 인해 더 많은 행이 필요했습니다.
변경 요청이 제출되며 로직을 변경해야합니다.
응용 프로그램 B의 경우 개발자는 변경 요청에 따라 (고유, 공유) 논리를 변경합니다.
응용 프로그램 A의 경우 개발자는이 논리의 모든 인스턴스를 사용중인 것을 기억해야합니다.
- 모든 인스턴스를 기억하는 경우에도 동일한 변경 사항을 여러 번 구현해야합니다.
- 그가 모든 인스턴스를 기억하지 못한다면, 이제 모순되는 일관성이없는 코드베이스를 다루고있는 것입니다. 개발자가 거의 사용하지 않는 코드를 잊어 버린 경우이 버그는 최종 사용자에게 분명하지 않을 수 있습니다. 그 당시 최종 사용자가 문제의 원인을 파악하려고합니까? 그럼에도 불구하고 개발자는 변경에 따른 결과를 기억하지 못할 수 있으며 잊혀진이 논리를 변경하는 방법을 찾아야합니다. 어쩌면 개발자는 그때까지 회사에서 일하지 않을 수도 있으며, 이제 다른 사람이 처음부터 모두 알아 내야합니다.
이것은 엄청난 시간 낭비로 이어질 수 있습니다. 개발뿐만 아니라 버그를 찾아서 찾는 것입니다. 개발자가 쉽게 이해할 수없는 방식으로 응용 프로그램이 잘못 작동 할 수 있습니다. 그리고 그것은 긴 디버깅 세션으로 이어질 것입니다.
개발자 호환성
개발자 A가 만든 응용 프로그램 A. 코드는 깨끗하거나 읽을 수 없지만 매력처럼 작동하며 프로덕션 환경에서 실행되고 있습니다. 당연히 문서도 없습니다.
휴일로 인해 개발자 A는 한 달 동안 결석합니다. 긴급 변경 요청이 접수되었습니다. 개발자 A가 돌아올 때까지 3 주를 더 기다릴 수 없습니다.
개발자 B는이 변경을 실행해야합니다. 그는 이제 전체 코드베이스를 읽고 모든 것이 작동하는 방식, 작동하는 이유 및 달성하려는 목표를 이해해야합니다 . 나이가 들지만 3 주 후에 할 수 있다고 가정 해 봅시다.
동시에 응용 프로그램 B (개발자 B가 만든 응용 프로그램 B)에 응급 상황이 발생했습니다. 개발자 B는 사용 중이지만 코드베이스를 모르는 경우에도 개발자 C를 사용할 수 있습니다. 우리는 무엇을해야합니까?
- B가 A 작업을 계속하고 C가 B 작업을하게한다면, 자신이하는 일을 모르는 두 명의 개발자가 있고 그 작업은 차선책으로 수행됩니다.
- B를 A에서 빼내고 B에게 맡기고 C를 A에 놓으면 개발자 B의 모든 작업 (또는 상당 부분)이 폐기 될 수 있습니다. 이 작업은 잠재적으로 며칠 / 주간의 노력이 낭비됩니다.
개발자 A는 휴가를 마치고 돌아와서 B가 코드를 이해하지 못하여 코드를 잘못 구현했음을 알았습니다. 그가 사용할 수있는 모든 리소스를 사용했기 때문에 B의 잘못이 아닙니다. 소스 코드는 읽기 쉽지 않았습니다. A는 이제 코드의 가독성을 수정하는 데 시간을 소비해야합니까?
이러한 모든 문제와 더 많은 문제는 시간 을 낭비하게됩니다 . 예, 단기적으로 깨끗한 코드는 지금 더 많은 노력이 필요 하지만, 불가피한 버그 / 변경 사항을 해결해야 할 경우 배당금 을 지불 하게됩니다.
경영진은 이제 짧은 작업이 앞으로 몇 개의 긴 작업을 절약 할 수 있음을 이해해야합니다. 계획 실패는 실패 할 계획입니다.
그렇다면 더 많은 LOC가 작성되었다는 사실을 정당화하기 위해 사용할 수있는 몇 가지 주장은 무엇입니까?
저의 설명은 경영진에게 3 개월 동안 개발할 수있는 100KLOC 코드베이스 또는 6 개월 동안 개발할 수있는 50KLOC 코드베이스가있는 응용 프로그램을 선호하는 것입니다.
경영진은 KLOC에 신경 쓰지 않기 때문에 개발 시간을 단축 할 것 입니다. KLOC에 중점을 둔 관리자는 관리하려는 대상에 대한 정보를 얻지 못한 채 미세 관리하고 있습니다.