본문 바로가기

카테고리 없음

Test Code를 사용해야 할까?

Test Code

 

테스트 코드는 무엇일까?

 

    테스트 코드는 소프트웨어의 기능과 동작을 테스트하는데 사용되는 코드이다.

    소프트웨어의 결함을 찾고 수정하는 과정이 매우 중요하다.

    또 테스트 코드는 개발자가 작성한 코드를 실행하고 예상된 결과가 나오는지 확인하는데 사용된다.

 

테스트 코드의 종류

 

 

 

1. 단위 테스트 (Unit Testing)

 

    단위 테스트는 소프트웨어 개발에서 가장 기본적으로 사용하는 테스트 중 하나로, 개별적인 코드 단위

    보통 함수, 메서드가 의도한 대로 잘 작동이 되는지 확인을 하는 과정을 이야기한다.

    소프트웨어의 개별 코드 단위를 테스트하여 오류를 캐치하고 수정하여 전체적으로 소프트웨어의

    품질을 향상시키는 과정이라고 설명을 할 수 있습니다.

 

 

    따라서!! 단위 테스트를 작성하여 각각의 코드 단위가 정확한 입출력 값을 반환하는지 확인해야합니다.

    단위 테스트 작성을 위해서 다양한 라이브러리, 프레임워크를 제공하는데 대표적으로 JAVA, Junit이 있다.

 

public class Calculator{

    public int add(int a, int b){

        return a + b;

    }
}
import org.junit.Test;

import static org.junit.Assert.assertEquals;


public class CalculatorTest {

    @Test

    public void testAdd(){

        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }
}

 

 

    설명 : Calculator 클래스는 add라는 메서드를 소유. -> 두 정수를 더해서 반환을 한다.

    CalculatorTest 클래스는 Junit의 @Test 어노테이션을 이용하여 testAdd를 선언한다.

    testAdd 메서드는 Calculator 클래스의 add 메서드가 제대로 작동하는 검증을 한다.

 

   Java Annotation : 자바의 어노테이션은 소스코드에 추가해서 사용할 수 있는 메타 데이터

 

    assertEquals 메서드를 이용하여 testAdd 메서드에서 Calculator 클래스의 add 메서드가

    반환한 값이 예상 값과 같은지 검사를 한다.

 

Jest

 

초기 세팅

 

    // 설치

    $ npm install jest --save-dev

    // ESLint Testing Plugins 설치

    $  npm install eslint-plugin-testing-library eslint-plugin-jest-dom

    > package.json에 eslintConfig 삭제

{

  "plugins": ["testing-library", "jest-dom"],

  "extends": [

    "react-app",

    "react-app/jest",

    "plugin:testing-library/react",

    "plugin:jest-dom/recommended"

  ]
}

 

Jest란?

 

    Jest는 단순함에 초점을 맞춘 자바스크립트 테스트 프레임워크이다.

    Jest는 React 뿐만 아니라 Babel, TypeScript, Vue,Node 등 다양한 곳에서 사용 할 수 있는

    테스트 러너이며 직접적으로 테스트를 실행 해주는 역할을 할 수 있다.

 

    1. FaceBook에 의해서 만들어진 테스팅 프레임워크이다.

    2. 최소한의 설정으로 동작하며 Test Case 를 만들어서 어플리케이션 코드가 잘 돌아가는지 확인한다.

    3. 단위 (Unit) 테스트를 위해서 이용한다.

 

Jest 파일 구조

 

    1. describe에 test케이스들이 들어와 있는 구조이다.

    2. describe : 여러 관련 테스트를 그룹화 하는 블록 제작한다.

    3. test, it : 개별 테스트를 수행하는 곳, 각 테스트를 작은 문장처럼 설명한다.

 

testing-library-react란?

 

    React는 JSX 문법이 사용된 Component라는 개념이다.

    일반 javascript 가 아니기 때문에, 테스트 러너에서 쉽게 동작하기 위해서 필요한

    라이브러리가 testing-library-react이다.

