존재감이 비교적 얇은'응집도'에 빛을 비추어 LCOM으로 종류의 응집도를 측정한다
6085 단어 소프트웨어 품질측량하다JavaScriptLCOM응집도
존재감이 희박한'응집도'
고품질의 소프트웨어를 만들기 위해'결합도가 낮고 응집도가 높다'는 디자인은 좋은 것으로 여겨진다.소프트웨어의 구성 요소(함수, 클래스, 모듈 etc)를 어떻게 분할하는지, 그리고 어떻게 서로 관련되는지에 대한 설계 방침입니다.이'결합도','응집도'의 뜻은 한마디로 다음과 같다.
'결합도'가 자주 화제가 되고 구성 요소 간에 희소한 결합을 유지하는 기술도 널리 알려져 있다.DI(의존성 주입), 의존관계 역전의 원칙, API 우선 따위.
하지만'응집도'는 존재감이 얇지 않나요?결합도가 일부 갈라졌지만 전혀 화제가 되지 않았고, 응집도를 높이기 위한 기술도 잘 알려지지 않았다.
큐타 기사 수와 비교하면 인기 격차가 두드러진다.키워드 검색의 검색 결과'결합도'는 3천807건이었으나'응집도'는 234건(2020년 9월 조사)에 그쳤다.10분의 1 이하.응집도가 인기가 없어서 귀여워요.
그렇다면 응집도라는 개념은 본래 이해하기 어렵다고 생각한다.관련 조작을 하나의 구성 요소로 정리하고 구성 요소의 책임과 의무를 명확히 하며 하나의 구성 요소로 설계하여 하나의 책임에 집중하도록 한다. 나는 이렇게 말하면 이해할 수 있지만 구체적으로 어떻게 해야 좋을지 모르겠다.
따라서 다음 절에서 응집도를 측정하는 도량인 LCOM을 소재로 하여 응집도를 더욱 구체적으로 이해하고 싶습니다.
응집량 LCOM
클래스의 응집도를 측정하는 메트릭은 LCOM(Lack of Cohesion of Methods)이다.직역하면'방법의 응집도 부족'이다.이름처럼 응집도가 부족하면 값이 커진다.LCOM에는 여러 가지 유형이 있는데, 이번에 소개한 것은 이른바 LCOM4다.
응집된 반에서 반 내의 방법은 서로 관련되어야 한다.이'상호 관련'을 정량적으로 평가하고자 하는 것은 LCOM이라는 도량이다.
LCOM은 메소드 내에서 참조하는 인스턴스 변수(및 기타 메소드)에 초점을 맞춥니다.직관적으로 말하면 두 가지 방법이 서로 관련되면 반드시 같은 실례 변수를 참조할 것이다.LCOM에서는 이러한 상호 연관된 방법(=동일 인스턴스 변수 참조)으로 그룹을 구성하여 그룹 수를 계산합니다.
그림으로 표시하면 이해하기 쉽다.어떤 반 내의 방법이 이런 구조라고 가정해 보자.
이 종류에는 네 가지 방법과 세 개의 실례 변수가 있다.methodA는 methodC를 호출하고 methodC는 vara와 varB를 참조합니다.화살표는 참조 관계를 나타냅니다.두 개의 파란색 상자로 둘러싸인 그룹을 화살표로 연결하는 방법으로 조합합니다.그룹 수가 LCOM 값으로 직접 변경됩니다.이 레벨의 LCOM은 2이다.
LCOM4의 뜻은 매우 명쾌하다. 아래와 같다.
LCOM4 형식 정의
LCOM4는 위에서 설명한 바와 같이 형식적인 정의를 먼저 살펴보자.
[LCOM4의 정의]
어떤 종류에서
M
는 방법의 집합이고, I
는 실례 변수의 집합이다.아래의 무방향 도표G
를 고려하시오.M
{ <m, n>∈MxM | (mがiにアクセスし、nがiにアクセスするようなi∈Iが存在する)or(mがnを呼び出す)or(nがmを呼び出す) }
G
의 연속 구성 요소 수입니다.참고로 위에서 말한 바와 같이 LCOM에는 여러 가지 변주곡이 있다.응집도 - Qita에는 LCOM1~3의 정의가 있어 참고만 제공한다.
JavaScript 설치 예
오랜만에 JavaScript 클래스에서 설치 예를 살펴보겠습니다.
의미 있는 클래스는 아니지만 다음 클래스는 LCOM1의 예입니다.
// LCOM = 1 (高凝集)
class A {
methodA() {
return this.var1
}
methodB() {
return this.var1
}
}
다음 예도 LCOM1입니다.// LCOM = 1
class A {
methodA() {}
methodB() {}
methodC() {
this.methodA()
this.methodB()
}
}
다음 클래스는 LCOM=2입니다.// LCOM4 = 2 (低凝集)
class A {
methodA() {
return this.var1
}
methodB() {
return this.var2
}
methodC() {
return this.methodB()
}
}
ESLight의 규칙을 구현해 보았습니다.
학습과 함께 ESLight 플러그인을 만들어 보았습니다.JavaScript 클래스의 LCOM4 값을 2 이상 측정하면 경고가 표시됩니다.
총결산
이번에는'결합도'보다 얇은'응집도'에 초점을 맞춰 설명한다.
우리는 학급의 응집도를 측정하는 도량인 LCOM을 소개했는데 실제 응집도는 학급에 한정된 개념이 아니라 더욱 광범위하다.결합도는 함수, 클래스, 모듈, 마이크로 서비스 등 각 방면에서 나타나고 마찬가지로 응집도도 다양한 수준에서 고려할 수 있다.
응집도의 양도에도 다양한 디자인이 있습니다.관심 있으면 조사를 추천합니다.
참고 자료
Reference
이 문제에 관하여(존재감이 비교적 얇은'응집도'에 빛을 비추어 LCOM으로 종류의 응집도를 측정한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fujiharuka/items/65125592bd31e2a1c16d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)