2010-04-17 7 views
3

시스템 또는 응용 프로그램의 객체 지향성을 결정하는 데 도움이되는 메트릭이 있습니까? .NET Reflector Add-ins 코드 플렉스 프로젝트에서 꽤 깔끔한 메트릭을 보았습니다. 그러한 통계가 존재하지 않는다면 그것이 가능하거나 유용 할 것입니까? 객체 지향 프로그래밍의 3 가지 교의가 있습니다 : 캡슐화, 상속, 다형성. 프로그램을 이들에 대해 평가 한 도구는 전체 객체 지향 이상이 삭제 된 C# (또는 유사한) 코드 기반의 영역을 표시 할 수 있으며 나머지 영역과 관련된 버그 수는 얼마나 될지를 나타낼 수 있습니다.객체 지향성을 측정 할 수있는 메트릭

+4

이것은 상속의 사용이 자동으로 좋은 것인가 아닌가에 달려 있습니다. 제 경험상 대부분의 개발자는 그것을 매우 잘못 사용합니다. –

+0

나는 객관적인 척도를 찾고 있는데, 그 원칙들이 전혀 적용되지 않았는지보기 위해, 나는 그 효능에 대한 결론을 이끌어 낼 수있다. 개발자가 언어 또는 패러다임 기능을 잘못 사용하는 방법에 대한 일화 적 증거가 커뮤니티 위키 질문의 범위가 될 것이라고 생각합니다. 지금은 피하려고합니다. – Jono

+2

클래스 결합 및 상속 깊이에 대한 메트릭이 있습니다. 이는 각각 캡슐화 및 복잡성의 대략적인 척도입니다. 패턴이 'OO'인지 여부에 대한 구체적인 측정 값이 아니라 주어진 클래스를 이해하기 위해 한 번에 이해해야하는 코드의 양을 나타내는 척도입니다. –

답변

1

좋은 OO 디자인의 의미있는 해석 중 하나는 디자인의 객체가 모델링되는 도메인 객체와 논리적으로 일관성있게 매핑된다는 것입니다. 이를 해석하려면 전반적인 상황을 포함하여 해결하려는 문제에 대한 깊은 지식이 필요합니다. 자동화 된 측정 항목은 이러한 방식으로 컨텍스트를 이해할만큼 정교하지 않습니다. 내가 할 기대했다

주요 포인트는 OO '은 캡슐화, 상속 및 다형성 (polymorphism)'되지 않는 것입니다 : 주석에 대한 응답으로


, 나는 내가 조금 확장 거라 생각 했어요. 그것들은 잘 정의 된 방식으로 상호 작용하는 객체로서 문제의 모델링을 가능하게하는 도구 일뿐입니다. 좋은 척도가 필요하다면, 실제로 측정하려고하는 것을 이해해야합니다. 감정을 뒷받침하는 척도로 코드 품질에 대한 '장감감'개념의 유효성을 검사하려는 것 같습니다. 그렇다면 실제 근본적인 관심사는 무엇입니까? 예상치 못한 부작용으로 인해 코드가 부서지기 쉽고 쉽게 손상 될 수 있다고 우려하십니까? 객체 모델이 너무 단편적이어서 따라 가기가 어렵습니까? 개별 개체가 너무 커서 이해하고 유지할 수 있습니까? 식별 할 수있는 결함 유형을 더 잘 정의 할 수 있다면 적절한 측정 항목을 찾는 데 도움이됩니다. 도움이되는 경우 useful set of metrics입니다.

+0

자동화 도구가 숫자 (42?)를 내고 OO 방식으로 작성되지 않은 것으로 주관적으로 판단한 시스템 부분과 잘 연관되어 있으면 좋았을 것입니다. 절차 적 프로그래밍 (길고 복잡한 방법)의 증거를 보여주는 다른 측정 지표가 반례로 충분해야한다고 생각합니다. 두 가지 답변을 보내 주셔서 감사합니다. – Jono

+0

예, 특정 코드베이스를 염두에두고 있습니다. 수년에 걸쳐 수많은 개발자들이 추가 한 공식 문서가 없으며 이해를 방해하는 많은 특성을 보여줍니다. 따라서, 약간의 변경만으로도 구현에 오랜 시간이 걸리며 (심지어 올바르게 구현되기까지 더 오래 걸릴 수도 있습니다.) 심지어 예상치 못한 부작용이있을 수도 있습니다. 의도 한대로이 코드의 문제점을 식별하는 데 유용한 다른 메트릭이 있습니다. 존재하지 않는 척도를 지적하고 "이봐 요! 우리는 기본 OO 설계 원칙을 따르지 않았고 우리가 어떻게 이런 혼란에 빠졌는지 말하지 않았습니까?"라고 말하고 싶었습니다. – Jono

+0

부작용을 도입하는 것이 얼마나 쉬운 지 분석하려면 각 방법에 대한 클래스 커플 링을 살펴 보는 것이 도움이 될 것이라고 생각합니다.또한 OO 설계 원칙에 반하고 변화를 일으킬 때 부작용을 일으킬 가능성이있는 영역이기 때문에 모든 글로벌 국가를 찾아야합니다. 글로벌 상태를 참조하는 메소드가 버그를 가지고있을 가능성이 더 큽니다. –

0

.NET 개발자 용 NDepend 도구에서 지원하는 82 code metrics 정의를 살펴보십시오.