리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조
리스트의 한쪽에서 삽입 작업이 이루어지고 다른 한쪽에서 삭제 작업이 이루어지는 자료 구조
삽입 정렬은 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분의 원소를 정렬된 부분에 삽입하는 방식으로 정렬하는 알고리즘이다
선택 정렬은 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분에서 가장 작은 원소를 선택하여 정렬된 부분의 마지막 원소와 교환하는 방식으로 정렬하는 알고리즘이다
버블 정렬은 인접한 두 원소를 비교하여 정렬하는 방식으로 정렬하는 알고리즘이다
퀵 정렬은 분할 정복 방법을 사용하여 배열을 정렬하는 알고리즘이다
O(n log n)
이다
최악의 경우 수행 시간 복잡도는 O(n^2)
이다
힙 정렬은 힙 자료구조를 이용하여 정렬하는 알고리즘이다
2-Way 합병 정렬은 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬 방식이다
O(n log n)
이다이분 검색은 정렬된 배열에서 중간 값을 기준으로 검색하는 방식으로 검색하는 알고리즘이다
해싱 함수는 키를 해시 테이블의 주소로 변환하는 함수이다
소스 코드를 소프트웨어로 변환하는 과정에 필요한 전처리, 컴파일 등의 작업 수행
도구 | 설명 |
---|---|
Ant(Another Neat Tool) | 자바 프로젝트의 공식적 빌드 자동화 도구(XML 기반) 표준이 없어 개발자가 모든 것을 정의함, 스크립트 재사용 어려움 |
Maven | 예외 사항만을 기록하는 표준이 있음(Ant의 대안) 컴파일과 빌드 동시 수행 가능, 의존성 설정 후 라이브러리 관리 |
Gradle | Groovy 스크립트를 사용하는 빌드 도구 의존성을 활용하며 빌드 캐시 기능 지원 -> 속도 향상 실행할 명령을 모아 태스크로 만든 후 태스크 단위 실행 |
Jenkins | JAVA 기반 오픈소스 빌드 자동화 도구 서블릿 컨테이너에서 실행 형상 도구 관리와 연동 가능(Git, SVN) |
디지털 저작물의 저작권을 보호하고 관리하는 기술
소프트웨어 개발 과정에서 발생하는 변경 사항을 체계적으로 관리하는 활동 -> 개발 전체 단계 적용
단계 | 활동 |
---|---|
형상 식별 | 관리 대상에 이름/번호 부여 후 계층 구조로 구분 → 수정/추적 용이 |
형상 제어 | 식별된 형상 항목에 대한 변경 요구 검토(기준선 반영) |
형상 감사 | 기준선(Base Line)의 무결성 평가를 위해 확인/검증/검열 과정 진행 |
형상 기록 | 형상 식별/통제/감사 작업 결과를 기록/관리하고 보고서 작성 |
용어 | 설명 |
---|---|
저장소(Repository) | 최신 버전 및 변경 내역 관련 정보 저장소 |
가져오기(Import) | 버전 관리 미진행 상태의 초기 저장소에 처음으로 파일을 복사 |
체크아웃(Checkout) | 프로그램 수정을 위해 저장소에서 파일을 받아옴 |
체크인(Checkin) | 체크아웃한 파일 수정 후 저장소에 새로운 버전으로 파일 갱신 |
커밋(Commit) | 체크인 시 이전 갱신된 내용이 있는 경우 conflict를 알린 후 Diff 도구를 이용해 수정 후 갱신 완료 |
동기화(Update) | 저장소의 변경 사항을 로컬에 반영하는 작업 |
도구 | 설명 |
---|---|
공유폴더 | 파일 공유를 통한 로컬에서의 버전 관리 ex) SCCS, RCS (Revision Control System), PVCS, QVCS |
클라이언트/서버 | 중앙 서버에 저장소를 두고 클라이언트가 서버에 접속해 파일 관리 ex) CVS, SVN (Subversion), Perforce, ClearCase |
분산 저장소 | 로컬 저장소를 갖고 중앙 서버와 연결해 파일 관리 ex) Git , Mercurial, Bazaar |
SVN(Subversion) | CVS의 개선 버전 커밋 할 때마다 리비전 1씩 증가 CVS의 한계인 파일이나 디렉터리의 이름 변경, 이동 가능 |
Git | 원격 저장소: 여러 사람들이 협업을 위해 버전을 공동 관리하는 장소 로컬 저장소: 개발자들이 본인의 실제 개발을 진행하는 장소 브랜치 이용 시 기존 버전 관리 틀에 영향없이 다양한 기능 테스트 가능, 파일의 변화를 SnapShot으로 저장 |
기업 내 각종 앱/플랫폼 간 정보 전달/연계/통합 등 상호작용 연동하는 모듈 연계 방식
방식 | 설명 |
---|---|
포인트-투-포인트(Point-to-Point) | 데이터 간 포인트-포인트 개별 연결 → 변경 및 재사용 어려움 |
허브&스포크(Hub&Spoke) | 중앙 집중식 허브를 통해 각 시스템 연결 → 확장/유지보수에 유리하나, 중앙 허브 장애 발생 시 전체 시스템에 영향 |
메시지 버스(Message Bus) | 앱 사이에 미들웨어를 두고 처리/확장성 및 대용량 처리 가능 |
Hybrid | 허브-스포크, 메시지 버스 방식 혼합 → 데이터 병목 현상 최소 |
분류 | 설명 |
---|---|
정적 테스트(Static Test) | 소스 코드 분석을 통해 테스트 ex) 워크 스루, 인스펙션, 코드 검사 |
동적 테스트(Dynamic Test) | 프로그램 실행을 통해 테스트 ex) 화이트/블랙박스 테스트 |
분류 | 설명 |
---|---|
명세 기반 | 사용자의 요구사항 명세서를 기반으로 테스트 ex)동등 분할/경계값 분석(블랙박스) |
구조 기반 | 소프트웨어 구조를 기반으로 테스트 ex)구문 기반/결정 기반/조건 기반(화이트박스) |
경험 기반 | 테스터의 경험을 기반으로 테스트 ex)에러 추정, 체크리스트, 탐색적 테스팅 |
분류 | 설명 |
---|---|
검증(Validation) | 개발자 의 시각에서 제품의 생산성 과정 테스트ex)단위/통합/시스템 테스트 |
확인(Verification) | 사용자 의 시각에서 생산된 제품의 결과 테스트ex)인수 테스트 (알파/베타) |
분류 | 설명 |
---|---|
회복(Recovery) | 시스템에 인위적 결함 부여 후 정상으로 회복되는 과정 확인 |
안전(Security) | 외부 불법 침입으로부터 시스템을 보호할 수 있는지 확인 |
강도(Stress) | 과부하 시 SW 정상 구동 여부 확인 |
성능(Performance) | 실시간 성능 및 전체적인 효율성 진단(응답시간, 업무 처리량) |
구조(Structural) | SW 내부 논리적 경로 및 소스 코드 복잡도 평가 |
회귀(Regression) | SW 내 변경 또는 수정된 코드에 새로운 결함이 없음을 확인 |
병행(Concurrent) | 변경 및 기존 SW에 동일한 데이터 입력 후 결과 비교 |
테스트 케이스를 적용하는 구체적인 절차를 명세한 문서
테스트 결과가 올바른지 판단하기 위한 기준
용어 | 설명 |
---|---|
테스트 드라이버(Test Driver) | 시험 대상의 하위 모듈 호출 / 모듈 테스트 수행 후의 결과 도출 → 상향식 통합 테스트에서 사용 |
테스트 스텁(Test Stub) | 제어 모듈이 호출하는 하위 모듈의 역할 단순 수행 → 하향식 테스트에서 사용 |
테스트 슈트(Test Suite) | 시스템에 사용되는 테스트 케이스의 집합(컴포넌트/모듈) |
테스트 케이스 | 사용자의 요구사항 준수 여부 확인 목적 테스트 항목 명세서 → 입력값, 실행조건, 기대결과 |
테스트 스크립트 | 자동화된 테스트 실행 절차에 대한 명세서 |
목 오브젝트(Mock Object) | 사용자의 행위 조건부 입력 시 계획된 행위를 수행하는 객체 |
도구 | 설명 |
---|---|
xUnit | Java, C++, Net등 다양한 언어를 지원하는 단위 테스트 프레임워크 |
STAF | 서비스 호출 , 컴포넌트 재사용 등 다양한 환경을 지원 |
Fitness | 웹 기반 테스트케이스 설계/실행/결과 확인 지원 |
NTAF | STAF의 재사용성 및 확장성 + Fitness의 협업 기능 통합(현재는 폐기) |
Selenium | 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 |
watir | Ruby 기반 애플리케이션 테스트 프레임워크 |
겉으로 보이는 동작 변화 없이 내부 구조 변경 (SW 쉽게 이해, 적은 비용으로 수정 가능하게)