(공통으로 의미하는 것)
결함이 없는 소프트웨어는 없다.
📌 오류, 결함, 고장은 다른 말임을 기억하자
오류 error
개발자에 의해 생기는 실수
결함의 원인이 된다.
결함 defect, bug, fault
오류에 의해 프로그램이 완전치 못한 것
고장의 원인
ex) 필요 없는 정보 포함하는 경우
ex) 필요 정보 없는 경우
ex) 결함으로 인해 실행 중 멈추는 경우
ex) 작동 불능 상태에 빠지는 경우
고장, 실패 failure, 문제 problem, 장애
시스템이 요구사항대로 작동하지 않는 것
1) 테스트 목표 정의
2) 테스트 대상 및 범위 결정
3) 테스트 계획서 작성 및 검토
개발자의 시각으로 테스트
개발자가 착각해 개발했을 경우 확인 테스트만으로는 사용자가 원하는 것을 개발했는 지 알 수 없음.
사용자의 시각으로 테스트
사용자의 요구사항대로 만들었는 지 테스트
이 둘을 묶어 V & V Verification and Validation 이라고 함
소프트웨어의 효율성을 진단하는 테스트
사용자의 요구사항 중에서 성능과 관련된 요구사항을 얼마나 준수했는 지 테스트
中 부하테스트
: 부하의 양을 점차적으로 늘려 가면서
초당 처리 능력 Throughput per Second와 요청당 응답 시간 Response Time의 변화 추이 측정
부하를 발생시켜 최고치인 상황에서 시스템의 반응을 살피고 발생하는 오류 찾는 것
부당하고 불법적인 침입 시도해 잘 막아내는 지 테스트
오랫동안 운영이 되어야함.
며칠 동안 부하를 주면서 시스템이 안정적으로 돌아가는 지를 테스트
자체적으로 복구가 잘되는 지 테스트
자동 회복 시 재초기화 제대로 수행되는 지, 완전하게 복구 되었는 지 등 평가
전문가에 의해 회복 시 고장 수리 소요 평균 시간이 허용 범위 한계치 내인지 평가
프로그램 코드를 실행하지 않고 여러 참가자가 모여 모든 명세, 코드를 검토해 결함 defect를 찾아내는 방법
실패보다는 결함을 찾아내는 방법

📌 아닌 것은?
산출물(개발 과정에서 생성되는 문서)을 동료와 함께 책상에서 검사하는 것
제품을 검토할 목적으로 하는 간단한 만남 등
동료와 소프트웨어 기술 전문가들이 수행하는 소프트웨어 품질 제어 활동
결함을 찾기 위해
(공식 검토에서는 해당사항을 검토한다)
(절차)
1) 계획 planning
참가 인원, 누구 참여, 어떤 역할 정함
2) 착수 kick-off
참석자들에게 회의 문서를 배포하고 본 검토회의에 대해 설명한다
3) 개별 준비 preparation
본회의를 하기 전에 체크리스트를 사용해 참석자들에게 미리 한 번 검토하도록 한다.
토의할 내용 체크하며 질문 내용 정리
4) 검토회의 수행 review meeting
본회의에서 참석자들이 발견한 결함 내용 등을 정리하고 문서로 작성
상세 회의록도 작성한다.
5) 재작업 및 수정 rework
문서 작성자가 회의에서 정리한 결함을 담당 개발자에게 전달
개발자는 전달받은 결함 내용을 파악해 수정 작업을 한다.
6) 완료 작업 또는 후속 처리 확인 follow-up
가장 간단한 방법
상대적으로 객관성이 떨어진다
누락과 같은 결함을 조기에 발견할 수 있다는 것
BUT, 누가 검토하느냐에 따라 성과가 달라진다.
전문가들에 의해 개발자의 작업을 검토하는 과정
3~5명 정도의 전문가들이 미리 제공된 검토 자료들을 정해진 절차에 따라 평가
문서들이 고객의 요구사항을 정확하게 명시하고 있는 지 여부 확인하고 작업진척상황 확인
1) 계획
2) 개괄설명회 overview
피검열자는 참가자들에게 검열받을 내용을 전달한다.
3) 검사 준비 preparation
자료는 회의 개최 2~5일 전까지 전달한다.
4) 검사 회의 inspection meeting
5) 수정
6) 후속 조치
[ 설계 검사 ]
[ 원시 코드 검사 ]
📌 난의도 높은 문제 여기서 출제
실제 프로그램을 실행함으로써 오류를 찾는 것
예상 출력 값을 정해 놓고 그대로 결과가 나오는 지를 확인함으로써 오류를 찾는다.
== 블랙박스 테스트 blackbox test
프로그램 내의 구조나 알고리즘을 보지 않고, 요구분석명세서에서 테스트 케이스를 추출해 테스트
사용자가 원하는 기능을 수행했는가에 대해 테스트
문법에 기반을 둔 테스트
== 이 문제가 타당한가
ex) 회원 가입 시 id, 비밀번호 규칙에 맞도록 요구한다.
해당 입력 값을 넣고 예상되는 출력 값이 나오는 지 실제 값과 비교
예상 결과값을 미리 정해둠
오류를 사전에 방지하기 위해 경계에 있는 값으로 테스트
여러 입력 조건을 결합해 결과를 하나 이상 얻을 수 있다.
해당 그래프를 이용해 의사결정 테이블 decision table을 작성한다.
1) 프로그램을 적합한 크기로 분할한다.
2) 원인과 결과를 찾는다.
3) 원인-결과 그래프를 작성한다.
4) 그래프에 제한 조건을 표시한다.

