[정보처리기사] 소프트웨어 개발
2과목 : 소프트웨어 개발
통합 테스트
- 상향식 통합 테스트 (Bottom Up Intergration Test)
- 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터(Cluster)필요
- 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합
- 하향식 통합 테스트 (Top Down Intergration Test)
- 상위 모듈에서 하위 모듈 방향으로 통합
- 깊이 우선 통합법, 넓이 우선 통합법 사용
- 초기부터 사용자에게 시스템 구조를 보여줌
- 상위 모듈에서 하위 모듈 방향으로 통합
단위 테스트
- 테스트 스텁 : 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈로 하향식 테스트에 필요
- 테스트 드라이버 : 테스트의 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에 필요
- 테스트 슈트 : 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합
- 테스트 케이스 : 사용자의 요구사항을 정확히 준수했는지 확인하기 위한 입력 값, 실행조건, 기대결과 등으로 만들어진 테스트 항목의 명세서
단위 테스트 도구
- CppUnit : C++ 프로그래밍 언어용 단위 테스트 도구
- JUnit : 자바 프로그래밍 언어용 단위 테스트 도구
- HttpUnit : 웹 브라우저 없이 웹 사이트 테스트를 수행하는 데 사용되는 오픈 소스 소프트웨어 테스트 프레임워크
RCS(Revision Control System)
- CVS와의 차이점은 소스 파일의 수정을 한 사람만으로 제한한다.
- 다수의 사용자가 동시에 파일 수정을 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구이다.
- 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있다.
RPC(Remote Procedure call)
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신
검색 및 정렬
- 선형검색 : 처음부터 끝까지 하나씩 순서대로 비교하며 원하는 값을 찾아내는 검색
- 이진검색 : 검색을 수행하기 전에 반드시 데이터의 집합이 정렬되어 있어야 한다.
- 퀵 정렬 : 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방식
- 삽입정렬 : 가장 간단한 정렬 방식, 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬
- 쉘 정렬 : 삽입정렬 확장 개념, 입력파일을 매개변수값으로 서브파일 구성하고 각 서브파일을 삽입정렬 방식으로 순서 배열하는 과정을 반복하는 정렬
- 선택정렬 : n개의 레코드 중에서 최소값을 찾아 첫 번째 레코드 위치에 놓고, 나머지 n-1개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하는 정렬
- 버블정렬 : 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식
- 힙 정렬 : 전이진 트리를 이용한 정렬 방식
- 2-Way 합병 정렬 : 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬 방식
RCS(Revision Control System)
- CVS와의 차이점은 소스 파일의 수정을 한 사람만으로 제한한다.
- 다수의 사용자가 동시에 파일 수정을 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구이다.
- 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있다.
RPC(Remote Procedure call)
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신
화이트박스 테스트
- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
- 설계된 절차에 초점을 둔 구조적 테스트이며, 테스트 과정의 초기에 적용
- 모듈 안의 작동을 직접 관찰
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어
블랙박스 테스트
- 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 함
- 사용자의 요구사항 명세를 보면서 테스트하는 것으로, 주로 구현된 기능을 테스트
- 소프트웨어 인터페이스에서 실시되는 테스트
- 부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며, 테스트 과정의 후반부에 적용
알고리즘
- 선형검색 : 처음부터 끝까지 하나씩 순서대로 비교하며 원하는 값을 찾아내는 검색
- 이진검색 : 검색을 수행하기 전에 반드시 데이터의 집합이 정렬되어 있어야 함
트리 순회
- 전위 운행 (PreOrder) : Root, Left, Right 순서
- 중위 운행 (InOrder) : Left, Root, Right 순서
- 후위 운행 (PostOrder) : Left, Right, Root 순서
DRM(Digital Right Management)
- 디지털 콘텐트의 지적재산권보호, 관리 기능 및 안전한 유통과 배포를 보장하는 솔루션
- 디지털 콘텐트의 지적재산권을 보호하는 권한통제기술, 사용권한제어 기술, 패키징 기술, 라이선스 관리를 포함한 유통체계
- 디지털 콘텐츠와 디바이스의 사용을 제한하기 위해 하드웨어 제조업자, 저작권자, 출판업자 등이 사용할 수 있는 접근 제어 기술을 의미
1) 구성요소
- 콘텐츠 제공자 : 콘텐츠를 제공하는 저작권자
- 콘텐츠 분배자 : 암호화된 콘텐츠를 유통하는곳/사람
- 패키저 : 콘텐츠를 메타데이터와 함께 배포가능한 형태로 묶어 암호화하는 프로그램
- 클리어링 하우스 : 키 관리 및 라이센스 발급 관리
- DRM 컨트롤러 : 배포된 콘텐츠의 이용권한을 통제하는 프로그램
단위 테스트 도구
- CppUnit : C++ 프로그래밍 언어용 단위 테스트 도구
- JUnit : 자바 프로그래밍 언어용 단위 테스트 도구
- HttpUnit : 웹 브라우저 없이 웹 사이트 테스트를 수행하는 데 사용되는 오픈 소스 소프트웨어 테스트 프레임워크
정형기술검토(FTR) 지침
- 오류 검출에 초점을 두고 해결책을 나중으로 미룸(제품 검토의 집중성)
- 검토를 위한 자료를 사전에 배포하여 검토하도록 한다(사전 준비성)
- 의견을 제한하되 충분히 받아들인다(의제의 제한성)
- 안건을 세우면 고수한다(안건 고수성)
- 논쟁과 반박을 제한한다(논쟁 반박의 제한성)
- 문제 영역을 공개한다(문제 공개성)
- 참가자의 수를 제한한다(참가 인원의 제한성)
- 발견된 오류는 문서화한다(문서성)
소프트웨어 재공학
- Analysis: 기존 소프트웨어를 분석하여 재공학 대상을 선정하는 것
- Migration: 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
- Restructuring: 기존 소프트웨어를 향상시키기 위하여 코드를 재구성하는 작업(기능과 외적 동작은 변하지 않음)
- Reverse Engineering: 기존 소프트웨어를 분석하여 소스코드를 얻어내는 작업(소스코드로 소프트웨어를 만드는 작업의 역작업)
자료구조
-비선형 구조 : 트리, 그래프
-선형 구조 : 스택, 큐, 데크, 리스트
-파일 구조 : 순차파일, 색인파일, 직접파일
NS-Chart(Nassi-Schneiderman Chart)
- 3가지 기본구조만으로 논리를 표현(표준화 가능)
- Flow Chart의 최대 단점인 화살표가 표시되지 않음
- 기본구조의 입구와 출구는 각 하나씩
- 전체적인 알고리즘을 일목요연하게 볼 수 있음
정렬 방법
- Selection Sort - 배열 내에서 최소값을 찾은 다음 정렬 되지 않은 맨 앞 값과 교환을 하며 정렬을 해 나아가는 방법 (정렬 시간 복잡도 모두 O(n^2))
- Bubble Sort - 왼쪽에서 부터 두 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터 보다 크면 자리를 바꾸는 정렬 알고리즘(정렬 시간 복잡도 모두 O(n^2))
- Insert Sort - 한 개의 값을 추출한 다음 앞쪽으로 비교해서 본인의 자리를 알맞게 찾아가게끔 하는 정렬 방법. 정렬 시간 복잡도는 최상일 경우 O(n), 평균과 최악일 경우 O(n^2)
- 병합 정렬 - 또한 분할 정복에 기반한 알고리즘으로 리스트를 1 이하인 상태까지 절반으로 자른 다음 재귀적으로 합병 정렬을 이용해서 전체적인 리스트를 합병하는 정렬 과정. O(n log n)
- 퀵 정렬: 분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법. 최상과 평균 경우 O(nlog2n), 최악의 경우 O(n^2)
ISO/IEC
- 2500n : 개요 및 품질관리
- 2501n : 품질모델
- 2502n : 품질측정
- 2503n : 품질요구
- 2504n : 품질평가
-
2505n : 확장분야
- ISO/IEC 25000
- SW 품질 평가 통합 모델
- SQuaRE로도 불림
- ISO/IEC 9126, ISO/IEC 12119, ISO/IEC 14598의 3개 표준을 통합한 모델
- SW 품질 평가 통합 모델
코드 인스펙션
- 결함 뿐만 아니라 모든 것이 표준대로 되어 있는 지 확인하기 위한 검토
- 표준이나 명세서에 서술항 내용과 비교하여 편차와 에러를 식별하기 위해 산출물을 근거로 수행하는 검사
- 정적 테스트에 가까움
소프트웨어 프로젝트 관리
- 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
- 프로젝트 관리는 소프트웨어 개발 계획을 세우고 분석, 설계, 구현 등의 작업을 통제하는 것으로 소프트웨어 생명 주기의 전 과정에 걸쳐 진행됨
- 소프트웨어 프로젝트를 성공적으로 수행하기 위해서는 수행할 작업의 범위, 필요한 자원, 수행 업무, 이정표, 비용 추진 일정들을 알아야 함
- 소요인력은 최소화 하는 것이 좋음
※ 프로젝트 관리는 제한된 시간과 비용으로 좋은 품질의 시스템을 개발하여 고객에게 제공함
트리의 수식 표기법
- 전위 표기법(prefix)-연산자가 앞에
- 중위 표기법(infix)-연산자가 안에
- 후위 표기법(postfix)-연산자가 뒤에
ex) -/*A+BCDE
- 후위식
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
- 연산자를 각 괄호 뒤로 뺀다 : (((A(BC)+)*D)/E)-
- 괄호를 제거한다 : ABC+*D/E-
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
- 전위식
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
- 연산자를 각 괄호 앞으로 뺀다
- 괄호를 제거한다 : -/*A+BCDE
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
- 중위식
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
- 연산자를 안으로 넣는다 : (((A*(B+C))/D)-E)
- 괄호를 제거한다 : A*B+C/D-E
- 연산자에 따라 묶는다 : (-(/(*A(+BC))D)E)
소스코드 품질분석
- 정적 분석 도구
- pmd, cppcheck, SonarQube, ccm 등
- pmd, cppcheck, SonarQube, ccm 등
- 동적 분석 도구
- valance, Avalanche, Valgrind
- valance, Avalanche, Valgrind
네트워크 보안
- IPSec : IP계층에서 무결성과 인증을 보장하는 인증헤더와 암호화를 이용해 보안서비스 제공
- SSH : 상호 인증 및 전송 시 데이터 무결성을 보장
- S-HTTP : 웹상에서 클라이언트와 서버간의 메세지를 암호화 하여 전송
인터페이스 구현 검증 도구
- xUnit : Java, C++ 등 다양한 언어 지원하는 단위 테스트 프레임워크
- STAF : 서비스 호출 및 컴포넌트 재사용 등 환경 지원하는 테스트 프레임워크
- FitNesse : 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
- NTAF : FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 네이버의 테스트 자동화 프레임워크
- Selerium : 다양한 브라우저 및 개발 언어 지원하는 웹 애플리케이션 테스트 프레임워크
- Watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
그래프의 최대간선수
- 정점이 n개인 무방향 그래프에서 최대의 간선수는 n(n-1)/2개
- 정점이 n개인 그래프에서 최대 간선수는 n(n-1)개
해싱함수
- 폴딩법
- 해싱함수 중 레코드 키를 여러부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
- 해싱함수 중 레코드 키를 여러부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
- 제산법
- 레코드키를 해시표로 나눈 나머지를 홈 주소로 사용
- 레코드키를 해시표로 나눈 나머지를 홈 주소로 사용
- 기수변환법
- 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수 절단, 다시 주소 범위에 맞게 조정
숫자분석법 - 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 선택
- 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수 절단, 다시 주소 범위에 맞게 조정
인스펙션 과정
- 사전교육
- 준비
- 인스펙션 회의
- 수정
- 후속조치
테스트 용어
- 테스트 케이스 : 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서
- 테스트 시나리오 : 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스들을 묶은 집합
- 테스트 오라클 : 문제 참조