20. 통합 구현
1) 단위 모듈 구현
단위 모듈: SW 구현에 필요한 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
모듈화의 원리: 분할과 지배, 정보 은폐, 자료 추상화, 모듈의 독립성(낮은 결합도, 높은 응집도)
구현 단계의 작업 절차
코딩 계획 => 코딩 => 컴파일 => 테스트
2) 통합 개발 환경
- IDE(이클립스, VSC...)
- 빌드 자동화 도구(Gradle)
- 프로세스: 컴파일 => 패키징 => 단위 테스트 => 정적 분석 => 리포팅 => 배포 => 최종 빌드
- 종류: Gradle(JVM 기반 빌드 도구), Jenkins(Java 기반 오픈소스), Maven(종속성), Ant(아파치, XML 기반 빌드 스크립트) 등
21. 제품 소프트웨어 패키징
1) 애플리케이션 패키징
개발 완료했으면 이제 고객에게 인도하기 위해 패키징해야 함 (설치 매뉴얼 등 배포용 설치 파일 제작)
2) 제품 소프트웨어 패키징 도구
패키징 도구의 역할: 불법 복제 방지, 사용 권한 제어, 라이선스 관리 등
내부 콘텐츠에 대한 암호화 및 보안 고려
이기종 콘텐츠 및 단말기간 DRM 연동 고려
범용성 고려
패키징 도구의 구성 요소
암호화
키 관리
암호화 파일 생성
식별 기술
저작권 표현
정책 관리
크랙 방지
인증
3) 모니터링 도구와 협업 도구
애플리케이션 모니터링 도구(Application Performance Management)
성능과 서비스 이용성을 감시, 관리하는 도구로애플리케이션 변경 및 성능 관리 시 사용
22. 제품 소프트웨어 저작권
1) 저작권 보호
DRM(Digital Rights Management)
디지털 콘텐츠의 생성 ~ 유통 과정까지 안전하게 관리하고 허가된 유저만 사용하도록 제한하는 기술
요구사항: 지속적 보호, 이용 편리성, 유연성, 통합의 용이성
특성: 거래 투명성, 사용규칙 제공, 자유로운 상거래 제공
DRM 기술 요소
암호화(콘텐츠 및 라이센스 암호화): PKI, Encryption, Digital Sinature
키 관리(암호화한 키에 대한 저장 및 배포): Centralized, Enveloping
암호화 파일 생성(패키저: 암호화된 콘텐츠 생성): Pre-Packaging, On-the-fly Packaging
식별 기술: DOI, URI
저작권 표현: ODRL, XrML/MPGE-21 REL
정책 관리: XML
크랙 방지: Secure DB...
인증: SSO, ID/PW
인터페이스: IPMP
이벤트 보고
사용 권한
23. 제품 소프트웨어 매뉴얼 작성
사용자 매뉴얼 작성 프로세스
작성 지침 정의 => 구성 요소 정의 => 구성 요소별 내용 작성 => 사용자 매뉴얼 검토
SW 국제 표준 품질 특성
ISO/IEC9126: SW 품질 특성 및 척도에 대한 지침
ISO/IEC12119: 테스트를 위한 국제 표준
ISO/IEC15504: 6단계로 나뉨
ISO9001: 품질 보증 모델
SW 품질 목표
운영 특성: 정확성(요구기능 충족), 신뢰성, 사용 용이성, 효율성, 무결성
변경 수용 특성: 이식성, 상호운용성, 재사용성, 유지보수성, 유연성, 시험 역량
관점별 분류
유저 관점: 제품 신뢰성, 효율성, 사용 용이성, 간결성
개발자 관점: 검증 가능성, 유지보수성, 이식성, 무결성, 사용성
프로젝트 관리자 관점: 프로세스의 생산성과 제어 용이성
릴리즈 노트
고객에게 제공하는 잘 정리된 배포 정보 문서
24. 형상 관리
1) 형상 관리 도구
개발 단계에서 생성되는 문서, 코드 등 변경사항(형상)을 관리하는 도구
대표적인 항목
프로젝트 요구 분석서, 운영 및 설치 지침서, 요구사항 명세서, 설계/인터페이스 명세서, 테스트 설계서
소프트웨어 품질 보증, 형상 관리, V&V(확인 및 검증) 계획서, 코드 모듈 등
형상 관리 종류
버전 관리
변경 관리
빌드 관리
이슈 관리 등
형상 관리 절차
형상 식별 => 형상 통제 => 형상 보고 및 감사 => 형상 기록/보고
형상, 버전, 변경 관리 순으로 크다.
2) 버전 관리 도구
버전 관리 도구 구분
공유 폴더 방식 - 담당자 1명이 공유
클라이언트/서버 방식 - 서버와 클라이언트 형태로 사용 (CVS: 동시 버전 시스템, SVN: CVS보다 속도가 빠름)
분산 저장소 방식 - 원격 저장소와 로컬 저장소에 함께 저장됨 (Git)
Git 명령어
명령어 | 뜻 |
init | 새로운 로컬 git 생성 |
add | 저장소에 파일 추가 |
commit | 작업 내역 로컬 저장소에 저장 |
branch | 새로운 파생 저장소 브랜치 생성 |
checkout | 선택한 브랜치로 이동 |
merge | 현재 브랜치와 지정 브랜치 병합 |
fetch | Git 서버에서 코드 받아오기 |
pull | Git 서버에서 최신 코드 받아 병합하기 |
remote | 원격 저장소 추가 |
clone | 원격 저장소의 프로젝트 클론 |
SVN 명령어
명령어 | 뜻 |
import | 아무 것도 없는 서버 저장소에 맨 처음 소스 파일을 저장 |
check-in | 체크아웃으로 가져온 파일을 수정 후 저장소에 새 버전으로 갱신 |
check-out | 타 개발자가 저장소에 저장한 파일을 자기 작업 공간으로 인출 |
commit | 체크인 시 충돌이 있을 대 알림 표시, diff로 수정 후 commit |
diff | 새로운 개발자가 추가된 파일 수정 기록을 보면서 파일의 차이를 봄 |
update | 저장소에 존재하는 최신 버전 자료와 자신의 작업 공간을 동기화함 |
fork | 소스 코드를 통째로 복사해 개발 허용하는 것 (제시된 라이선스 지켜야함) |
branch | 주 저장소에서 파생된 프로젝트 |
info | 지정된 파일에 대한 정보 표시 |
25. 애플리케이션 테스트 관리
1) 테스트 케이스
소프트웨어 테스트: 소프트웨어의 결함을 찾아내는 활동으로 품질 향상, 오류 발견, 오류 예방의 관점에서 실시
품질 향상 관점: 반복적인 테스트로 제품의 신뢰도 향상
오류 발견 관점: 잠재된 오류 발견, 수정
오류 예방 관점: 코드 리뷰, 동료 검토, 인스펙션으로 오류를 사전에 발견
완벽한 테스팅은 불가능하다.
테스팅은 개발 초기에 시작해야 한다.
결함 집중: 결함의 대부분은 소수의 특정 모듈에 집중되어 있음 (파레토 법칙)
살충제 패러독스: 동일한 테스트 케이스로 반복 테스트 시 결함을 발견할 수 없으므로 주기적으로 테스트 케이스를 개선해야 함
등등
파레토 법칙: 80대20법칙. 2대8 법칙. 전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상
테스트 커버리지: 테스트 수행 정도
구문 커버리지, 결정 커버리지, 조건 커버리지, 조건/결정 커버리지, 변경 조건/결정 커버리지, 다중 조건 커버리지
테스트 오라클: 테스트 결과가 참/거짓인지 판단하기 위해 사전에 정의된 참을 입력해 비교하는 기법 및 활동
참 오라클 | 모든 입력값에 대해 적합한 결과 생성, 발생한 오류를 모두 검출하는 오라클 |
일관성 검사 오라클 | 애플리케이션 변경 시 수행 전과 후의 결과값이 동일한지 확인하는 오라클 |
샘플링 오라클 | 임의로 선정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공 |
휴리스틱 오라클 | 샘플링 오라클을 개선. 임의 임력값에 대해 올바른 결과를 제공하고 나머지는 휴리스틱으로 처리 |
2) V 모델
테스트 케이스 자동 생성
자료 흐름도 => 테스트 경로 관리, 입력 도메인 분석 => 테스트 데이터 산출, 랜덤 테스트 => 무작위 값 입력, 신뢰성 검사
테스트 레벨의 종류
단위 테스트: 개발자가 원시 코드를 대상으로 각각 단위 자체에만 집중해 테스트함 (객체지향에서 클래스 테스팅)
통합 테스트, 시스템 테스트, 인수 테스트 등
알파 테스트: 개발자 관점에서 수행됨(사용자가 개발자 앞에서 수행. 개발사 안에서 하는 테스트)
베타 테스트: 유저 관점에서 수행됨(선정된 다수의 유저)
3) 애플리케이션 테스트
정적 테스트(문서, 소스 코드 분석, 결함 발견)
동적 테스트(직접 실행해서 오류를 찾음. 블랙 박스 테스트 - 명세 기반, 화이트박스 테스트 - 구조 기반)
테스트 기반에 따른 테스트
구조 기반 테스트 | 소프트웨어 내부 구조에 따라 테스트 (구문 기반, 결정 기반, 조건 기반, 데이터 흐름) |
명세 기반 테스트 | 명세를 기반으로 테스트 (동등 분할, 분류 트리, 상태 전이, 경계값 분석) |
경험 기반 테스트 | 테스터의 경험을 기반으로 테스트 (에러 추정, 체크 리스트 등) |
목적에 따른 테스트
성능 | 소프트웨어의 성능 테스트 |
회복 | 고의로 부하를 가해 실패하도록 유도, 올바르게 복구되는지 테스트 |
구조 | 논리적인 경로, 소스 코드의 복잡도 평가 |
회귀 | 소프트웨어의 변경, 수정된 코드에서 새 결함이 없는지 확인 |
안전 | 불법 침입으로부터 시스템을 보호하는지 테스트 |
강도 | 과도하게 부하를 가해도 작동하는지 테스트 |
병행 | 변경된 소프트웨어와 기존 소프트웨어에 동일한 값을 넣고 결과값 비교 |
26. 테스트 시나리오와 테스트 기법
1) 테스트 시나리오
테스트를 위한 절차를 정리한 문서
시스템별, 모듈별, 항목별로 테스트 함
하드웨어 기반, 소프트웨어 기반, 가상 시스템 기반으로 나뉨
2) 테스트 기법
화이트박스 테스트 (동적 테스트 중 하나)
- 모듈의 원시 코드를 오픈해 코드의 모든 경로를 테스트함
- 기초 경로 검사, 제어 구조 검사 등이 있음
(기초 경로 검사: 대표적인 기법. 측정 결과는 실행 경로의 기초를 정의하는 지침으로 쓰임. 기초 경로 등)
(제어 구조 검사: 조건 검사, 루프 검사, 데이터 흐름 검사를 함)
- 문장 검증 기준, 분기 검증 기준, 조건 검증 기준 3가지로 나뉨
블랙박스 테스트 (동적 테스트 중 하나)
- 요구사항 명세를 보면서 테스트함. (기능 테스트라고도 함)
- 인풋 아웃풋 위주
- 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사 등 엄청 많다.
동치 분할 검사 | 입력 자료에 초점을 맞춤 (자료 개수를 균등하게 분할) |
원인-효과 그래프 검사 | 입력과 출력 관계에 초점을 맞춤 |
오류 예측 검사 | 과거 경험과 감각으로 테스트 (보충적 검사 기법) |
비교 검사 | 동일한 테스트 자료를 여러 버전의 프로그램에 테스트 |
경계값 분석 | 동치 분할 검사를 보완함 경계값을 테스트 케이스로 선정해서 검사함 대표적인 명세 기반 기법 |
27. 테스트 커버리지
1) 테스트 커버리지
소프트웨어의 테스트 범위를 측정하는 테스트 품질 측정 기준
테스트의 정확성과 신뢰성을 향상시키는 역할
기능 기반, Line Coverage, Code Coverage, Statement Coverage,
Condition Coverage, Desicion Coverage, Modified Condition/Decision Coverage...
2) 테스트 자동화
그때그때 맞는 적절한 도구를 사용해서 테스트 해야 함
정적 분석 도구: 코딩 표준, 스타일, 표준, 결합도 등을 체크
테스트 실행 도구: 스크립트 언어로 테스트 실행 - 데이터/키워드 주도 접근 방식
성능 테스트 도구
테스트 통제 도구
테스트 하네스 도구: 컴포넌트의 테스트 또는 빠진 컴포넌트 기능을 대신해 결과를 비교함
테스트 하네스 도구 구성 요소
테스트 드라이버 | 하위 => 상위 모듈로 통합하며 테스트하는 상향 테스트 테스트 대상을 제어, 동작시킴 |
테스트 스텁 | 상위 => 하위 모듈로 통합 테스트를 진행하는 하향 테스트 가상의 더미 컴포넌트 사용 |
테스트 슈트 | 일정 순서에 의해 수행될 개별 테스트의 집합, 패키지 |
테스트 케이스 | 요구에 맞게 개발됐는지 확인 데이터 레코드 또는 테스트 스크립트로 정의 |
테스트 스크립트 | 테스트 케이스 수행 시 결과를 보고할 목적으로 스크립트 언어로 작성된 파일 |
목 오브젝트 | 테스트를 위해 사용자 행위를 미리 조건부로 입력, 수행하는 객체 |
테스트 수행 단계별 테스트 자동화 도구
테스트 계획 단계: 요구사항 관리 도구
테스트 분석 및 설계 단계: 테스트 케이스 생성 도구
테스트 수행 단계: 테스트 자동화/정적 분석/동적 분석/성능 테스트/모니터링 도구
테스트 관리 단계: 커버리지 분석/형상 관리/결함 추적 및 관리 도구
28. 통합 테스트
1) 통합 테스트
단위 테스트
통합 테스트
- 비점진적 통합 방식(빅뱅 통합)
- 점진적 통합 방식(상향/하향식)
2) 통합 방식
하향식 통합(개발 미완료 시 스텁 사용. 우선 통합, 깊이 우선 통합, 너비 우선 통합법)
상향식 통합(드라이버 사용)
빅뱅 통합(드랑버나 스텁 없이 실제로)
샌드위치 통합(상향, 하향 다 이용)
29. 결함 관리
1) 결함 관리
에러, 결함, 결점, 버그, 실패 등등 동일함
2) 결함 관리 도구 및 용어
결함 관리 도구
Mantis: 단위별 작업 내용 기록
Trac
Bugzilla: 심각도와 우선 순위 정함
Redmine
JIRA
등
결함관리 용어
에러: 개발자의 실수에 의한 것
오류: 연산자가 잘못 쓰인 경우
실패: 개발 명세서에 정의된 예상 결과와 다름
결함: 위 사항 전체
결함 내성: 결함이 있어도 실행에는 문제가 없음 (...!)
30. 애플리케이션 성능 개선
1) 애플리케이션 성능 개선
성능 지표
처리량, 응답 시간, 경과 시간, 자원 활용률
유형별 성능 분석 도구
성능/부하/스트레스 점검 도구
모니터링 도구
2) 애플리케이션 성능 저하 원인
DB 연결 및 쿼리 실행 시 발생되는 성능 저하 원인
DB Lock: 과도한 데이터 조회, 업데이트, 인덱스 생성 시 발생
불필요한 DB Fetch: 필요한 데이터보다 더 많은 대량의 데이터 요청이 들어올 경우
연결 누수: DB 연결과 관련된 JDBC 객체를 사용 후 종류하지 않을 경우 발생
부적절한 커넥션 풀 사이즈: 커넥션 풀 크기가 너무 크거나 작을 경우
기타: 트랜잭션이 커밋되지 않고 커넥션 풀에 반환되거나, 잘못된 코드로 불필요한 커밋이 자주 발생하는 경우
내부 로직으로 인한 성능 저하 원인
잘못된 환경 설정, 네트워크 문제로 인한 성능 저하 원인
3) 알고리즘
알고리즘: 과제를 해결하기 위한 방법과 절차
자연어, 의사코드(일반적인 언어로 코드를 흉내내 알고리즘을 써놓은 코드), 순서도, 프로그래밍 언어로 표현 가능
알고리즘 설계 기법
분할 정복법 | 제시된 문제를 분할 불가할 때까지 나누고 풀고 병합하는 탑다운 방식 분할 => 정복 => 결합 ex) 퀵 정렬 알고리즘, 병합 정렬 알고리즘 |
동적 계획법(DP) | 부분 문제에 대한 답을 활용하는 바텀업 방식 부분 문제로 분리 => 해결 => 이를 이용해 상위 부분문제 해결 이전 문제의 답을 저장할 저장소가 필요해 공간 복잡도가 커지는 단점 ex) 플로이드 알고리즘, 피보나치 수열 알고리즘 |
탐욕법(그리디) | 국소적인 관점에서 최적의 해결방법을 구하는 기법 최적은 아니지만 DP보다 효율적 ex) 크루스칼 알고리즘, 다익스트라 알고리즘 |
퇴각 검색법(백 트래킹) | 어떤 문제의 최적해를 구하기 위해 모든 가능성을 찾아감 N-Queen 문제 해결 시 응용되며 DP처럼 기억할 저장소가 필요함 |
분기 한정법(브랜치&바운드) | 정해진 범위를 벗어나는 값들을 가지치기 하며 결과값을 추적 ex) 최적 우선 탐색 알고리즘, A* 알고리즘 |
근사 해법 | 복잡도가 매우 높은 문제에서 가장 근삿값을 구하는 기법 NP-Hard(다항식 시간에 풀기 어렵다고 판단되는 문제)에 사용 시간 복잡도, 공간 복잡도, 정밀도를 척도로 평가됨 ex) 근사 알고리즘 |
시간 복잡도에 따른 알고리즘
시간 복잡도: 알고리즘이 문제를 해결하기 위한 시간의 횟수
Big-O로 표기함
O(1) | 상수 시간의 복잡도 (해시 함수) |
O(log2n) | 로그 시간의 복잡도 (단계들이 연산마다 특정 요인에 의해 줄어듦. 이진 탐색) |
O(nlog2n) | 선형 로그 시간의 복잡도 (퀵 정렬, 병합 정렬) |
O(n) | 선형 시간의 복잡도 (문제 해결 단계의 수와 입력값 n이 1:1. 순차 탐색) |
O(n^2) | 제곱 시간의 복잡도 (거품 정렬, 삽입 정렬, 선택 정렬) |
O(C^n) | 지수 시간의 복잡도 |
4) Mccabe 순환 복잡도(싸이클로메틱)
프로그램 이해 난이도는 제어 흐름 난이도의 복잡도에 따라 결정됨
복잡도를 싸이클로메틱 개수에 의해 산정하는 방법
최대 10을 넘지 않도록 하며 넘으면 이를 분해함
복잡도 = 화살표 수 - 노드 수 + 2
해싱 함수 종류
제산 방법: 나머지 연산자로 테이블 주소를 계산 (인덱스 계산 시 사용)
중간 제곱 방법: 레코드 키값을 제곱한 후 결과값의 중간 부분에 있는 몇 비트를 선택해 해시 테이블의 홈 주소로 사용
중첩 방법: 해싱 함수 중 레코드 키를 여러 부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
기수 변환 방법: 레코드 키를 구성하는 수들이 모든 키들 내에서 자리별로 어떤 분포인지 조사, 비교적 고른 분포를 나태는 자릿수를 선택해 홈 주소로 사용
동의어: 해싱에서 동일한 홈주소로 인해 충돌이 일어난 레코드들의 집합
31. 소스코드 최적화
1) 클린 코드
클린 코드와 나쁜 코드
코드 간결성을 위해 공백, 주석, 들여쓰기, 괄호 등을 사용하자
외계인 코드: 오래되거나 참고 문서 또는 개발자가 없어 유지보수 할 수 없는 코드 ㅠㅠ
2) 소스 코드 품질 분석 도구
정적 도구: 개발 초기에 소스 코드 보고 결함 찾음 (소스 코드 검증, 코드 리뷰, 리버스 엔지니어링. pmd, cppcheck 등)
동적 도구: 실행 과정에서 다양한 입출력 결과로 품질 분석(Avalanche, Valgrind, valMeter 등)
32. 인터페이스 구현
1) 인터페이스 기능 확인
인터페이스 설계서
2) 모듈 연계
시스템 인터페이스를 목적으로 내부 모듈-외부 모듈 또는 내부 모듈-내부 모듈 간 인터페이스 관계 설정
EAI와 ESB 방식이 있다.
EAI(Enterprise Application Integration)
기업 내부에서 운영되는 각종 플랫폼 및 애플리케이션 간의 정보 전달, 연계, 통합을 하게 해줌
ESB(Enterprise Service Bus)
애플리케이션 간의 데이터 변환 및 연계 지원을 제공하는 인터페이스 제공 솔루션
EAI와 유사하나 좀 더 서비스 중심으로 통합함
3) 인터페이스 기능 정의
컴포넌트 명세서 확인 => 인터페이스 명세서 확인 => 일관된 인터페이스 기능 구현 정의 => 정의된 인터페이스 기능 구현 정형화
모듈 세부 설계서
컴포넌트 명세서와 인터페이스 명세서로 나뉨
4) 인터페이스 구현
통신을 통해 구현한다
이 때 쓰는 언어
AJAX: JS를 사용한 비동기 통신 기술로 클라이언트-서버 간 XML 데이터를 주고 받음
JSON: 데이터 통신을 위한 인터페이스 구현 방법. 속성/값의 쌍인으로 데이터를 표현함
5) 인터페이스 구현 검증
구현했으면 잘 구현 됐는지 검증해야 함
검증 도구
Watir | Ruby 기반 테스트 프레임 워크 (모든 언어 기반 테스트 가능) |
xUnit | Java, C++, .Net 등 단위 테스트 프레임 워크 (함수, 클래스 등 구성 단위 테스트 가능) |
FitNesse | 웹 기반 테스트 케이스 설계/실행/결과 확인하는 테스트 프레임 워크 테스트 케이스 테이블 작성함 |
STAF | 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크 데몬 사용 |
NTAF Naver | 테스트 자동화 프레임워크. STAF와 FitNesse 통합 |
Selenium | 테스트를 위한 스크립트 언어 습득 없어도 됨 |
33. 인터페이스 보안
1) 인터페이스 보안
데이터 통신 시 데이터 탈취 위협
- 스니핑: 네트워크 주변을 지나다니는 패킷을 엿보는 보안 위협
- 스푸핑: 크래커의 사이트를 통해 유저의 정보를 알아내는 보안 위협
데이터베이스 암호화
- 대칭키, 해시, 비대칭키 알고리즘으로 중요한 데이터를 암호화함
시큐어 코딩
SW 보안 취약점, 약점 및 대응 방안
네트워크 구간 보안 기능 적용 시 고려사항
전송 - 상대방 인증을 적용해서 보안 기능 적용
계층 - 데이터 기밀 보장
네트워크 보안
AH(메세지 체크섬 활용), IPSec(통신 세션의 각 IP 패킷 암호화, 인증하는 안전한 IP 통신을 위한 프로토콜) 적용
응용 계층은 SSL의 서버 인증 상태를 운영
S-HTTP를 적용해 메세지를 암호화함
데이터베이스 암호화 알고리즘
대칭키 알고리즘, 해시 알고리즘, 비대칭키 알고리즘
2) 인터페이스 연계 테스트
상식적으로 읽어볼 것
출처: https://www.youtube.com/watch?v=cnjvTZh3_bg&list=PL6i7rGeEmTvqEjTJF3PJR4a1N9KTPpfw0&index=3
'✏️ 정보처리기사' 카테고리의 다른 글
[정보처리기사: 필기] 3. 데이터베이스 구축 (1) | 2024.02.08 |
---|---|
[정보처리기사: 필기] 2. 소프트웨어 개발 문제 풀이 (0) | 2024.01.26 |
[정보처리기사: 필기] 1. 소프트웨어 설계 문제 풀이 (2) (2) | 2024.01.25 |
[정보처리기사: 필기] 1. 소프트웨어 설계 (2) (0) | 2024.01.25 |
[정보처리기사: 필기] 1. 소프트웨어 설계 문제 풀이 (1) | 2024.01.24 |