[정보처리기사] 2과목 소프트웨어 개발
1. 소프트웨어 패키징
1. 애플리케이션 패키징
- 개발이 완료된 소프트웨어를 고객에 인도하기 위해 패키징하고, 설치 메뉴얼, 사용 메뉴얼 등을 작성하는 일련의 배포용 설치 파일을 만드는 작업을 의미한다.
- 사용자를 중심으로 진행하며, 사용자의 다양한 환경에서 설치할 수 있도록 패키징한다.
- 사용자의 불편함을 줄이고 사용자의 편의성을 먼저 고려한다.
2. 소프트웨어 재공학(Reengineering)
- 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 서프트웨어 성능을 향상시키는 것
- 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하기 때문에 유지보수의 생산성 향상을 통해 소프트웨어 위기를 해결
- 기본 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상
1) 재공학의 장점
- 소프트웨어 품질 향상
- 소프트웨어 생산성 향상
- 소프트웨어 수명 연장
- 소프트웨어 오류 감소
- 유지보수성
2) 재공학의 과정
(1) 분석(Analysis)
- 소프트웨어 재공학 활동 중 기본 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고 재공학 대상을 선정하는 것
(2) 재구성(Restructuring, 개조)
- 기존 소프트웨어를 향상시키기 위하여 코드를 재구성하므로 기능과 외적인 동작은 바뀌지 않음
(3) 역공학(Reverse Engineering)
- 소프트웨어 재공학 활동 중 원시 코드를 분석하여 소프트웨어 관계를 파악하고 기존 시스템의 설계 정보를 재발견하고 다시 제작하는 작업
(4) 이식(Migration)
- 소프트웨어 재공학의 주요 활동 중 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
3. 외계인코드(Alien Code)
- 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 프로그램을 의미한다.
4. ISO/IEC 25000
- 기존 소프트웨어 품질 평가 모델(ISO/IEC 9126)과 평가 절차 모델(ISO/IEC 14598)을 통합한 소프트웨어 품질 평가 모델 국제 표준이다.
- SQuaRE(System and Software Quality Requirements and Evaluation)라고도 한다.
1) ISO/IEC 25000 구성 요소
- 2500n, 2501n, 2502n, 2503n, 2504n의 다섯가지 분야로 나눌수 있고, 확장 분야인 2505n이 있다.
- 2500n: 품질 관리
- 2501n: 품질 모델
- 2502n: 품질 측정
- 2503n: 품질 요구
- 2504n: 품질 평가
# 관모측요평
5. 프로젝트 관리
1. 프로젝트 일정 계획
- 프로세스를 이루는 소작업을 파악하고 예측된 노력을 각 소작업에 분배하여 소작업의 순서와 일정을 정하는 것
- 프로젝트 일정 계획에 사용되는 기능: PERT, CPM, 간트 차트, WBS
1) PERT
- 전체 작업의 상호 관계를 표시하는 네트워크
2) CPM
- 작업을 나열하고 작업에 필요한 소요 기간을 예측하는데 사용하는 기법
3) 간트 차트
- 프로젝트 작업 일정을 막대 도표를 이용하여 표시하는 프로젝트 일정표
========================================
2. 통합 구현
1. 클린코드
1) 소스코드 최적화
- 클린 코드(Clean Code): 누구나 쉽게 이해, 수정, 추가 가능한 단순하면서 명료한 코드
- 나쁜 코드(Bad Code): 프로그램 로직이 복잡하고 이해하기 어려운 코드
2) 클린코드 작성 원칙
- 가독성: 누구나 코드를 쉽게 코드를 읽을 수 있도록 작성, 이해하기
- 단순성: 간단한 작성, 한 번에 한 가지 기능 처리, 클래스/메소드/함수는 최소단위로 분리
- 의존성 배제: 다른 모듈에 미치는 영향 최소화, 코드 변경 시 다른 부분에 영향 없도록 작성
- 중복성 최소화: 중복된 코드는 삭제하여 공통된 코드로 사용
- 추상화: 상위 클래스/메소드/함수에서 간략하게 애플리케이션 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현
2. 모듈화
- 모듈화는 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정으로, 작게 나누어진 각 부분은 모듈이라고 한다.
- 소프트웨어의 모듈은 프로그래밍 언어에서 Subroutine, Function 등으로 표현될 수 있다.
1) 모듈화의 장점
- 모듈화는 시스템을 지능적으로 관리할 수 있도록 해주며, 복잡도 문제를 해결하는데 도움을 준다.
- 모듈화는 시스템의 유지보수와 수정을 용이하게 한다.
3. 코드인스펙션
- 소프트웨어 개발에서 사용되는 정적 코드 검사 기법 중 하나이다.
- 프로그램을 수행시켜보는 것 대신에 코드를 읽어보고 눈으로 확인하는 방법이다.
- 코드 품질 향상 기법 중 하나이다.
- 결함과 함께 코딩 표준 준수 여부, 효율성 등의 다른 품질 이슈를 검사하기도 한다.
========================================
3. 인터페이스 구현
1. 인터페이스 간의 통신을 위해 이용되는 데이터 포맷
- JSON, XML, YAML, AJAX
2. NS Chart
- 논리 기술에 중점을 두고 도형을 이용한 표현 방법(Box Diagram, Chapin Chart)
- 순차, 반복, 선택, 다중 선택 구조 등 표현
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별
* 화살표나 GOTO를 사용하여 이해하기 쉽다 -> 흐름도에 대한 설명
========================================
4. 데이터 입출력 구현
1. 자료구조
1. 자료 구조 분류
- 선형 구조: 큐, 스택, 데크, 리스트, 연결리스트
- 비선형 구조: 그래프, 트리, 인접행렬
2. 스택(Stack)
2-1. 스택(Stack)이란?
- 스택(Stack)이란 '쌓다'라는 의미로, 책을 올려놓은 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다.
2-2. 스택(Stack)의 특징
- LIFO(Last In First Out): 가장 마지막에 삽입된 자료가 먼저 삭제되는 구조(후입선출)
- 삽입 연산을 Push, 삭제 연산을 Pop이라고 한다.
2-3. 스택(Stack)의 사용 사례
- 웹 브라우저 방문기록(뒤로가기)
- 실행 취소(undo)
- 역순 문자열 만들기
- 후위 표기법 계산
3. 큐(Queue)
3-1. 큐(Queue)란?
- 큐(Queue)의 사전적 의미는 줄, 혹은 줄을 서서 기다리는 것을 의미하고, 놀이동산에서 줄을 서서 기다리는 것, 은행에 먼저 온 사람의 업무를 창구에서 처리하는 것과 같은 자료구조를 말한다.
3-2. 큐(Queue)의 특징
- FIFO(First In First Out): 가장 먼저 삽입된 자료가 먼저 삭제되는 구조(선입선출)
- 정해진 한 곳(Top)을 통해 삽입, 삭제가 이루어지는 스택과 달리 큐는 한쪽 끝에서 삽입 작업이, 반대쪽 끝에서 삭제 작업이 양쪽으로 이루어진다.
- 이때, 삭제 연산만 수행되는 곳을 프론트(Front), 삽입 연산만 이루어지는 곳을 리어(Rear)로 정해 각각의 연산 작업만 수행
- 큐의 리어에서 이루어 지는 삽입 연산을 인큐(enQueue)
- 프론트에서 이루어지는 삭제 연산을 디큐(dnQueue)라 부른다
3-3. 큐(Queue)의 활용 예시
- 큐는 주로 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다.
- 우선순위가 같은 작업 예약(프린터의 인쇄 대기열)
- 은행 업무
- 콜센터 고객 대기시간
- 프로세스 관리
- 너비 우선 탐색(BFS)구현
- 캐시(Cache) 구현
========================================
5. 테스트 관리
1. 통합 테스트
1) 테스트 드라이버(Test Driver)
- 상위 모듈에서 데이터 입력 & 출력 확인을 위한 더미 모듈
- 상향식 통합 테스트 수행 시 사용
- 시스템 및 컴포넌트를 시험하는 환경의 일부분으로 시험을 지원하는 목적하에 생성된 코드와 데이터이다.
- 순차적 실행을 지원하는 프로그램이나 명령들이 묶여 있는 배치 파일
2) 테스트 스텁(Test Stub)
- 모듈, 모든 하위 컴포넌트를 대신하는 더미 모듈
- 하향식 통합 테스트 수행 시 사용
3) 빅뱅 테스트(Bigbang Test)
- 모든 모듈을 동시에 통합 후 사용
- 단시간에 통합 테스트 가능
2. 화이트박스
- 화이트박스 테스트는 모듈의 원시코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스르르 설계하는 방법이다.
1) 화이트박스 테스트
- 설계된 절차에 초점을 둔 구조적 테스트이며, 테스트 과정의 초기에 적용된다.
- 모듈 안의 작동을 직접 관찰한다.
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행된다.
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어한다.
2) 화이트박스 테스트 종류
(1) 기초 경로 검사
- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
- 테스트 측정 결과를 통해 실행 경로의 기초를 정의
(2) 제어 구조 검사
- 조건 검사: 프로그램 내의 논리적 조건 테스트
- 루프 검사: 프로그램 내의 반복 구조에 초점을 맞춰 테스트
- 데이터 흐름 검사: 프로그램 내의 변수의 정의와 사용의 위치에 초점을 맞춰 테스트
3. 블랙박스 테스트
- 블랙박스 테스트는 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다.
1) 블랙박스 테스트
- 사용자의 요구사항 명세를 보면서 테스트하는 것으로, 주로 구현된 기능을 테스트한다.
- 소프트웨어 인터페이스에서 실시되는 테스트이다.
- 부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며, 테스트 과정의 후반부에 적용된다.
2) 블랙박스 테스트의 종류
- 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사
- 프로젝트에 내재된 위험 요소를 인식하고 그 영향을 분석하여 이를 관리하는 활동으로서, 프로젝트를 성공시키기 위하여 위험 요소를 사전에 예측, 대비하는 모든 기술과 활동이다.
========================================
1. 정형기술검토(FTR, Formal Technical Review)
1) 정형기술검토(FTR)이란?
- 소프트웨어 개발 산출물 대상 요구사항 확인 및 검증을 수행하는 방법이다.
- 동료 검토, 워크스루, 인스펙션
2) 정형기술검토(FTR) 지침 사항
- 제품 검토에만 집중하라
- 의제를 제한하여 진행하라
- 참가자의 수를 제한하라
- 논쟁과 반박을 제한하라
- 문제영역을 정확히 표현하라
- 검토의 과정과 결과를 재검토하라
- 해결책이나 개선책에 대해서는 논하지 말라