통합 구현
단위 모듈구현
단위 모듈
•
하나의 기능을 하는 프로그램
•
화면, DB 접근, 인터페이스, 비즈니스 트랜잭션, 데이터 암호화
단위 기능 명세서
•
단순 추상화 문서 - 구조화
모듈화 원리
•
종류
◦
분할과 지배
◦
정보 은폐
◦
자료 추상화
▪
기능 추상화
▪
자료 추상화
▪
제어 추상화
◦
모듈의 독립성
▪
결합도가 낮고 높은 응집도
단위 테스트
구현 단계 작업 절차
•
코딩계획 → 코딩 → 컴파일 → 테스트
통합 개발 환경
IDE
•
개발 단계에 사용하는 통합 지원 도구
•
이클립스, VS Studio, XCode, 안드로이드 스튜디오
빌드 자동화 도구
•
전처리(컴파일 전 코드 내 주석 제거, 외부 라이브러리 탑재) 지원
•
프로세스 : 컴파일 → 패키징 → 단위 테스트 → 정적 분석 → 리포팅 → 배포 → 최종 빌드
•
종류 : Gradle, Jenkins, Makefile, Ant, Maven 등
◦
Ant : 아파치 제단, XML 기반 빌드 스크립트 사용
◦
Maven : 종속성 관리
◦
Gradle : JVM 기반
◦
Jenkins : Java 오픈소스
제품 소프트웨어 패키징
애플리케이션 패키징(배포)
개념
•
개발이 완료된 소프트웨어를 고객에 인도하기 위해 피키징하고, 설치 매뉴얼, 사용 매뉴얼 등 작성하는 일련의 배포용 설치 파일을 만드는 작업을 의미
패키징 프로세스
•
기능 식별
•
모듈화
•
빌드 진행
•
사용자 환경 분석
•
패키지 적용 시험
•
패키징 변경 개선
제품 소프트웨어의 패키징 도구
패키징 도구
•
소프트웨어 배포 목적
•
패키징 시에 지정 재산권 보호, 관리 기능 제공 도구
•
소프트웨어의 안전한 유통 및 배포 도와주는 솔루션
•
불법 복제로부터 지적 재산권 보호 - 사용 권한 제어 기술, 패키징 기술, 라이선스 관리, 권한 통제 기술 등 포함
패키징 도구 활용 시 고려사항
•
내부 콘텐츠에 대한 암호화 및 보안 고려
•
다양한 이기종 콘텐츠 및 단말기 간 DRM 연동 고려
•
사용자 편의성 위한 복잡성 및 비효율성 문제 고려
•
반드시 내부 콘텐츠에 대한 암호화 및 보안 고려
•
적합한 암호화 알고리즘 적용 - 범용성 지장 고려
패키징 도구 구성 요소
•
암호화
•
키 관리
•
암호화 파일 생성
•
식별 기술
•
저작권 표현
•
정책 관리
•
크랙 방지
•
인증
모니터링 도구와 협업 도구
애플리케이션 모니터링 도구
•
응용 소프트웨어 성능과 서비스 이용성 감시 관리 도구
애플리케이션 모니터링 도구의 기능
•
애플리케이션 변경 관리
◦
애플리케이션 간의 종속 관계를 모니터링
◦
ChangeMiner
•
애플리케이션 성능 관리
◦
애플리케이션 서버 유입되는 트랜잭션 수량, 처리 시간, 응답 시간 등 모니터링
◦
Jeniffer, Nmon
협업 도구
•
소프트웨어 개발 과정 이해관계자 간의 지속적 이견 조율 수행 도구
•
분류 : 문서 공유, 소스 공유, 아이디어 공유, 디자인 공유, 일정 관리, 프로젝트 관리, 마인드맵
제품 소프트웨어 저작권
제품 소프트웨어 저작권 보호
DRM(Digital Rights Management)
•
저작권 보호, 사용자만이 접근할 수 있도록 제한하는 기술
•
컴퓨터 소프트웨어는 무한 복제 가능
•
기술적 요구사항
◦
거래 투명성
◦
사용규칙 제공
◦
자유로운 상거래 제공
DRM 기술 요소
•
암호화 : 콘텐츠 및 라이선스 암호화, 전자서명 가능 기술
•
키 관리 : 콘텐츠를 암호화한 키에 대한 저장 및 배포 기술
•
암호화 파일 생성 : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
•
식별 기술 : 콘텐츠에 대한 식별체계 표현 기술
•
저작권 표현 : 라이런스의 내용 표현 기술
•
정책 관리 : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
•
크랙 방지 : 크랙에 의한 콘텐츠 사용 방지 기술
•
인증 : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술
•
인터페이스
◦
상이한 DRM 플랫폼 간의 상호 호환성
◦
인터페이스 및 인증 기술
•
이벤트 보고 : 콘텐츠의 사용이 적절하게 이루어지고 있는지 모니터링 기술로 이동 경로 추적 활용
•
사용 권한 : 콘텐츠의 사용에 대한 권한을 관리하는 기술 요소
DRM 유통과정과 구성
•
콘텐츠 제공자
•
콘텐츠 분배자
◦
묶는
•
패키저
•
보안 컨테이너
•
DRM Container
◦
배포된 콘텐츠 이용 권한 통제
•
Clearing House
◦
저작권료 정산 및 분배가 이뤄지는 곳
디지털 콘텐츠 사용권한(Permission) 유형
•
렌더 퍼미션(RP)
◦
사용자에게 콘텐츠가 표현되고 이용되는 권리 형태 정의
◦
문서
•
트랜스포트 퍼미션(TP)
◦
사용자들 간에 권리 교환이 이루어지는 권리 형태를 정의
◦
카피, 무브, 론
•
데리버티브 퍼미션(DP)
◦
콘텐츠의 추출 변형이 가능한 권한
◦
익스트랙드, 임베드, 에디트
제품 소프트웨어 메뉴얼 작성
소프트웨어 설치 메뉴얼
소프트웨어 설치 메뉴얼
•
제품 소프트웨어 소개, 설치 파일, 설치 절차 등이 포함
•
설치 과정에서 표시될 수 있는 예외 상황에 관련 내용을 별도로 구분하여 설명
•
사용자 기준으로 작성
•
목차, 개요, 기본사항 등이 기본적 포함
•
전 과정을 빠짐없이 순서대로 설명
소프트웨어 설치 메뉴얼 구성
•
목차 및 개요
•
문서 이력 정보
•
설치 매뉴얼 주석
•
설치 도구의 구성
•
설치 위치 지정
소프트웨어 설치 매뉴얼 기본 사항
•
제품 소프트웨어 개요, 설치 관련 파일, 설치 아이콘, 프로그램 삭제, 관련 추가 정보
소프트웨어 설치 환경 체크 항목
•
사용자 환경, 설치 시 실행 중인 다른 프로그램 종료 확인, 업그레이드 버전 존재 여부 확ㅇ인, 백업 폴더 확인
소프트웨어 설치 매뉴얼 작성 프로세스
1.
기능 식별
2.
UI 분류
3.
설치 파일 / 백업 파일 확인
4.
Uninstall 절차
5.
이상 Case 확인
6.
최종 메뉴얼 적용
소프트웨어 사용자 매뉴얼
사용자 매뉴얼
•
사용자 화면 기능 매뉴얼
구성
•
사용자 화면 및 UI
•
주요 기능 분류
•
응용 프로그램 설정
•
장치 연동
•
Network 환경
•
Profile 설명
•
고객 지원 방법
•
준수 정보 및 제한 보증
사용자 매뉴얼 작성 프로세스
1.
작성 지침 정의
2.
구성 요소 정의
3.
구성 요소별 내용 작성
4.
사용자 매뉴얼 검토
소프트웨어 국제 표준 품질 특성
•
ISO/IEC 9126
•
ISO/IEC 12119
◦
SO/IEC 9126 품질 모델을 따르며 일반 제품 품질 요구사항 및 테스트를 위한 국제 표준
◦
제품 설명서, 사용자 문서 및 프로그램으로 구분하여 각각 품질 요구사항을 규정
•
ISO/IEC 15504
•
ISO 9001
소프트웨어 품질 목표(Software Quality and Goals)
•
운영 특성
◦
정확성(Correctness)
◦
신뢰성(Reliability
◦
사용 용이성(Usability)
◦
효율성(Efficiency)
◦
무결성(Integrity)
•
변경 수용 특성
◦
이식성(Portability)
◦
상효운용성(Interoperability)
◦
재사용성(Reusability)
◦
유지보수성(Maintainability)
◦
유연성(Flexibility)
◦
시험 역량(Testability)
소프트웨어 품질 측정 시 관점별 분류
•
사용자 관점
•
개발자 관점
•
프로젝트 관리자 관점
릴리즈 노트(Release note)
•
배포할 때 작성하는 노트
형상 관리
형상 관리 도구
형상 관리
•
개발 과정 진행 정도 확인
•
변경 사항을 관리
•
포괄적인 학술 분야의 형태로 넓히는 근간 의미
형상 관리 항목(Configuration Item)
•
작업 산출물들의 집합체 의미
•
대표적 소프트웨어 형상 항목
◦
프로젝트 요구 분석서 / 운영 및 설치 지침서
◦
요구사항 명세서 / 설계/인터페이스 명세서
◦
테스트 설계서 / 형상 관리 / V&V 계획서 같은 계획서 / 코드 모듈
형상 관리 종류
•
버전 관리
•
변경 관리
•
리비전 관리
•
빌드 관리
•
이슈 관리
형상 관리 도구
•
모든 형상 관리에 쓰이는 도구
형상 관리 절차
1.
형상 식별
2.
형상 통제
•
형상통제위원회 운영을 통해 이루어짐
•
기준선에 대한 관리 및 형상 통제 수행
3.
형상 보고 및 감사
•
감사 시 고려사항
◦
명시된 변경이 정확하게 수정되었는가?
◦
기술 검토를 수행하였는가?
◦
개발 프로세스 준수를 하였는가?
◦
변경 발생 시, 형상 관리 정차를 준수하였는가?
◦
변경에 대한 정보를 기록하였는가?
4.
형상 기록/보고
형상 관리, 버전 관리, 변경 관리
•
형상 관리 ≥ 버전 관리 ≥ 변경 관리
버전 관리 도구
도구 구분
•
공유 폴더 방식
•
클라이언트 서버 방식
•
분산 저장소 방식
◦
원격과 로컬로 나뉘어짐
◦
Git : 리눅스가 개발
주요 버전 관리 도구
•
CVS : 오픈소스, 동시 버전 시스템
•
RCS : 소스파일 수정을 한사람으로 제한
•
Sub-version : CVS에서 개선
◦
respository(저장소)
◦
trunk
◦
branch
◦
tag
•
Git : 지역/원격 저장소 존재
Git 주요 명령어
•
init : 로컬 git 생성
•
add : 저장소에 파일 추가
•
commit : 지역 저장소 저장
•
branch : 새로운 파생 저장소 브랜치 생성
•
checkout : 선택한 브랜치로 이동
•
merge : 현재와 지정 브랜치 병합
•
fetch : git서버에서 코드 받아오기
•
pull : git서버에서 최신 코드 받아와 병합
•
remote : 원격 저장소 추가
•
clone : 원격 저장소에 있는 프로젝트 복사하여 내려받기
Subversion(SVN) 주요 명령어
•
import : 소스파일 저장
•
check-in : 체크아웃으로 가져온 파일 수정 후 저장소에 새로운 버전으로 갱신
•
check-out : 타 개발자가 수정 작업을 위해 저장소에 저장된 파일을 자신의 작업 공간으로 인출
•
commit : 체크인 시 이전 갱신 사항이 있는 경우 알림 표시 - 수정 - 예치(Commit) 과정 수행
•
diff : 수정 기록을 봐 변경점을 보는 것
•
fork : 통째로 복사하는 것
애플리케이션 테스트 관리
테스트 케이스
테스트와 디버깅
•
테스트는 오류를 찾는 작업
•
디버깅은 오류를 수정하는 작업
소프트웨어 테스트
•
품질 향상 : 반복 테스트로 제품 신뢰도 향상
•
오류 발견 : 잠재 오류 발견 - 수정
•
오류 에방 : 오류를 사전에 발견
파레토의 법칙(Law of Pareto)
•
80 대 20 법칙
•
전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상
테스트 케이스
•
명세 기반 테스트의 설계 산출물
테스트 케이스 작성 절차
1.
테스트 계획 검토 및 자료 확보
2.
위험 평가 및 우선 순위 결정
3.
테스트 요구사항 정의
4.
테스트 구조 설계 및 테스트 방법 결정
5.
테스트 케이스 정의
6.
테스트 케이스 타당성 확인 및 유지보수
테스트 프로세스
1.
계획 및 제어
2.
분석 및 설계
3.
구현 및 실현
4.
평가
5.
완료
테스트 커버리지
•
테스트 수행 정도
테스트 오라클
•
사전에 정의된 참 값을 입력하여 비교하는 기법 및 활동을 의미
•
참 오라클 : 모든 입력값에 대해 적합한 결과 생성
•
일관성 검사 오라클 : 수행 전후
•
샘플링 오라클 : 임의로 선정한 몇개 입력값만
•
휴리스틱 오라클 : 추정 처리
V-모델과 테스트
테스트 레벨
•
왼쪽(정적)
오른쪽(동적)
시각에 따른 테스트
•
검증 테스트 : 명세서대로 개발자 시각에서 테스트
•
확인 테스트 : 사용자 시각에서 테스트
테스트 케이스 자동 생성
1.
자료 흐름도
2.
테스트 경로 관리
3.
입력 도메인 분석
4.
테스트 데이터 산출, 랜덤 테스트
5.
무작위 값 입력, 신뢰성 검사
테스트 레벨 종류
•
단위(유닛) 테스트 : 모듈 단위 테스팅 = 클래스 테스팅
•
통합 테스트
•
시스템 테스트
•
인수 테스트 : 고객이 테스트하는 것
알파 테스트, 베타 테스트
•
알파 테스트
◦
개발자 관점
◦
개발자 장소에서 사용자가 함께 검사
•
베타 테스트
◦
장소 외부에서 테스트
◦
실사용자 관점
애플리케이션 테스트
정적 테스트
•
명세서나 소스코드를 분석하는 것
•
결함 발견 가능
동적 테스트
•
블랙박스 테스팅
◦
내부를 볼수 없는 테스트
◦
입력과 출력만 비교
◦
Boundary Value Testing, CRUD Testing
•
화이트박스 테스팅
◦
내부를 보는 테스트
◦
절차를 확인
◦
Basis Path Testing, Branch Coverage Testing
테스트 기반 테스트
•
구조 기반 테스트
•
명세 기반 테스트
•
경험 기반 테스트
목적에 따른 테스트
•
성능
•
회복
•
구조
•
회귀
•
안전
•
강도
•
병행
테스트 시나리오와 테스트 기법
테스트 시나리오
테스트 시나리오
•
미리 테스트 과정을 결정해 놓는 것
테스트 환경 구축 유형
•
하드웨어 기반
•
소프트웨어 기반
•
가상 시스템 기반
테스트 기법
화이트박스 테스트
•
원시 코드 오픈 상태
•
테스팅 과정을 전부 볼 수 있음
화이트박스 테스트 종류
•
기초 경로 검사
◦
측정 결과는 실행 경로의 기초를 정의하는데 지침으로 사용
•
제어 구조 검사
◦
조건 검사
◦
루프 검사
◦
데이터 흐름 검사
화이트박스 테스트 검증 기준
•
문장 검증 기준 : 구문 한번씩
•
분기 검증 기준 : 조건문 한번씩
•
조건 검증 기준 : 조건문 조건 True 한번씩
•
분기/조건 기준 : 조건문 조건 True False 한번씩
블랙박스 테스트
•
기능이 완전 작동되는 것을 입증하는 테스트
블랙박스 테스트 종류
•
동치 분할(클래스) 검사
•
원인-효과 그래프 검사
•
오류 예측 검사 : 과거 경험 검사
•
비교 검사 : 동일한 검사 자료 제공하여 동일한 결과 출력 검사
•
경계값 분석 : 명세 기반 기법(대표적), 동치 분할 기법 보완, 경계에 해당하는 애들
테스트 커버리지
테스트 커버리지
테스트 커버리지
•
특정 범위
•
종류
◦
기능 기반 : 100%달성 목표
◦
Line Coverage : 코드 라인 단위
◦
Code Coverage : 코드 구문 조건 결정 테스트 측정
◦
Statement Coverage : 코드 구조
◦
Condition Coverage : 결정 포인트 내 모든 개별 조건식에 대해 수행
◦
Decision Coverage : 결정 포인트 내 모든 분기문에 대해 수행
◦
Modified Condition/Decision Coverage : 전체 조건식에 대해 영향을 주는 테스트
테스트 자동화
테스트 자동화 도구 유형
•
정적 분석 도구
◦
코딩 표준, 코딩 스타일. 코딩 복잡도, 남은 결함 발견 용도
•
테스트 실행 도구
◦
데이터 주도 접근 방식
◦
키워드 주도 접근 방식
•
성능 테스트 도구
◦
처리량, 응답 시간, 경과 시간, 자원 사용률에 대해 가상의 사용자 생성하고 테스트 수행하는 성능 목표 달성 확인
•
테스트 통제 도구
◦
테스트 계획 및 관리, 수행, 결함 관리 등 수행
•
테스트 하네스 도구
◦
이용/활용 : 테스트를 하기 위해 사용하는 도구
◦
소프트웨어 컴포넌트의 테스트를 가능하게 하거나 프로그램의 입력을 받아들이거나 빠진 컴포넌트의 기능을 대신하거나 실행 결과와 예상 결과를 비교하기 위해 동원된 소프트웨어 도구
테스트 하네스 도구 구성 요소
•
테스트 드라이버 : 하위 → 상위 - 상향식 테스트
•
테스트 스텁 : 상위 → 하위 - 하향식 테스트
•
테스트 슈트 : 일정한 순서
•
테스트 케이스 : 요구
•
테스트 스크립트 : 언어
•
목 오브젝트 : 미리 행위를 수행하는 객체
테스트 수행 단계별 테스트 자동화 도구
•
테스트 계획 단계 : 요구 사항 관리 도구
•
분석 및 설계 단계 : 테스트 케이스 생성 도구
•
수행 단계 : 테스트 자동화/정적 분석/동적 분석/성능 테스트/모니터링 도구
•
관리 단계 : 커버리지 분석/형상 관리/결함 추적 및 관리 도구
통합 테스트
통합 테스트
•
비점진적 통합 방식(빅뱅 통합)
◦
규모가 작을 떄 적합
•
점진적 통합 방식(상향식/하향식)
◦
단계적, 오류수정 쉬움
통합 방식
하향식 통합
•
Stub 사용
•
우선 통합법, 깊이 우선 통합법, 넓이 우선 통합법
•
클러스터들에 결합
상향식 통합
•
드라이버 사용
빅뱅 통합
•
실제 모듈로 사용
•
테스트 동시 수행
샌드위치 통합
•
상향식과 하향식의 장점만 사용
결함관리
결함관리
결함 분류
•
시스템 결함
•
기능 결함
•
GUI 결함
•
문서 결함
결함 관리 프로세스
결함 추적 순서
1.
결함 등록
2.
결함 검토
3.
결함 할당
4.
결함 수정
5.
결함 조치/보류
6.
결함 해제
결함 관리 도구
•
Mantis : 단위별 작업 내용 기록
•
Trac : 통합 관리 지원
•
Bugzilla : 심각도, 우선순위 지정
•
Redmine : 프로젝트 관리 및 결함 추적
•
JIRA
•
Test Collab
결함 관련 용어
•
에러 : 개발자의 실수
•
오류 : 잘못된 연산자 사용
•
실패 : 실행 결과의 차이
•
결함 : 버그, 에러, 오류, 실패 등을 통튼 용어
애플리케이션 성능 개선
애플리케이션 성능 개선
성능 측정 지표
•
처리량 : 주어진 시간 내의 프로세스 처리 수
•
응답 시간 : 입력 완료 시부터 응답 출력이 개시될 때까지의 시간
•
경과 시간 : 입력한 시점부터 그 결과의 출력이 완료할 때까지 걸리는 시간
•
자원 사용률 : 자원 사용량
유형별 성능 분석 도구
•
성능/부하/스트레스 점검 도구
•
모니터링 도구
애플리케이션 성능 저하 원인
DB 연결 및 쿼리 실행 시 발생되는 성능 저하 원인
•
DB Lock
◦
과도한 데이터 조회/업데이트/인덱스 생성 시 발생
◦
Lock 해제 시까지 대기하거나 처리 불가
•
불필요한 DB Fetch
◦
필요한 데이터보다 많은 대량의 데이터 요청이 들어올 경우 발생
◦
결과 세트에서 마지막 위치로 커서를 옮기는 작업이 빈번할 경우 응답 시간 저하 현상 발생
•
연결 누수
◦
DB 연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우 발생
•
부적절한 Connection Pool Size
◦
캐시랑 비슷한 개념 - 커넥션 풀 크기가 너무 작거나 크게 설정할 경우 발생
알고리즘
알고리즘
•
주어진 과제를 해결하기 위한 방법
알고리즘 설계 기법
•
분할 정복법(Divide & Conquer) : 제시된 문제를 분할이 불가할 떄까지 나누고, 각 과제를 풀면서 다시 병합해 문제의 답을 얻는 Top-Down 방식
1.
분할(Divide) : 분할이 가능한 부분까지 분할
2.
정복(Conquer) : 1에서 분할된 하위 과제들을 모두 해결
3.
결합(Combine) : 2에서 정복된 해답을 모두 취합(결합)
ex) 퀵 정렬, 병합(합병) 정렬
•
동적 계획법(Dynamic Programming = 재귀 호출) : 제시된 문제를 해결하기 위해 부분 문제에 답을 계속적으로 활용해나가는 Bottom-Up 방식
1.
부분 문제로 분리
2.
가장 낮은 단계 부분 문제 해답 계산
3.
이 부분 문제의 해답을 이용해 상위 부분 문제 해결
◦
속도는 빠르지만 공간 복잡도가 커지는 단점 존재
ex) 플로이드 알고리즘, 피보나치 수열 알고리즘(동적 계획법 뿐 아니라 분할 정복법으로도 구현 가능)
•
탐욕법 : 국소적인 관점에서 최적의 해결 방법을 구하는 기법 : 동적 계획법보다 효율적
ex) 크루스칼 알고리즘, 다익스트라 알고리즘
•
퇴각 검색법(Back-tracking) : 모든 가능성을 찾아가는 방법, 동적 계획법과 같이 기억할 저장소 필요
ex) N-Queen 문제 해결시 응용
•
분기 한정법(Branch & Bound) : 정해진 범위(Bound)를 벗어나는 값들은 가지치기(Branch)해가며 결과값을 추적해 나가는 방식
ex) 최적 우선 탐색(Best First Search) 알고리즘, A* 알고리즘
•
근사 해법(Approx-imation Algorithm) : 복잡도가 매우 높은 문제에 대해 가장 근사치 값을 구하는 기법
◦
NP-Hard 문제를 해결하기 위해, 가장 가까운 답을 찾는 결정성 알고리즘을 구현하는 기법
◦
시간 복잡도, 공간 복잡도, 정밀도를 척도로 평가
ex) 근사 해법
시간 복잡도에 따른 알고리즘
•
알고리즘이 문제를 해결하기 위한 시간(연산)의 횟수
•
Big-O 표기법 (최악)
◦
O(1) : 상수 시간 복잡도 의미, 문제를 해결하는데 오직 한 단계만 거침(해시 함수)
◦
O(log₂n) : 로그 시간 복잡도 의미, 입력값 n이 주어졌을 때, 문제 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듦(이진 탐색)
◦
O(Nlog₂n) : 선형 로그 시간 복잡도 의미, 문제 해결을 위한 단계 수는 nlog₂n번의 수행 시간을 가짐 (퀵 정렬, 병합(합병) 정렬)
◦
O(n) : 선형 시간 복잡도 의미, 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계(순차 탐색)
Mccabe 순환 복잡도(Cyclomatic)
순환 복잡도
•
프로그램 이해 난이도를 제어 흐름 난이도의 복잡도에 따라 결정, 복잡도를 싸이클로메틱 개수에 의해서 산정하는 방법
•
싸이클로메틱의 개수와 원시 프로그램 오류의 개수와 밀접한 관게
복잡도 계산 방식
•
복잡도 = 화살표 수 - 노드 수 + 2 == V(G) = E - N + 2 (제어 흐름 그래프를 통해 파악)
•
복잡도 = 영역 수(폐 구간) + 1 (제어 흐름 그래프를 통해 파악)
•
복잡도 = 의사 결정수 + 조건 수 + 1 (프로그램 코드상에서 파악, 제어 흐름도를 그리기 어려운 경우 활용)
해싱 함수의 종류 (Indexing에서 주로 사용)
•
제산 방법(Division Method) : 나머지 연산자(%)를 사용하여 테이블 주소를 계산하는 방법
•
중간 제곱 방법(Mid-Square Method) : 레코드 키값을 제곱한 후에 결과값의 중간 부분에 있는 몇 비트를 선택하여 해시 테이블의 홈주소로 사용하는 방법
•
중첩 방법(Folding Method, 폴딩) : 해싱 함수 중 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR한 값(베타적논리합)을 홈주소로 삼는 방법
•
기수 변환 방법(Radix Conversion Method) : 레코드 키를 구성하는 수들이 모든 키들 내에서 자리별로 어떤 분포인지를 조사하여 비교적 고른 분포를 나타내는 자릿수를 필요한 만큼 선택, 레코드의 홈주소로 사용하는 방법
•
무작위 방법(Random Method) : 난수 발생 후 난수를 이용해 각 키의 홈주소로 산출하는 방법
•
계수 분석 방법(Digit Analysis Method) : 레코드 키 구성 수들이 모든 키들 내에서 자리별로 어떤 분포인지를 조사하여 비교적 고른 분포를 나타내는 자릿수를 필요한 만큼 선택, 레코드의 홈주소로 사용하는 방법
•
동의어(Synonym) : 해싱에서 동일한 홈주소로 인하여 충돌이 일어난 레코드들의 집합
소스코드 최적화
소스코드
•
나쁜 코드
◦
= 스파게티 코드
•
클린 코드
◦
클린 코드 최적화 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화
코드 간결성 유지 지침
•
공백을 이용하여 실행문 그룹과 주석을 명확히 구분
•
복잡한 논리식과 산술식은 괄호와 들여쓰기를 통해 명확히 표현
•
빈줄을 사용하여 선언부와 구현부를 구별하고 한줄에 되도록 적은 문장 코딩
클린 코드 작성 원칙
•
가독성
•
단순성
•
의존성 배제
•
중복성 최소화
•
추상화
외계인 코드
•
오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램 의미
소스 코드 최적화 유형
•
클래스 분할 배치
•
좋은 이름 사용
•
코딩 형식 준수
•
느슨한 결함
•
적절한 주석
소스코드 품질 분석
소스 코드 품질 분석 도구
•
정적 분석 도구 : 코드 내 오류, 표준 위배 사항 위반
◦
기법
▪
소스 코드 검증
▪
코드 리뷰
▪
리버스 엔지니어링
◦
종류
▪
pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura
•
동적 분석 도구 : 다양한 입/출력 데이터의 변화 및 사용자 상호 작용에 따른 변화 점검 분석 기법
◦
기법
▪
디버깅
▪
스트레스 테스트
▪
모의 해킹
▪
리버스 엔지니어링
◦
종류
▪
Avalanche, Valgrind, valMeter
정적 분석 vs 동적 분석
인터페이스 구현
인터페이스 기능 확인
인터페이스 설계서(정의서)
•
시스템의 인터페이스 현황을 한눈에 확인하여 정적, 동적 모형을 통한 설계서, 일반적인 형태의 설계서로 분류됨
모듈 연계
모듈 연계
•
시스템 인터페이스를 목적으로 내부-외부 모듈 또는 내부-내부 모듈 간 인터페이스를 위한 관계를 설정하는 것
•
EAI, ESB 방식이 있다.
EAI
•
기업 내부에서 운영되는 각종 플랫폼 및 애플리케이션 간의 정보 전달, 연계, 통합을 가능하게 해주는 솔루션
•
유형
◦
Point-to-Point : 저렴하게 구축 가능, 변경 및 재사용은 어렵다 - 솔루션(미들웨어)가 없다
◦
Hub & Spoke : 중앙 집중형 방식, 확장 및 유지보수 수월, 중앙 허브에 문제 발생 시 시스템 전체에 영향
◦
Message Bus : 미들웨어를 배치하여 처리, 확장성 뛰어남, 대용량 데이터 처리 유리
◦
Hybrid : 혼합방식, 데이터 병목 현상 최소화, EAI 구현 가능
ESB(Enterprise Service Bus)
•
데이터 변환 인터페이스 제공 솔루션
•
서비스 중심 통합
데이터 표준 방식
•
내/외부 모듈 간 데이터를 교환 시 데이터 표준 정의 및 관리 필요
•
JSON, DB, XML 등 다양한 표준으로 인터페이스 모듈 표현 가능
인터페이스 기능 정의
인터페이스 기능 정의 순서
1.
컴포넌트 명세서 확인
2.
인터페이스 명세서 확인
3.
일관된 인터페이스 기능 구현 정의
4.
정의된 인터페이스 기능 구현 정형화
모듈 세부 설계서
•
컴포넌트(== 모듈) 명세서 : 내부 클래스 동작, 인터페이스 등을 통해 외부와 통신하는 명세
•
인터페이스 명세서 : 컴포넌트 명세서 항목 중 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
AJAX(Asynchronous Javascript And XML)
•
JS를 사용한 비동기 통신 기술
•
클라이언트와 서버 간에 XML 데이터를 주고받는 기술
•
브라우저가 소유한 XMLHttpRequest 객체를 이용해 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법
JSON(JavaScript Object Notation)
•
데이터 통신 이용 인터페이스 구현 방법
•
작은 양의 데이터
•
속성/값의 쌍인 데이터 객체 전달
인터페이스 구현 검증
인터페이스 구현 검증 도구 종류
•
Watir
◦
Ruby 기반
◦
웹 애플리케이션 테스트, 브라우저 호환성 테스트
•
xUnit
◦
다양한 언어 지원
◦
단위 테스트 프레임워크
•
FitNesse
◦
웹 기반 테스트 케이스 지원 테스트 프레임워크
•
STAF
◦
데몬 사용
◦
자동화 검증 도구
•
NTAF Naver
◦
테스트 자동화 프레임워크
•
Selenium
◦
웹 애플리케이션 테스트 프레임워크
인터페이스 구현 감시 도구
•
APM을 사용하여 동작 상태 감시
•
스카우트, 제니퍼 사용
인터페이스 보안
인터페이스 보안
인터페이스 보안
•
데이터 통신 시 데이터 탈취 위협
◦
스니핑(Sniffing) : 네트워크 주변 패킷을 엿보며 계정과 비밀번호를 알아내는 보안 위협
◦
스푸핑(Spoofing) : 크래커 사이트로 유도하여 비밀번호를 알아내는 보안 위협
•
데이터 베이스 암호화
◦
민감 데이터는 암호화해야함
◦
대칭키, 해시, 비대칭키 알고리즘 존재
•
시큐어 코딩
◦
OWASP Top 10을 참고하여 KISA에서 제작한 SW 보안 약점 가이드를 바탕으로 시큐어 코딩 필요
네트워크 보안 적용
•
Transport Layer Network 보안
◦
상대방 인증 적용
▪
IPSec AH 적용, IKE 프로토콜 적용
◦
데이터 기밀성 보장 필요
▪
IPSec ESP 적용
◦
End-to-End 보안 적용
▪
IPSec Transport Mode 적용
•
Application Layer Network 보안
◦
서버만 공개키 인증서를 가지고 통신
▪
SSL 서버 인증 상태 운영
◦
연결 단위 외 메시지 단위로도 인증 및 암호화 필요
▪
S-HTTP 적용하여 메시지 암호화 (상호 인증 필요, 성능 일부 저하)
DB 보안
데이터베이스 암호화 알고리즘
•
대칭키 : ARIA
•
해시 : SHA
•
비대칭키 : RSA, ECDSA, ECC
데이터베이스 암호화 기법
•
API : 애플리케이션 레벨
•
Filter : 데이터베이스 레벨
•
Hybrid : API, Filter 혼합
•
IPSec, SSL/TLS 등 보안 채널을 활용하여 전송
인터페이스 연계 테스트
연계 테스트 분류
•
소프트웨어 연계 테스트 구간
•
소프트웨어 연계 단위 테스트
•
소프트웨어 연계 통합 테스트
자료 구조
자료 구조
자료 구조의 분류
•
선형 구조 (직선으로 연결된 구조)
◦
리스트
▪
선형 리스트
▪
연결 리스트
◦
스택
◦
큐
◦
데크
•
비선형 구조 (직선이 아닌 구조)
◦
트리
◦
그래프
자료 구조 활용
•
정렬
•
검색
•
인덱스
◦
독립적인 저장 공간 보유
◦
B-트리 인덱스는 분기를 목적으로 하는 Branch Block을 보유
◦
BETWEEN 등 범위(Range) 검색에 활용
•
파일 편성
◦
레코드 물리적 방법
선형 자료 구조
리스트(List)
•
선형(Linear) 리스트
◦
배열(Array)과 같이 연속되는 기억 장소에 저장되는 리스트
•
연결(Linked) 리스트
◦
노드 포인터 부분을 서로 연결시킨 리스트 (기억 공간 필요X)
스택(Stack)
•
후입선출(LIFO, Last In First Out) 방식
•
마지막 삽입된 자료 위치 : Top, 먼저 삽입된 자료 위치 : Bottom
•
스택 가드 : 메모리상 프로그램의 복귀 주소와 변수 사이 특정 값을 저장해 두었다가 그 값이 변경되었을 경우 오버플로우 상태로 가정하여 프로그램 실행을 중단하는 기술
•
사용
◦
인터럽트 처리, 수식 게산, 0-주소 지정 방식
◦
재귀 호출, 후위 표현 연산, 깊이 우선 탐색
큐(Queue)
•
선입선출(FIFO, First In First Out) 방식
•
사용 : 운영체제 작업 스케줄링
데크
•
두 개의 포인터를 사용하는 자료 구조
•
스택과 큐의 복합적 형태 - 양방향
•
입력 제한 데크 : Scroll
•
출력 제한 데크 : Shelf
비선형 자료 구조
트리
•
그래프 특수 형태
•
노드와 가지를 이용하여 사이클을 이루지 않도록 구성한 자료 구조
•
차수 : 어떤 노드에 연결된 자식 노드의 수
•
트리의 차수 : 트리의 노드 중 가장 큰 차수
이진 트리(Binary Tree)
•
차수가 2 이하인 노드들로만 구성된 트리
•
레벨 n에서 최대 노드 수 : 2ⁿ-1
이진 트리 구조
•
정이진 : 모든 레벨에서 2개씩 채워진 트리
•
전이진 : 정이진에서 한쪽 방향 노드가 아예 존재하지 않는 트리
•
사향 이진 : 루트 노드에서 한쪽 방향으로만 기울어진 트리
이진 트리 운행법
•
전위 : Root → Left → Right
•
중위 : Left → Root → Right
•
후위 : Left → Right → Root
수식 표기법
•
전위(Prefix) : 연산자 → 피연산자 → 피연산자
•
후위(Infix) : 피연산자 → 연산자 → 피연산자
•
후위(Postfix) : 피연산자 → 피연산자 → 연산자
그래프
그래프
•
정점(Vertex)과 간선(Edge)의 집합으로 이루어진 자료 구조
•
표현 방법 : 인접 행렬(Adjacency Matrix)
•
신장 트리(Spanning Tree) : 간선들이 사이클을 이루지 않도록 정점들을 연결시킨 그래프
•
n개의 노드로 구성된 무방향 그래프의 최대 간선수는 n(n-1)/2개
•
순환 복잡도 : V = 화살표 수 - 노드 수 + 2
정렬
정렬
삽입 정렬
•
키값(2부터 시작)을 앞선 값과 비교하여 정렬하여 삽입하는 것
버블 정렬
•
2개씩 묶어서 비교한 후 정렬
•
한 사이클을 돌면 그 사이클의 맨 뒷자리는 다음 사이클에서 배제한다.
선택 정렬
•
O(n²)
•
첫 번째 값을 기준값으로 기준값 뒤의 값과 비교하여 치환
•
이를 반복
병합 정렬
•
O(nlog₂n)
퀵 정렬
•
O(nlog₂n), 최악=O(n²)
힙 정렬
•
전이진 트리 이용하여 정렬하는 방법
•
O(nlog₂n), 최악=O(log₂n)
검색과 해싱
검색
검색 방식 종류
•
이분 검색 : 자료가 순차적 정렬 필요
•
선형 검색 : 순차적 검색
•
피보나치 검색
•
블록 검색 : 블록 분리
•
이진 트리 검색
해싱
해싱
•
속도가 빠르다
•
충돌 현상 시 오버플로 해결의 부담이 가중
•
많은 기억 공간 요구
해싱 함수 종류
•
제산 방법
•
중간 제곱 방법
•
중첩 방법
•
기수 변환 방법
•
계수 분석 방법
오버플로 해결 방법
•
선형 개방 주소
•
폐쇄 주소 방법
•
재해싱
해싱 관련 용어
동의어
•
동일한 홈주소로 인해 충돌이 일어난 레코드 집합
슬록
•
한 개의 레코드를 저장할 수 있는 공간
•
n개의 슬록이 모여 하나의 버킷 형성
충돌
•
레코드 삽입 시 2개의 상이한 레코드가 똑같은 버킷으로 해싱되는 것
•
충돌 발생시 항상 오버플로우 발생
인덱스 주소와 파일 편성
인덱스 구성 방법
•
B 트리
•
B+ 트리 (현재 사용)
색인(Index) 순차 파일 구성
•
기본 영역 : 데이터 레코드 지정 부분
•
색인 영역
◦
구성
▪
트랙 인텍스
▪
실린더 인텍스
▪
마스터 인덱스
•
오버플로 영역
◦
구성
▪
실린더 오버플로 영역
▪
독립 오버플로 영역
VSAM 파일
•
기본, 오버플로 영역 구분X
정적 인덱싱과 동적 인덱싱
정적 인덱싱
•
구조가 변하지 않음
동적 인덱싱
•
구조가 변함
•
레코드가 블록에 가득 차면 동적 분열