컴포넌트 기반 소프트웨어 엔지니어링

Component-based software engineering
UML 2.0에서 나타내는2개의 컴포넌트의 예.체크아웃 컴포넌트는 고객의 주문을 용이하게 하는 역할을 하며 카드 처리 컴포넌트가 고객의 신용 카드/직불 카드(후자가 제공하는 기능)를 충전하도록 요구합니다.

컴포넌트 기반 소프트웨어 엔지니어링(CBSE)은 컴포넌트 기반 개발(CBD)이라고도 불리며 특정 소프트웨어 시스템 전체에서 사용 가능한 광범위한 기능에 대한 우려의 분리를 강조하는 소프트웨어 엔지니어링의 한 분야입니다.느슨하게 결합된 독립 구성요소를 정의, 구현 및 시스템에 구성하는 재사용 기반 접근법입니다.이 관행은 소프트웨어 자체와 이러한 소프트웨어를 후원하는 조직에 대해 단기 및 장기 모두에서 동등하게 광범위한 이익을 가져오는 것을 목표로 합니다.

소프트웨어 엔지니어링 실무자들은 컴포넌트를 서비스 지향의 시작 플랫폼의 일부로 간주합니다.예를 들어, 구성요소는 웹 서비스에서 이러한 역할을 수행하며, 최근에는 구성요소가 웹 서비스에 의해 서비스로 변환되고 이후 일반 구성요소의 특성을 초과하는 추가 특성을 상속하는 서비스 지향 아키텍처(SOA)에서 이러한 역할을 수행합니다.

컴포넌트는 이벤트를 생성 또는 소비할 수 있으며 Event-Drived Architecture(EDA)에 사용할 수 있습니다.

컴포넌트의 정의와 특성

개별 소프트웨어 구성 요소는 소프트웨어 패키지, 웹 서비스, 웹 리소스 또는 관련 기능(또는 데이터) 집합을 캡슐화하는 모듈입니다.

각 컴포넌트 내의 모든 데이터와 함수가 (클래스의 내용과 마찬가지로) 의미적으로 관련지어지도록 모든 시스템프로세스는 개별 컴포넌트에 배치됩니다.이 원리로 인해 컴포넌트는 모듈러형이며 응집력이 있다고 흔히 말합니다.

시스템 전체의 조정에 관해서, 컴포넌트는 인터페이스를 개입시켜 서로 통신합니다.컴포넌트는 시스템의 나머지 부분에 서비스를 제공할 때 다른 컴포넌트가 이용할 수 있는 서비스와 그 방법을 지정하는 제공된 인터페이스를 채택합니다.이 인터페이스는 컴포넌트의 시그니처로 간주할 수 있습니다.클라이언트는 컴포넌트를 사용하기 위해 컴포넌트의 내부 동작(실장)에 대해 알 필요가 없습니다.이 원리로 인해 캡슐화 컴포넌트라고 불리는 컴포넌트가 생성됩니다.이 문서의 UML 그림은 컴포넌트의 바깥쪽 가장자리에 부착된 롤리팝 기호로 제공된 인터페이스를 나타내고 있습니다.

그러나 컴포넌트가 기능하기 위해 다른 컴포넌트를 사용해야 하는 경우 컴포넌트는 필요한 서비스를 지정하는 사용 인터페이스를 채택합니다.이 기사의 UML 그림에서는 사용되는 인터페이스는 컴포넌트의 바깥쪽 가장자리에 부착된 오픈소켓 기호로 나타납니다.

여러 소프트웨어 컴포넌트의 간단한 예 - UML 2.0에 나타난 가상의 휴일 예약 시스템 내 그림.

컴포넌트의 또 다른 중요한 속성은 컴포넌트가 (인터페이스를 통해 표현된) 초기 컴포넌트의 요건을 충족하면 컴포넌트가 다른 컴포넌트를 (설계시 또는 런타임에) 대체할 수 있도록 치환할 수 있다는 것입니다.이것에 의해, 부품이 동작하는 시스템을 망가뜨리지 않고, 갱신판 또는 대체판 중 하나로 부품을 교환할 수 있다.

