
소스 코드 품질 분석 도구
정적
- pmd
- cppcheck
- SonarQube
- checkstyle
- ccm
- cobertuna
동적
- Avalanche
- Valgrind
정렬 알고리즘
- 삽입 정렬(Insertion Sort) : 평균 시간 복잡도, 최악 시간 복잡도 둘다 O(n^2)
- 선택 정렬(Selection Sort) : 평균 시간 복잡도, 최악 시간 복잡도 둘다 O(n^2)
- 버블 정렬(Bubble Sort) : 평균 시간 복잡도, 최악 시간 복잡도 둘다 O(n^2)
- 퀵 정렬(Quick Sort) : 평균 시간 복잡도 O(nlog2n), 최악 시간 복잡도 O(n^2)
- 힙 정렬(Heap Sort) : 평균 시간 복잡도, 최악 시간 복잡도 둘 다 O(nlog2n)
- 2-Way 합병 정렬(Merge Sort) : 평균 시간 복잡도, 최악 시간 복잡도 둘 다 O(nlog2n)
통합 테스트(Integration Test)
- 상향식 통합 테스트(Bottom Up Integration Test) : 모듈들을 작은 단위부터 조합하여 상위 단계로 통합하며 전체 시스템의 작동을 테스트하는 방법
- 테스트 드라이버(Test Driver) : 테스트 대상의 하위 모듈을 호출하는 도구로, 매개변수를 전달하고 모듈 테스트 수행 후의 결과를 도출한다.
- 하향식 통합 테스트(Top Down Integration Test) : 모듈들을 큰 단위부터 조합하여 하위 단계로 통합하며 전체 시스템의 작동을 테스트하는 방법
- 테스트 스텁(Test Stub) : 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 시험용 모듈이다.
인터페이스 구현 검증 도구
- xUnit : 다양한 언어를 지원하는 단위 테스트 프레임워크
- STAF : 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
- FitNesse : 웹 기반 테스트 설계/실행/결과 확인 등을 지원하는 테스트 프레임워크
- NTAF : FitNesse와 STAF의 장점을 결합하여 개발된 테스트 자동화 프레임워크
- Selenium : 다양한 브라우저 지원 및 개발언어를 지원하는 웹 애플리케이션 테스트 프레임워크
- Watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
인터페이스 구현 기술
- JSON : 비동기 브라우저/서버 통신을 위해 "속성-값 쌍", "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
- REST : 웹과 같은 분산 하이퍼 미디어 환경에서 자원의 존재/상태 정보를 표준화된 HTTP 메소드로 주고받는 웹 아키텍처이다.
- AJAX : Javascript를 사용한 비동기 통신기술로 클라이언트와 서버 간의 XML 데이터를 주고받는 기술이다.
블랙 박스 테스트(Black Box Testing)
소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다.
부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용된다.
종류
- 동치 분할 검사(Equivalence Partitioning Testing)
- 경계값 분석(Boundary Value Analysis)
- 원인-효과 그래프 검사(Cause-Effect Graphing Testing)
- 오류 예측 검사(Error Guessing)
- 비교 검사(Comparison Testing)
화이트 박스 테스트(White Box Testing)
모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다.
종류
- 기초 경로 검사(Base Path Testing)
- 제어 구조 검사(Control Structure Testing)
- 조건 검사(Condition Testing)
- 루프 검사(Loop Testing)
- 데이터 흐름 검사(Data Flow Testing)
DRM
디지털 콘텐츠에 대한 권리정보를 지정하고 암호화 기술을 이용하여 허가된 사용자의 허가된 권한 범위 내에서 콘텐츠의 이용이 가능하도록 통제하는 기술이다.
구성 요소
- 콘텐츠 제공자(Contents Provider)
- 콘텐츠 소비자(Contents Customer)
- 콘텐츠 분배자(Contents Distributor)
- 클리어링 하우스(Clearing House)
- DRM 콘텐츠(DRM Contents)
- 패키저(Packager)
- DRM 컨트롤러(DRM Controller)
- 보안 컨테이너(Security Container)
정규화(Normalization)
관계형 데이터베이스에서 데이터의 중복을 최소화하여 설계하는 것을 말한다. 데이터베이스 정규화의 목표는 관계와 구조를 재구성하여 작고 짜임새 있는 관계를 형성하는 것이다.
- 제1 정규화 : 도메인의 원자성 확보, 도메인이 원자값만으로 구성된 정규형
- 제2 정규화 : 기본 키가 다수의 속성으로 이루어진 경우, 부분 함수 종속성을 제거, 기본 키가 아닌 모든 속성이 기본 키에 대해 완전 함수적 종속을 만족하는 정규형
- 제3 정규화 : 기본 키를 제외한 컬럼간의 종속성, 즉 이행 함수 종속성을 제거, 기본 키가 아닌 모든 속성이 기본 키에 대해 이행적 종속을 만족하지 않는 정규형
- BCNF : 모든 결정자가 후보키 집합에 속해있어야만 한다., 모든 결정자가 후보 키인 정규형
- 제4 정규화 : 다중 값 종속을 제거
- 제5 정규화 : 조인 종속을 제거
반정규화(Denormalization)
정규화와 반대되는 개념으로, 데이터베이스의 성능 향상을 위하여 중복을 허용하고 관계연산을 줄이는 과정이다.
- 테이블 통합(병합)
- 테이블 분할(수평 분할, 수직 분할)
- 중복 테이블 추가(집계 테이블, 진행 테이블, 특정 부분만을 포함하는 테이블)
- 중복 속성 추가
애플리케이션 테스트 관리
- 테스트 케이스(Test Case) : 특정 요구사항에 준수하는 지를 확인하기 위해 개발된 입력값, 실행 조건, 예상된 결과의 집합이다.
- 테스트 오라클(Test Oracle) : 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법이다.
- 테스트 레벨(Test Level) : 종류로 단위 테스트(Unit Test), 통합 테스트(Integration Test), 시스템 테스트(System Test), 인수 테스트(Acceptance Test)가 있다.
- 단위 테스트 기법 : 인터페이스 테스트, 자료 구조 테스트, 실행 경로 테스트, 오류 처리 테스트
- 통합 테스트 : 빅뱅 테스트, 상향식 테스트, 하향식 테스트
- 시스템 테스트 : 기능 요구사항 테스트, 비기능 요구사항 테스트
- 인수 테스트 : 알파 테스트(개발자와 사용자가 함께), 베타 테스트(개발자 없이 사용자만)
- 테스트 시나리오(Test Scenario) : 애플리케이션의 테스트되어야 할 기능 및 특징, 테스트가 필요한 상황을 작성한 문서이다.
테스트 수행 도구
- 자료 흐름도
- 기능 테스트
- 입력 도메인 분석
- 랜덤 테스트
순환 복잡도(McCabe's Cyclomatic Complexity)
V(G) = Edge - Node + 2
요구사항 검증 방법
- 동료 검토(Peer Review) : 2~3명이 진행하는 리뷰 형태로, 요구사항 명세서 작성자가 명세서 내용을 직접 설명하고 이해 관계자들이 설명을 들으면서 결함을 발견하는 것이다.
- 워크 스루(Walk Through) : 검토 자료를 회의전에 미리 배포하여 사전 검토한 후에 짧은 시간동안 회의를 진행하여 오류를 조기에 검출하는 데 목적을 둔 검증기법이다.
- 인스펙션(Inspection) : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견하는 형태이다.
- 계획 -> 사전 교육 -> 준비 -> 인스펙션 회의 -> 수정 -> 후속조치 or 다시 계획
파티션 설계
- 범위 분할(Range Partitioning) : 지정한 열의 값을 기준으로 분할
- 해시 분할(Hash Partitioning) : 해시 함수를 적용한 결과 값에 따라 분할
- 조합 분할(Composite Partitioning) : 범위 분할 후 해시 함수를 적용하여 다시 분할
- 목록 분할(List Partitioning) : 지정한 열 값에 대한 목록을 만들어 이를 기준으로 다시 분할
- 라운드로빈 분할(Round Robin Partitioning) : 레코드를 균일하게 분할
해싱함수
- 제산법 : 레코드키를 해시표로 나눈 나머지를 홈 주소로 사용
- 제곱법 : 레코드키를 제곱한 후 그 중간 부분의 값을 홈 주소로 사용
- 기수 변환법 : 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수를 절단하고 다시 주소 범위에 맞게 조정
- 계수 분석법(숫자 분석법) : 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 선택
- 폴딩법(중첩법) : 해싱함수 중 레코드키를 여러 부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
- 대수적 코딩법 : 키 값을 이루고 있는 각 자리의 비트 수를 한 다항식의 계수로 간주하고, 이 다항식을 해시표의 크기에 의해 정의된 다항식으로 나누어 얻은 나머지 다항식의 계수를 홈 주소로 사용