소프트웨어 개발
🚂소스 코드 인스펙션
- 소스 코드 인스펙션
프로그램의 소스나 코드에서 결함을 찾아내고 이를 확인하려는 작업을 소스 코드 인스펙션
재공학, 역공학, 재사용
- 재공학(Reengineering)
새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
- 역공학(Reverse Engineering)
기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어 내는 활동
- 소프트웨어 재사용(Software Reuse)
이미 개발되어 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것
🚃코드 검사
-
데이터 오류(DA; Data Error)
데이터 유형 정의, 변수 선언, 매개 변수 등에서 나타나는 오류이다
-
기능 오류(FN; Function Error)
서브루틴이나 블록이 잘못된 것(What)을 수행하는 오류이다
-
논리 오류(LO; Logic Error)
서브루틴이나 블록이 수행하는 방법(How)이 잘못되어 있는 오류이다
-
성능 오류(PF; Performance Error)
프로그램을 수행하며 요구되는 성능을 만족시키지 못하는 오류이다
-
문서 오류(DC; Documentation Error)
프로그램 구성 요소인 선언 부분, 잘못되거나 불필요한 주석 등을 의미한다
🚄이진 트리의 특성
트리(Tree)
정점(Node, 노드)과 선분(Branch, 가지)을 이용하여 사이클을 이루지 않도록 구성한 그래프(Graph)의 특수한 형태이다
- 노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지(Branch)를 합친 것
- 근 노드(Root Node) : 트리의 맨 위에 있는 노드
- 디그리(Degree, 차수) : 각 노드에서 뻗어 나온 가지의 수
- 단말 노드(Terminal Node) : 자식이 하나도 없는 노드, 즉디그리가 0인 노드
- 트리의 디그리(트리의 차수) : 노드들의 디그리 중에서 가장 많은 수
문제)
n0 단말 노드 수
n1 : 차수 1인 노드 수
n2 : 차수 2인 노드 수
n : 노드 총 수
e : 간선 총수
1) n0 = n2 + 2
2) e = n1 + 2n2
3) n = e + 1
4) n = n0 + n1 + n2
🚅화이트박스 테스트(White Box Test)
- 제품의 내부 요소들이 명세서에 따라 수행되고 충분히 실행되는가를 보장하기 위한 검사이다.
- 모듈 안의 작동을 직접 관찰한다.
- 프로그램 원시 코드의 논리적인 구조를 커버하도록 테스트 케이스를 설계한다.
- 화이트박스 테스트 기법에는 기초 경로 검사, 제어 구조 검사 등이 있습니다.
화이트박스 테스트의 특징
- 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다.
- 화이트박스 테스트는 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용된다.
- 모듈 안의 작동을 직접 관찰한다.
- 원시 코드의 모든 문장을 한 번 이상 실행함으로써 수행된다.
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어한다.
화이트박스 테스트의 종류
🔹 기초 경로 검사(Base Path Testing)
테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
🔹 제어 구조 검사(Control Structure Testing)
-조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트 하는 테스트 케이스 설계 기법
-루프 검사(Loop Testing) : 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
-데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 가장 일반적인 검토 방법으로 소프트웨어 기술자들에 의해 수행되는 소프트웨어 품질 보증 활동이다.
- 정형 기술 검토 유형에는 검토 회의(Walkthrough), 검열(Inspections) 등이 있으며 이는 모두 회의 형태로 수행된다.
✧⁺⸜(・ ᗜ ・ )⸝⁺✧ 정형 기술 검토의 지침 사항 ✧⁺⸜(・ ᗜ ・ )⸝⁺✧
-제품의 검토에만 집중하라
-의제를 제한하여 진행하라
-논쟁과 반박을 제한하라
-문제 영역을 명확히 표현하라
-해결책이나 개선책에 대해서는 논하지 말아라
-참가자의 수를 제한하고 사전 준비를 강요하라
-검토될 확률이 있는 각 제품에 대한 체크 리스트를 개발하라
🚇Reverse Engineering (역공학)
기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어 내는 활동이다.
- Analysis(분석) : 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고, 재공학할 대상을 선정하는 활동
- Restructuring(재구성) : 기존 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 활동으로, 소프트웨어의 기능과 외적인 동작은 바뀌지 않음
- Migration(이식) : 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 활동
🚈ISO/IEC 25010의 소프트웨어 품질 특성
-
기능 적합성 : 기능 완전성, 기능 정확성, 기능 적절성
-
성능 효율성 : 시간 효율성, 자원 효율성, 사양
-
호환성 : 공존성, 상호운영성
-
사용성(Usability) : 적절 인지정도, 학습성, 조작성, 사용자 오류 방지, UI 미학, 접근성
-
신뢰성 : 성숙성, 사용가능성, 결함 허용성, 복구성
-
보안성 : 기밀성, 무결성, 부인방지, 책임추적성, 인증성
-
유지 보수성 : 모듈성, 재사용성, 분석성, 변경성, 시험성
-
이식성(Portability) : 적응성, 설치성, 대체성