부품을 교환하는 엔지니어의 경험칙으로서 부품 B가 적어도 어떤 부품을 제공하고 어떤 부품을 사용했는지 그 이상을 사용하지 않는 경우 부품 B는 부품 A를 즉시 교환할 수 있다.

소프트웨어 컴포넌트는 종종 오브젝트(클래스가 아닌) 또는 오브젝트 집합(개체 지향 프로그래밍에서)의 형태를 취하며 컴포넌트가 컴퓨터의 다른 컴포넌트로부터 자율적으로 존재할 수 있도록 어떤 인터페이스 기술 언어(IDL)에 준거합니다.즉, 컴포넌트는 소스 코드를 변경하지 않고 동작합니다.그러나 구성 요소의 소스 코드 동작은 작성자가 제공하는 응용 프로그램의 확장성에 따라 달라질 수 있습니다.

실행 컨텍스트 또는 네트워크 링크 간에 컴포넌트에 액세스하거나 공유해야 할 경우, 컴포넌트를 수신처에 전달하기 위해 시리얼라이제이션 또는 마샬링과 같은 기술이 종종 사용됩니다.

재사용성은 고품질 소프트웨어 컴포넌트의 중요한 특성입니다.프로그래머는 다양한 프로그램이 소프트웨어 컴포넌트를 재사용할 수 있도록 설계 및 구현해야 합니다.또한 소프트웨어 구성요소가 사용자와 직접 상호작용할 때 구성요소 기반 가용성 시험을 고려해야 한다.

효과적으로 재사용 가능한 소프트웨어 컴포넌트를 작성하려면 상당한 노력과 인식이 필요합니다.컴포넌트는 다음과 같아야 합니다.

  • 완전히 문서화된
  • 철저하게 테스트된
    • 견고성 - 포괄적인 입력 확인 기능 포함
    • 적절한 에러 메시지 또는 코드를 반환할 수 있다
  • 예기치 않은 용도로 사용될 것을 의식하여 설계된

1960년대에 프로그래머들은 광범위한 공학 및 과학 애플리케이션에서 재사용 가능한 과학적 서브루틴 라이브러리를 구축했습니다.이러한 서브루틴 라이브러리는 잘 정의된 알고리즘을 효과적인 방법으로 재사용했지만, 제한된 애플리케이션 영역을 가지고 있었습니다.상용 사이트에서는 시스템 및 사용자 애플리케이션 라이브러리를 모두 사용하여 어셈블리 언어, COBOL, PL/1 및 기타 2세대3세대 언어작성된 재사용 가능한 모듈로부터 애플리케이션 프로그램을 정기적으로 만들었습니다.

2010년 현재, 현대의 재사용 가능한 구성요소는 데이터 구조와 데이터 구조에 적용되는 알고리즘을 모두 캡슐화합니다.컴포넌트 기반 소프트웨어 엔지니어링은 소프트웨어 객체, 소프트웨어 아키텍처, 소프트웨어 프레임워크소프트웨어 설계 패턴의 이전 이론과 객체 지향 프로그래밍의 광범위한 이론 및 이들 모든 의 객체 지향 설계를 기반으로 합니다.예를 들어 [1]통신에 사용되는 하드웨어 구성요소의 개념과 같은 소프트웨어 구성요소는 궁극적으로 호환 가능하고 신뢰할 수 있는 것으로 만들 수 있다고 주장한다.반면에, (그들이 없으면 [2]존재하지 않을) 프레임워크보다는 독립적인 요소에 초점을 맞추는 것은 실수라는 주장이 있다.

역사

