0. 요구사항 관련 순서
1. 애플리케이션 모너티링 도구
- 변경 관리 : ChangeMiner
- 성능 관리 : Jeniffer, Nmon
- 정적 분석 : PMD, CppCheck, ChechStyle, SonarQube
- 동적 분석 : Avalanche, Valgrind
2. 국제 제품 품질 기준
- ISO/IEC 9126 : 품질 요소의 특성, 품질 측정
- ISO/IEC 14596 : 제품 평가 프로세스 및 평가 모듈 제공(개발 과정)
- ISO/IEC 12119 : 패키지 제품에 대한 품질 요구사항, 테스트 국제 표준
- ISO/IEC 25000 : SQuaRE, 9126+14596+12119, 개발 공정 각 단계에서 산출되는 제품이 요구사항을 만족하는지 검증하기 위한 품질 측정 및 평가
3. ISO/IEC 9126 품질 요소 특성
※ 모든 품질요소 특성에는 준수성이 부가 특성에 들어간다.
- 기능성 : 특정 조건에서 명시/내재 요구사항 만족
→ 적합성, 정확성, 상호운용성, 보안성, 준수성
- 신뢰성 : 시간이 지나도 동일 기능을 오류없이 수행, 성능 수준 유지
→ 성숙성, 결함허용성, 회복성, 준수성
- 사용성 : 모든 사용자에 의해 이해, 학습, 선호될 수 있는 소프트웨어의 능력
→ 이해성, 학습성, 운용성, 친밀성, 준수성
- 효율성 : 자원을 효율적으로 사용, 자원의 양에 따라 요구된 기능 수행
→ 시간 반응성, 자원 효율성, 준수성
- 유지보수성 : 환경과 요구사항에 대한 소프트웨어 수정/개선 등 및 변경되는 능력
→ 변경성, 분석성, 안정성, 시험성, 준수성
- 이식성 : 이기종간 하드웨어에서 운용되는 능력
→ 적응성, 설치성, 공존성, 대체성, 준수성
4. ISO/IEC 14598 품질 특성
- 반복성 : 동일 평가자가 동일 사양으로 평가시 동일한 결과
- 재현성 : 비슷한 사양에서 평가시 유사한 결과
- 공정성 : 결과가 특정 결과에 편향되지 않음
- 객관성 : 객관적 자료에 의해서만 평가
5. 국제 프로세스 품질 표준
- ISO/IEC 9001 : 설계/개발/생산/설치 등 서비스 과정(공급자/구매자간 관리 책임)
- ISO/IEC 12207 : 소프트웨어 획득/공급/개발/운영/유지보수를 체계적으로 관리하기 위한 생명주기 단계별 필요 프로세스(기본/지원/조직)
- ISO/IEC 15504 : 소프트웨어 프로세스 평가 및 개선하여 품질, 생산성 향상
→ SPICE, 불완전/수행/관리/확립/예측/최적화
- CMMi : CMM모델 통합, SPICE 준수하는 소프트웨어 개발 능력/성숙도 평가 및 프로세스 개선, 지속적인 품질 개선
→ 단계별 표현 / 연속적 표현
6. ISO/IEC 25000
- SQuARE, 소프트웨어 각 개발 공정에서 산출물이 적절한 품질인지 확인
- 2500n : 품질 관리
- 2501n : 품질 모델
- 2502n : 품질 측정/품질측정 메트릭
- 2503n : 품질 요구
- 2504n : 품질 평가
7. 소스코드 품질 분석 도구
- 정적
→ pmd : java, 타 언어소스에 대한 디버그, 데드 코드 분석 도구
→ cppcheck : C++/C 코드의 메모리 누수, 오버 플로우 등 확인
→ sonarQube : java 코드 코딩 표준 검사 도구
→ ccm : 다양한 언어의 코드 복잡도, 리눅스, 맥 환경 CLI
→ cobertuna : icoverage 기반의 테스트 커버리지
- 동적
→ Avalanche : Valgrind 기반 프레임 워크, 소프트웨어 에러 및 취약점
→ Valgrind : 자동화 메모리 누수 및 스레드 결함 분석 도구
8. 맥케이브 회전 복잡도
소프트웨어 제어 흐름 표현, 소스 코드 복잡도를 정량적으로 나타내는 지표
- V(G) = 간선 - 노드 + 2
- V(G) = 분기수 + 1
9. 인터페이스 구현 검증 도구
- xUnit : junit, cunit, nunit(Net), hyypunit(Web) 등 다양한 언어 지원, 단위 테스트 프레임 워크(구성 원소 및 단위)
- STAF : 서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원 테스트 프레임 워크(데몬 사용)
- FITNesse : 웹기반 테스트 프레임 워크, 테스트 케이스 테이블 작성시 빠르게 편하게 원하는 값 테스트
- NTAF : STAF + FITNesse, 분산환경 지원 + 효율적인 테스트 케이스
- Selenium : Python..다양한 브라우저 지원 및 개발언어를 지원하는 웹 애플리케이션 테스트 프레임 워크(언어학습X, 기능 테스트)
- watir : Ruby 기반 웹 애플리케이션 테스트 프레임워크
10. 데이터베이스 병행제어 미보장시 단계별 문제점
- Lost Update(갱신손실) : 먼저 실행된 트랜잭션의 결과를 그 이후의 트랜잭션의 결과가 덮어쓸때
- Dirty Read(현황파악오류) : 트랜잭션 중간 수행 결과를 다른 트랜잭션이 참조할때
- Inconsistency(모순성) : 두 트랜잭션이 동시에 실행, DB의 일관성이 결여(결과가 서로 다름)
- Cascading Rollback(연쇄복귀) : 복수의 트랜잭션이 데이터 공유시, 트랜잭션이 취소되면 다른 부분에서 트랜잭션이 취소되지 않을때
11. 병행제어 기법
-
로킹(Locking) : 하나의 트랜잭션 실행시, 다른 트랜잭션이 접근하지 못하도록(상호배제, Mutual Exclusive)
→ DB, Record, File 등, 로킹 단위..작아지면 공유도 증가 및 오버헤드 증가, 병행성 수준 커짐
-
낙관적 검증(Optimistic Validation) : 일단 트랜잭션 수행, 그 이후에 검증 수행하여 DB 반영
-
타임 스탬프 순서(Time stampe Ordering) : 트랜잭션 수행시 타임 스탬프 부여, 부여된 시간에 따라 트랜잭션 수행
-
다중 버전 동시성 제어(MVCC) : 데이터의 타임 스탬프를 비교하여 직렬 가능성 보장되는 적절한 버전 선택 및 접근
12. DB 고립성 수준
- Read Uncommitable : 한 트랜잭션에서 갱신중인 데이터를 읽는 것을 허용
- Read Commitable : 한 트랜잭션에서 갱신 완료한 데이터를 읽는 것을 허용
- Repeatable Read : 한 트랜잭션 완료시까지 데이터 갱신,삭제 등을 제한
- Serializable Read : 선행 트랜잭션이 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한(고립성 최고수준)
13. 인덱스 종류
- 순서(Ordered) 인덱스 : 데이터 정렬된 순서로 생성(B-Tree 알고리즘)
- 해시(Hash) 인덱스 : 해시 함수에 의해 데이터에 키값으로 접근, 튜플 양에 무관(접근 비용 균등)
- 비트맵(Bitmap) 인덱스 : 각 컬럼에 적은 개수의 값이 저장된 경우(수정/변경이 적을 경우)
- 함수기반(Functional) 인덱스 : 수식 및 함수를 이용한 인덱스
- 단일(Single) 인덱스 : 하나의 컬럼
- 결합(Concatenated) 인덱스 : 다중 컬럼
- 클러스터드(Clustered) 인덱스 : 기본 키 기준으로 묶어서 저장, 물리적 순서에 따라 인덱스 생성, 특정 범위 검색시
14. 순수 관계 연산자
- 셀렉트(Select, 시그마 기호) : WHERE, 조건
- 프로젝트(Project, 파이 기호) : SELECT, 선별
- 조인(Join, 리본 기호) : 공통 속성을 이용해 연결
- 디비전(Division, %) : 특정 릴레이션과 관련한, 겹치는 부분 있으면 그대로 select하되, 특정 릴레이션의 컬럼은 제외하고 출력
15. 데이터 모델
- 요구조건 분석
- 개념적 설계 : 사용자 요구에 대한 트랜잭션 모델링, 개체관계 다이어그램 작성, 개념적 표현(DB 관계없음)
- 논리적 설계 : DB에 따라 논리적 스키마 설계, 트랜잭션 인터페이스 설계, 모델링 표기법으로 형상화(정규화/스키마 평가 및 정제/논리DB구조에 맞게 매핑/테이블 설계/정규화)
- 물리적 설계 : 물리적인 스키마 설계, 테이블 저장 경로, 접근 경로 설계, 레코드 집중 분석 및 설계, 저장 레코드 양식 설계, 반 정규화(효율적인 트랜잭션 처리)