소프트웨어 테스트(SW Test)에 대해서

JIHYE KANG(ALICE)
4 min readJan 28, 2020

소프트웨어는 누구나 개발 할 수 있다. 프로그래밍 언어만 알고 개발환경만 준비되어 있으면 기능 자체를 개발 할 수 있다.

개발된 소프트웨어의 기능이 “얼마나” “제대로” 작동하고 있는지 “성능”은 만족할만한지, “안정성”이나 “확장성”은 충분한지를 검증해야한다.

이를 소프트웨어 테스트를 통해 검증한다.

(전통적인 개발에서는 소프트웨어 개발이 완료된 후 출시 전에 테스팅을 하는 방식을 사용했다. 그러나 문제점의 경우 초기에 발견하는것이 수정이 쉽고 비용이 적게 들기 때문에, 개발 단계별로 그에 맞는 테스팅 전략이 수립된 개발모델이 주류를 이루고 있다.)

1. V모델

ISTQB의 테스팅 방법론에 정의된 모델로, V모델은 폭포수모델(Waterfall Model)의 확장형으로 폭포수 모델의 개발 각 단계를 각각 대칭되는 4가지의 단계의 테스팅 모델로 정의하여 테스트 절차를 강화한 개발 모델이다.

  • 폭포수 모델의 확장된 형태
  • 각 단계 별 검증과 확인을 강조하는 모델

폭포수 모델: 각 단계를 완전히 종료한 후 다음 단계로 넘어가는 방식으로 변경에 대한 비용이 가장 많이 발생하는 방법론이다.

  • V 모델은 개발 및 테스트 단계를 기준으로 개발 모델 상의“구현을 수행하는” 검증(Verification)영역과, 개발이 된 시스템을 가지고 “테스트”를 하는 검수(검사)(Validation)영역으로 나뉘어진다.

1–1. 검증(Verification)

  • 우리가 맞는(Right Thing) 제품을 만들고 있는가?
  • 주로 제품을 개발하기 전 요구사항이나 디자인이 옮은지 점검하게 됨
  • 실제로 작동하는 시스템이 아닌 주로 문서를 기반으로 한 표준 준수 여부 확인 등의 검증작업이 이루어지기에 정적 테스트(Static Test)라고도 함
  • 소스코드, 설계문서, 요구 사항 정의서와 같은 산출물을 활용한 테스트진행

1–2. 검수(Validation)

우리가 제품을 맞게(Right Way) 만들고 있는가?

  • 동적테스트는 작동이 가능한 실제 시스템을 기반으로 테스트를 수행
  • 각 테스트 단계를 좌측 영역에 대응되는 각 단계의 내용을 기반으로 하여 검증을 수행
  • 단위테스트에서는 구현에 대한 신뢰성 검증
  • 통합테스트에서는 상세 설계에 대한 유효성 검증
  • 시스템 테스트 단계에서는 설계에 대한 검증
  • 인수 테스트 단계에서는 사용자 요구 사항에 대한 만족도를 중심으로 테스트 수행

2. 정적테스트

소프트웨어개발 테스트로 산출물 검수 이외에 소스 코드를 대상으로 정적 테스트를 수행할 수 있다.

주로 사용하는 방식으로 코드리뷰, 정적분석 이 있다.

2–1. 코드 리뷰(사람을 중심으로)

  • 사람이 직접 소스 코드를 보면서 코드의 품질을 체크하는 프로세스
  • 방식에 따라 피어리뷰(Peer Review), 워크스루(Walkthrough), 팀 리뷰(Team Review), 코드 인스펙션(Code Inspection)가 있음
  • 비용대비 효과가 매우 큰 방식

2–2. 정적 분석(시스템으로 자동화)

코드리뷰가 사람에 의해 수동적으로 수행되는 정적분석과정이라면 정적분석(Static Analysis)은 자동화된 도구에 의해서 이루어 지는 정적분석과정이다.

ex) 잘 알려진 버스에 대해서 리포팅(Connection Leak — JDBC ConnectionPool에서 Connection을 사용한 후 Pool에 돌려놓지 않아서 생기는 문제)

ex) 코딩 표준에 맞지 않는 코딩 내용을 찾아내거나(띄어쓰기, 줄 바꾸기, 변수명이나 클래스명 규칙 등)

ex) 실행되지 않는 데트 코드(Dead Code) 등을 검출하거나

ex) 코드의 복잡도를 계산

  • 정적 분석을 수행하는 도구로 PMD, Find Bugs, Jdepends와 같은 오픈소스 도구가 있음
  • 주의할 점은 ‘미리 정의된 소스 코드의 패턴’을 기반으로 테스트를 진행함
  • 정적분석 도구를 적용하려면 반드시 패턴을 검토하고 개발하고자 하는 소프트웨어에 맞도록 패턴을 최적화해서 사용해야 함
  • 제대로 된 패턴을 사용한다면 정적 분석 도구는 코딩 규칙에 벗어난 코드나 일반화된 자주 발생하는 오류들을 검출하는 데 아주 유용함

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

--

--