본문 바로가기

book

풀스택 테스트(10가지 테스트 기술의 기본 원칙과 전략)

 

개발할때, 테스트의 중요성은 이제 어느 누가 강조하지 않아도 당연한 절차로 생각되어집니다.

하지만, 실제 테스트를 잘하기 위해서는 많은 난관이 존재합니다.

크게는 사용자가 실제 사용하는것처럼 동일한 케이스를 만들고 가상의 mock객체를 구성하는 것이

말로는 쉽지만, 실제 구성하기 위해서는 다양한 케이스가 존재하고, 이러한 것을 프로그램적으로 처리하는 것이 

쉽지많은 않습니다. 또한 너무 다양한 언어와 외부 라이브러리가 존재하기 때문에 이러한 것을 TestCase로 작성하는것은

어떨때는 기능개발보다 어렵습니다.

 

저자는 집필의도를 통해서 우리가 제품에서 테스트를 실패하는 원인은 아래와 같이 정의합니다.

  • 사용자 화면 기준의 End to End 테스트 집중하는 현상
  • 일부 기능테스트만 수행하고, 비기능적인 문제를 찾지 못하는 현상
  • 수동적인 테스트에만 의존하는 현상

정말 다 맞는 말입니다. 많은 분들이 느끼는 문제점이 오랜시간 흘러왔지만, 이러한 것을이 아직도 쉽게 해결되지 않는 문제점 이기도 합니다.

 

평소 풀스택이라는 단어가 좋게도 느껴지는데, 어떠한 부분에서는 조금 과장된 단어가 아닐까 생각이 들기는 합니다.

이책에서의 내용을 살펴보면서, 어떠한 의미로 풀스택테스트라는 제목인지 살펴보려고 합니다.

책에서 말하는 "풀스택"이라는 의미는 모든 기술을 의미하는 것이 아니고, <UI계정, 서비스 계청, 데이터베이스> 를 커버하는 애플리케이션의 전제 범주를 의미하는 것입니다.

 

 

 

■ 책이 구성

· 웹 및 모바일 어플리케이션을 대상으로 10가지의 테스트 기술을 상세히 설명합니다.

· 보통 많이 들어보셨을 포스트맨, Jnit 및 다양한 실제 다양한 테스트를 하기 위한 기법이 소개되어집니다.

· 눈에 들어온 분야는 "데이터테스트", "시작적 테스트", "보안테스트", "성능테스트" 등등 매우 다양하고 생소하지만 평소에 필요한 테스트 기법이 설명되어지고 있어서 매우 다양한 분야에 걸처서 테스트 기법이 소개되어 집니다.

· 조금 화두가 되고 있는 AI/ML,블록체인에 대해서 테스트 하는 기법 소개도 많이 흥미로운 내용입니다.

· 테스트 개념 뿐만이 아니라 간단한 실습도 진행을 하면서, 해당 기법을 통해서 독자분들이 개발환경에 맞는것을 조금더 학습해 갈수 있는 다양한 방법을 소개한다는 점이 매우 좋았습니다. 모든 개발 환경을 다 커버하는 책은 없습니다. 단순히 Spring환경에서 구현을 하여도 정말 다양한 방법으로 개발되어서 100% 각자의 환경이 일치하는 환경으로 테스트 샘플을 구할수는 없습니다. 그런점에서 다양한 기법이 소개되어지고, 그 원리를 이해하면 활용할수 있는 방향을 제시하는 부분도 매우 많은 도움이 되는 책이라고 생각합니다.

· 10가지 정의하고 있는 풀스택 테스트

 

 

■ 1. 수동 탐색적 테스트

· 수동테스트 vs 수동 탐색적 테스트는 분명 다른 개념이다.

· postman : 많이들 사용하는 tool, 로그인 후 테스트 url정보등이 서버에 저장되기 때문에 기업 보안정책 검토 필요

· https://any-api.com/ (공개된 api 사이트)

· wiremock : https://wiremock.org/start

 

WireMock - flexible, open source API mocking

WireMock is a tool for building mock APIs. API mocking enables you build stable, predictable development environments when the APIs you depend on are unreliable or don’t exist.

wiremock.org

다른 구성요소의 작동을 모방하는 스텁을 만들고 변경하기 위한 도구
wiremock에 대해서 실행해본 화면 "여기서는 stub을 잘 만드는것이 핵심으로 보입니다"

<UI탐색도구>
· 다양한 브라우저를 테스트 할수 있는 클라우드 테스트 플랫폼

보통 상황에 따라서 PC에 설치되지 않는 브라우저를 테스트 하는 경우가 종종 있습니다. 클라우드에서 비용을 지불해야 하지만 이런 사이트를 알고 있으면 좋은것 같습니다. (너무 비슷한 사이트들이 많아서 책에서 언급된 플랫폼 정보는 아래와 같습니다)
1) https://www.browserstack.com/

2) https://saucelabs.com/

· 버그마그넷
크롬, 파이어폭스에서 플러그인방식으로 사용
https://chrome.google.com/webstore/detail/bug-magnet/efhedldbjahpgjcneebmbolkalbhckfi

 

Bug Magnet

Right-click context menu to help with exploratory testing

chrome.google.com

 

· 크롬 개발자 도구

가장 많이 사용하고, 다양한 기능을 제공한다 책에 소개된 내용중 평소에 알지 못한 기능을 기록한다.
1) 느린 네트워크 환경 테스트

 

