시스템 또는 응용 프로그램의 객체 지향성을 결정하는 데 도움이되는 메트릭이 있습니까? .NET Reflector Add-ins 코드 플렉스 프로젝트에서 꽤 깔끔한 메트릭을 보았습니다. 그러한 통계가 존재하지 않는다면 그것이 가능하거나 유용 할 것입니까? 객체 지향 프로그래밍의 3 가지 교의가 있습니다 : 캡슐화, 상속, 다형성. 프로그램을 이들에 대해 평가 한 도구는 전체 객체 지향 이상이 삭제 된 C# (또는 유사한) 코드 기반의 영역을 표시 할 수 있으며 나머지 영역과 관련된 버그 수는 얼마나 될지를 나타낼 수 있습니다.객체 지향성을 측정 할 수있는 메트릭
답변
좋은 OO 디자인의 의미있는 해석 중 하나는 디자인의 객체가 모델링되는 도메인 객체와 논리적으로 일관성있게 매핑된다는 것입니다. 이를 해석하려면 전반적인 상황을 포함하여 해결하려는 문제에 대한 깊은 지식이 필요합니다. 자동화 된 측정 항목은 이러한 방식으로 컨텍스트를 이해할만큼 정교하지 않습니다. 내가 할 기대했다
주요 포인트는 OO '은 캡슐화, 상속 및 다형성 (polymorphism)'되지 않는 것입니다 : 주석에 대한 응답으로
, 나는 내가 조금 확장 거라 생각 했어요. 그것들은 잘 정의 된 방식으로 상호 작용하는 객체로서 문제의 모델링을 가능하게하는 도구 일뿐입니다. 좋은 척도가 필요하다면, 실제로 측정하려고하는 것을 이해해야합니다. 감정을 뒷받침하는 척도로 코드 품질에 대한 '장감감'개념의 유효성을 검사하려는 것 같습니다. 그렇다면 실제 근본적인 관심사는 무엇입니까? 예상치 못한 부작용으로 인해 코드가 부서지기 쉽고 쉽게 손상 될 수 있다고 우려하십니까? 객체 모델이 너무 단편적이어서 따라 가기가 어렵습니까? 개별 개체가 너무 커서 이해하고 유지할 수 있습니까? 식별 할 수있는 결함 유형을 더 잘 정의 할 수 있다면 적절한 측정 항목을 찾는 데 도움이됩니다. 도움이되는 경우 useful set of metrics입니다.
자동화 도구가 숫자 (42?)를 내고 OO 방식으로 작성되지 않은 것으로 주관적으로 판단한 시스템 부분과 잘 연관되어 있으면 좋았을 것입니다. 절차 적 프로그래밍 (길고 복잡한 방법)의 증거를 보여주는 다른 측정 지표가 반례로 충분해야한다고 생각합니다. 두 가지 답변을 보내 주셔서 감사합니다. – Jono
예, 특정 코드베이스를 염두에두고 있습니다. 수년에 걸쳐 수많은 개발자들이 추가 한 공식 문서가 없으며 이해를 방해하는 많은 특성을 보여줍니다. 따라서, 약간의 변경만으로도 구현에 오랜 시간이 걸리며 (심지어 올바르게 구현되기까지 더 오래 걸릴 수도 있습니다.) 심지어 예상치 못한 부작용이있을 수도 있습니다. 의도 한대로이 코드의 문제점을 식별하는 데 유용한 다른 메트릭이 있습니다. 존재하지 않는 척도를 지적하고 "이봐 요! 우리는 기본 OO 설계 원칙을 따르지 않았고 우리가 어떻게 이런 혼란에 빠졌는지 말하지 않았습니까?"라고 말하고 싶었습니다. – Jono
부작용을 도입하는 것이 얼마나 쉬운 지 분석하려면 각 방법에 대한 클래스 커플 링을 살펴 보는 것이 도움이 될 것이라고 생각합니다.또한 OO 설계 원칙에 반하고 변화를 일으킬 때 부작용을 일으킬 가능성이있는 영역이기 때문에 모든 글로벌 국가를 찾아야합니다. 글로벌 상태를 참조하는 메소드가 버그를 가지고있을 가능성이 더 큽니다. –
.NET 개발자 용 NDepend 도구에서 지원하는 82 code metrics 정의를 살펴보십시오.
- 1. 압축 XML 메트릭.
- 2. SQL Server 메트릭
- 3. 좋은 코드 측정 도구입니까?
- 4. 코드 메트릭 이해
- 5. WinCE의 소프트웨어 라이브러리 성능 메트릭
- 6. PHP에서 구문 분석 시간을 측정 할 수있는 방법이 있습니까?
- 7. WPF flowdoc에서 블록/섹션 높이를 측정 할 수있는 방법이 있습니까?
- 8. 코드 메트릭 평가
- 9. 개체 지향 메트릭?
- 10. 관련 가치가있는 재미있는 소프트웨어 메트릭
- 11. 시간이 지남에 따라 맞춤 측정 항목을 추적하고보고 할 수있는 웹 플랫폼/서비스를 찾고 있습니다.
- 12. AWT 텍스트 측정 구현
- 13. 두 이미지의 메트릭 값을 찾는 방법은 무엇입니까?
- 14. 근거리 측정
- 15. 측정 할 수없는 CPU 사용량?
- 16. 알고리즘에 대한 메트릭
- 17. C에서 글꼴 메트릭
- 18. 성공적인 리팩토링 측정을위한 메트릭
- 19. 클라이언트 성능 측정
- 20. 자바 스크립트 포커스 측정
- 21. Flash/AS3의 글꼴 메트릭
- 22. SVG 및 글꼴 메트릭
- 23. 네트워크 트래픽을 어떻게 측정 할 수 있습니까?
- 24. 화면에서 손가락의 압력을 측정 할 수 있습니까?
- 25. 자바에서 메트릭 계산을위한 프로그램
- 26. iPhone 앱의 성능 측정 항목은 무엇입니까?
- 27. NDepend 어셈블리에 대한 메트릭
- 28. 파라 메트릭 다형성은 자바
- 29. 레일스에서 이상한 메트릭 생성하기
- 30. 메트릭/보고서 생성 문제
이것은 상속의 사용이 자동으로 좋은 것인가 아닌가에 달려 있습니다. 제 경험상 대부분의 개발자는 그것을 매우 잘못 사용합니다. –
나는 객관적인 척도를 찾고 있는데, 그 원칙들이 전혀 적용되지 않았는지보기 위해, 나는 그 효능에 대한 결론을 이끌어 낼 수있다. 개발자가 언어 또는 패러다임 기능을 잘못 사용하는 방법에 대한 일화 적 증거가 커뮤니티 위키 질문의 범위가 될 것이라고 생각합니다. 지금은 피하려고합니다. – Jono
클래스 결합 및 상속 깊이에 대한 메트릭이 있습니다. 이는 각각 캡슐화 및 복잡성의 대략적인 척도입니다. 패턴이 'OO'인지 여부에 대한 구체적인 측정 값이 아니라 주어진 클래스를 이해하기 위해 한 번에 이해해야하는 코드의 양을 나타내는 척도입니다. –