3. 웹
3.1 데이터 형식
| 구분 | 설명 |
| XML (eXtensible Markup Language) |
- 원활한 데이터의 연계를 위해 송수신 시스템 간 전송되는 데이터 구조를 동일한 형태로 정의 |
| JSON (JavaScript Object Notation) |
- 서버 통신(AJAX)을 위해 속성-값 쌍 또는 키-값 쌍으로 이루어진 개방형 표준 포맷 - 숫자, 문자열, 배열, 객체 등의 자료형을 지원 - 중괄호({})로 객체를, 대괄호([])로 배열을 표현하며, 속성명과 값은 큰 따옴표로 감싸야 한다 |
3.2 AJAX(Asynchronous JavaScript and XML) 비동기 통신 기법
- 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지 일부만을 위한 데이터를 로드하는 기법
- 하이퍼텍스트 표기 언어(HTML)만으로 어려운 다양한 작업을 웹 페이지에서 구현해 이용자가 웹 페이지와 자유롭게 상호작용할 수 있도록 하는 기술
3.3 웹 서비스 프로토콜
| 구분 | 설명 |
| SOAP (Simple Object Access Protocol) |
- HTTP, HTTPS, SMTP 등을 사용하여 XML 기반의 데이터를 주고받는 프로토콜 - 메시지 통신에 사용 |
| WSDL (Web Services Description Language) |
- 웹 서비스의 상세 정보를 XML 형식으로 기술하는 언어이자 형식 - 서비스명, 제공 위치(URL), 메시지 포맷, 사용 프로토콜 등을 정의 - 서비스 구조 및 호출 방법 정의 |
| UDDI (Universal Description, Discovery, and Integration) |
- 웹 서비스의 정보를 등록하고 검색할 수 있는 XML 기반의 레지스트리 (저장소) - 서비스 검색 및 인프라 관리 |
3.4 OSI 7계층과 프로토콜
🤔 OSI 7계층이란?
네트워크 통신을 7개의 계층으로 나누어 설명하는 개념적 프레임 워크이다.
각 계층은 특정한 기능을 수행하고, 상위 계층으로부터 서비스를 제공받고, 하위 계층으로부터 서비스를 제공한다.
| 구분 (응표세 전네 데물) | 설명 | 관련 프로토콜 |
| 응용 계층 (Application Layer) |
- 사용자와 네트워크 간 응용 서비스 연결 - 사용자가 직접 접하는 인터페이스를 제공 |
HTTP, FTP, SMTP, POP3, IMAP, Telnet, SSH |
| 표현 계층 (Presentation Layer) |
- 데이터 형식을 변환하고 부호 교환 및 암호화/복호화 | JPEG, GIF, MPEG, SSL, TLS |
| 세션 계층 (Session Layer) |
- 데이터 교환 및 통신 세션을 설정, 유지 및 해제 - 송수신 간 논리적 연결 |
NetBIOS, RPC, SQL, NFS |
| 전송 계층 (Transport Layer) |
- 송수신 프로세스간 연결 - 신뢰성 있는 데이터 전송을 보장 - 데이터 분할, 재조립, 흐름제어, 오류 제어, 혼잡 제어 등 |
TCP, UDP |
| 네트워크 계층 (Network Layer) |
- 단말기 간 데이터 전송을 위한 최적화된 경로 제공 - 다양한 네트워크 간 데이터를 라우팅하고 패킷 전단 |
IP, ICMP, ARP, OSPF, BGP RARP, IGMP, 라우팅 프로토콜 |
| 데이터링크 계층 (DataLink Layer) |
- 프레임 단위로 데이터를 전송하고 오류를 감지 및 수정 - 인접 시스템 간 데이터 전송 및 전송 오류 제어 - 동기화, 오류 제어, 흐름 제어, 회선 제어 |
Ethernet, PPP, HDLC, Frame Relay |
| 물리 계층 (Physical Layer) |
- 데이터를 전기적 신호(0,1)로 변환하고 전송 매체를 통해 신호를 전송 | Ethernet, Wi-Fi, Bluetooth, DSL, Fiber |
🤔 프로토콜(protocol)이란?
여러 컴퓨터 사이의 데이터 통신을 원활하게 하기 위한 통신규약이다.
| 프로토콜의 3요소 (구의타) | 설명 |
| 구문 (Syntax) |
- 시스템 간의 정보 전송을 위한 데이터 형식, 코딩, 신호 레벨 등을 규정 |
| 의미 (Semantic) |
- 시스템 간의 정보 전송을 위한 제어 정보로 조정과 에러 처리를 위한 규정 |
| 타이밍 (Timing) |
- 시스템 간의 정보 전송을 위한 속도 조절과 순서 관리 규정 |
| 네트워크 계층(3) 프로토콜 종류 | 설명 |
| IP (Internet Protocol) |
- 송수신 간의 패킷 단위로 데이터를 교환하는 프로토콜 |
| ARP (Address Resolution Protocol) |
- IP 네트워크 상에서 IP 주소를 MAC 주소(물리적 주소)로 변환하는 프로토콜 |
| RARP (Reverse Address Resolution Protocol) |
- IP 호스트가 자신의 MAC 주소를 알지만 IP 주소를 모르는 경우 사용 - 서버로부터 IP 주소를 요청하기 위해 사용하는 프로토콜 |
| ICMP (Internet Control Message Protocol) |
- IP 패킷 처리 중 오류나 상태 정보를 알려주기 위한 제어 메시지를 전달하는 프로토콜 |
| IGMP (Internet Group Management Protocol) |
- 호스트와 인접 라우터 간에 멀티캐스트 그룹 멤버십을 구성·관리하는 프로토콜 |
| 라우팅 프로토콜 (Routing Protocol) |
- 데이터 전송을 위해 여러 경로 중 최적의 경로를 설정하는 프로토콜 |
3.5 URL 구조

