2과목 소프트웨어개발
기출 160문항(과목2)을 세어 보면 무게가 한쪽으로 심하게 쏠려 있다 — 테스트(65) · 형상관리(31) · 검사(29) · 정렬(19) · 트리(13) · 탐색(11) · 해시(6).
테스트와 형상관리 둘이 절반이다. 나머지 절반은 자료구조·정렬·해싱처럼 직접 손으로 굴려야 답이 나오는 문항이라, 이 편은 계산 절차를 함께 적었다.
0. 이 과목의 지형
애플리케이션 테스트 관리 테스트 기법 · 레벨 · 통합 · 오라클 · 자동화 도구 ← 최다
제품 소프트웨어 패키징 패키징 · 매뉴얼 · 릴리즈 노트 · DRM
애플리케이션 통합·인터페이스 EAI · 데이터 형식 · 검증
소프트웨어 개발 보안·품질 정적 분석 · 클린코드 · 국제 표준
자료구조·알고리즘 정렬 · 탐색 · 트리 · 그래프 · 해싱 ← 계산
2025년 1회 경고 — 자료구조 문항이 대거 나와 합격률이 크게 떨어진 회차가 있었다. "테스트만 보면 된다"는 전략이 통하지 않는 회차가 존재한다는 뜻이다.
1. 테스트의 기본 — 원칙과 두 단어
검증(Verification)과 확인(Validation) — 검증 18회 · 확인 14회
검증(Verification) 제품이 명세대로 만들어졌는가 "제대로 만들고 있는가" 개발자 관점
확인(Validation) 제품이 사용자 요구를 만족하는가 "제대로 된 것을 만들었나" 사용자 관점
함정 — 두 단어를 바꿔 낸 보기가 가장 흔하다. 검증은 명세 기준, 확인은 사용자 기준이다. V 모델에서 이 둘이 짝을 이룬다는 점도 함께 나온다.
테스트의 기본 원칙
| 원칙 | 뜻 |
|---|---|
| 결함 존재를 밝히는 활동 | 테스트는 결함이 없음을 증명하지 못한다 |
| 완벽한 테스트는 불가능 | 모든 입력 조합을 다 볼 수 없다 |
| 파레토 법칙(80:20) | 결함의 80%는 20%의 모듈에 몰려 있다 |
| 살충제 패러독스 | 같은 테스트를 반복하면 더 이상 결함을 못 찾는다 → 케이스를 개선해야 |
| 오류-부재의 궤변 | 결함을 다 고쳐도 요구와 다르면 쓸 수 없다 |
| 정황(Context) 의존 | 소프트웨어 성격에 따라 테스트가 달라진다 |
| 초기에 시작 | 빨리 시작할수록 비용이 싸다 |
함정 — "테스트로 결함이 없음을 증명할 수 있다"는 항상 틀린 보기다.
2. 테스트 기법 — 화이트박스와 블랙박스
화이트박스 테스트 — 내부 구조를 보고 짠다
| 기법 | 무엇을 본다 |
|---|---|
| 문장(구문) 검증 | 모든 문장을 최소 한 번 실행 |
| 분기(결정) 검증 | 모든 조건문의 참·거짓을 각각 실행 |
| 조건 검증 | 개별 조건식의 참·거짓을 각각 |
| 분기/조건 결합 | 위 둘을 함께 |
| 변경 조건/결정(MC/DC) | 각 조건이 독립적으로 결과에 영향을 주도록 |
| 다중 조건 | 모든 조건 조합 — 가장 강력하고 비싸다 |
| 기초 경로(Base Path) | 순환 복잡도만큼의 독립 경로를 모두 |
| 데이터 흐름 / 루프 검사 | 변수 정의-사용, 반복문 경계 |
커버리지 강도 순서
문장 < 분기(결정) < 조건 < 분기/조건 결합 < 변경 조건/결정 < 다중 조건
순환 복잡도(Cyclomatic Complexity) — 계산이 나온다
세 가지 방법 중 아무거나 쓰면 값이 같다.
① V(G) = E - N + 2 (E = 간선 수, N = 노드 수)
② V(G) = 폐구역(영역) 수 + 1
③ V(G) = 판단 노드(조건문) 수 + 1
예 — 노드 8개, 간선 10개인 제어 흐름 그래프 →
10 - 8 + 2 = 4. 독립 경로가 4개이므로 기초 경로 테스트 케이스도 최소 4개다. 조건문이 3개면3 + 1 = 4로 같은 답이 나오는지 교차 확인할 수 있다.
블랙박스 테스트 — 명세만 보고 짠다
| 기법 | 무엇을 |
|---|---|
| 동등 분할(Equivalence Partitioning) | 입력을 유효/무효 그룹으로 나눠 대표값 하나씩 (8회 출제) |
| 경계값 분석(Boundary Value) | 경계와 그 바로 앞뒤 값 — 결함이 경계에 몰린다 |
| 원인-결과 그래프 | 입력과 출력의 인과를 그래프로 → 케이스 도출 |
| 오류 예측(Error Guessing) | 경험과 감으로 결함을 추정 |
| 비교(Comparison) 검사 | 여러 버전에 같은 입력을 주고 결과 비교 |
| 결정 테이블 | 조건 조합을 표로 |
| 상태 전이 | 상태 변화 경로를 따라 |
| 분류 트리 | 입력을 트리로 분해해 조합 |
경계값 예 — 1~100 을 입력받으면
0, 1, 2, 99, 100, 101을 본다. "유효한 값 하나만 고른다"는 동등 분할, "경계 주변을 본다"는 경계값이다.
3. 테스트 레벨과 통합 방식
단위(Unit) → 통합(Integration) → 시스템(System) → 인수(Acceptance)
| 레벨 | 대상 | 특징 |
|---|---|---|
| 단위 | 모듈·함수 하나 | 화이트박스 중심, 스텁·드라이버 필요 |
| 통합 | 모듈 간 인터페이스 | 아래 방식 4가지 |
| 시스템 | 전체 시스템 | 기능·비기능 전부, 실제 환경에 가깝게 |
| 인수 | 사용자 요구 충족 | 사용자·운영·계약·규정·알파·베타 |
알파와 베타
알파 테스트 개발자 사이트에서 · 개발자가 지켜보는 통제된 환경 · 사용자가 수행
베타 테스트 실 사용자 환경에서 · 개발자 없이 · 실제 사용 중 피드백
통합 테스트 방식 — 스텁과 드라이버가 갈리는 지점
| 방식 | 순서 | 필요한 가짜 모듈 |
|---|---|---|
| 하향식(Top-Down) | 상위 → 하위 | 스텁(Stub) — 아직 없는 하위 모듈 대역 |
| 상향식(Bottom-Up) | 하위 → 상위 | 드라이버(Driver) — 아직 없는 상위 모듈 대역 |
| 빅뱅(Big-Bang) | 한꺼번에 | 없음 — 오류 위치 찾기가 어렵다 |
| 샌드위치(혼합) | 위아래 동시 | 둘 다 |
함정 — 하향식 = 스텁, 상향식 = 드라이버. 이 짝을 바꿔 낸 문항이 반복 출제된다. 상향식에서는 하위 모듈을 묶은 클러스터(cluster) 를 만들고 드라이버로 호출한다.
그 밖의 이름
회귀(Regression) 테스트 수정 후 다른 곳이 깨지지 않았는지
스모크(Smoke) 테스트 본 테스트 전에 최소 동작 확인
성능 · 부하 · 스트레스 처리량·한계·과부하 상황
정적 테스트 실행하지 않고 — 리뷰·워크스루·인스펙션·정적 분석
동적 테스트 실행하며 — 화이트박스·블랙박스
4. 테스트 오라클과 테스트 하네스
테스트 오라클 4종
| 오라클 | 뜻 |
|---|---|
| 참(True) | 모든 입력에 대해 기대 결과를 알고 있다 — 가장 이상적, 비용 큼 |
| 샘플링(Sampling) | 일부 입력에만 기대 결과를 제공 |
| 추정(Heuristic) | 샘플링을 개선 — 나머지는 추정으로 처리 |
| 일관성 검사(Consistent) | 변경 전후 실행 결과가 같은지만 확인 |
휴리스틱(2회)·일관성이 보기에 그대로 등장한다. 참 오라클만 전수라는 점이 갈리는 지점.
테스트 하네스 구성 요소
테스트 드라이버 · 테스트 스텁 · 테스트 슈트 · 테스트 케이스 · 테스트 스크립트 · 목 오브젝트
테스트 자동화 도구 — 이름이 그대로 답이다
| 도구 | 용도 |
|---|---|
| xUnit (JUnit·NUnit·CppUnit·HttpUnit) | 단위 테스트 프레임워크 (6회 출제) |
| STAF | 분산 환경 테스트 자동화 프레임워크 (6회) |
| FitNesse | 웹 기반 인수 테스트 프레임워크 |
| NTAF | STAF + FitNesse 를 결합한 NHN 도구 |
| Selenium | 웹 애플리케이션 테스트 (브라우저 자동화) |
| watir | Ruby 기반 웹 테스트 |
| Cobertura | 코드 커버리지 측정 |
함정 — 이 목록에 정적 분석 도구(pmd·cppcheck) 를 섞어 "테스트 자동화 도구가 아닌 것"으로 낸다.
5. 형상관리 (형상 31회 · 버전 13회)
형상관리란 — 소프트웨어 변경 사항을 관리·추적·통제하는 활동. 산출물의 버전과 변경 이력을 다룬다.
활동 4단계 — 순서가 그대로 문제다
형상 식별 → 형상 통제(변경 통제) → 형상 감사 → 형상 기록(상태 보고)
| 활동 | 하는 일 |
|---|---|
| 형상 식별 | 관리 대상을 정하고 이름·번호를 부여 |
| 형상 통제 | 변경 요청을 검토·승인하고 기준선에 반영 (변경 통제 위원회) |
| 형상 감사 | 변경이 제대로 반영됐는지 검증 |
| 형상 기록 | 변경 상태를 문서로 기록·보고 |
베이스라인(기준선) — 정식 검토와 합의를 거쳐 확정된 산출물. 이후 변경은 통제 절차를 통해서만 가능하다.
용어
체크아웃(Check-Out) 저장소에서 받아온다
체크인(Check-In) 수정한 것을 저장소에 반영
커밋(Commit) 변경을 확정 기록
저장소(Repository) 형상 항목이 모여 있는 곳
트렁크·브랜치·태그 주 개발선 · 분기 · 특정 시점 표시
도구 세 개의 차이
| 도구 | 방식 | 특징 |
|---|---|---|
| CVS | 중앙 집중 | 가장 오래됨, 파일 단위 커밋, 원자성 없음 |
| Subversion(SVN) | 중앙 집중 | 커밋이 원자적, 디렉터리도 버전 관리 |
| Git | 분산 | 로컬 저장소 + 원격 저장소, 브랜치가 가볍다 |
함정 — Git 의 특징으로 "분산" 을, SVN 의 특징으로 "중앙 집중" 을 짝지어 둔다. 그리고 Git 은 로컬에서 커밋이 가능하다는 점이 SVN 과 갈린다.
6. 자료구조 — 계산으로 답을 내는 곳
분류
선형 배열 · 연결 리스트 · 스택 · 큐 · 데크
비선형 트리 · 그래프
스택 — LIFO
연산 push(넣기) · pop(꺼내기)
응용 함수 호출(재귀) · 수식 계산 · 후위 표기 변환 · 되돌리기 · DFS
오류 공백 상태에서 pop → 언더플로 / 꽉 찬 상태에서 push → 오버플로
기출은
push(4회)·pop(4회) 를 코드나 그림으로 주고 최종 스택 상태를 묻는다. 순서를 종이에 적어 하나씩 굴리는 것이 가장 빠르다.
큐와 데크
큐(Queue) FIFO — front 에서 삭제, rear 에 삽입. 작업 대기열 · BFS
데크(Deque) 양쪽에서 삽입·삭제 모두 가능
원형 큐 배열의 앞부분 재사용
트리 용어 — 차수(11회)가 특히 자주 나온다
| 용어 | 뜻 |
|---|---|
| 노드의 차수(Degree) | 그 노드의 자식 수 |
| 트리의 차수 | 노드 차수 중 최대값 |
| 단말(Leaf) 노드 | 차수가 0 인 노드 |
| 레벨 | 루트를 1(또는 0)로 두고 내려가며 세는 깊이 |
| 높이(Depth) | 가장 큰 레벨 |
| 형제(Sibling) | 부모가 같은 노드 |
| 조상·자손 | 위·아래로 이어진 모든 노드 |
이진 트리
포화 이진 트리(Full) 모든 레벨이 꽉 찬 트리. 레벨 k 까지 노드 수 = 2^k - 1
완전 이진 트리(Complete) 왼쪽부터 빈틈없이 채운 트리
편향 이진 트리(Skewed) 한쪽으로만 자란 트리 — 탐색이 O(n)
노드가 n 개인 이진 트리의 최대 높이 = n(편향), 최소 높이 ≈ log₂(n+1)
순회(Traversal) — 손으로 굴리는 문항
전위(Preorder) 뿌리 → 왼쪽 → 오른쪽 (Root-L-R)
중위(Inorder) 왼쪽 → 뿌리 → 오른쪽 (L-Root-R)
후위(Postorder) 왼쪽 → 오른쪽 → 뿌리 (L-R-Root)
수식 표기와의 연결 — 수식 트리를 중위 순회하면 중위 표기(A+B), 후위 순회하면 후위 표기(AB+), 전위 순회하면 전위 표기(+AB) 가 나온다. "다음 트리를 후위 순회한 결과"는 전부 이 규칙 하나로 풀린다.
그래프
무방향 그래프의 최대 간선 수 = n(n-1)/2
방향 그래프의 최대 간선 수 = n(n-1)
표현 인접 행렬(밀집 그래프) · 인접 리스트(희소 그래프)
탐색 DFS(스택·재귀) · BFS(큐)
계산 예 — 정점이 5개인 무방향 완전 그래프의 간선 수 =
5×4/2 = 10.
7. 정렬 — 시간 복잡도 표가 곧 점수 (정렬 19회)
| 정렬 | 평균 | 최악 | 특징 |
|---|---|---|---|
| 선택(Selection) | O(n²) | O(n²) | 최소값을 골라 앞으로 |
| 버블(Bubble) | O(n²) | O(n²) | 인접한 둘을 비교·교환 |
| 삽입(Insertion) | O(n²) | O(n²) | 정렬된 부분에 끼워 넣음, 거의 정렬됐으면 O(n) |
| 쉘(Shell) | O(n^1.5) | O(n²) | 삽입 정렬 개선, 간격(gap)을 줄여 가며 |
| 퀵(Quick) | O(n log n) | O(n²) | 피벗 기준 분할, 평균 최고속 |
| 힙(Heap) | O(n log n) | O(n log n) | 힙을 만들어 최대·최소를 꺼낸다 |
| 병합(Merge) | O(n log n) | O(n log n) | 분할 후 합병, 추가 메모리 필요 |
| 기수(Radix) | O(dn) | O(dn) | 자릿수별 분배, 비교하지 않는다 |
함정 셋 — ① 퀵 정렬의 최악은 O(n²) 다(이미 정렬된 입력에 피벗을 끝값으로 잡을 때). ② 병합 정렬은 최악에도 O(n log n) 이지만 추가 공간을 쓴다. ③ 기수 정렬은 비교 기반이 아니다.
"1회전 후 결과"를 묻는 문항 대처법
선택 정렬 전체에서 최소값을 찾아 맨 앞과 교환 → 1회전엔 최소값 하나만 확정
버블 정렬 왼쪽부터 인접 비교·교환을 끝까지 → 1회전엔 최대값이 맨 뒤로
삽입 정렬 두 번째 원소를 앞의 정렬 구간에 삽입
문제에서 오름차순인지 내림차순인지, 회전(pass)의 정의가 무엇인지 먼저 표시한다.
8. 탐색과 해싱
탐색 기법
| 기법 | 조건 | 복잡도 |
|---|---|---|
| 순차(선형) 탐색 | 정렬 불필요 | O(n) |
| 이분(이진) 탐색 | 정렬 필수 | O(log n) |
| 피보나치 탐색 | 정렬 필수, 피보나치 수열로 분할 | O(log n) |
| 보간(Interpolation) 탐색 | 정렬 + 균등 분포 가정 | 평균 O(log log n) |
| 블록(색인 순차) 탐색 | 인덱스 테이블 + 블록 내 순차 | — |
이진 탐색의 중간값 mid = (low + high) / 2 (소수점 버림). 비교 후 한쪽 절반을 버린다.
이진 탐색 트리와 AVL
이진 탐색 트리(BST) 왼쪽 < 뿌리 < 오른쪽. 편향되면 O(n) 으로 나빠진다
AVL 트리 좌우 서브트리 높이 차가 1 이하로 유지되는 균형 트리 → O(log n) 보장
해싱 — 해시 함수 이름이 그대로 답
| 함수 | 방법 |
|---|---|
| 제산법(Division) | 키를 소수로 나눈 나머지를 주소로 |
| 제곱법(Mid-square) | 키를 제곱한 뒤 중간 자리를 사용 |
| 폴딩법(Folding) | 키를 여러 부분으로 나눠 더하거나 XOR |
| 기수 변환법 | 키의 진법을 바꿔 주소로 |
| 숫자 분석법 | 키의 각 자리 분포를 분석해 고른 자리를 사용 |
| 무작위법 | 난수를 사용 |
충돌(Collision)과 오버플로(Overflow)
충돌 서로 다른 키가 같은 홈 주소를 갖는 것
동거자 같은 주소를 갖게 된 서로 다른 키들(synonym)
오버플로 버킷에 더 넣을 슬롯이 없는 상태
해결 방법
| 방법 | 내용 |
|---|---|
| 선형 조사(Linear Probing) | 다음 빈 자리를 순차로 찾는다 — 군집(clustering) 발생 |
| 이차 조사(Quadratic) | +1², +2², +3² 로 건너뛴다 |
| 이중 해싱(Double Hashing) | 두 번째 해시 함수로 간격을 정한다 |
| 체이닝(Chaining) | 같은 주소를 연결 리스트로 잇는다 |
함정 — 제산법은 소수로 나눈다는 점이 강조된다(3회 출제). 폴딩은 접어서 더한다, 제곱법은 중간 자리를 쓴다.
9. 알고리즘 설계 기법
| 기법 | 뜻 | 예 |
|---|---|---|
| 분할 정복(Divide & Conquer) | 쪼개서 풀고 합친다 | 퀵·병합 정렬, 이진 탐색 |
| 동적 계획법(DP) | 작은 문제의 답을 저장해 재사용 | 피보나치, 최단 경로(플로이드) |
| 탐욕법(Greedy) | 매 순간 최선을 선택 | 거스름돈, 최소 신장 트리(크루스칼·프림) |
| 백트래킹(Backtracking) | 가능성 없는 경로는 되돌아간다 | N-Queen, 미로 |
| 분기 한정 | 한계값으로 가지를 잘라낸다 | 배낭 문제 |
복잡도 표기
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)
10. 코드 품질과 정적 분석
클린 코드와 코드 스멜
클린 코드 원칙 가독성 · 단순성 · 의존성 최소 · 중복 제거 · 추상화
코드 스멜 중복 코드 · 긴 메서드 · 큰 클래스 · 과도한 매개변수 · 죽은 코드
리팩터링 기능(외부 동작)을 바꾸지 않고 내부 구조를 개선
정적 분석 도구 — 실행하지 않고 소스를 본다
| 도구 | 용도 |
|---|---|
| pmd | 미사용 변수·최적화되지 않은 코드 검출 (Java 등) |
| cppcheck | C/C++ 의 오버플로 등 결함 검출 |
| checkstyle | Java 코딩 표준 검사 |
| SonarQube | 중복·복잡도·품질을 통합 관리 |
| ccm | 순환 복잡도 측정 |
| cobertura | 테스트 커버리지 측정 |
함정 — cobertura·ccm 은 측정 도구, checkstyle 은 표준 검사, pmd·cppcheck 은 결함 검출이다. 이 목록에 Selenium(동적 테스트)을 섞어 "정적 분석 도구가 아닌 것"으로 낸다.
11. 빌드·패키징·매뉴얼 (매뉴얼 16회 · 빌드 7회)
빌드 자동화 도구
| 도구 | 특징 |
|---|---|
| Ant | XML 기반, 절차적 스크립트, 의존성 관리 없음 |
| Maven | XML(pom.xml), 의존성 자동 관리, 정해진 라이프사이클 |
| Gradle | Groovy/Kotlin DSL, 증분 빌드로 빠름, 안드로이드 표준 (5회) |
| Jenkins | CI 서버 — 빌드·테스트·배포 자동 실행 (3회) |
함정 — Jenkins 는 빌드 도구가 아니라 CI 서버(자동화 서버) 다. Gradle 은 XML 이 아니라 스크립트(DSL)를 쓴다.
제품 소프트웨어 패키징
사용자 중심으로 패키징 → 설치·사용 매뉴얼 작성 → 버전 관리·릴리즈 노트
릴리즈 노트 항목
머리말(문서 이름·제품명·버전·날짜) · 개요 · 목적 · 문제 요약 ·
재현 항목 · 수정·개선 내용 · 사용자 영향도 · 지원 연락처 · 면책 조항 · 참고
매뉴얼 두 종류
| 매뉴얼 | 담는 것 |
|---|---|
| 설치 매뉴얼 | 설치 환경·절차·오류 메시지·설치 검증·삭제 방법 — 개발자 관점 |
| 사용자 매뉴얼 | 기능별 사용법·화면·FAQ — 사용자 관점 |
DRM (11회 출제)
구성 요소
| 요소 | 역할 |
|---|---|
| 콘텐츠 제공자 | 저작권자 |
| 콘텐츠 분배자 | 유통을 담당 |
| 패키저(Packager) | 콘텐츠를 메타데이터와 함께 암호화해 묶는다 |
| 클리어링 하우스 | 저작권 사용 승인·정산을 중개 |
| DRM 컨트롤러 | 사용 권한을 통제하며 재생 |
| 보안 컨테이너 | 콘텐츠의 안전한 유통 상자 |
기술 요소
암호화 · 키 관리 · 식별 기술(DOI) · 저작권 표현(XrML) · 암호화 파일 생성(패키저) ·
정책 관리 · 크랙 방지 · 인증 · 워터마킹 · 핑거프린팅
함정 — 클리어링 하우스 = 정산·승인이 짝이다. 패키저와 헷갈리게 낸다. 워터마킹(저작권 정보 삽입)과 핑거프린팅(구매자 정보 삽입)의 차이도 나온다.
12. 인터페이스 구현과 성능 지표
데이터 형식 JSON · XML · YAML · CSV
통신 REST · SOAP(WSDL·UDDI) · AJAX(비동기 요청)
보안 IPSec · SSL/TLS · S-HTTP
AJAX — 페이지 전체를 새로 고치지 않고 필요한 부분만 비동기로 갱신하는 방식(2회 출제).
애플리케이션 성능 지표 네 개
| 지표 | 뜻 |
|---|---|
| 처리량(Throughput) | 단위 시간당 처리한 트랜잭션 수 |
| 응답 시간(Response Time) | 요청 후 첫 응답까지 |
| 반환 시간(Turnaround Time) | 요청 후 완료 결과 전부를 받기까지 |
| 자원 사용률 | CPU·메모리·네트워크 사용량 |
함정 — 응답 시간과 반환 시간을 바꿔 낸다. 응답은 첫 반응, 반환은 완료.
13. 품질·프로세스 국제 표준 (ISO 8회 · IEC 8회)
| 표준 | 무엇 |
|---|---|
| ISO/IEC 9126 → 25010 | 소프트웨어 품질 특성 (기능성·신뢰성·사용성·효율성·유지보수성·이식성) |
| ISO/IEC 12207 | 소프트웨어 생명주기 프로세스 (기본·지원·조직) |
| ISO/IEC 15504 (SPICE) | 프로세스 평가 — 수행 능력 6단계(0 불완전 ~ 5 최적화) |
| CMMI | 성숙도 5단계 — 초기 · 관리 · 정의 · 정량적 관리 · 최적화 |
| ISO/IEC 14598 | 품질 평가 절차·요건 |
함정 — 9126 은 품질 특성, 12207 은 생명주기, 15504 는 평가다. CMMI 5단계 이름 순서를 뒤집은 보기가 나온다(성숙도 2회 출제).
14. 함정 정리
검증 vs 확인 — 검증은 명세 기준(개발자), 확인은 요구 기준(사용자).
하향식 = 스텁 / 상향식 = 드라이버. 절대 바꿔 읽지 않는다.
퀵 정렬 최악 O(n²), 병합·힙은 최악도 O(n log n).
기수 정렬은 비교 기반이 아니다.
트리의 차수 = 자식 수의 최대값, 단말 노드는 차수 0.
후위 순회 = L-R-Root → 후위 표기와 짝.
순환 복잡도 = E - N + 2 = 판단 노드 + 1.
참 오라클만 전수, 나머지는 일부·추정·비교.
Jenkins 는 CI 서버, Ant/Maven/Gradle 이 빌드 도구.
클리어링 하우스 = 저작권 정산, 패키저 = 암호화 묶음.
응답 시간 ≠ 반환 시간.
테스트는 결함이 없음을 증명하지 못한다.
한눈에 정리
- 테스트와 형상관리가 이 과목의 절반이다. 기법 이름 → 무엇을 보는지 짝만 맞추면 된다
- 화이트박스는 커버리지 강도 순서와 순환 복잡도 계산이 전부
- 블랙박스는 동등 분할(대표값) 과 경계값(경계 앞뒤) 의 구분
- 통합 테스트는 하향식-스텁 / 상향식-드라이버 한 줄
- 형상관리 4단계 식별 → 통제 → 감사 → 기록, 베이스라인은 합의된 기준선
- 자료구조는 차수·순회·간선 수 계산 세 가지가 반복된다
- 정렬은 평균/최악 복잡도 표와 1회전 결과 굴리기
- 해싱은 제산=나머지, 폴딩=접어 더하기, 제곱=중간 자리
- 도구 이름은 테스트(xUnit·STAF·FitNesse) / 정적 분석(pmd·checkstyle) / 빌드(Ant·Maven·Gradle) / CI(Jenkins) 로 칸을 나눠 외운다
- 자료구조 문항이 대거 나온 회차가 실제로 있었다 — 테스트만 보고 가면 위험하다