소프트웨어가 조립식 부품으로 구성되어야 한다는 생각은 1968년 독일 가르미슈에서 열린 소프트웨어 [3]엔지니어링관한 NATO 회의에서 더글라스 맥일로이의 연설로 처음 두드러졌습니다.그 회의는 이른바 소프트웨어 위기에 대처하기 위해 시작되었다.이후 Unix 운영체제파이프와 필터를 추가한 것이 이 아이디어를 위한 첫 번째 인프라스트럭처 구현이었습니다.

StepstoneBrad Cox는 소프트웨어 [4]컴포넌트의 현대적인 개념을 주로 정의했습니다.그는 그것들을 Software IC라고 불렀고 Objective-C 프로그래밍 언어를 발명함으로써 이러한 컴포넌트의 인프라와 시장을 창출하기 시작했습니다.(그는 그의 저서 객체 지향 프로그래밍 - 진화론적 접근 1986에서 이 관점을 요약합니다.)

소프트웨어 컴포넌트는 2종류의 다른 컨텍스트에서 사용됩니다.i) 컴포넌트를 하나의 실행 파일을 구축하기 위한 부품으로 사용하거나 ii) 각 실행 파일을 IPC(Inter Process Communications)용 인터넷 또는 인트라넷 통신 프로토콜을 사용하여 서로 협업하는 분산 환경에서 컴포넌트로 취급합니다.위는 구종에 속하고 아래는 후종에 속합니다.

IBM은 1990년대 초에 SOM(System Object Model)을 통해 이 분야를 선도했습니다.에 대해 Microsoft는 OLE(Object Linking and Embedding) 및 COM([5]Component Object Model)을 사용하여 컴포넌트 소프트웨어를 실제로 도입할 수 있는 길을 열어 주었습니다.2010년 현재 성공한 소프트웨어 컴포넌트 모델이 다수 존재합니다.

아키텍처

여러 소프트웨어 컴포넌트를 실행하는 컴퓨터를 응용 프로그램서버라고 부릅니다.이러한 애플리케이션 서버와 소프트웨어 컴포넌트의 조합을 보통 분산 컴퓨팅이라고 부릅니다.이러한 기능의 일반적인 실제 적용은 금융 애플리케이션이나 비즈니스 소프트웨어 등에 있습니다.

컴포넌트 모델

구성요소 모델은 구성요소가 충족해야 하는 특성, 구성요소 [6]구성을 위한 방법 및 메커니즘에 대한 정의입니다.

지난 수십 년 동안, 연구자들과 실무자들은 서로 다른 특성을 가진 몇 가지 구성 요소 모델을 제안했습니다.기존 컴포넌트 모델의 분류가 [6][7]에 제시되어 있습니다.컴포넌트 모델의 예로는 Enterprise JavaBeans(EJB) 모델, Component Object Model(COM) 모델 등이 있습니다.NET 모델, X-MAN 컴포넌트 [8]모델 및 CORBA(Common Object Request Broker Architecture) 컴포넌트 모델.

테크놀로지

「 」를 참조해 주세요.

