맨위로가기

메소드 스텁

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메소드 스텁은 소프트웨어 개발에서 상위 모듈을 테스트할 때 하위 모듈이 미완성 상태일 경우 이를 대신하는 가상의 모듈이다. 스텁은 미완성 모듈의 기능을 흉내 내어 개발 속도를 향상시키고, 독립적인 테스트 환경을 구축하는 데 사용된다. 스텁은 모듈 간 의존성을 해결하고, 개발 초기 단계에서 시스템의 결합 설계를 검증하며, 개발자가 실제 객체의 인터페이스를 정확하게 이해해야 효과적으로 작성할 수 있다. 스텁은 윈도우, DOS, 임베디드 시스템, 분산 컴퓨팅 환경 등 다양한 환경에서 활용되며, 개발 효율성 향상, 테스트 효율성 향상, 모듈 간 독립성 확보 등의 장점을 가지지만, 추가적인 노력과 실제 객체의 동작을 완벽하게 모방하기 어렵다는 단점도 존재한다.

2. 정의 및 목적

스텁은 소프트웨어 개발에서 아직 완성되지 않은 모듈이나 기능을 임시로 대체하는 코드 조각이다. 예를 들어 `ReadThermometer` 함수는 실제 하드웨어에서 값을 읽는 대신 항상 28을 반환하는데, 이는 호출 코드가 정상 실행되도록 임시 값을 제공하는 것이다.[3]

스텁은 주로 다음과 같은 목적으로 사용된다.


  • 모듈 간 결합 테스트: 여러 프로그래머가 협업할 때 각 모듈을 개별 테스트 후 통합한다. 이때 미완성 모듈 대신 스텁을 사용하여 개별 모듈 동작을 미리 검증한다.
  • 분산 컴퓨팅 환경: RMI 같은 분산 환경에서 스텁은 클라이언트 측에서 서버 측 기능을 시뮬레이션하여 클라이언트가 원격 객체와 상호 작용할 수 있게 한다.
  • 임베디드 시스템 개발: 개발 환경(호스트 컴퓨터)과 실행 환경(타겟 컴퓨터)이 다른 경우, 스텁은 타겟 컴퓨터에서 실행되는 작은 프로그램으로, 호스트 컴퓨터 디버거와 통신하여 CPU나 메모리 상태를 제어한다.


이처럼 스텁은 소프트웨어 개발의 다양한 단계에서 활용되며, 모듈 간 의존성 관리 및 테스트를 용이하게 하는 데 중요한 역할을 한다.

2. 1. 스텁의 정의

의사 코드 예시에서, 함수는 특정 값을 반환하여 호출하는 코드를 실행 가능하게 한다. 이 함수는 스텁에 일반적인 입력 매개변수를 무시한다.

```

'''function''' ReadThermometer(Source source)

'''return''' 28

'''end function'''

```

호출하는 측(상위) 모듈을 검사할 때, 호출되는 측(하위)의 부품 모듈이 미완성일 수 있다. 이때, 호출되는 측의 부품 모듈을 대신하는 가상의 모듈을 "스텁(Stub)"이라고 부른다.[3] 스텁 모듈은 설계 사양에 정의된 모든 함수를 구현하고 있지만, 함수 내부는 정상적인 동작을 하지 않고, 상수를 반환하는 형태로 만들어지는 경우가 많다. 하위 모듈 함수의 반환값에 따라 상위 모듈의 동작이 분기되는 경우, 해당 분기 패턴을 만족시키기 위한 최소한의 몇 가지 상수를 반환하는 여러 개의 스텁을 만들기도 한다. 또는 주어지는 인수에 따라 (정상적인 처리와는 관계없이, 최소한의 분기 처리만을 구현하여) 이러한 값을 반환하는 스텁을 만들기도 한다.

일반적으로 테스트 대상이 상위 계층의 모듈이고 하위 부품이 미완성인 경우, 이를 대신하는 가상의 하위 계층 모듈을 "스텁"이라고 부른다.

2. 2. 스텁의 사용 목적

분산 컴퓨팅에서 스텁은 원격 시스템의 서브루틴과 같은 기존 코드를 시뮬레이션하여 포팅에 유용하게 사용될 수 있다.[3] 예를 들어, 여러 명이 프로그래밍을 할 때, 모듈별로 프로그램을 작성하고 나중에 각 모듈을 결합하여 전체적으로 잘 작동하는지 테스트하는 경우가 있다. 이때, 결합 테스트 전 단계에서 개별 모듈의 정당성을 미리 검사하기 위해, 호출하는 부품 모듈이 아직 완성되지 않았을 때 스텁이 사용된다. 스텁은 단순하여 아무것도 하지 않아도 되지만, 테스트하려는 부분과 연결하여 작동시키는 데 충분하면 된다.