ㅤ@testing-library는 UI 컴포넌트를 사용자 친화적으로 테스트할 수 있게 도와주는 패키지 묶음이다.

 

 

 //설치
npm install --save-dev @testing-library/react

 

2. 통합 테스트 (Integration Testing)

 

    통합테스트는 서로 다른 모듈들 간의 상호작용을 테스트 하는 과정이다. 예를 들어 새로 개발한 API 서버 내

    DB 호출 함수가 데이터베이스의 데이터를 잘 호출하고 있는지 테스트하고 과정이라고 생각하면 된다.

 

    통합 테스트는 보통 모듈 간의 인터페이스 테스트, 시스템 레벨 테스트 등의 방법으로 수행이 된다.

    예시로 여러 모듈이 연결된 BE API 웹 애플리케이션의 경우 서로 다른 모듈들 간의 상호작용을

    테스트하기 위해서 각 모듈 단위 테스트를 모두 완료한 뒤, 둘 이상의 모듈을 거쳐 동작을 API

    테스트 시나리오를 기반으로 통합 테스트를 수행한다.

 

 

 

 

단위보다 통합이 더 많은 리소스와 시간이 필요하며, 오류를 발견하고 수정하는데 많은 시간이 필요하다.

 

하지만 통합 테스트를 수행함으로써, 전체적인 소프트웨어 시스템의 신뢰성과 안정성을 높일 수 있다는 것!

 

 

테스트 코드를 왜 사용해야 할까?

 

    테스트 코드를 사용하면 다양한 상황에서 얻는 결함을 보다 쉽게 찾을 수 있고 개발을 하면서

    더 좋은 코드로 개선을 할 수 있기 때문입니다.

 

  • 무엇을 만들고 있는지 인지 : 테스트 코드 작성을 통해 요구사항의 기능적인 항목을 정리, 코너 케이스를 찾으며 이는 문서의 역할을 한다.
  • 리팩토링 진행할 때 부담 덜기 : 테스트 코드가 있으면 코드 수정 후에도 기능이 정상적으로 작동하는지 검증 할 수 있어, 개발자는 불안감에서 벗어날 수 있다.
  • 결합도와 의존성이 낮은 코드 지향 : 테스트 코드 작성을 통하여 의존성이 높은 부분을 개선하면 프로젝트의 코드 품질을 향상시키고 개발자로서의 경험이 쌓인다.

 

테스트 코드의 장단점

 

장점

 

1. 코드의 품질을 향상 ➡️ 소프트웨어의 품질을 향상

 

2. 회귀 테스트 ➡️ 결함과 버그를 빠르게 발견하고 수정

 

3. 문서화 ➡️ 커뮤니케이션 향상에도 도움을 줌

 

4. 리팩토링 지원 ➡️ 리팩토링 후에 기능이 정상적으로 작동하는 확인

 

단점

 

1. 개발 시간 증가 ➡️ 개발 시간이 증가, 초기 개발 비용 증가

 

2. 불완전한 테스트 ➡️ 버그가 테스트 통과하게 되어, 완전한 테스트 어려움

 

3. 오버 엔지니어링 ➡️ 개발 속도 저하와 비효율적인 리소스 사용

 

4. 유지 보수 비용 ➡️ 추가적인 유지 보수 비용이 발생

 

5. 학습 곡선 ➡️ 테스트 프레임워크와 작성 방법을 익히는 시간 발생

 

 

테스트 코드 프레임워크

 

1) Junit - JAVA

2) DBunit - DB

3) CppUnit - C++

4) Nunit - .net

 

마치며 ...

 

    테스트 코드를 사용하는데 나는 장점보다는 단점이 더 많다고 생각이 드는 것 같다..

    물론 장기적으로 보면 좋을 수도 있지만 지금 내 상황에서는 쓰는 것이 맞나? 라고 생각이 들 수도

    있을 것 같다. 하지만 더 좋은 개발자가 되기 위해서 좋은 기회와 습관을 제공한다는 것이다.

    더 좋은 프로젝트의 진행과 품질 결과를 위해서 한번 써보는 것이 좋을 것 같다!!