2) 서비스 중단시 작동
특정 요청을 block처리를 해서, 서비스 중단 시나리오를 테스트 할수 있다.

 

 

 

■ 2. 자동화된 기능 테스트

마이크로 테스트, 매크로 테스트의 개념을 알아야 한다.

· 유닛 테스트의 백앤드 프레임워크

JUnit, TestNG, NUnit

· 유닛 테스트의 프런트앤드 프레임워크
Jest, Mocha, Jasmine

· 계약테스트 활용

Postman, pact (https://docs.pact.io/)

· 서비스 테스트 활용

postman, Rest Assured(https://rest-assured.io/), 가레테(https://github.com/karatelabs/karate)

· UI기능 테스트

셀레니움(https://www.selenium.dev/), Cypress (https://www.cypress.io/)

 

· 커버리지를 관리하기 위한 방법

TestRail(https://www.testrail.com/), Jira, 엑셀 등

· 참고) JetBrain에서 테스트를 위한 IDE가 있어서 소개합니다. (https://www.jetbrains.com/aqua/)

· 행동 주도 개발 (BDD)
 테스트 할때 많이 들어보았을 Given, When, Then 구조를 가진 사용자 스토리 작성하는 기능 제공 (https://cucumber.io/

· Cypress에서도 테스트 케이스를 생성해서, Junit처럼 테스트 결과를 확인할수 있습니다.

<서비스 테스트>

· Rest Assured에서는 restapi를 자동화 테스트를 수행한다. Junit, TestNG모두 사용할수 있다.

<유닛 테스트>

· java : JUnit, TestNG, .net : NUnit, javascript : Jest, Mocha, 루비 : RSpec

 

■ 3. 지속적 테스트

· 많이 사용하는 jenkins를 통해서 구성한다. 

· 여기에 다양한 플러그인을 통해서 ci/cd를 구성한다.

 

■ 4. 데이터 테스트

· jdbc를 통한 테스트 

· Deequ: 아마존에서 개발한 도구로 스파크 위에 구축된다. 대규모 배치 처리에 사용된다.

 

■ 5. 시작적 테스트

화면에서 시각적으로 몇px이 다르게 보여지는 경우에 대해서 테스트 하는 방법등 시작적인 부분에 대해서 테스트를 수행한다.

· Phantomjs(https://phantomjs.org/), BackstopJS(https://github.com/garris/BackstopJS)은 오픈소스이고, Applitools Eyes(https://applitools.com/platform/eyes/),Functionize(https://www.functionize.com/) 는 AI기반 유료 도구이다.

· 프런트쪽 유닛테스트는 Jest , react testing library등을 이용한다.

· 다시한번 오픈소스에 대해서 정리를 하면, CyPress, Galen(http://galenframework.com/), backstopjs등이 있고, 유료도구에는 applitools eyes, percy (https://percy.io/) 등이 있다.

 

 

■ 6. 보안 테스트

· 보안에 대해서는 범위도 넓고, 다양한 기법들이 있습니다.
1) SAST : 정적인 보안 테스트
2) SCA : 소프트웨어 구성 분석
3) 기능적 보안 테스트 자동화

4) 이미지 스캔
5) DAST : 동적인 보안 테스트

· OWASP Dependency-check는 수비게 설치를 해서 소스의 취약점을 검사해줍니다.

ex) mac에서는 brew을 통해서 쉽게 설치가 가능합니다.

· 스닉은 InlliJ에서도 쉽게 구성할수 있어서 SCA, SAST모두 지원해서 활용을 잘 해보면 좋을것 같습니다.

 

 

■ 7. 성능 테스트

<서버>

· JMeter를 통한 성능테스트

· 개틀링(https://gatling.io/) : 부하테스트, 스칼라 기반 script작성

· 아파치 벤치마크 : 보통 ab tool이라로 한다.

<프런트>

· WebpageTest (https://www.webpagetest.org/) : 무료 온라인 도구

· 라이트 하우스 : 크롬의 일부 기능 포함됨

 

■ 8. 접근성 테스트

· 접근성 테스트 전략

 

■ 10. 모바일 테스트

· Appium (https://appium.io/): "Appium은 웹드라이버를 사용하여 Android 또는 iOS에서 스크립트를 실행하고 네이티브 애플리케이션, 모바일 웹 애플리케이션 및 하이브리드 애플리케이션을 테스트하기 위한 오픈 소스 자동화 도구입니다" 크로스 플랫폼을 지원하는 자동화 도구로 애플에서 제공하는 iOS용 XCUITest와 구글에서 제공하는 안드로이드용 UiAutomator와 같은 OS별 번들링하여서 사용한다.

· 성능 테스트 도구에는 몽키(가오스 엔지니어링), 보안테스트 도구에는 MosSF, Qark가 있다.

 

 

책에서 언급하는 다양한 개념과 기법, 이것을 활용한 다양한 tool중에 평소에 알고 있었던 부분이 있지만, 새로운 tool 및 사용법을 소개받고 파악한 내용이 많아서, 앞으로도 필요한 테스트 환경 및 범위를 선정해서 활용을 잘하면 매우 큰 도움이 되는 책이라고 생각합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

'book' 카테고리의 다른 글

처음부터 제대로 배우는 스프링 부트  (0) 2023.07.18
데이터 과학자 원칙  (0) 2023.06.30
추천 시스템 입문  (0) 2023.05.27
자바와 파이썬으로 만드는 빅데이터 시스템  (0) 2023.05.20
머신러닝 시스템 설계  (0) 2023.04.22