레퍼런스

  1. ^ Foukalas 등 "컴포넌트 기반 설계를 사용한 프로토콜 재구성"
  2. ^ Wallace, Bruce (May 19, 2010). "A hole for every component, and every component in its hole". Existential Programming. There is no such thing as a Component
  3. ^ McIlroy, Malcolm Douglas (January 1969). "Mass produced software components" (PDF). Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968. Scientific Affairs Division, NATO. p. 79.
  4. ^ Rainer Niekamp. "Software Component Architecture" (PDF). Gestión de Congresos - CIMNE/Institute for Scientific Computing, TU Braunschweig. p. 4. Retrieved 2011-07-29. The modern concept of a software component largely defined by Brad Cox of Stepstone, => Objective-C programming language
  5. ^ Raphael Gfeller (December 9, 2008). "Upgrading of component-based application". HSR - Hochschule für Technik Rapperswill. p. 4. Retrieved 2011-07-29. 1990, IBM invents their System Object Model. 1990, as a reaction, Microsoft released OLE 1.0 OLE custom controls (OCX)[영구 데드링크]
  6. ^ a b Crnkovic, I.; Sentilles, S.; Vulgarakis, A.; Chaudron, M. R. V. (2011). "A Classification Framework for Software Component Models". IEEE Transactions on Software Engineering. 37 (5): 593–615. doi:10.1109/TSE.2010.83. S2CID 15449138.
  7. ^ Lau, Kung-Kiu; Wang, Zheng (2007). "Software Component Models". IEEE Transactions on Software Engineering. 33 (10): 709–724. doi:10.1109/TSE.2007.70726. ISSN 0098-5589.
  8. ^ Lau, Kung-Kiu; Velasco Elizondo, Perla; Wang, Zheng (2005). Heineman, George T.; Crnkovic, Ivica; Schmidt, Heinz W.; Stafford, Judith A.; Szyperski, Clemens; Wallnau, Kurt (eds.). "Exogenous Connectors for Software Components". Component-Based Software Engineering. Lecture Notes in Computer Science. Springer Berlin Heidelberg. 3489: 90–106. doi:10.1007/11424529_7. ISBN 9783540320494. S2CID 17971442.
  9. ^ MASH는 자산을 사람, 자산 및 정보로 정의하고 관리는 감시, 제어 및 구성으로 정의합니다.Mountain View MASH에서 열린 2013 IEEE IoT 컨퍼런스에서 발표되는 것은 완전한 IDE, Android 클라이언트 및 런타임입니다."MASH 유튜브 채널"
  10. ^ 컴포넌트 지향 접근방식은 가전제품에서 소프트웨어의 다양성을 다루는 이상적인 방법입니다.TV에 내장된 소프트웨어에 사용되는 코알라 모델은 추가 오버헤드 없이 재사용 가능한 부품을 늦게 바인딩할 수 있게 해줍니다.[1]
  11. ^ Philips가 개발한 TV 등 임베디드 기기용 컴포넌트 모델, R. van Ommering, Coala, 가전제품 소프트웨어 컴포넌트 모델[2] 2014-08-09년 Wayback Machine에 아카이브
  12. ^ Arad, Cosmin (April 2013). Programming Model and Protocols for Reconfigurable Distributed Systems (PDF). Doctoral Dissertation. Stockholm, Sweden: KTH Royal Institute of Technology. ISBN 978-91-7501-694-8.
  13. ^ Arellanes, Damian; Lau, Kung-Kiu (2017). "Exogenous Connectors for Hierarchical Service Composition" (PDF). 2017 IEEE 10th Conference on Service-Oriented Computing and Applications (SOCA). Kanazawa: IEEE: 125–132. doi:10.1109/SOCA.2017.25. ISBN 9781538613269. S2CID 31211787.

추가 정보

  • 브래드 J. 콕스 앤드류 J. 노보빌스키(1991)객체 지향 프로그래밍: 진화적 접근법, 2판Adison-Wesley, ISBN 0-201-54834-8 읽기
  • 베르트랑 마이어(1997).객체 지향 소프트웨어 구축.제2판프렌티스 홀.
  • 조지 T.하이네만, 윌리엄 T평의회(2001년.컴포넌트 기반 소프트웨어 엔지니어링: 부품을 조립합니다.Addison-Wesley Professional, 2001 ISBN 0-201-70485-4 읽기
  • 리처드 베리어드(2001).컴포넌트 기반 비즈니스: 플러그플레이.런던 : 스프링거.ISBN 1-85233-361-8
  • 클레멘스 시퍼스키, 도미닉 그룬츠, 스테판 무러(2002년).컴포넌트 소프트웨어: 객체 지향 프로그래밍을 넘어서는 것.제2판ACM 프레스 - Pearson Educational, London 2002 ISBN 0-201-74572-0

외부 링크