2010-07-06 4 views
3

조직에서 실제로 생성 된 코드의 양을 재사용 할 수 있는지 측정하고 일부 지침을 설정하고 싶습니다. 외부 세계에 대한 참조를 갖고 싶습니다.측정 코드 재사용 가능성

일반적으로 단일 응용 프로그램에서 얼마나 많은 코드가 재사용됩니까? 더 구체적으로 말하자면 완전한 최종 사용자 제품의 모든 코드를 고려해 (결국 타사 라이브러리를 제외하는 경우) 여러 곳에서 여러 함수와 메서드를 호출 할 수 있습니까?

코드 재사용 가능성을 측정하는 데 사용되는 메트릭은 무엇입니까? opensource 및/또는 폐쇄 소스 소프트웨어에 사용할 수있는 수 또는 연구가 있습니까?

답변

2

일반적으로 단일 응용 프로그램에서 얼마나 많은 코드가 재사용됩니까?

IMO "일반적인"응용 프로그램이 없습니다. 특히이 점에 있어서는 그렇지 않습니다. 애플 리케이션은 크게 다른 아키텍처와 실행 흐름을 가지고있어서 "재사용"의 패턴이 달라집니다.

특정 형식의 파일에서 데이터를 읽고 다른 형식으로 변환 한 다음 저장하는 배치 데이터 처리 응용 프로그램을 생각해보십시오. 실제로는 단일 실행 경로가 있으므로 두 개 이상의 장소에서 많은 메서드가 호출되지 않습니다.

OTOH는 모두 동일한 인프라 계층을 사용하는 여러 개의 독립적 인 플러그인이있는 플러그인 프레임 워크를 고려하므로 해당 계층의 함수는 여러 곳에서 호출됩니다.

첫 번째 앱의 디자인이 두 번째 앱의 디자인보다 더 나쁘다고 말할 수는 없습니다 (실제로 사례 별 세부 정보는 확인하지 않음).

두 번째 경우의 메트릭은 까다 롭습니다. 플러그인없이 핵심 프레임 워크 자체 만 측정하면 재사용 횟수는 적지 만 실제 플러그인에서는 재사용 횟수가 더 많습니다. 플러그인은 외부에서 개발 될 수 있기 때문에 이러한 플러그인에 액세스 할 수 없기 때문에 메트릭이 왜곡 될 수 있습니다.

또 다른 점은 재사용이 여러 단계에서 발생할 수 있다는 것입니다. 앱 내에서 또는 앱간에 코드를 재사용 할 수 있습니다. 후자는 문제의 모든 앱을 고려해서 만 측정 할 수 있습니다.

더 나은 접근 방법은 다른 끝에서 시작하여 복제 된 코드를 검색하는 것입니다 (예 : Java 코드 용 PMD와 같은 도구 사용). 여러 곳에서 코드가 중복되는 경우 리팩터링해야합니다.

+0

나는이 모든 장애물을 알고 있지만, 나는 아직도 뭔가하고 싶다. 나는 어떤 종류의 참고가 필요하다. 다른 모듈을 개별적으로 분석 할 수 있습니다. (아직 시도하지 않았다.) 좋은 접근법은 함수 당 사용 횟수 분포를 조사하는 것이다. (나는 이미 해왔다. X 축에서의 사용 횟수, Y 축에서 X 번 사용 된 함수의 수). 내가 가정하는 것은, 이 배포판은 다른 대형 소프트웨어 패키지와 비슷하므로 비교가 가능해야합니다. 간단한 시작으로, 나는 한 번 이상 호출되지 않는 함수가 얼마나 많은지 관심을 가질 것이다. – user384278

2

"두 개 이상의 장소에서 호출되는 함수의 수"에 대한 질문을 정의하면 기술적으로 정적 분석기를 작성하여 해당 질문에 대답 할 수 있습니다. 호출 그래프를 작성하고 계산을하는 것만으로도 충분합니다 (C, Java 및 COBOL에서 호출 그래프를 추출하는 도구는 this 참조). 실용적인 문제로,이 질문에 직접 답하기 위해 할 일이 많다는 것을 알 수 있습니다.

코드 기반에서 clone detector을 실행하는 것이 좋습니다. 복사 및 붙여 넣기를 수행하는 사람들이 실제로 재사용 한 코드를 보여 주며 정확한 메트릭을 제공합니다. 이와 같은 코드를 복사하는 것이 가장 직접적이고 일반적인 재사용 형식입니다.

저는 약 10 년 동안 복제 탐지기를 제작 해 왔습니다. langauge가 무엇이든 관계없이 거의 모든 시스템에서 클론에 관련된 코드의 20 % (약 10 %가 재사용 됨)가 있습니다. 나는 55 %의 예를 보았다.

0

.NET 플랫폼에서 작업하는 경우 NDepend를 사용하여 소프트웨어에 대해 many metrics을 제공하십시오. "코드 재사용"은 메트릭으로 직접적으로 사용할 수 없지만 (아마도 다른 포스터가 이미 언급 한 이유 때문에) 커플 링 및 응집력과 같은 것들이 당신에게도 흥미로울 수 있습니다.

.net에 없어도 metrics definitions이 도움이 될 수 있습니다.

관련 문제