11. 테스트

1. 목표
(1) 소프트웨어 개발에서 테스트의 위치
소프트웨어 개발 생명주기(SDLC)에서 테스트는
- 요구사항 분석
- 설계
- 구현(코딩)
- 테스트
- 배포
- 유지보수
단계에서 테스트 단계의 목적은 단순히 "에러가 없는지 확인"이 아니라
- 요구사항이 정확히 구현되었는지
- 기능이 의도한 시나리오대로 동작하는지
- 잘못된 입력이나 예외 상황에서도 안전하게 동작하는지
- 시스템 구성 요소들이 서로 정상적으로 연동되는지
만들어진 소프트웨어가 실제로 사용 가능한 상태인지 검증하는 단계입니다.
(2) 소프트웨어 개발 테스트 단계 개요

| 단계 | 테스트 명칭 | 핵심 목적 |
| 1단계 | 단위 테스트(Unit Test) | 개별 기능 검증 |
| 2단계 | 통합 테스트(Integration Test) | 모듈 간 연동 검증 |
| 3단계 | 시스템 테스트(System Test) | 전체 시스템 검증 |
| 4단계 | 인수 테스트(Acceptance Test) | 사용자 요구 충족 여부 확인 |
(3) 본 프로젝트에서는 단위 테스트보다는,
실제 사용 환경을 가정한 시스템 테스트 및 시나리오 기반 테스트를 중심으로 검증을 수행하였다.
2. 핵심 작업
A. 기능 테스트 (Functional Test)
- 각 기능이 요구사항대로 동작하는지 확인
- 도서 관리 기능
- 도서 등록
- 도서 조회
- 도서 삭제
- 회원 관리 기능
- 회원 등록
- 회원 검색
- 회원 삭제
- 대출/반납 기능
- 회원 조회 성공 시 대출 목록 표시
- 대출 가능 도서 대출 성공
- 이미 대출 중인 도서 대출 불가
- 반납 시 상태 정상 복구
- 연장 시 날짜/횟수 증가 확인
B. UI 테스트 (GUI Test)
- 화면 구성과 사용자 경험 검증
- GUI 프로젝트에서는 눈으로 확인하는 테스트도 정식 테스트 작업
- 버튼 클릭 시 즉시 반응하는지
- 상태 라벨이 적절히 변경되는지
- 테이블이 갱신될 때 이전 데이터가 남지 않는지
- 페이지 전환 시 이전 페이지 상태가 섞이지 않는지
- 한글 폰트 깨짐 여부
C. 시나리오 테스트 (Use Case / Flow Test)
- 사용자의 실제 사용 흐름을 기준으로 전체 동작 검증
- 시나리오 1: 정상 대출 흐름
- 회원 관리 페이지에서 회원 등록
- 도서 관리 페이지에서 도서 등록
- 대출/반납 페이지 이동
- 회원 조회
- 도서 ID 입력 후 대출 실행
- 대출 목록 테이블 갱신 확인
- 도서 관리 페이지에서 상태 "대출 중" 확인
- 시나리오 2: 반납 흐름
- 대출 목록에서 도서 선택
- 반납 버튼 클릭
- 대출 목록에서 제거 확인
- 도서 관리 페이지에서 상태 "대출 가능" 확인
D. 예외 및 오류 처리 테스트 (Negative Test)
- 잘못된 입력이나 비정상 상황에서도 프로그램이 안정적으로 동작하는지 확인
- 입력값 누락
- 빈 도서 ID
- 빈 회원 ID
- 선택 없이 삭제/반납/연장 버튼 클릭
- 존재하지 않는 회원 ID로 조회
- 존재하지 않는 도서 ID로 대출 시도
- 동일 제목 도서가 여러 권 있을 때 제목으로 대출 시도
E. 데이터 무결성 테스트 (Data Integrity Test)
- DB 데이터가 일관성 있게 유지되는지 확인
- 대출 성공 시
- issues 테이블에 레코드 추가
- books.is_available = FALSE
- 반납 성공 시
- issues 레코드 삭제
- books.is_available = TRUE
- 연장 시
- renew_count 증가
- issue_date 갱신
ㄴ2.1 [A] 기능(Function) 테스트 체크리스트 샘플
테스트 단계에서는 "기능이 되는지"뿐 아니라 "잘못된 상황에서도 안전하게 동작하는지"를 체계적으로 검증해야 합니다.
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 회원관리 | 회원 등록 | 필수 항목 미입력 | 경고 메시지 출력 | ||
| 회원 등록 | 정상 등록 | DB 저장 및 목록 반영 | |||
| 회원 조회 | 조건 검색 | 조건에 맞는 회원 조회 | |||
| 회원 삭제 | 회원 삭제 | 삭제 반영 |
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 도서관리 | 도서 등록 | 중복 ID | 등록 실패 메시지 | ||
| 도서 조회 | 제목/저자 검색 | 검색 결과 표시 | |||
| 도서 삭제 | 선택 삭제 | 테이블 갱신 |
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 대출/반납 | 회원 조회 | 회원 ID | 대출 목록 표시 | ||
| 도서 대출 | 대출 가능 도서 | 대출 성공 | |||
| 도서 반납 | 반납 | 상태 복구 | |||
| 연장 | 연장 실행 | 연장 횟수 증가 |
ㄴ 2.2 [B] UI 테스트 (GUI Test) 샘플
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 공통 | 화면 전환 | 사이드바 버튼 클릭 | 해당 페이지 즉시 표시 | ||
| 공통 | 테이블 선택 | 행 클릭 시 강조 표시 | 선택 행 명확 | ||
| 공통 | 상태 라벨 | 작업 후 상태 표시 | 상태 문구 갱신 | ||
| 입력 | Placeholder | 입력 전 힌트 표시 | 입력 목적 인지 | ||
| 입력 | 빈 값 처리 | 입력 없이 등록 | 경고 메시지 | ||
| 입력 | 공백 처리 | 공백 입력 | 자동 trim | ||
| 메시지 | 성공 메시지 | 등록/삭제 성공 | 성공 안내 표시 | ||
| 메시지 | 실패 메시지 | 중복/오류 발생 | 원인 안내 | ||
| 메시지 | 확인 창 | 삭제/반납 시 | Yes/No 선택 | ||
| 테이블 | 데이터 갱신 | 등록/삭제 후 | 즉시 반영 | ||
| 테이블 | 빈 결과 | 검색 결과 없음 | 빈 테이블 유지 | ||
| 흐름 | 회원 미조회 대출 | 회원 없이 대출 시도 | 경고 표시 | ||
| 흐름 | 대출 후 상태 | 대출 완료 | 대출 중 표시 | ||
| 흐름 | 반납 후 상태 | 반납 완료 | 대출 가능 표시 |
ㄴ 2.3 [C] 시나리오 테스트(Use Case / Flow Test) 샘플
사용자가 실제로 프로그램을 사용하는 순서대로 기능이 정상 동작하는지 검증한다.
화면 전환, 입력, DB 반영, 테이블 갱신, 상태 표시가 “끝까지” 이어지는지 확인한다.
시나리오 1: 정상 대출 흐름(회원 등록 → 도서 등록 → 대출 처리 → 상태 확인)
사전 준비(테스트 데이터 예시)
- 회원 ID: M001
- 도서 ID: B001
테스트 절차
- 프로그램 실행 후, 좌측 메뉴에서 **"회원 관리"**로 이동한다.
- 회원 등록 입력란에 아래 정보를 입력한다.
- 회원 ID: M001
- 이름: 홍길동
- 연락처: 010-1234-5678
- 이메일: hong@test.com
- [회원 등록] 버튼을 클릭한다.
- 성공 메시지(등록되었습니다)가 표시되는지 확인한다.
- 테이블에 M001 회원이 추가되었는지 확인한다.
- 좌측 메뉴에서 **"도서 관리"**로 이동한다.
- 도서 등록 입력란에 아래 정보를 입력한다.
- 도서 ID: B001
- 제목: 파이썬 입문
- 저자: 김코딩
- 출판사: 코딩출판
- [도서 등록] 버튼을 클릭한다.
- 성공 메시지(등록되었습니다)가 표시되는지 확인한다.
- 테이블에 B001 도서가 추가되었는지 확인한다.
- B001 도서의 상태가 **"대출 가능"**인지 확인한다.
- 좌측 메뉴에서 **"대출 / 반납"**으로 이동한다.
- 회원 조회 영역에 회원 ID = M001을 입력한다.
- [회원 조회] 버튼을 클릭한다.
- 성공 메시지(회원 조회 성공)가 표시되는지 확인한다.
- 대출 목록 테이블이 조회되며, 초기에는 0건 또는 기존 대출 목록이 표시되는지 확인한다.
- 도서 대출 영역에 도서 ID = B001을 입력한다.
- [대출 실행] 버튼을 클릭한다.
- 성공 메시지(대출되었습니다)가 표시되는지 확인한다.
- 대출 목록 테이블이 자동으로 갱신되며 B001 도서가 표시되는지 확인한다.
- 도서 ID / 제목 / 대출일 / 연장횟수 / 회원ID 값 확인
- 좌측 메뉴에서 **"도서 관리"**로 이동한다.
- B001 도서의 상태가 **"대출 중"**으로 변경되었는지 확인한다.
체크리스트
| 시나리오 | 단계 | 작업 내용 | 입력 값 | 기대 결과 | 테스트 결과 | 비고 |
| 정상 대출 흐름 | 1 | 회원 관리 페이지 이동 | - | 회원 관리 화면 표시 | ||
| 정상 대출 흐름 | 2 | 회원 등록 | M001 / 홍길동 | 회원 등록 성공 | ||
| 정상 대출 흐름 | 3 | 도서 관리 페이지 이동 | - | 도서 관리 화면 표시 | ||
| 정상 대출 흐름 | 4 | 도서 등록 | B001 / 파이썬 입문 | 도서 등록 성공 | ||
| 정상 대출 흐름 | 5 | 대출/반납 페이지 이동 | - | 대출 화면 표시 | ||
| 정상 대출 흐름 | 6 | 회원 조회 | M001 | 회원 조회 성공 | ||
| 정상 대출 흐름 | 7 | 도서 대출 실행 | B001 | 대출 성공 및 목록 갱신 | ||
| 정상 대출 흐름 | 8 | 도서 상태 확인 | B001 | 상태: 대출 중 |
ㄴ 2.4 [D] 예외 및 오류 처리 테스트 (Negative Test)
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 입력 | 공백 | 모든 입력 공백 | 경고 출력 | ||
| 입력 | 잘못된 값 | 없는 ID | 조회 실패 | ||
| 로직 | 중복 대출 | 이미 대출 | 대출 불가 | ||
| 로직 | 다중 결과 | 동일 제목 | 추가 안내 | ||
| 시스템 | DB 장애 | 연결 차단 | 비정상 종료 없음 |
ㄴ 2.4 [E] 데이터 무결성 테스트 (Data Integrity Test)
1 회원 데이터 무결성
- 동일한 member_id로 회원을 중복 등록할 수 없는가
- 회원 삭제 시 해당 회원의 대출 기록이 남아 있는 경우 처리 정책이 명확한가
- 회원 조회 실패 시 current_member_id가 초기화되는가
2 도서 데이터 무결성
- 동일한 book_id로 도서를 중복 등록할 수 없는가
- 대출 중인 도서(is_available = FALSE)는 다시 대출되지 않는가
- 반납 후 도서 상태가 반드시 "대출 가능(TRUE)"으로 변경되는가
3 대출(issues) 데이터 무결성
- 대출 시 issues 테이블에 정확한 book_id, member_id가 저장되는가
- 대출 성공 후 books.is_available 값이 FALSE로 변경되는가
- 반납 시 issues 레코드가 삭제되는가
- 반납 성공 후 books.is_available 값이 TRUE로 복구되는가
4 연장 데이터 무결성
- 연장 시 renew_count가 정확히 +1 되는가
- 연장 시 issue_date가 갱신되는가
- 연장 대상이 없는 경우(선택 없음) DB 변경이 발생하지 않는가
5 체크리스
| 구분 | 테스트 항목 | 테스트 내용 | 기대 결과 | 결과(O/X) | 비고 |
| 회원 | 회원 ID 중복 방지 | 동일한 member_id로 회원 등록 시도 | 등록 실패 및 오류 메시지 표시 | ||
| 회원 | 회원 조회 실패 처리 | 존재하지 않는 회원 조회 | 조회 실패 메시지 및 상태 초기화 | ||
| 도서 | 도서 ID 중복 방지 | 동일한 book_id로 도서 등록 | 등록 실패 및 오류 메시지 표시 | ||
| 도서 | 대출 가능 상태 변경 | 도서 대출 실행 | books.is_available = FALSE | ||
| 도서 | 반납 상태 복구 | 도서 반납 실행 | books.is_available = TRUE | ||
| 대출 | 대출 기록 생성 | 정상 대출 실행 | issues 테이블에 레코드 생성 | ||
| 대출 | 반납 기록 삭제 | 정상 반납 실행 | issues 테이블에서 레코드 삭제 | ||
| 연장 | 연장 횟수 증가 | 연장 버튼 클릭 | renew_count +1 증가 | ||
| 연장 | 연장 날짜 갱신 | 연장 실행 | issue_date 갱신 |