- 애플리케이션 테스트
- 기본 원리
- 완벽한 테스트 불가능
- 파레토 법칙 : 앱의 20%에 해당하는 코드에서 전체 오류의 80%가 발견된다
- 살충제 패러독스 : 동일한 테스트 케이스로 테스트를 반복하면 결함이 발견되지 않는 현상
- 테스팅은 정황의존 : 정황에 따라 테스트를 다르게 수행해야함
- 오류 부재의 궤변 : 결함을 모두 제거해도 요구사항을 만족시키지 못하면 품질이 높다고 말할 수 없다
- 테스트와 위험은 반비례
- 테스트의 점진적 확대 : 작은부분부터 시작해서 점점 확대하며 진행
- 테스트의 별도 팀 수행 : 개발자 노상관 팀에서 테스트를 수행해야함
- 분류
- 프로그램 실행 여부
- 정적 테스트 : 프로그램 실행하지 않고 명세서나 코드를 분석하는 테스트
- 동적 테스트 : 프로그램을 실행하여 오류를 찾는 테스트
- 테스트 기반에 따른 테스트
- 명세 기반 테스트 : 사용자의 요구사항에 대한 명세를 테스트 케이스로 만들어 테스트
- 구조 기반 테스트 : 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트
- 경험 기반 테스트 : 테스터의 경험을 기반으로 수행하는 테스트
- 시각에 따른 테스트
- 검증 테스트 : 개발자의 시각에서 생산 과정을 테스트
- 확인 테스트 : 사용자의 시각에서 제품 결과를 테스트
- 목적에 따른 테스트
- 회복 테스트, 안전 테스트, 강도 테스트, 성능 테스트, 구조 테스트, 회귀 테스트, 병행 테스트
- 개발 단계에 따른 테스트
- 단위 테스트 : 모듈이나 컴포넌트에 초점을 맞춰 테스트
- 통합 테스트 : 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
- 비점진적 통합 방식 : 한꺼번에 프로그램 전체를 테스트
- 점진적 통합 방식 : 모듈단위로 단계별로 통합하면서 테스트
- 하향식 통합 테스트 : 상위 모듈에서 하위 모듈 방향으로 통합하며 테스트, 하위 모듈들은 스텁으로 대체, 깊이 우선 통합법, 넓이 우선 통합법
- 상향식 통합 테스트 : 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트, 하위 모듈들을 묶어 클러스터 형성, 상위 모듈들은 드라이버로 대체
- 혼합식 통합 테스트
- 회귀 테스팅 : 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인하는 테스트
- 시스템 테스트 : 개발된 소프트웨어가 완벽하게 수행되는가를 점검하는 테스트
- 인수 테스트 : 사용자의 요구사항을 충족하는지에 중점을 두고 테스트
- 사용자 인수 테스트
- 운영상의 인수 테스트
- 계약 인수 테스트
- 규정 인수 테스트
- 알파 테스트 : 사용자가 개발자 앞에서 행하는 테스트
- 베타 테스트 : 사용자가 여러 명의 사용자 앞에서 행하는 테스트
- 화이트박스 테스트 : 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계
- 종류
- 기초 경로 검사 : 대표적, 논리적 복잡성을 측정
- 제어 구조 검사 : 조건 검사, 루프 검사, 데이터 흐름 검사
- 검증 기준
- 문장 검증 기준 : 모든 소스코드의 구문이 한 번 이상 수행되도록 테스트 케이스 설계
- 분기 검증 기준 : 모든 조건문이 한 번 이상 수행되도록 테스트 케이스를 설계
- 조건 검증 기준 : 모든 조건문에 대해 조건이 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계
- 분기/조건 기준 : 모든 조건문과 각 조건문에 포함된 개별조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계
- 블랙박스 테스트 : 각 기능이 완전히 작동되는 것을 입증하는 테스트
- 종류
- 동치 분할 검사 : 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 하여 테스트 케이스를 정하고 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법
- 경계값 분석 : 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
- 원인 효과 그래프 검사 : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 분석 후 효용성이 높은 테스트 케이스를 선정하여 검사
- 오류 예측 검사 : 과거의 경험이나 확인자의 감각으로 테스트하는 기법
- 비교 검사 : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
- 테스트 케이스 : 테스트 항목에 대한 명세서
- 테스트 시나리오 : 테스트 케이스를 묶은 집합
- 테스트 오라클 : 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참값을 대입하여 비교하는 기법
- 참 오라클 : 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공
- 샘플링 오라클 : 특정한 몇몇 테스트 케이스의 입력 값에 대해서만 기대하는 결과를 제공
- 추정 오라클 : 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공, 나머지 값들에 대해서는 추정으로 처리
- 일관성 검사 오라클 : 애플리케이션에 변경이 있을 때 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클
- 애플리케이션 성능 분석
- 지표
- 처리량, 응답 시간, 경과 시간, 자원 사용률
- 복잡도
- 시간 복잡도 : 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것
- 순환복잡도 : 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도
- 소스 코드 최적화
- 나쁜 코드
- 스파게티 코드 : 코드의 로직이 복잡하게 얽혀 있는 코드
- 외계인 코드 : 아주 오래되거나 참고문서, 개발자가 없어 유지보수 작업이 어려운 코드
- 클린 코드
- 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화