스텁은 호출되는 측(하위)의 부품 모듈이 미완성일 때, 이를 대신하는 가상의 모듈이다. 스텁 모듈은 설계 사양에 정의된 모든 함수를 구현하지만, 함수 내부는 정상적인 동작을 하지 않고 상수를 반환하는 형태로 만들어지는 경우가 많다. 하위 모듈 함수의 반환값에 따라 상위 모듈의 동작이 분기되는 경우, 해당 분기 패턴을 만족시키기 위한 최소한의 상수를 반환하는 여러 개의 스텁을 만들기도 한다.

임베디드 시스템의 소프트웨어를 개발할 때, 컴파일러 등의 개발 도구를 실행하는 컴퓨터(호스트 컴퓨터)와 개발 대상이 되는 컴퓨터(타겟 컴퓨터)가 다를 수 있다. 이때, 디버거는 사용자 인터페이스를 필요로 하는 본체 부분을 호스트 컴퓨터에서 실행하고, 타겟 컴퓨터에서는 본체 부분으로부터 통신선을 통해 지시를 받아 CPU나 메모리의 상태를 읽고 쓰는 작은 프로그램을 실행하는 구성을 취하는 경우가 많다. 이 타겟 상의 작은 프로그램을 "스텁"이라고 부른다. 이러한 스텁은 타겟 컴퓨터의 CPU에 의존하며, 어셈블리 언어로 작성되기도 한다.

임베디드 시스템용 소프트웨어 개발에서 스텁은 빠른 단계에서 안정적으로 동작하는 것이 중요하며, 이후 개발 작업의 원활한 진행에 큰 영향을 미친다. 스텁 자체의 디버깅에는 인서킷 에뮬레이터를 사용하기도 한다.

3. 스텁의 종류 및 활용

스텁은 다양한 환경에서 활용된다.


  • 분산 컴퓨팅 환경에서 스텁은 모의 객체처럼 작동하여 원격 시스템에 있는 코드를 시뮬레이션하는 역할을 한다. 이는 포팅에 유용하게 사용된다.
  • 윈도우와 도스 환경에서 스텁은 심과 유사한 역할을 한다. 자체적으로 재배치되는 상주 드라이버가 대부분의 코드를 상위 메모리 등으로 이동시킨 후 기본 메모리에 남겨둔 작은 인터페이스 코드가 스텁이다. 이를 통해 리얼 모드 도스와 도스 확장자를 통해 재배치된 코드가 통신할 수 있다.
  • 임베디드 시스템 환경에서는 개발 도구를 실행하는 컴퓨터(호스트 컴퓨터)와 개발 대상 컴퓨터(타겟 컴퓨터)가 다른 경우가 많다. 이때 디버거사용자 인터페이스가 필요한 본체 부분을 호스트 컴퓨터에서 실행하고, 타겟 컴퓨터에서는 작은 프로그램(스텁)을 실행하여 CPU나 메모리 상태를 읽고 쓰는 구성을 취한다.


임베디드 시스템용 소프트웨어 개발에서 스텁을 빠르게 안정적으로 동작시키는 것은 이후 개발 작업의 원활한 진행에 큰 영향을 미친다.[1]

3. 1. 분산 컴퓨팅 환경

분산 컴퓨팅에서 ''스텁(stub)''은 모의 객체처럼 작동하며, 원격 시스템에 있는 서브루틴 등의 코드를 시뮬레이션하는 역할을 한다. 이러한 스텁은 포팅에 유용하게 활용될 수 있다.

RMI에서 클라이언트 측 스텁은 서버 측 스켈레톤과 통신한다.[3]

3. 2. 윈도우/DOS 환경

윈도우와 도스에서 "스텁"은 일종의 심과 같은 존재로, 자체적으로 재배치되는 상주 드라이버가 대부분의 코드를 상위 메모리, 고메모리 영역, 확장 메모리 또는 확장 메모리로 이동시킨 후 일반 메모리에 남겨둔 작은 인터페이스 코드이다. 이는 리얼 모드 도스와 DPMI, DPMS, CLOAKING 또는 NIOS와 같은 도스 확장자를 통해 재배치된 코드가 통신할 수 있도록 해준다.

3. 3. 임베디드 시스템 환경

