일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 자바
- 티스토리챌린지
- XSS
- 프로세스와스레드의차이
- 한화시스템부트캠프
- 자동화워크플로우
- 스프링시큐리티
- 메소드
- 프로토콜역할
- n8n
- 오버로딩
- Kafka
- N+1문제
- 자료구조
- 부트캠프
- 테스트케이스
- JPA
- nplus1
- 엘라스틱서치
- 캐시의 작동 원리
- 하이브리드접근법
- QA
- STOMP
- springboot
- jwt토큰
- selenium
- 헥사고날아키텍처
- 오블완
- kafka배포
- Java
- Today
- Total
아쿠의 개발 일지
소프트웨어 테스트 기본 개념 본문
이번에는 소프트웨어 테스트의 기본 개념에 대해서 공부를 해 보는 시간을 가져 보려고 합니다.
소프트웨어 테스트는 SW가 요구사항에 따라 동작하는지 확인하고, 예상치 못한 오류나 결함을 발견하는 활동입니다.
테스트 개발 과정의 중요한 단계로, 소프트웨어의 품질과 신뢰성을 보장하는 데 필수적입니다.
소프트웨어 테스트의 정의
소프트웨어 테스트는 소프트웨어 제품의 요구사항 충족 여부를 검증하고, 결함을 찾아 수정하기 위한 프로세스입니다.
- 검증(Validation): “소프트웨어가 올바른 제품을 만들었는가?“를 확인
- 확인(Verification): “소프트웨어가 정확하게 설계되었는가?“를 확인
소프트웨어 테스트의 목적
- 결함 발견: 소프트웨어 내의 오류나 결함을 찾기 위해
- 품질 보증: 제품이 요구사항에 맞게 동작하는지 확인
- 위험 감소: 결함으로 인해 발생할 수 있는 비즈니스 또는 시스템 문제를 최소화
- 고객 만족: 최종 사용자에게 높은 품질의 소프트웨어 제공
- 비용 절감: 초기에 결함을 발견하면 수정 비용이 적게 듦
테스트의 원칙
- 결함 존재 증명: 테스트는 결함이 없음을 증명하는 것이 아니라, 결함이 있음을 찾는 데 목적이 있다.
- 완벽한 테스트는 불가능: 모든 가능한 입력과 상황을 테스트하는 것은 비현실적이다.
- 조기 테스트 시작: 개발 초기부터 테스트를 수행하면 결함 발견 및 수정 비용을 줄일 수 있다.
- 결함 집중: 대부분의 결함은 소수의 코드 모듈에서 발견된다. (파레토 원칙 적용)
- 살충제 패러독스: 동일한 테스트를 반복하면 새로운 결함을 발견하기 어렵다. 테스트 케이스를 정기적으로 수정하는 것이 필요하다.
- 테스트는 상황에 의존적: 테스트 접근 방식은 프로젝트의 성격과 요구사항에 따라 다르다.
테스트 프로세스
1. 테스트 계획 수립
- 목표 설정, 테스트 범위 정의, 리소스와 일정 계획
- 테스트 전략(수동/자동화, 도구 선택 등) 결정
2. 테스트 설계
- 요구사항 분석을 기반으로 테스트 케이스와 시나리오 설계
- 테스트 데이터를 준비
3. 테스트 실행
- 설계된 테스트 케이스를 실제로 실행
- 결함 발견 시 결함 리포트를 작성
4. 테스트 결과 분석 및 리포트
- 테스트 결과를 검토하고 성공 여부를 판단
- 결함 수정 후 회귀 테스트를 수행
5. 테스트 종료
- 테스트 목표 달성 여부를 평가
- 테스트 완료 후 산출물을 정리
소프트웨어 테스트의 종류
(1) 테스트 수준
1. 단위 테스트 (Unit Testing)
- 소프트웨어의 가장 작은 단위를 테스트
- 개발자가 직접 수행하며, 코드의 각 함수나 모듈을 검증
- 도구 : JUnit, NUnit
2. 통합 테스트 (Integration Testing)
- 모듈 간의 상호작용을 검증
- 하위 시스템이나 API 간의 데이터 흐름 확인
3. 시스템 테스트 (System Testing)
- 전체 시스템이 요구사항에 따라 동작하는지 확인
4. 인수 테스트 (Acceptance Testing)
- 최종 사용자가 소프트웨어가 기대대로 작동하는지 확인
(2) 테스트 종류
1. 기능 테스트 (Functional Testing)
- 기능이 요구사항에 따라 제대로 동작하는지 검증
2. 비기능 테스트 (Non-Functional Testing)
- 성능, 보완, 확장성, 사용성 등 시스템의 비기능적 측면을 테스트
3. 회귀 테스트 (Regression Testing)
- 코드 수정 후 기존 기능이 제대로 동작하는지 확인
4. 부하 테스트 (Load Testing)
- 대량의 사용자가 동시에 시스템을 사용하는 경우의 시뮬레이션
- Locust, Jmeter
5. 스트레스 테스트 (Stress Testing)
- 시스템의 한계를 테스트하기 위해 극한 상황을 시뮬레이션
6. 보안 테스트 (Security Testing)
- 시스템이 외부의 공격에 얼마나 안전한지 검증
7. 알파/베타 테스트
- 알파 : 내부 팀이 수행
- 베타 : 실제 사용자가 수행
테스트 설계 기법
1. 동등 분할
- 입력 데이터를 유사한 특성으로 나누고, 각 그룹을 대표하는 값으로 테스트
2. 경계값 분석
- 경계값 근처에서 테스트하여 오류를 찾음
3. 결정 테이블
- 여러 조건과 결과를 테이블 형태로 정리하여 테스트
4. 유즈케이스 테스트
- 사용자의 행동을 기반으로 테스트 케이스 설계
5. 탐색적 테스트
- 사전 정의된 테스트 케이스 없이 경험과 직관에 따라 수행
테스트 도구
1. 테스트 관리 도구
- Jira : 결함 관리 및 프로젝트 관리
- TestRail : 테스트 케이스 관리
2. 테스트 자동화 도구
- Selenium : 웹 테스트 자동화
- Appium : 모바일 앱 테스트 자동화
3. API 테스트 도구
- Postman : API 호출 및 검증
이 기본 개념을 기반으로 테스트를 이해하고 실습을 진행하면 실제 업무에 빠르게 적응할 수 있을 것이라고 생각합니다.
추가로 심화 학습이나 실습이 필요한 경우는 간단한 웹사이트나 애플리케이션을 선택해 테스트케이스를 작성하고, 테스트를 실행하여 결함을 리포트 하는 과정을 거치는 것이 좋습니다!
자동화 테스트의 경우 Selenium을 사용해 간단한 로그인 자동화 테스트를 실행 하려면
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
# 테스트 실행
driver.get("https://demowebshop.tricentis.com/login")
driver.find_element(By.ID, "Email").send_keys("testuser@example.com")
driver.find_element(By.ID, "Password").send_keys("password123")
driver.find_element(By.CSS_SELECTOR, "input.button-1.login-button").click()
# 결과 확인
assert "Welcome" in driver.page_source, "로그인 실패!"
driver.quit()
다음과 같이 예제 코드를 작성할 수 있습니다.
QA를 정리한 글에서 테스트케이스를 작성하는 방법도 적어 놓았으니, 실습하며 작성하면 더욱 도움이 될 것이라 생각합니다!
'Programming > QA' 카테고리의 다른 글
Selenium vs Cypress vs Playwright: 웹 테스트 자동화 도구 비교 (0) | 2025.03.04 |
---|---|
셀레니움(Selenium) 크롤링? (2) | 2024.12.11 |
QA(Quality Assurance)가 무엇일까? (0) | 2024.12.10 |