커플링(컴퓨터 프로그래밍)

Coupling (computer programming)

소프트웨어 엔지니어링에서 커플링소프트웨어 모듈 간의 상호의존도입니다. 두 루틴 또는 모듈이 [1]얼마나 밀접하게 연결되어 있는지를 나타내는 척도입니다. 모듈 [2]간 관계의 강도입니다.

결합 및 응집력

커플링은 보통 응집력과 대조됩니다.저커플링은 높은 응집력과 관련이 있는 경우가 많으며, 그 반대도 마찬가지입니다.저커플링은 종종 잘 구성된 컴퓨터 시스템과 좋은 설계의 신호로 생각되며 높은 응집력과 결합하면 높은 가독성과 [citation needed]유지관리성이라는 일반적인 목표를 뒷받침한다.

역사

커플링과 응집성의 소프트웨어 품질 지표는 1960년대 후반 Larry Constantine에 의해 구조화된 설계의 일부로 개발되었으며, 이는 유지관리 및 수정 비용을 절감하는 "좋은" 프로그래밍 관행의 특성을 기반으로 합니다.응집과 결합을 포함한 구조화된 디자인은 Stevens, Myers & Constantine(1974년)[3]과 Yourdon & Constantine(1979년)[4]이라는 기사에 발표되었고, 이후 후자는 표준 용어가 되었다.

커플링의 종류

결합 개념 모델

커플링은 "낮음"("느림" 및 "약함") 또는 "높음"("밀함" 및 "강함")일 수 있습니다.일부 유형의 커플링은 가장 높은 커플링에서 가장 낮은 커플링 순서로 다음과 같습니다.

프로시저

여기서 모듈은 어떤 종류의 서브루틴, 즉 이름을 가진 하나 이상의 문장으로 이루어진 집합과 가능하면 변수 이름의 집합을 말한다.

콘텐츠 커플링(높음)
콘텐츠 커플링은 어떤 모듈이 브랜치 등 다른 모듈의 코드를 사용할 때 발생하는 것으로 알려져 있습니다.이는 기본적인 소프트웨어 설계 개념인 정보 은닉에 위배됩니다.
공통 커플링
공통 결합은 여러 모듈이 동일한 글로벌 데이터에 액세스할 때 발생한다고 합니다.그러나 변경 시 제어되지 않은 오류 전파와 예상치 못한 부작용을 초래할 수 있습니다.
외부 커플링
외부 결합은 두 모듈이 외부에서 부과된 데이터 형식, 통신 프로토콜 또는 장치 인터페이스를 공유할 때 발생합니다.이는 기본적으로 외부 도구 및 장치와의 통신과 관련이 있습니다.
제어 커플링
컨트롤 커플링은 처리 방법에 대한 정보를 전달함으로써 다른 모듈의 흐름을 제어하는 모듈입니다(예: 할 일 플래그 전달).
스탬프 커플링(데이터 구조 커플링)
스탬프 커플링은 모듈이 복합 데이터 구조를 공유하고 그 일부(예: 다른 부분)만 사용할 때 발생합니다(예를 들어 레코드를 하나의 필드만 필요로 하는 함수에 전달).
이 경우 모듈이 필요하지 않은 필드를 변경하면 모듈이 레코드를 읽는 방법이 변경될 수 있습니다.
data coupling(데이터 커플링)
데이터 커플링은 모듈이 예를 들어 파라미터를 통해 데이터를 공유할 때 발생합니다.각 데이텀은 기본 데이터이며, 공유되는 유일한 데이터입니다(예: 정수를 제곱근을 계산하는 함수에 전달).

객체 지향 프로그래밍

서브클래스 커플링
하위와 상위 간의 관계를 설명합니다.하위 항목이 상위 항목에 연결되었지만 상위 항목이 하위 항목에 연결되지 않았습니다.
시간 결합
이는 두 가지 액션이 동시에 발생한다는 이유만으로 하나의 모듈에 번들되는 경우입니다.