임베디드 시스템의 소프트웨어를 개발할 때, 컴파일러 등 개발 도구를 실행하는 컴퓨터(호스트 컴퓨터)와 개발 대상이 되는 컴퓨터(타겟 컴퓨터)는 서로 다른 경우가 많다. 이때, 프로그램을 실제로 실행하면서 동작을 확인하는 디버거는, 사용자 인터페이스를 필요로 하는 본체 부분을 호스트 컴퓨터에서 실행하고, 타겟 컴퓨터에서는 본체 부분으로부터 통신선을 통해 지시를 받아 CPU나 메모리의 상태를 읽고 쓰는 작은 프로그램을 실행하는 구성을 취하는 경우가 많다. 이 타겟 상의 작은 프로그램을 "스텁"이라고 부른다.[1]

이러한 디버거의 스텁은 당연히 타겟 컴퓨터의 CPU에 강하게 의존하며, 종종 어셈블리 언어를 사용하여 작성된다.[1] 스텁의 주요 기능은 다음과 같다.[1]

  • 호스트 컴퓨터와의 통신 회선을 초기화한다.
  • 임의의 메모리 내용을 읽어 통신 회선으로 보낸다.
  • 임의의 메모리 내용을 통신 회선에서 받은 데이터로 갱신한다.
  • CPU의 내부 상태(레지스터)를 정돈하여, 실행 코드의 임의 위치로 제어를 옮긴다.
  • 실행 코드 중에 소프트웨어 인터럽트 명령을 삽입하여 타겟 소프트웨어의 실행을 일시적으로 중지하고 스텁으로 제어를 되돌린다.
  • 위의 소프트웨어 인터럽트 발생 시 CPU의 내부 상태를 읽어 통신 회선으로 보낸다.


임베디드 시스템용 소프트웨어 개발에서 스텁을 빠른 단계에서 안정적으로 동작시키는 것은 이후 개발 작업의 원활한 진행에 큰 영향을 미친다.[1] 스텁 자체의 디버깅에는 일반적으로 하드웨어적으로 CPU의 동작을 제어하는 인서킷 에뮬레이터를 사용한다.[1] 인서킷 에뮬레이터는 비교적 고가 장비이므로, 개발 인원 모두에게 제공하면 개발 비용이 높아진다.[1] 따라서, 스텁을 개발할 때나 소프트웨어 디버거로 감지하기 어려운 현상을 확인할 때 등 필요한 경우에만 인서킷 에뮬레이터를 사용하고, 그 외에는 스텁을 활용하여 개발 작업을 진행한다.[1]

4. 스텁 작성 방법 및 고려 사항

스텁은 호출되는 측(하위) 모듈이 미완성인 상태에서 호출하는 측(상위) 모듈을 검사하기 위해 사용된다. 스텁은 설계 사양에 정의된 모든 함수를 구현하지만, 함수 내부는 정상적인 동작 대신 상수를 반환하는 형태로 만들어진다.[1]

예를 들어, 여러 명이 프로그래밍을 할 때 모듈별로 프로그램을 작성하고 나중에 각 모듈을 결합하여 테스트한다. 이 결합 테스트 전에 개별 모듈의 정당성을 검사할 때, 호출하는 부품 모듈이 완성되지 않은 경우 스텁을 사용한다. 스텁은 단순하여 아무것도 하지 않아도 되지만, 테스트하려는 부분과 연결하여 작동시키는 데 충분하면 된다.[1]

하위 모듈 함수의 반환값에 따라 상위 모듈의 동작이 분기되는 경우, 분기 패턴을 만족시키기 위해 여러 개의 스텁을 만들기도 한다. 또는 주어지는 인수에 따라 최소한의 분기 처리만 구현하여 값을 반환하는 스텁을 만들기도 한다.[1]

4. 1. 스텁 작성 시 고려 사항

의사 코드 예시에서, ReadThermometer영어 함수는 궁극적으로 전자 하드웨어 소스에서 값을 읽도록 되어 있음에도 불구하고 특정 값을 반환한다. 이는 유효한 값을 반환하여 호출하는 코드를 실행 가능하게 한다. 이 함수는 스텁에 일반적인 입력 매개변수를 무시한다.[1]

호출하는 측(상위) 모듈을 검사할 때, 호출되는 측(하위)의 부품 모듈이 미완성일 수 있다. 이때, 호출되는 측의 부품 모듈을 대신하는 가상의 모듈을 "스텁(Stub)"이라고 부른다. 스텁 모듈은 설계 사양에 정의된 모든 함수를 구현하고 있지만, 함수 내부는 정상적인 동작을 하지 않고 상수를 반환하는 형태로 만들어지는 경우가 많다. 하위 모듈 함수의 반환값에 따라 상위 모듈의 동작이 분기되는 경우, 해당 분기 패턴을 만족시키기 위한 최소한의 몇 가지 상수를 반환하는 여러 개의 스텁을 만들기도 한다. 또는 (해당 함수가 인수를 받는 경우) 주어지는 인수에 따라 (정상적인 처리와는 관계없이, 최소한의 분기 처리만을 구현하여) 이러한 값을 반환하는 스텁을 만들기도 한다.[1]

