2과목 소프트웨어 개발 합격 전략
꼭 나오는 카테고리의 주요 개념들과 꼭 나오는 선택지들을 암기하면 기본적으로 절반 정도의 문제를 맞힐 수 있습니다.
그리고 주요 자료구조와 알고리즘 개념을 학습하면 무난하게 고득점을 낼 수 있습니다. 기출문제를 보며 출제된 자료구조와 알고리즘들을 학습하여 자료구조, 알고리즘 학습시간을 줄이는 것이 좋습니다. 제대로 학습하기엔 오랜 시간이 걸릴 테니까요.
이 포스팅에서는 개정판 이후 기출문제를 분석하여 출제 빈도 순서대로 정리를 하였습니다. 가장 위에서부터 차례대로 공부해가며 개정판 기출문제를 풀어보고 선택지를 분석한다면 충분히 고득점을 낼 수 있습니다.
2과목은 자료구조, 알고리즘 기초 개념 학습이 따로 진행되는 것이 좋습니다. 그리고 테스트 분야에서 정형화된 문제들이 출제되므로 이 부분은 반드시 암기를 하여 틀리지 않도록 해야 합니다.
※ 주의: 이 글은 개정판 기출문제를 분석해서 정리를 한 글이지, 개념 설명을 해주는 글은 아닙니다. 개념 이해를 위한 설명글을 원하신다면 다른 자료를 따로 찾아보시는 게 좋습니다.
개정판 2과목 기출문제 압축 정리
1. 자료구조, 알고리즘
출제 빈도: 회당 5.25문제 (21년 1회 22번, 24번, 25번, 26번, 30번, 32번, 37번, 40번, 20년 1,2회 22번, 34번, 35번, 36번, 20년 3회 26번, 27번, 29번, 31번, 40번, 20년 4회 24번, 27번, 32번, 33번)
출제 유형:
- 트리의 노드와 차수 등을 구하는 문제가 거의 매회 나오고 있습니다.
- 스택과 큐의 특징을 묻는 문제가 자주 나옵니다.
- 빅오 표기법에 대해 이해하고 있는 문제가 출제된 적이 있으며, 정렬 알고리즘들의 시간 복잡도를 빅오 표기법으로 묻는 문제가 자주 출제됩니다.
- 특히 정렬 알고리즘은 실제 예시를 주고 정렬의 실행 중간 결과를 묻는 문제가 자주 나오는데 이것은 정렬 알고리즘의 진행방법을 이해하고 실제 예제를 풀어보는 연습을 해봐야 합니다. 정렬을 실행하는 문제로는 선택 정렬과 삽입 정렬이 자주 출제되고 있습니다.
- 트리의 순회 알고리즘을 실행한 결과를 묻는 문제도 매회 출제되고 있습니다.
- 전위식, 후위식은 실제 연산식을 가지고 변형하는 문제가 출제됩니다. 실제 예시를 가지고 연습해봐야 합니다.
※ 주의: 자료구조, 알고리즘은 그림이나 숫자들을 이용하여 실제 예시와 함께 공부해야 기억에 오래 남고 학습효과가 좋습니다. 그런데 그런 구체적인 설명을 이 포스팅에 다 담기엔 무리가 있어서, 이 포스팅에서는 어떤 것들이 출제되었는지만 다뤄드릴 테니, 여기서 언급한 키워드들에 대한 자세한 개념 공부는 다른 자료를 이용하여 따로 하시는 게 좋을 것 같습니다.
1) 자료구조
- 자료구조 분류
선형 구조: 배열, 선형 리스트(연속 리스트, 연결 리스트), 스택, 큐, 데크
비선형 구조: 트리, 그래프
트리(tree): 그래프의 특수한 형태로 노드(Node)와 선분(Branch)으로 되어 있고, 정점 사이에 사이클(Cycle)이 형성되어 있지 않으며, 자료 사이의 관계성이 계층 형식으로 나타나는 비선형 구조
차수 – 각 노드에서 뻗어 나온 가지의 수
트리의 차수 – 노드들의 차수 중에 가장 높은 수
근 노드 – 트리의 맨 위에 있는 노드
단말 노드 – 자식이 하나도 없는 노드, 즉 차수가 0인 노드
자식 노드 – 어떤 노드에 연결된 하위 노드들
부모 노드 – 어떤 노드에 연결된 상위 노드
형제 노드 – 동일한 부모를 갖는 노드들
그래프:
McCabe의 cyclomatic 수 = 선의 개수 – 점의 개수 + 2
스택(stack):
입출력이 한쪽 끝으로만 제한된 리스트
LIFO(후입선출) 구조이다
더 이상 삭제할 데이터가 없는 상태에서 데이터를 삭제하면 언더플로가 발생한다.
모든 기억 공간이 꽉 채워져 있는 상태에서 데이터가 삽입되면 오버플로가 발생한다
서브루틴 호출, 인터럽트 처리, 수식 계산 및 수식 표기법에 응용
큐(queue):
FIFO(선입선출) 구조이다
Head(front)와 tail(rear)의 2개 포인터를 갖고 있다.
2) 알고리즘
- 시간복잡도, 공간복잡도 빅오 표기법의 개념에 대하여
빅오 표기법은 알고리즘의 효율성을 표기해주는 표기법이다.
알고리즘의 효율성은 데이터 개수(n)가 주어졌을 때 덧셈, 뺄셈, 곱셈 같은 기본 연산의 횟수를 의미한다.
빅오 표기법은 보통 알고리즘의 시간 복잡도와 공간 복잡도를 나타내는데 주로 사용된다.
(시간 복잡도는 알고리즘의 시간 효율성을 의미하고, 공간 복잡도는 알고리즘의 공간(메모리) 효율성을 의미한다.)
표기방법은 O( )이다. ( )안에 데이터 개수 n에 대하여 연산의 실행 횟수를 적어 넣는다.
예를 들어 O(1)은 데이터 개수 n에 대하여 실행 횟수 1, O(n^2)은 데이터 개수 n에 대하여 실행 횟수 n 제곱을 나타낸다.
- 정렬
선택 정렬: 배열을 선형 탐색하며 가장 작은 원소를 배열 맨 앞으로 보낸다.(맨 앞에 있던 원소와 자리를 바꾼다). 그다음에는 두 번째로 작은 원소를 찾은 뒤 앞으로 보내준다. 이 작업을 모든 원소가 정렬될 때까지 반복한다. 시간복잡도 O(N^2)
삽입 정렬: 삽입 정렬은 두 번째 자료부터 시작하여 그 앞(왼쪽)의 자료들과 비교하여 삽입할 위치를 지정한 후 자료를 뒤로 옮기고 지정한 자리에 자료를 삽입하여 정렬하는 알고리즘이다. 시간복잡도 O(N^2)
버블 정렬: 배열의 첫 원소부터 순차적으로 진행하며, 현재 원소가 그다음 원소의 값보다 크면 두 원소를 바꾸는 작업을 반복한다. 이런 식으로 배열을 계속 살펴보면서 완전히 정렬된 상태가 될 때까지 반복한다. 시간복잡도 O(N^2)
퀵 정렬: 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬한다. 시간복잡도 O(NlogN)
합병 정렬:배열을 절반씩 나누어 각각을 정렬한 다음 이 둘을 합하여 다시 정렬하는 방법이다. 나눈 절반을 정렬할 때도 같은 알고리즘이 사용되고 결국에는 원소 한 개짜리 배열 두 개를 병합하게 된다. 시간복잡도 O(NlogN)
- 탐색
트리 순회 알고리즘: 전위 순회, 중위 순회, 후위 순회하는 방법에 대해 각각 공부해야 합니다. 여기서 설명하기에는 양이 많고 그림도 많이 필요해서 무리가 있네요..
이진 검색 알고리즘:
탐색 효율이 좋고 탐색 시간이 적게 소요된다.
검색할 데이터가 정렬되어 있어야 한다.
비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
- 전위식, 후위식
전위식: 연산 기호가 피연산자 A, B의 왼쪽에 위치하는 것
후위식: 연산 기호가 피연산자 A, B의 오른쪽에 위치하는 것
- 알고리즘 설계 기법
Divide and Conquer
Greedy
Backtracking
Dynamic Programming
Branch & Bound
Approximation Algorithm
2. 인수 테스트
출제 빈도: 회당 1문제 (21년 1회 39번, 20년 1,2회 23번, 20년 3회 39번, 20년 4회 26번)
출제 유형: 알파 테스트와 베타 테스트의 뜻을 설명 후 용어를 묻는 문제가 출제됩니다.
알파 테스트: 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트, 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록한다.
베타 테스트: 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법, 실업무를 가지고 사용자가 직접 테스트하는 것으로, 개발자 없이 고객의 사용 환경에 소프트웨어를 설치하여 검사를 수행한다.
필드 테스팅이라고도 불린다.
3. 블랙박스 테스트, 화이트박스 테스트
출제 빈도: 회당 1문제 (21년 1회 31번, 20년 1,2회 21번, 32번, 20년 4회 37번)
출제 유형: 블랙박스 테스트와 화이트박스 테스트의 특징을 구분할 줄 아는지 묻는 문제가 나오고, 각각의 검사기법을 분류할 줄 아는지 묻는 문제가 나옵니다. 경계값 분석에서 실제 입력할 값을 묻는 문제도 출제된 적이 있습니다. (20년 1,2회 21번)
- 블랙박스 테스트
검사 기법: 경계값 분석, 동등 분할 검사, 원인-결과 그래프 검사, 동치 클래스 분해, 오류 예측 검사, 비교 검사
특징:
사용자의 요구사항 명세를 보면서 테스트한다.
주로 구현된 기능을 테스트한다.
소프트웨어 인터페이스에서 실시되는 테스트이다.
부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며, 테스트 과정의 후반부에 적용된다.
- 화이트박스 테스트
검사 기법 : 조건 검사, 루프 검사, 데이터 흐름 검사, 기초 경로 검사
특징:
소스 코드의 모든 문장을 한 번 이상 수행함으로써 진행된다.
모듈 안의 작동을 직접 관찰할 수 있다.
산출물의 각 기능별로 적절한 플그램의 제어구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검한다.
4. 소프트웨어 형상 관리
출제 빈도: 회당 1문제 (20년 1,2회 31번, 20년 3회 28번, 32번, 20년 4회 30번)
출제 유형: 형상관리에 대하여 여러 방면으로 묻는 문제가 매회 나오고 있습니다.
- 의미:
개발 과정의 변경 사항을 관리하는 것
- 역할:
형상 관리를 통해 이전 리버전이나 버전에 대한 정보에 접근 가능하여 배포 관리에 유용
불필요한 사용자의 소스 수정 제한
동일한 프로젝트에 대해 여러 개발자 동시 개발 가능
- 형상 관리 도구의 주요 기능: 체크인, 체크아웃, 커밋
- 형상 관리 항목: 프로젝트 요구 분석서, 소스 코드, 운영 및 설치 지침서
5. 디지털 저작권 관리 (DRM)
출제 빈도: 회당 0.75문제 (21년 1회 27번, 20년 3회 34번, 20년 4회 40번)
출제 유형: 기술 요소가 아닌 것을 고르는 문제가 출제됩니다.
기술요소: 키 관리,암호화, 크랙 방지,정책 관리, 콘텐츠 식별체계 표현, 라이선스 발급 및 관리
6. 통합 테스트
출제 빈도: 회당 0.75문제 (21년 1회 23번, 20년 1,2회 24번, 20년 3회 36번)
출제 유형: 하향식 통합 테스트의 특징, 특히 stub에 대해 묻는 문제가 출제되었습니다. 상향식 통합 테스트도 출제될 가능성이 있습니다.
- 하향식 통합 테스트
깊이 우선 방식 또는 너비 우선 방식이 있다.
상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트한다.
Stub - 하향식 통합 시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈
- 상향식 통합 테스트
하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트한다.
하위 모듈들을 클러스터로 결합한다.
통합된 클러스터 단위로 테스트한다.
driver – 상위 모듈에서 데이터의 입출력을 확인하기 위해 작성하는 더미 모듈
- 혼합식 통합 테스트
샌드위치식 통합 테스트라고도 한다.
하위 수준에서는 상향식 통합, 상위 수준에서는 하향식 통합을 한다.
7. ISO/IEC 9126의 소프트웨어 품질 특성
출제 빈도: 회당 0.75문제 (20년 1,2회 37번, 21년 1회 33번, 20년 3회 30번)
출제 유형: 혹은 소프트웨어 품질 목표라는 용어로도 출제됩니다. 특성들에 대해 묻거나 혹은 하위 특성에는 무엇이 있는지 묻는 문제도 나옵니다.
기능성 (Functionality): 소프트웨어가 사용자의 요구사항을 정확하게 만족하는 기능을 제공해야 한다.
(하위 특성: 적합성, 정확성, 보안성, 상호 운용성, 호환성)
신뢰성 (Reliability): 주어진 시간 동안 주어진 기능을 오류 없이 수행해야 한다.
(하위 특성: 성숙성, 고장 허용성, 회복성)
사용성 (Usability): 쉽게 배우고 사용할 수 있어야 한다.
(하위 특성: 이해성, 학습성, 운용성, 친밀성)
효율성 (Efficiency): 사용자가 요구하는 기능을 할당된 시간 동안 한정된 자원으로 얼마나 빨리 처리하는지를 나타낸다.
(하위 특성: 시간 효율성, 자원 효율성)
유지 보수성 (Maintainability): 환경의 변화 또는 새로운 요구사항이 발생했을 때 소프트웨어를 개선하거나 확장할 수 있는 정도를 나타낸다.
(하위 특성: 분석성, 변경성, 안정성, 시험성)
이식성 (Portability): 소프트웨어가 다른 환경에서도 쉽게 적용할 수 있어야 한다.
(하위 특성: 적용성, 설치성, 대체성, 공존성)
8. SW 패키징 도구 활용 시 고려 사항
출제 빈도: 회당 0.75문제 (20년 1,2회 30번, 20년 3회 33번, 20년 4회 21번)
출제 유형: 고려사항인 것을 고르거나 아닌 것을 고르는 문제가 출제됩니다.
패키징 시 사용자에게 배포되는 SW이므로 보안을 고려한다.
사용자 편의성을 위한 복잡성 및 비효율성 문제를 고려한다.
제품 SW종류에 적합한 암호화 알고리즘을 적용한다.
추가로 다양한 이기종 연동을 고려한다.
내부 콘텐츠에 대한 보안을 고려한다.
9. 인터페이스 보안을 위해 네트워크 영역에 적용될 수 있는 솔루션
출제 빈도: 회당 0.75문제 (20년 1,2회 28번, 20년 3회 21번, 20년 4회 25번)
출제 유형: 이 세 가지 솔루션이 아닌 것을 고르는 문제가 출제됩니다.
IPSec, SSL, S-HTTPS
10. 소프트웨어 설치 매뉴얼
출제 빈도: 회당 0.5문제 (21년 1회 35번, 20년 4회 28번)
출제 유형: 틀린 설명을 고르는 문제나, 매뉴얼에 포함될 항목이 아닌 것을 고르는 문제가 출제되었습니다.
설치 과정에서 표시될 수 있는 예외상황에 관련 내용을 별도로 구분하여 설명한다.
설치 시작부터 완료할 때까지의 전 과정을 빠짐없이 순서대로 설명한다.
설치 매뉴얼은 사용자 기준으로 작성한다.
설치 매뉴얼에는 목차, 개요, 기본사항 등이 기본적으로 포함되어야 한다.
포함될 항목: 제품 소프트웨어 개요, 설치 관련 파일, 프로그램 삭제
11. 소스코드 품질분석 도구 중 정적 분석 도구
출제 빈도: 회당 0.5문제 (20년 1,2회 39번, 20년 4회 23번)
출제 유형: 정적 분석 도구인 것과 아닌 것을 구분하는 문제가 출제됩니다.
pmd , checkstyle, cppcheck, valgrind, Find Bug, SonarQube, CodeSonar, Corbotura, Splint
12. 클린 코드 작성 원칙
출제 빈도: 회당 0.5문제 (20년 3회 24번, 20년 4회 39번)
출제 유형: 클린 코드 작성 원칙에 대한 설명을 주고 어떤 특성인지 묻는 문제와 클린 코드 작성 원칙이 아닌 설명을 고르는 문제가 나왔습니다.
가독성: 누구든지 쉽게 이해하는 코드 작성
중복성 최소화: 중복이 최소화된 코드 작성
의존성 배제: 다른 모듈에 미치는 영향 최소화
단순성: 단순, 명료한 코드 작성. 한 번에 한 가지 처리만 수행, 클래스/메소드/함수를 최소 단위로 분리
추상화: 상위 클래스/메소드/함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현
13. 인터페이스 구현 검증도구
출제 빈도: 회당 0.5문제 (20년 1,2회 29번, 20년 4회 29번)
출제 유형: 설명을 통해 맞는 검증도구를 찾는 문제가 출제됩니다.
xUnit: Java, C++, .Net 등 다양한 언어를 지원하는 단위 테스트 프레임워크
STAF: 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
FitNesse: 웹 기반 테스트 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
NTAF: NHN의 테스트 자동화 프레임워크
Selenium: 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크
watir: Ruby를 사용하는 테스트 프레임워크
14. EAI(Enterprise Application Integration)의 구축 유형
출제 빈도: 회당 0.5문제 (20년 1,2회 38번, 20년 4회 22번)
Point-to-Point: 가장 기본적인 애플리케이션 통합 방식, 1:1 연결, 변경 및 재사용이 어려움
Hub & Spoke: 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
Hybrid: Hub & Spoke와 Message Bus의 혼합방식이다, 필요한 경우 한 가지 방식으로 EAI 구현이 가능하다, 데이터 병목현상을 최소화할 수 있다.
Message Bus: 애플리케이션 사이에 미들웨어를 두어 처리하는 방식, 확장성이 뛰어나며 대용량 처리가 가능
15. 그 외 출제된 문제들
* 저작권 관리 구성 요소 (20년 4회 36번)
클리어링 하우스: 키 관리 및 라이선스 발급 관리
콘텐츠 제공자: 콘텐츠를 제공하는 저작권자
패키저: 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램
콘텐츠 분배자: 암호화된 콘텐츠를 유통하는 곳이나 사람
콘텐츠 소비자: 콘텐츠를 구매해서 사용하는 주체
DRM 컨트롤러: 배포된 콘텐츠의 이용 권한을 통제
보안 컨테이너: 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치
* 테스트 케이스에 일반적으로 포함되는 항목 (21년 1회 34번)
테스트 조건, 테스트 데이터, 예상 결과
* 테스트 오라클 (20년 4회 34번)
테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법 및 활동
종류: 참, 샘플링, 휴리스틱, 일관성 검사
* 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목 (20년 1,2회 25번)
정확성, 무결성, 사용성
* 소프트웨어 공학의 기본 원칙 (20년 3회 22번)
품질 높은 소프트웨어 상품 개발
지속적인 검증 시행
결과에 대한 명확한 기록 유지
* 빌드 자동화 도구 (20년 4회 35번)
빌드 자동화 도구는 지속적인 통합개발환경에서 유용하게 활용된다.
Jenkins: Java 기반의 오픈 소스, 서블릿 컨테이너에서 실행되는 서버 기반 도구
Gradle: Groovy를 사용해서 만든 DSL을 스크립트 언어로 사용, 실행할 처리 명령들을 모아 태스크로 만든 후, 태스크 단위로 실행
* 외계인 코드 (20년 1,2회 33번)
아주 오래되거나 참고 문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램
* Pareto의 법칙 (20년 1,2회 26번)
소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙
* AJAX (20년 3회 37번)
JavaScript를 사용한 비동기 통신기술로 클라이언트와 서버 간에 XML 데이터를 주고받는 기술
* 해싱 함수의 종류 (21년 1회 38번)
제산법, 제곱법, 폴딩법, 기수 변환법, 대수적 코딩법, 숫자분석법, 무작위법
* UI 요소
라디오 버튼: 여러 개의 선택 항목 중 하나의 선택만 가능한 경우 사용하는 UI 요소 (21년 1회 28번)
* 구현 단계에서의 작업 절차 (21년 1회 21번)
코딩 작업을 계획 -> 코딩 -> 컴파일 -> 코드를 테스트
다른 과목 보러 가기
최근댓글