| 구성 요소 |
설명 |
| 스키마 (Scheme) |
- 자원에 접근하는데 사용될 프로토콜을 지정 - http, https, ftp 등 |
| 호스트 (Host) |
- 자원이 위치한 서버의 도메인 이름 또는 IP 주소 |
| 포트 (Port) |
- (선택 사항) 서버 내에서 자원에 접근할 특정 포트 번호를 지정 - 기본 포트(HTTP : 80, HTTPS : 443)인 경우 생략될 수 있음 |
| 경로 (Path) |
- 서버 내 자원의 디렉토리 및 파일 이름 등 정확한 위치 |
| 쿼리 스트링 (Query String) |
- (선택사항) 자원에 추가적으로 전달되는 매개변수 - `?`로 시작하며 이름=값 형태로 `&` 로 연결 |
| 프래그먼트 (Fragment) |
- HTML 페이지 내 특정 섹션(앵커)를 나타냄 - 서버로 전송 되지 않고 브라우저 내부에서 사용 |
4. 애플리케이션 테스트
4.1 성능 지표
| 구분 | 설명 |
| 처리량 (Throughput) |
- 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수 - 웹 애플리케이션의 경우 시간당 페이지 수로 표현 |
| 응답 시간 (Response Time) |
- 사용자 입력이 끝난 후, 애플리케이션의 응답 출력이 개시될 때까지의 시간 - 애플리케이션의 경우 메뉴 클릭 시 해당 메뉴가 나타나기까지 걸리는 시간 |
| 경과 시간 (Turnaround Time) |
- 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션 처리 후 그 결과의 출력이 완료될 때까지 걸리는 시간 |
| 자원 사용률 (Resource Usage) |
- 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 사용량 , 메모리 사용량, 네트워크 사용량 |
4.2 테스트 기본 원리
| 구분 | 설명 |
| 완벽한 테스트 불가능 | 어플리케이션 테스트는 소프트웨어의 잠재적인 테스트를 줄일 수는 있으나, 결함이 없다고 증명할 수는 없다 |
| 결함 집중 (Defect Clustering) |
개발자의 특성이나 애플리케이션 기능적 특징 때문에 대부분의 결함은 모듈에 집중되어 있다 |
| 파레토 법칙 (Pareto Principle) |
애플리케이션의 20%의 해당하는 코드에서 전체 결함의 80%가 발견된다 |
| 살충제 패러독스 (Pesticide Paradox) |
동일한 테스트 케이스로 동일한 테스트를 반복하면 더이상 결함을 발견할 수 없다 |
| 테스팅은 정황 의존 | 소프트웨어 특징, 테스트 환경, 테스터 역량 등 정황(context)에 따라 테스트를 다르게 수행해야 한다 |
| 오류-부재의 궤변 | 결함 없는 프로그램이어도 사용자의 요구사항을 만족하지 못하면 좋은 프로그램이 될 수 없다 |
| 브룩스의 법칙 (Brook's law) |
SW 개발 일정이 지연된다고 새로운 인력을 투입하면 일정이 더욱 지연된다 |
4.3 프로그램 실행 여부에 따른 테스트 분류
| 구분 | 설명 |
| 정적 테스트 | - 소프트웨어를 실행하지 않고 구조를 분석 - 방식 : 리뷰나 정적 분석 도구를 사용 - 종류 : 워크스루, 인스펙션, 코드 검사 등 |
| 동적 테스트 | - 소프트웨어를 실행하여 실제 동작을 확인하는 테스트 - 종류 : 화이트박스 테스트, 블랙 박스 테스트, 경험 기반 테스트 등 |
4.4 화이트박스 테스트
화이트 박스 테스트 커버리지
| 구분 | 설명 |
| 구문 커버리지 (문장) (SC, Statement Coverage) |
- 코드의 모든 줄이 실행되었는지 확인하는 테스트 - 목표: 프로그램 내 모든 문장(statement) 을 최소 1번은 실행 |
| 결정 커버리지 (분기) (DC, Decision Coverage) |
- 조건문의 결과(True/False) 를 각각 한 번 이상 테스트 - 목표: if/while 같은 조건문이 참, 거짓 모두 되도록 테스트 |
| 조건 커버리지 (CC, Condition Coverage) |
- 복합 조건식 안에 있는 각각의 개별 조건이 True/False가 되도록 테스트 - 목표: AND/OR 조건 안의 각 조건을 따로따로 True/False 해보는 것 |
| 조건/결정 커버리지 (C/DC Condition Decisio Coverage) |
- 조건 커버리지 + 결정 커버리지를 합친 테스트 - 목표: 전체 조건식의 결과(True/False)와 각 조건도 True/False 테스트 |
| 변경 조건 / 결정 커버리지 (MC/DC, Modified Condition Decision Coverage) |
- 각 조건이 전체 결과에 영향을 미치는지 테스트 - 목표: 한 조건만 바꿨을 때 전체 조건 결과가 바뀌는지 확인 |
| 다중 조건 커버리지 (MCC, Multiple Condition Coverage) |
- 모든 조건 조합을 테스트 - 목표: 여러 조건들의 모든 True/False 조합을 테스트 |
4.5 블랙박스 테스트
| 구분 (동경 비오 원) | 설명 |
| 동치 분할 검사 (Equivalence Partitioning Test) |
- 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법 - 동등 분할 기법이라고도 한다 |
| 경계값 분석 (Boundary Value Analysis Test) |
- 입력 조건의 경계값 (최소값, 최대값, 경계에 가까운 값)을 테스트케이스로 선정하여 테스트 |
| 비교 검사 (Comparison Testing) |
- 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트 |
| 오류 예측 검사 (Error Guessing Test) |
- 과거의 경험이나 테스터의 감각으로 테스트 |
| 원인-효과 그래프 검사 (Cause-Effect Graphing Test) |
- 입력 데이터 간 관계와 출력에 영향을 미치는 상황을 분석하여 효용성 높은 테스트 케이스를 선정하여 검사 |
4.6 테스트 오라클
🤔 테스트 오라클(Test Oracle)이란?
테스트 결과가 올바른지 판단하기 위해 사전에 기대되는 참 결과 값을 정의하여 실제 결과와 비교하는 기법이다.
| 구분 | 설명 |
| 참 오라클 (True Oracle) |
- 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 생성할 수 있는 오라클 - 발생된 모든 오류를 검출할 수 있다 |
| 샘플링 오라클 (Sampling Oracle) |
- 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공하는 오라클 |
| 추정 오라클 (Heuristic Oracle) |
- 특정 테스트 케이스 입력값에 대해 기대하는 결과를 제공하고, 나머지는 추정하여 처리하는 오라클 - 샘플링 오라클을 개선한 것 |
| 일관성 오라클 (Consistent Oracle) |
- 애플리케이션 변경 전후에 동일한 입력값을 넣었을 때 결과가 일관되게 동일한지 비교하는 오라클 |
4.7 개발 단계에 따른 애플리케이션 테스트

| 구분 (단통 시인) | 설명 |
| 단위 테스트 (Unit Testing) |
- 각 모듈이나 컴포넌트를 개별적으로 검증 - 주로 개발자가 수행하며, 코드의 품질을 높이고 조기 결함 발견에 유용 - 종류 : 정적 테스트, 동적 테스트 |
| 통합 테스트 (Integrition Testing) |
- 여러 단위의 모듈을 결합하여 상호작용을 검증 - 하향식 통합 테스트 : 스텁(실제 하위 모듈의 기능을 대신하는 임시 모듈) - 상향식 통합 테스트 : 테스터 드라이버 (상위 모듈의 기능을 대신하는 임시 모듈로 데이터의 입출력을 확인하기 위함) |
| 시스템 테스트 (System testing) |
- 전체 시스템을 통합한 후 요구 사항에 따라 시스템이 동작하는지 검증 - 실제 운영 환경을 가정하여 사용자 관점에서 품질을 평가 - 종류 : 기능 테스트, 비기능 테스트 |
| 인수 테스트 (Acceptance Testing) |
- 최종 사용자가 소프트웨어를 사용하여 요구사항이 충족 되었는지 확인 - 알파 테스트 : 개발자 앞에서 하는 테스트 - 베타 테스트 : 선정된 최종 사용자가 개발자가 없는 환경에서 테스트 |
4.8 테스트 케이스
🤔 테스트 케이스란?
테스트 케이스는 요구사항에 준수하는지를 확인하기 위해 개발된 입력값, 실행조건, 예상 결과의 집합이다.
테스트 케이스 항목: 테스트 조건, 테스트 데이터, 예상결과
4.9 목적에 따른 테스트
| 구분 (회안성 구회병) | 설명 |
| 회복 테스트 (Recovery Testing) |
- 시스템에 고의로 실패를 유도하고, 시스템의 정상적 복귀 여부를 테스트 |
| 안전 테스트 (Security Testing) |
- 소스 내 보안적인 결함을 미리 점검하는 테스트 |
| 성능 테스트 (Performance Testing) |
- 응답 시간, 반응 속도, 처리량 등을 측정하는 테스트 |
| 구조 테스트 (Structure Testing) |
- 시스템의 내부 논리 경로, 소스 코드의 복잡도를 테스트 |
| 회귀 테스트 (Regression Testing) |
- 오류제거와 수정에 의해 새로 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법 |
| 병행 테스트 (Parallel Testing) |
- 변경된 시스템과 기존 시스템에 동일한 데이터 입력 후 결과 비교 |
4.10 테스트 자동화 도구
| 구분 | 설명 |
| xUnit | - Java(Junit), C++(Cppunit), .Net(Nunit) 등 다양한 언어를 지원하는 단위 테스트 프레임워크 |
| STAF | - 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크로 각 테스트 대상 분산 환경에 데몬을 사용해 테스트 대상 프로그램을 통해 테스트를 수행하고 통합해 자동화 하는 검증 도구 |
| FitNess | - 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크 |
| NTAF | - itNess의 협업 기능 + STAF의 재사용 및 확장성을 통합한 NHN(Naver)의 테스트 자동화 프레임워크 |
| Selenium | - 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크 |
| Watir | - Ruby를 사용하는 애플리케이션 테스트 프레임워크 |
728x90