예를 들어, 여러 명이 프로그래밍을 할 때 처음에는 모듈별로 프로그램을 작성하고, 나중에 각 모듈을 결합(링크)하여 전체적으로 잘 작동하는지 테스트한다. 이 결합 테스트 전 단계에서 개별 모듈은 미리 정당성을 검사하는 것이 바람직하다. 이 경우, 호출하는 부품 모듈이 아직 완성되지 않았을 때 스텁이 사용된다. 스텁은 단순하여 아무것도 하지 않는 것이라도 좋으며, 테스트하려는 부분과 연결하여 작동시키는 데 충분하면 된다.[1]

4. 2. 스텁 작성 예시

다음 의사 코드 예시에서, ReadThermometer|ReadThermometer영어 함수는 궁극적으로 전자 하드웨어 소스에서 값을 읽도록 되어 있음에도 불구하고 특정 값을 반환한다. 이는 유효한 값을 반환하여 호출하는 코드를 실행 가능하게 한다. 함수는 스텁에 일반적인 입력 매개변수 source|source영어를 무시한다.[1]

'''function''' ReadThermometer(Source source)

'''return''' 28

'''end function'''

5. 스텁의 장단점

메소드 스텁은 개발과 테스트의 효율성을 높이고 모듈 간의 독립성을 확보하는 장점이 있지만, 추가적인 작성 노력이 필요하며 실제 환경을 완벽하게 반영하지 못한다는 단점도 있다.

임베디드 시스템 개발 시에는 개발 비용을 줄이기 위해 스텁을 활용하기도 한다. 모든 개발 인원에게 고가의 인서킷 에뮬레이터를 제공하는 대신, 스텁을 통해 개발 작업을 진행하고, 디버거로 확인하기 어려운 특수한 경우에만 인서킷 에뮬레이터를 사용한다.

5. 1. 장점

메소드 스텁은 다음과 같은 장점을 가진다.

  • 개발 및 테스트 효율성 향상: 상위 모듈을 검사할 때, 아직 완성되지 않은 하위 모듈을 대신하여 가상의 스텁 모듈을 사용함으로써 개발 및 테스트를 효율적으로 진행할 수 있다.
  • 모듈 간 독립성 확보: 스텁은 실제 하위 모듈의 구현과 관계없이 상위 모듈을 테스트할 수 있게 해주므로, 모듈 간의 독립성을 확보하는 데 도움을 준다.
  • 초기 단계 결합 설계 검증: 설계 단계에서 내용이 없는 스텁 모듈을 작성하여 모듈 간의 결합 설계에 문제가 없는지 미리 확인할 수 있다.
  • 전체 프로그램 테스트 효율성 향상: 스텁을 사용하면 전체 프로그램의 테스트를 효율적으로 수행할 수 있다.
  • 임베디드 시스템 개발 지원: 임베디드 시스템 개발 시, 호스트 컴퓨터와 타겟 컴퓨터 간의 통신을 처리하고 CPU 및 메모리 상태를 제어하는 작은 프로그램(스텁)을 통해 개발 작업을 원활하게 진행할 수 있다.

5. 2. 단점

스텁을 작성하려면 추가적인 노력이 필요하다. 또한 스텁은 실제 환경을 완벽하게 모방할 수 없기 때문에, 실제 환경에서 예상치 못한 문제가 발생할 수 있다. 스텁 모듈만 작성하는 경우는 거의 없는데, 이는 스텁 모듈 작성에 드는 노력이 낭비되기 때문이다.

임베디드 시스템 개발의 경우, 모든 개발 인원에게 고가의 인서킷 에뮬레이터를 제공하면 개발 비용이 높아진다. 따라서 디버거로 감지할 수 없는 현상을 확인하는 등 제한적인 경우에만 인서킷 에뮬레이터를 사용하고, 그 외에는 스텁을 활용하여 개발 작업을 진행한다.

참조

[1] 서적 Programming in C++ https://books.google[...] Jones & Bartlett Learning
[2] 웹사이트 stub http://www.webopedia[...] WEBOPEDIA 1998-03-23
[3] 서적 Head First Design Patterns http://shop.oreilly.[...] O'REILLY 2012-08-28
[4] 서적 bit 単語帳 共立出版 1990-08-15
[5] 웹사이트 weblio『stub』 http://ejje.weblio.j[...] 2016-09-29
[6] 웹인용 stub http://www.webopedia[...] WEBOPEDIA 2012-08-28
[7] 저널 Head First Design Patterns http://it-ebooks.inf[...] O'REILLY 2012-08-28



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com