🚉 인터페이스 구현 검증 도구
🔹 xUnit
Java(Junit), C++(Cppunit), .Net(Nunit), Http(HttpUnit) 등 다양한 언어를 지원하는 단위 테스트 프레임 워크
🔹 STAF
서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
🔹 FitNesse
웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
🔹 NTAF
FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 NHN(Naver)의 테스트 자동화 프레임워크
🔹 Selenium
다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크
🔹 watir
Ruby를 사용하는 애플리케이션 테스트 프레임워크
🚊소스 코드 품질 분석 도구 (정적 분석 도구)
🔹 소스 코드 품질 분석
-
정적 분석 도구
pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등
-
동적 분석 도구
Avalanche, Valgrind 등
🚝데크(Deque) / 자료구조
-
삽입과 삭제가 리스트의 양쪽 끝에서 발생할 수 있는 형태이다.
-
입력이 한쪽에서만 발생하고 출력은 양쫄에서 일어날 수 있는 입력 제한과, 입력은 양쪽에서 일어나고 출력은 한 곳에서만 이루어지는 출력 제한이 있다.
-
스택(Stack) :리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조
-
큐(Queue) : 리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조
🚞알파검사 / 검증 검사 기법
-
알파검사 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법이며, 일반적으로 통제된 환경에서 사용자와 개발자가 함께 확인하면서 수행되는 검사
-
베타 테스트
-선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법으로, 필드 테스팅(Field Testing)이라고도 불린다.
-실업무를 가지고 사용자가 직접 테스트하는 것으로, 개발자에 의해 제어되지 않은 상태에서 테스트가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고한다.
🚋알고리즘 시간 복잡도 0(1)
빅오 표기법(Big-O Notation)의 시간 복잡도를 표기하는 방법의 하나로, 입력 데이터 수에 관계없이 문제 해결에 하나의 단계만을 거친다는 것을 의미합니다.
빅오 표기법(Big-O Notation)
알고리즘의 실행시간이 최악일 때를 표기하는 방법으로, 신뢰성이 떨어지는 오메가 표기법이나 평가하기 까다로운 세타 표기법에 비해 성능을 예측하기 용이하여 주로 사용되는 표기법이다.

🚌디지털 저작권 관리(DRM)
디지털 저작권 관리(DRM)의 기술 요소
- 암호화(Encryption) : 콘텐츠 및 라이선스를 암호화하고 전자 서명을 할 수 있는 기술
- 키 관리(Key Management) : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
- 암호화 파일 생성(Packager) : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
- 식별 기술(Identification) : 콘텐츠에 대한 식별 체계 표현 기술
- 저작권 표현(Right Expression) : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
- 크랙 방지(Tamper Resistance) : 크랙에 의한 콘텐츠 사용 방지 기술
- 인증(Authentication) : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술
🚍화이트 박스 테스트의 종류
🔹 기초 경로 검사
- 대표적인 화이트 박스 테스트 기법이다.
- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법으로, 테스트 측정 결과는 실행 결로의 기초를 정의하는 데 지침으로 사용된다.
🔹 제어 구조 검사
- 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트 하는 테스트 케이스 설계 기법
- 루프 검사(Loop Testing) : 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
🚎블랙박스 테스트의 종류
🔹 동치 분할 검사(Equivalence Partitioning Testing) : 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법으로 동등 분할 기법이라고도 함
🔹 경계값 분석(Boundary Value Analysis) : 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법
🔹 원인-효과 그래프 검사(Cause-Effect Graphing Testing) : 입력 데이터 간의 관계와 출력에 영향을 및치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
🔹 오류 예측 검사(Error Guessing) : 과거의 경험이나 확인자의 감각으로 테스트하는 기법
🔹 비교 검사(Comparison Testing) : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
🚐이진 검색(이분 검색, Binary Search)
- 전체 파일을 두 개의 서브파일로 분리해 가면서 Key 레코드를 검색하는 방식이다.
- 이분 검색은 반드시 순서화된 파일이어야 검색할 수 있다.
- 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색한다.
- 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어듦으로 탐색 효율이 좋고 탐색 시간이 적게 소요된다.
- 중간 레코드 번호 M=(F + L)/2 (단, F : 첫 번째 레코드 번호, L : 마지막 레코드 번호)
🚑IDE(Integrated Development Environment)도구의 각 기능에 대한 설명으로 틀린 것은?
- Coding(코딩) : 프로그래밍 언어를 가지고 컴퓨터 프로그램을 작성할 수 있는 환경을 제공
- Compile(컴파일) : 개발자가 작성한 고급언어로 된 프로그램을 컴퓨터가 이해할 수 있는 목적 프로그램으로 번역하여 컴퓨터에서 실행 가능한 형태로 변환하는 기능
- Debugging(디버깅) : 프로그램에서 발견되는 버그를 찾아 수정할 수 있는 기능
- Deployment(배포) : 소프트웨어를 최종 사용자에게 전달하기 위한 기능
🚒형상관리(SCM; Software Configuration Management)
- 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동이다.
- 소프트웨어 변경의 원인을 알아내고 제어하며, 적절히 변경되고 있는지 확인하여 해당 담당자에게 통보한다.
- 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동이며, 유지보수 단계에서도 수행된다.
- 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 한다.
- 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 한다.
- 관리 항목에는 소스 코드뿐만 아니라 프로젝트 계획, 분석서, 설계서, 프로그램, 테스트 케이스 등이 포함된다.
- 형상 관리를 통해 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있다.
- 대표적인 형상 관리 도구에는 Git, CVS, Subversion 등이 있다.
🚓형상 관리 기능
- 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree)구조로 구분하여 수정 및 추적이 용이하도록 하는 작업
- 버전 제어 : 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업
- 형상 통제(변경 관리) : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
- 형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
- 형상 기록(상태 보고) : 형상의 식별, 통제, 감사 작업의 결과를 기록·관리하고 보고서를 작성하는 작업
🚔합병 정렬
정렬된 N개의 데이터를 처리하는데 O(Nlog2N)의 시간이 소요되는 정렬 알고리즘
- 버블 정렬, 선택 정렬, 삽입 정렬의 시간 복잡도는 O(n^2)
🚕자료 구조의 분류
🔹 선형 구조(Linear Structure)
- 배열(Array)
- 선형리스트(Linear List)
- 스택(Stack)
- 큐(Queue)
- 데크(Deque)
🔹 비선형 구조(Non-Linear Structure)