| 테스트 종류 | 목적 | 설명 |
|---|---|---|
| 기능 테스트 | 요구된 기능이 정확하게 동작하는가? | • 명세서 기반으로 입력값에 대한 결과값이 올바른지 확인. • 블랙박스 테스트 기법이 주로 사용됨. |
| 성능 테스트 | 시스템이 특정 부하(Load) 상태에서 어떻게 동작하는가? | • 부하 테스트: 예상되는 부하 상태에서의 성능 측정. • 스트레스 테스트: 시스템의 한계를 초과하는 부하를 가해 임계점을 찾음. • 안정성 테스트: 장시간 동안 안정적으로 운영되는지 확인. |
| 보안 테스트 | 시스템의 보안 취약점은 없는가? | • 시스템에 잠재된 보안 허점을 찾아내고, 이를 악용한 공격을 시도하여 방어 능력을 시험. |
| 사용성 테스트 | 사용자가 시스템을 쉽고 편리하게 사용할 수 있는가? | • 실제 사용자가 시스템을 사용해보면서 겪는 어려움이나 불편함을 파악하고 개선. |
| 보안 약점 | 설명 | 예시 및 안전한 코드 |
|---|---|---|
| 입력 데이터 검증 및 표현 | • 사용자로부터 입력받은 데이터에 대한 유효성 검증이 누락될 경우 발생. • SQL 인젝션, XSS, 버퍼 오버플로우 등의 원인. | • PreparedStatement 사용 (SQL 인젝션 방어).• 특수문자 필터링 (XSS 방어). |
| 보안 기능 | • 인증, 인가, 암호화 등 보안 기능이 부적절하게 구현된 경우. | • 안전하지 않은 비밀번호 저장 (평문 저장). • 예측 가능한 세션 ID 사용. |
| 시간 및 상태 | • 여러 스레드나 프로세스가 공유 자원에 동시에 접근할 때 동기화가 부족하여 발생. | • 경쟁 조건(Race Condition): synchronized 키워드 등으로 임계 영역 보호. |
| 에러 처리 | • 에러 메시지에 민감한 정보(시스템 정보, DB 구조 등)가 포함되어 공격자에게 단서를 제공하는 경우. | • 상세한 오류는 로그에만 기록하고, 사용자에게는 "오류가 발생했습니다"와 같은 일반적인 메시지만 보여줌. |
| 코드 품질 | • 사용되지 않는 변수, 초기화되지 않은 변수 사용 등 코드 자체의 품질 문제. | • NULL 포인터 역참조(Null Pointer Dereference) 방지를 위한 NULL 체크. |
| 캡슐화 | • 외부에서 접근하면 안 되는 중요 데이터나 메서드가 public으로 잘못 공개된 경우. | • 멤버 변수는 private으로 선언하고, 필요한 경우에만 public Getter/Setter 제공. |