최근 연구에서는 다양한 다른 결합 개념을 조사하여 [5]실제로 사용되는 다양한 모듈화 원리에 대한 지표로 사용하였습니다.

동적 결합

이러한 유형의 커플링의 목적은 소프트웨어 시스템의 런타임 평가를 제공하는 것입니다.정적 결합 메트릭은 동적 바인딩 또는 [6]상속의 집중적인 사용을 처리할 때 정밀도를 잃는다는 주장이 제기되어 왔다.이 문제를 해결하기 위해 동적 결합 조치가 고려되었습니다.

시멘틱 커플링

이러한 종류의 결합은 예를 들어 주석과 식별자를 사용하고 잠재의미색인(LSI)과 같은 기술에 의존하는 소프트웨어 엔티티 간의 개념적 유사성을 고려합니다.

논리 결합

논리 커플링(또는 진화 커플링 또는 변경 커플링)은 소프트웨어 시스템의 릴리스 이력을 이용하여 모듈 또는 클래스 간의 변경 패턴, 예를 들어 함께 변경될 가능성이 있는 엔티티 또는 변경 시퀀스(클래스 A의 변경은 항상 클래스 B의 변경이 뒤따른다)를 찾습니다.

밀착 결합의 단점

밀접하게 결합된 시스템은 다음과 같은 개발 특성을 보이는 경향이 있으며, 이는 종종 단점으로 나타납니다.

  1. 한 모듈의 변경은 보통 다른 모듈의 변경에 따른 파급 효과를 강제합니다.
  2. 모듈 간 의존성이 증가하기 때문에 모듈 조립에는 더 많은 노력 및/또는 시간이 필요할 수 있습니다.
  3. 특정 모듈은 종속 모듈을 포함해야 하므로 재사용 및/또는 테스트하기가 더 어려울 수 있습니다.

퍼포먼스 문제

느슨하거나 긴밀하게 결합되어 있든, SOAP 메시지와 같은 복잡한 메시지를 작성하는 것보다 오버헤드가 적은 메시지와 파라미터의 작성, 전송, 번역(예를 들어 문자열, 배열 또는 데이터 구조를 참조할 수 있음) 및 메시지 해석에 의해 시스템의 성능이 저하되는 경우가 많습니다.메시지가 길어질수록 생성하는 데 더 많은 CPU와 메모리가 필요합니다.런타임 성능을 최적화하려면 메시지 길이를 최소화하고 메시지 의미를 최대화해야 합니다.

메시지 전송 오버헤드와 퍼포먼스
메시지는 완전한 의미를 유지하기 위해 완전히 전송되어야 하므로 메시지 전송을 최적화해야 합니다.메시지가 길어질수록 송수신에 더 많은 CPU와 메모리가 필요합니다.또한 필요에 따라 수신자는 메시지를 완전히 수신하기 위해 메시지를 원래 상태로 재구성해야 합니다.따라서 런타임 성능을 최적화하려면 메시지 길이를 최소화하고 메시지 의미를 최대화할 필요가 있습니다.
메시지 변환 오버헤드와 퍼포먼스
메시지 프로토콜과 메시지 자체는 종종 추가 정보(패킷, 구조, 정의 및 언어 정보)를 포함합니다.따라서 수신자는 종종 추가 문자 및 구조 정보를 제거하거나/또는 값을 한 유형에서 다른 유형으로 변환함으로써 메시지를 보다 정교한 형태로 변환해야 합니다.어떤 변환이든 CPU 및/또는 메모리 오버헤드가 증가합니다.런타임 퍼포먼스를 최적화하려면 메시지 형식과 콘텐츠를 축소하고 개선하여 의미를 극대화하고 번역을 줄여야 합니다.
메시지 해석 오버헤드와 퍼포먼스
모든 메시지는 수신자가 해석해야 합니다.정수 등의 단순한 메시지는 해석에 추가 처리가 필요하지 않을 수 있습니다.단, SOAP 메시지와 같은 복잡한 메시지는 의도된 의미를 나타내려면 파서와 문자열 변환기가 필요합니다.런타임 성능을 최적화하려면 메시지를 조정하고 줄여 해석 오버헤드를 최소화해야 합니다.

