컴퓨터과학/0 +소프트웨어 테스팅

[소프트웨어 테스팅] 5. 모듈 테스팅(단위 테스팅)

힘들면힘을내는쿼카 2022. 5. 16. 20:31
728x90
반응형

2022.03.27 - [컴퓨터 공학/0 +소프트웨어 테스팅] - [소프트웨어 테스팅] 4. Test-Case Design(Black Box Testing and White Box Testing)

 

[소프트웨어 테스팅] 4. Test-Case Design(Black Box Testing and White Box Testing)

2022.03.20 - [컴퓨터 공학/0 +소프트웨어 테스팅] - [소프트웨어 테스팅] 3. Program Inspections, Walkthroughs and Reviews [소프트웨어 테스팅] 3. Program Inspections, Walkthroughs and Reviews 2022.03.13..

howisitgo1ng.tistory.com

 

 

하...

정말로 오랜만에 소프트웨어 테스팅 포스팅이다..

개인사정으로 꾸준하게 포스팅하지 못했당... ㅠ0ㅠ

각설하고 모듈테스팅에 대해서 파헤쳐보자.. 팍팍!(너무 옛날 사람 같나..?)

 

 


 

회사에는 채용을 하기위해서 개별로 면접을 보게된다...

개인의 역량을 확인(테스트) 하기 위해서이다.

이것이 소프트웨에도 적용되는 것이다.!

 

 

모듈 테스팅(단위 테스트)

개별적인 서브프로그램, 서브루틴, 클래스 또는 프로시저를 테스트 하는 테스팅 기법이다.!

즉, 프로그램 전체를 테스팅 하기보다는 프로그램의 작은 구성 단위를 테스트 하는 것...!!

 

 

그러면 왜 전체를 테스트 하지 않고?????

1. 프로그램의 작은 구성 단위에 초점을 맞추기 때문에 결함된 요소를 단순화 해서 관리 할 수 있다.

2. 오류 발견시 어떤 모듈에 오류가 있는지 쉽게 알수 있다. 그래서 덤으로 발견된 오류를 정확히 찾고 수정하는 디버깅 작업이 쉽다.

3. 다중 모듈을 동시에 테스트 할 수 있기 때문에 병렬화 작업이 가능하다.

 

 

모듈 테스팅의 궁극적인 목표

 

모듈을 정의하는 기능이나 인터페이스 명세와 모듈의 기능을 비교하는 것

 

다시말해서 모듈이 명세를 충족시키는것을 보여주는것이 아닌

모듈 명세와 모순되는 것을 보여주기 위함이다....!!

 


 

그러면 이제

모듈테스팅을 3가지 관점에서 자세히 알아보자..

  • 테스트 케이스 설계 방법
  • 테스트하고 통합 할 모듈의 순서
  • 테스트 수행을 위한 조언

 


 

모듈 테스트 케이스 설계(Test Case Design)

모듈 테스트를 위한 테스트 케이스를 설계 할때는 

모듈모듈 소스코드에 대한 2가지 명세가 필요하다.

 

모듈 테스트는 일반적으로 화이트 박스 중심이고 블랙박스 방법을 적용해 테스트 케이스를 보완한다.

전체 프로그램을 테스트 할때 화이트 박스로 하면 항목이 너무 많아서 테스팅은 거의 실현 불가하기 때문..😂(시간이 많으면 가능)

추가로 전체 프로그램을 테스트 할때는 다른 형태의 오류를 찾기 위함이다.(사용자의 요구사항에 충족하지 못하는 오류는 프로그램 로직과 관련없는 에러)

 


 

 

통합 테스트(점진적 테스트)

단위 테스트가 끝났으면 이제 통합 테스트를 진행해야한다.

통합 테스트란 이름에서 알 수 있듯이 모듈을 결합하여 하나의 시스템으로 구성한 뒤 테스트 하는 것을 의미한다.

통합테스트가 응용 프로그램이 완전하게 동작하는 걸 보증하지는 않는다.

 

모듈 테스팅 프로세스의 2가지 핵심 고려사항

  • 효율적인 집합의 테스트 케이스 설계
  • 작동하는 모듈이 프로그램에 결합되는 방법 설계

 

작동하는 모듈이 프로그램에 결합되는 방법 설계란?

  • 모듈 테스트 케이스가 작성되는 양식
  • 사용될 수 있는 테스트 방법의 종류
  • 모듈 코딩 및 테스트 순서
  • 테스트 케이스를 생성하는 비용
  • 디버깅의 비용(감지되는 오류의 위치 및 수정)

 

통합테스트는 2가지 접근 방법이 있는데

  • 비점진적 방법
    • 각 모듈은 독립적으로 테스트 하고 모듈을 묶어서 하나의 프로그램을 만드는 방법 
      • Bing Bang
        • 테스트된 각 모듈을 하나로 묶어서 테스트 수행(단시간내에 가능)
        • 통합과정에서 결함이 어디에서 문제가 있는지 발견하기 어려움
  • 점진적 방법
    • 모듈을 테스트된 모듈과 결합해 가면서 테스트
      • Top-Down(하향식), Bottom-Up(상향식)
        • 위 또는 아래에서 부터 통합해가면서 테스트 진행
        • 결함 발생시 결함 수정 후 위 또는 아래 부터 다시 통합하며 테스트를 수행(시간이 많이 걸림)
      • Backbone
        • 중요 모듈부터 시작하고 리스크 순으로 통합을 하며 테스트
        • 결함에 독립적으로 운용할 수 있고(bug isolation), 리스크 순으로 결함을 발견한다.

 

 