5) 의사결정 테이블로 변환한다.
6) 테스트 케이스를 작성한다.
코드의 내부 구조를 테스트 설계 기반으로 사용
== 화이트박스 테스트 whitebox test
== 코드 기반 테스트 code based test
입력 데이터를 가지고 실행 상태를 추적함으로써 오류를 찾기에 동적 테스트에 속한다.
모든 문장이 최소한 한 번은 실행될 수 있는 테스트 데이터를 갖는 테스트 케이스
1) 원시 코드를 제어 흐름 그래프 형태로 표현한다.
2) 가능한 모든 경로를 구한다.
3) 모든 경로 중 문장 검증 기준을 만족하는 경로를 선택한다.
모든 문장이 하나도 빠지지 않고 최소한 한 번은 실행될 수 있어야 함.
4) 선택한 경로에 해당하는 테스트 데이터를 가지고 실행한다.
BUT, 조건문에서 오류를 찾지 못할 수 있음
이를 보안해서 분기 검증 기준이 나옴.
조건문을 만족하는 경우와 만족하지 않는 경우로 나뉘어 테스트
개별 조건식을 무시하고 조건문만 고려
BUT, (개별 조건식에서) 오류 발견하지 못할 수 있음
이를 보안해서 조건 검증 기준이 나옴.
전체 조건식을 무시하고 개별 조건식들에 대해서만 최소한 한 번은 수행할 수 있도록 하는 테스트 케이스
개별 조건 검증
개별 조건식을 만족하면 모두 만족하면서 전체 조건식도 만족하는 테스트 케이스
개별 조건문 오류나도 모름
마스크 mask : 어떤 개별 조건식이 다른 개별 조건식의 결과와 상관없이 이미 결정되는 것
전체 조건식의 조건문뿐 아니라 조건문 안의 개별 조건식도 최소한 한 번씩은 수행될 수 있는 테스트 케이스 (두 조건 모두 만족)
mask 해결
원시 코드의 독립적인 경로를 모두 수행하는 것을 목적
1) 순서도 작성
순서도는 문장 statement, 조건문 if then else, 반복문 for 3가지 기본 구조로 표현

위 순서도는 분기노드 2개, 순환 복잡도 3개로 구성
2) 흐름 그래프를 작성한다.

제어흐름도에서 R의 수는 3개, 순환 복잡도는 3개
3) 순환 복잡도를 계산한다. Cyclomatic Complexity
매트릭으로 원시 코드의 복잡도를 정량적으로 평가하는 방법
4) 독립적인 경로를 정의한다.
5) 테스트 케이스를 작성한다.