솔루션

결합을 감소시키는 한 가지 방법은 기능 설계로, 기능에 따라 모듈의 책임을 제한하려고 합니다.다음과 같은 경우 2개의 클래스 A와 B 사이에서 결합이 증가합니다.

  • A에는 (유형의) B를 참조하는 속성이 있습니다.
  • A오브젝트 B의 서비스를 호출합니다.
  • A에는 (반환 유형 또는 파라미터를 통해) B를 참조하는 메서드가 있습니다.
  • A클래스 B(또는 실장)의 서브 클래스입니다.

저커플링이란 한 모듈이 단순하고 안정적인 인터페이스를 통해 다른 모듈과 상호 작용하는 관계를 말하며, 다른 모듈의 내부 구현에 관여할 필요가 없습니다(정보 숨김 참조).

CORBA 또는 COM과 같은 시스템에서는 오브젝트가 다른 오브젝트의 구현에 대해 아무것도 알 필요 없이 서로 통신할 수 있습니다.이 두 시스템 모두 물체가 다른 언어로 쓰여진 개체와 통신할 수 있게 해줍니다.

결합 대 응집력

결합과 응집력은 매우 자주 함께 발생하는 용어입니다.결합은 모듈 간의 상호의존성을 나타내며, 결합은 단일 모듈 내의 기능이 얼마나 관련되어 있는지를 나타냅니다.응집력이 낮다는 것은 모듈이 서로 그다지 관련이 없는 작업을 수행한다는 것을 의미하며, 따라서 모듈이 커짐에 따라 문제가 발생할 수 있습니다.

모듈 커플링

Coupling[7] in Software Engineering은 이 개념과 관련된 메트릭 버전을 설명합니다.

데이터 및 제어 흐름 커플링의 경우:

  • di: 입력 데이터 파라미터의 수
  • ci: 입력 제어 파라미터의 수
  • do: 출력 데이터 파라미터의 수
  • co: 출력 제어 파라미터의 수

전역 커플링의 경우:

  • gd: 데이터로 사용되는 전역 변수의 수
  • gc: 컨트롤로 사용되는 전역 변수의 수

환경 커플링의 경우:

  • w: 호출된 모듈 수(팬아웃)
  • r: 검토 중인 모듈을 호출하는 모듈의 수(팬인)

Coupling(C)모듈의 결합 수가 많을수록 값이 커집니다.이 값의 범위는 약 0.67(저커플링) ~ 1.0(고커플링)입니다.

예를 들어 모듈에 입력 및 출력 데이터 매개 변수가 하나만 있는 경우

모듈에 5개의 입력 및 출력 데이터 파라미터와 동일한 수의 제어 파라미터가 있으며 팬인 3과 팬아웃 4로 10개의 글로벌 데이터 항목에 액세스하는 경우,

「 」를 참조해 주세요.

레퍼런스

  1. ^ ISO/IEC/IEE 24765:2010 시스템 및 소프트웨어 엔지니어링 - 용어
  2. ^ ISO/IEC TR 19759:2005, 소프트웨어 엔지니어링 - 소프트웨어 엔지니어링 지식체계(SWEBOK) 가이드
  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. ^ 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.
  5. ^ Beck, Fabian; Diehl, Stephan (September 2011). "On the Congruence of Modularity and Code Coupling". In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering (SIGSOFT/FSE '11). Szeged, Hungary. p. 354. doi:10.1145/2025113.2025162. ISBN 9781450304436. S2CID 2413103.
  6. ^ Arisholm, Erik; Briand, Lionel C.; Føyen, Audun (August 2004). "Dynamic coupling measurement for object-oriented software". IEEE Transactions on Software Engineering. IEEE. 30 (8): 491–506. doi:10.1109/TSE.2004.41. hdl:10852/9090. S2CID 3074827.
  7. ^ Pressman, Roger S. (1982). Software Engineering - A Practitioner's Approach (4 ed.). ISBN 0-07-052182-4.

추가 정보