응집력(컴퓨터 과학

Cohesion (computer science)

컴퓨터 프로그래밍에서, 응집력모듈 내부의 요소들이 [1]함께 속해 있는 정도를 말합니다.어떤 의미에서, 이것은 클래스의 메서드와 데이터 사이의 관계 강도와 그 클래스가 서비스하는 어떤 통일된 목적이나 개념의 척도이다.다른 의미에서, 이것은 클래스의 메서드와 데이터 자체의 관계 강도의 척도입니다.

응집력은 순서형 측정으로 보통 "높은 응집력" 또는 "낮은 응집력"으로 설명됩니다.높은 응집력은 견고성, 신뢰성, 재사용 가능성, 이해성 등 소프트웨어의 바람직한 특성과 관련되어 있기 때문에 높은 응집력을 가진 모듈이 더 선호되는 경향이 있습니다.반면, 낮은 응집력은 유지, 테스트, 재사용, 심지어 이해하기가 어려운 등 바람직하지 않은 특성과 관련이 있습니다.

응집력은 종종 다른 개념인 커플링과 대조된다.높은 응집력은 종종 느슨한 결합과 관련이 있으며,[2] 그 반대도 마찬가지입니다.커플링과 응집성의 소프트웨어 메트릭은 1960년대 후반 Larry Constantine에 의해 구조화 설계의 일부로 개발되었으며, 이는 유지관리 및 수정 비용을 절감하는 "좋은" 프로그래밍 관행의 특성에 기초하고 있습니다.Structured Design, myers & Constantine(1974년)[3]Yourdon & Constantine(1979년)[1]에 구조화 설계, 결합 및 결합이 발표되었으며, 이후 소프트웨어 엔지니어링의 표준 용어가 되었습니다.

높은 응집력

객체 지향 프로그래밍에서 클래스를 제공하는 메서드가 여러 면에서 유사한 경향이 있으면 클래스는 높은 [4]응집력을 갖는다고 합니다.응집력이 높은 시스템에서는 코드 가독성과 재사용성이 향상되고 복잡성도 관리 가능한 상태로 유지됩니다.

응집력

다음과 같은 경우 응집력이 향상됩니다.

  • 클래스에 포함된 기능들은 메서드를 통해 액세스되며 많은 공통점을 가지고 있습니다.
  • 방법은 거칠게 세분화되거나 관련이 없는 데이터 집합을 방지하여 소수의 관련 활동을 수행합니다.
  • 관련 메서드는 같은 소스 파일에 있거나 다른 방법으로 그룹화되어 있습니다.예를 들어, 개별 파일이지만 같은 서브 디렉토리/폴더에 있습니다.

높은 응집력(또는 "강력 응집력")의 장점은 다음과 같습니다.

  • 모듈의 복잡성 경감(간단하고 조작이 적음).
  • 도메인 내의 논리적인 변경이 영향을 미치는 모듈의 수와 다른 모듈의 변경이 적게 필요하기 때문에 시스템의 유지보수성이 향상됩니다.
  • 모듈 재사용성 향상.어플리케이션 개발자가 모듈에 의해 제공되는 일관된 일련의 조작 중에서 필요한 컴포넌트를 보다 쉽게 찾을 수 있기 때문입니다.

원칙적으로 모듈은 단일 요소로만 구성됨으로써 완벽한 응집력을 가질 수 있지만, 예를 들어 단일 기능을 갖는 원자적인 요소는 실제로는 복잡한 작업을 단일 단순 요소로 표현할 수 없습니다.따라서 단일 요소 모듈에는 작업을 수행하기 위해 너무 복잡하거나 너무 좁아서 다른 모듈과 긴밀하게 결합된 요소가 있습니다.따라서 응집력은 단위 복잡성과 결합성 모두와 균형을 이룬다.

응집력 종류

응집력은 정성적 척도로, 즉 측정할 소스 코드를 루브릭을 사용하여 검사하여 분류를 결정하는 것을 의미합니다.최악의 것부터 최선의 것까지의 응집 타입은 다음과 같습니다.

우연의 일치(최악)
우연의 일치란 모듈의 부품이 임의로 그룹화된 경우입니다.부품 간의 유일한 관계는 함께 그룹화된 것입니다(예: "유틸리티" 클래스).예:
/* 그룹: 함수 정의 부품: 각 함수에 대한 용어 */ 모듈 A{   /* r(x) = 5x + 3의 구현 이러한 방법으로 함수를 그룹화할 특별한 이유는 없습니다. 모듈에는 우연의 합성이 있다고 합니다. */    r(x) = a(x) + b(x)    a(x) = 2x + 1   b(x) = 3x + 2 } 
논리적 응집력
논리적 통합이란 모듈의 일부가 본질적으로 다르지만 동일한 작업을 수행하도록 논리적으로 분류되어 있기 때문에 그룹화되는 경우입니다(예를 들어 모든 마우스 및 키보드 입력 처리 루틴을 그룹화하거나 모든 모델, 뷰 및 컨트롤러를 MVC 패턴의 개별 폴더에 번들하는 경우).
시간적 응집
시간적 응집력은 모듈의 부품이 처리될 때 그룹화 되는 것입니다.프로그램 실행 시 특정 시간에 부품이 처리됩니다(예: 열려 있는 파일을 닫고 오류 로그를 생성하여 사용자에게 통지하는 예외를 포착한 후 호출되는 함수입니다.
절차적 응집력
절차적 통합은 모듈의 일부가 항상 특정 실행 순서(예를 들어 파일 권한을 확인한 후 파일을 여는 기능)를 따르기 때문에 그룹화된 경우입니다.
커뮤니케이션/정보의 통합성
통신 응집력은 모듈의 일부가 동일한 데이터(예: 동일한 정보 기록에서 작동하는 모듈)에 대해 작동하기 때문에 그룹화되는 것입니다.
순차 응집
시퀀셜 응집성은 조립라인과 같이 한 부분으로부터의 출력이 다른 부분으로의 입력이기 때문에 모듈의 일부가 그룹화된 경우(예를 들어 파일에서 데이터를 읽고 처리하는 기능)입니다.
기능적 응집력(최고)
기능적 응집성은 모듈의 일부가 모두 모듈의 명확한 단일 태스크(예: XML 문자열의 사전 분석)에 기여하기 때문에 그룹화된 경우입니다.예:
/* 그룹: 함수 정의 부품: 각 함수에 대한 용어 */ 모듈 A {   /* 산술 연산의 실시 이 모듈은 기능적으로 응집력이 있다고 합니다. 단순한 산술 연산을 그룹화할 의도가 있다 그 위에 올려놔요.  */   a(x, y) = x + y   b(x, y) = x * y }  모듈 B {   /* 모듈 B: r(x) = 5x + 3 구현 이 모듈은 원자 응집력이 있다고 할 수 있습니다.전체 시스템(모듈 A와 B를 부품으로 함)은 기능하고 있다고도 할 수 있습니다. 응집력, 즉 응집력은 둘 다 특별한 목적을 가지고 있기 때문입니다.  */   r(x) = [모듈 A].a([모듈 A].b(5, x), 3) } 
완전 응집력(원자)
예.
/* 그룹: 함수 정의 부품: 각 함수에 대한 용어 */ 모듈 A {   /* r(x) = 2x + 1 + 3x + 2의 구현 더 이상 줄일 수 없기 때문에 완벽한 응집력을 가지고 있다고 합니다. */   r(x) = 5x + 3 } 

응집력은 등급별 척도이지만, 순위는 응집력 향상의 꾸준한 진행을 나타내지 않는다.Larry Constantine, Edward Yourdon 및 Steve[5] McConnell을 포함한 다양한 사람들에 의한 연구는 처음 두 종류의 응집력은 열등하다는 것을 보여준다; 의사소통적 응집력과 순차적 응집력은 매우 우수하며; 기능적 응집력은 우수하다.

기능적 응집력은 소프트웨어 모듈에 가장 바람직한 응집력으로 간주되지만 달성하지 못할 수 있습니다.통신의 응집력이 [citation needed]그 상황에서 달성될 수 있는 최고 수준의 응집력인 경우가 있다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Yourdon, Edward; Constantine, Larry LeRoy (1979) [1975]. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Yourdon Press. Bibcode:1979sdfd.book.....Y. ISBN 978-0-13-854471-3.
  2. ^ Ingeno, Joseph (2018). Software Architect's Handbook. Packt Publishing. p. 175. ISBN 978-178862406-0.
  3. ^ Stevens, Wayne P.; Myers, Glenford J.; Constantine, Larry LeRoy (June 1974). "Structured design". IBM Systems Journal. 13 (2): 115–139. doi:10.1147/sj.132.0115.
  4. ^ Marsic, Ivan (2012). Software Engineering. Rutgers University.
  5. ^ McConnell, Steve (June 2004) [1993]. Code Complete (2 ed.). pp. 168-171. ISBN 978-0-7356-1967-8.

외부 링크