반응형

 

그래서 뭔데? 🙄

비점진적 VS 점진적

 

비점진적 방법 장점

  • 테스트 시간이 적게 걸린다.
    • 단위 테스트가 통과된 모듈을 결합하여 한번에 테스트 하니까~
  • 병렬작업에 유리하다.
    • 모든 모듈을 동시에 테스트 할 수 있다.

 

점진적 방법 장점

  • 점진적 테스팅에는 더 많은 작업이 필요
  • 점진적 테스팅은 프로그래밍 오류를 초기에 발견(모듈을 조합하면서 테스트 하기 때문)
    • 오류가 발견 됐다면 가장 최근에 추가된 모듈과 관련이 있기 때문..!
  • 점진적 테스팅은 비점진적 테스팅보다 철저한 테스트 결과를 이끌 수 있다.

 


 

하향식 테스트(Top Down)

하향식의 전략은 프로그램의 상단 또는 초기 모듈부터 시작한다.

하위 모듈이 없으므로 하위 모듈 역할을하는 스텁(Stub)을 이용한다.

 

예시를 들어보겠다.

상품 목록 출력을 테스트 하기 위해서는 상품 요청 메시지수신 Controller가 필요하다.

상품 요청 메시지수신 Controller가 Stub(스텁)이다.

즉, 상위 모델을 테스트 하기위해서는 하위 모델이 필요한데 이 하위 모델을 스텁 이라고 한다..!

 

계속 하향식으로 진행하면 아래와 같은 결과를 얻을 수 있다.

 

 

 

여기까지오면 다음 테스트 결과는 실제 기능을 할 수 있는 프로그램의 기초버전이 될수 있다.

하지만, 여전히 스텁이 내부 기능을 시뮬레이션 하는 것이다.

정리하면 다음과 같다.

  • 프로그램을 최종 사용자에게 시연 할 수 있다.
  • 프로그램의 전체 설계가 명확해짐
  • 인간적인 요소나 오류 문제를 찾을 수 있다.

 


 

상향식 테스트(Bottom Up)

상향식 테스트는 하향식 테스트와 반대이다.

모든 모듈들이 테스트 될 때까지 더 낮은 레벨에 있는 각 모듈은 더 위에 있는 모듈과 함께 테스트 된다.

상향식 접근법에는 드라이버가 필요한데

이 드라이버는 하위 모듈을 순서에 맞게 호출하고 필요한 매개 변수를 제공하여 반환값을 전달하는 역할을 한다.

 

그렇다..

남성 상품 조회 query Repository모듈을 테스트하기 위해 상품 요청 로직 수행 Service 드라이버가 필요하다..!

 

 

728x90

 

하향식 테스팅과 상향식 테스팅 정리

하향식 테스팅 장점
  • 주요 결함이 프로그램 상위에서 발생하면 유리
  • 기능(i/o)이 추가되면 테스트 케이스를 표현하기 용이
  • 초기 프로그램 구조로 시연이 가능(팀원의 사기가 올라간다.)
하향식 테스팅 단점
  • 스텁 모듈을 만들어야함(스텁 모듈은 복잡함.)
  • 기능(i/o)이 추가되기 전에 스텁에서 테스트 케이스를 표현하기 어려움
  • 테스트 조건은 만들기 불가능하거나 매우 어렵다.
  • 테스트 출력을 관찰하기 어렵다.
  • 설계와 테스팅이 겹친다고 생각하기 쉽다.
  • 특정 모듈 테스팅 종료가 연기 될 수 있다.

 

상향식 테스팅 장점
  • 주요 결험이 프로그램 하위에서 발생하면 유리
  • 테스트 조건을 만들기 쉽다.
  • 테스트 결과 관찰이 쉽다.
상향식 테스팅 단점
  • 드라이버 모듈을 만들어야 한다.
  • 최종 모듈이 추가될 때까지 프로그램 시작점이 존재하지 않는다.

 

 

 

전체 정리

테스트 하기 전에 테스트 케이스의 집합을 검토하거나 검사를 진행해야한다.(즉, 테스트 케이스를 테스트 해야한다..!)

자신의 모듈을 테스팅 하기보다는 모듈을 서로 바꿔서 테스트 하는 것을 지향해야 한다.

또한,  모듈의 부분집합에서 비정상적으로 많은 수의 오류가 발견되었다면, 이 모듈은 발견되지 않은 오류도 포함하고 있을 확률이 높다.

마찬가지로 모듈테스팅의 목적은 프로그램 사양과 모순되는 것을 보여주고자 하는 것이다.

소프트웨어 명세 이외에 모듈 테스트를 수행 할 수 있는 각 모듈의 소스코드가 필요하다.

모듈 테스트는 넓은 의미로 화이트박스 테스팅이다.

철저한 모듈 테스트 설계는 하향식뿐만 아니라 상향식 같은 점진적 전략의 기법을 포함한다.

 

 

 

 

 

 

728x90
반응형