단위 테스트
테스트 스텁 - 하향식 테스트
제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구
일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
테스트 드라이버 - 상향식 테스트의 가상 모듈
테스트의 대상이 되는 하위 모듈 호출, 파라미터 전달
테스트 슈트 - 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합
테스트 케이스 - 사용자의 요구사항을 정확히 준수했는지 확인하기 위한
입력 값, 실행조건, 기대결과 등으로 만들어진 테스트 항목의 명세서
코드 품질 향상 기법 (코드 리뷰)
코드 인스펙션
- 정형화된 패턴의 기법
- 4역할 - Moderator, Reader, Designer/Coder, Tester
- 6단계 - Planning, Overview, Preparation, Meeting(Inspection), Rework, Follow-up
- 정적 테스트에 가까움
- 프로그램을 수행시켜보는 것 대신에 읽어보고 눈으로 확인하는 방법으로 볼 수 있다.
- 결함 뿐만 아니라 모든 것이 표준대로 되어 있는 지 확인하기 위한 검토
- 표준이나 명세서에 서술한 내용과 비교하여 편차와 에러를 식별하기 위해 산출물을 근거로 수행하는 검사
팀리뷰
- 좀 정형
- 일정한 계획과 프로세스를 따름
- 발표자와 Moderator
웍쓰루
- 비정형
- 발표를 통해 동료들로부터 의견이나 아이디어를 듣는 시간
- 정보 공유성격 ex) Bug 사례에 대한 회의
피어 리뷰 or Over the shoulder Review
- 2~3명
- 정기적으로 진행하면 참여율과 집중도가 높아짐
자료구조
1. 비선형 구조
트리, 그래프
2. 선형 구조
스택
인터럽트 처리, 서브루틴 호출 작업에 응용
데크
선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능
3. 파일 구조
순차파일, 색인파일, 직접파일
정형 기술 검토 (FTR) 지침 사항
- 제품 검토의 집중성 : 오류 검출에 초점을 두고 해결책을 나중으로 미룸
- 사전 준비성 : 검토들은 사전에 작성한 메모 공유
- 의제의 제한성
- 안건 고수성
- 논쟁 반박의 제한성
- 문제 공개성 : 문제 영역을 명확히 표현
- 참가 인원의 제한성
- 문서성 : 발견된 오류 문서화
- 모든 검토자들을 위해 의미있는 훈련을 시행
- 자원과 시간 일정을 할당
소프트웨어 재공학
Analysis: 기존 소프트웨어를 분석하여 재공학 대상을 선정하는 것
Migration: 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
Restructuring: 기존 소프트웨어를 향상시키기 위하여 코드를 재구성하는 작업
- 기능과 외적 동작은 변하지 않음
Reverse Engineering: 기존 소프트웨어를 분석하여 소스코드를 얻어내는 작업
- 소스코드로 소프트웨어를 만드는 작업의 역작업
Alien code : 개발자가 퇴사를 했거나 현재 사용하지 않는 환경 및 언어로 작성되었거나 프로그램의 관련 문서나 주석이 없는 상태에서 시간이 흐른 뒤 유지보수가 불가능하거나 힘든 프로그램 소스 코드
소프트웨어 재사용 문제점
1. 재사용할 소프트 웨어 선정 필요
2. 시스템에 공통적으로 사용되는 요소 발견 필요
3. 프로그램의 표준화 부족
4. 새로운 개발 방법론 도입이 어려움
5. 재사용을 위한 관리 및 지원 부족
6. 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움
소프트웨어 패키징
- 소비자 중심
- 모듈별로 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것.
- 신규 및 변경 개발소스를 식별하고, 이를 모듈화하여 상용제품으로 패키징한다.
- 범용 환경에서 사용이 가능하도록 일반적인 배포 형태로 패키징이 진행된다.
- 고객의 편의성을 위해 매뉴얼 및 버전관리를 지속적으로 한다.
데이터 포맷
JSON(Javascript Object Notation)
속성-값 쌍 또는 “키-값 쌍”으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷, AJAX에서 많이 사용되고 XML을 대체하는 주요 데이터 포맷
XML(Extensible Markup Language)
HTML의 단점을 보완한 인터넷 언어, SGML의 복잡한 단점을 개선한 특수한 목적을 갖는 마크업 언어
YAML: JSON과 비슷하게 사람이 읽기 쉬운 형태의 데이터 표현 형식.
- YAML은 XML과 문법적으로 유사한 점이 많음.
- YAML에서도 주석을 사용 가능하며 개행, 공백으로 블록을 인식.
- 태그를 사용하지 않고 공백 위주로 데이터를 구분하므로 한 줄로 작성할 수 없다는 특징.
프로그램 설계도
Flow Chart 순서도
- 간단하고 표현력이 높
- 최대 단점 화살표 ..
- 구조적인 프로그램 생성에 어려움
- 복잡한 시스템 구조 설명에 부적
NS-Chart (Nassi-Schneiderman Chart), = Chapin 도표
- 3가지 기본구조만으로 논리를 표현(표준화 가능)
- 순서적 구조, 조건 분기 구조, 순환 구조 등 기본적인 요소에 대한 표시방법 제공
- 연속, 선택, 반복 등의 제어 논리 구조를 표현한다.
- 제공하는 요소들만 사용 가능
- Flow Chart의 최대 단점인 화살표가 표시되지 않음
- 기본구조의 입구와 출구는 각 하나씩
- 전체적인 알고리즘을 일목요연하게 볼 수 있음
- 임의로 goto문 작성 불가
Pseudocode 프로그램 설계 언어 (Program Design Language : PDL)
- 고급 프로그램 언어의 제어구조와 자연언어를 통합하여 사용할 수 있는 알고리즘 표기언어
- 직접 컴파일할 수 없고 설계 명세 언어로만 사용
- 자동적으로 다른 그래프 표기법으로 변환 가능
- 표준화된 PDL은 존재하지 않는다. 예) PDL/Ada, PDL/C 등
- 고급 언어와 유사한 PDL을 사용하는 것이 바람직함
정렬 알고리즘
제곱형
Bubble Sort 정렬 시간 복잡도 모두 O(n^2)
왼쪽에서 부터 두 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터 보다 크면 자리를 바꾸는 정렬 알고리즘
정렬된 데이터의 경우 O(n)
Selection Sort 정렬 시간 복잡도 모두 O(n^2)
배열 내에서 최소값을 찾은 다음 정렬 되지 않은 맨 앞 값과 교환을 하며 정렬을 해 나아가는 방법
Insert Sort 최상일 경우 O(n), 평균과 최악일 경우 O(n^2)
한 개의 값을 추출한 다음 앞쪽으로 비교해서 본인의 자리를 알맞게 찾아가게끔 하는 정렬 방법
ex) 최소값을 찾아 자신의 위치에 해당하는 값과 교환
쉘 정렬
선형 로그형 복잡도
Devide and Conquer 분할 정복
Merge Sort 병합 정렬 시간 복잡도 모두 O(n log n)
분할 정복에 기반, 리스트를 1 이하인 상태까지 절반으로 자른 다음 재귀적으로 합병 정렬
- 데이터 분포에 영향을 덜 받음.
- 레코드의 크기가 큰 경우 시간적 낭비 초래
Quck Sort 시간 복잡도 O(n log n) 최악의 경우 O(n^2)
분할 정복에 기반
pivot을 사용해 좌우 배열을 탐색하며 정렬
- 가장 빠르다
Heap Sort 시간 복잡도 모두 O(n log n)
- 힙 1차원 배열로 쉽게 구현
버킷 정렬
해싱 함수
K: 검색 키 값, M: 해시 테이블 크기
- 제산법: K%M을 해시 주소로 사용
- 제곱법: K^2 값의 중간 부분을 주소로 이용
- 중첩법: K를 M의 자릿수 크기로 분할하고 더해서 계산
- 숫자분석법: 충돌 가능성이 낮은 자리수만 추출
충돌 해결 방법 - 개방 주소법(조사법), 체이닝: 연결 리스트로 한 주소에 여러 개 데이터 저
- 기수 변환법: 다른 진법으로 간주해 키를 변환
- 무작위 방법: 난수 생성
소프트웨어 테스트
화이트 박스 테스트
- 내부 구조와 동작을 직접 관
- 내부 소스의 모든 문장을 한 번 이상 실
- 내부의 논리적인 모든 경로를 테스트해 테스트 케이스를 설계
- 기본 경로: 싸이클을 최대 한 번만 지나야 한다.
1) 기초 경로 검사
절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
테스트 측정 결과는 실행 경로의 기초를 정의하는 지침으로 사용
2) 제어 구조 검사
- 조건 검사
- 루프 검사
- 데이터 흐름 검사: 변수의 정의와 변수의 사용의 위치에 초점을 맞춰 실시
블랙 박스 테스트
- 입력에 따른 출력 결과를 테스트
동치(동등)분할 검사
경계값 분석
원인-효과 검사
오류 예측 검사
비교검사
인터페이스 구현 검증 도구
xUnit, STAF, Fitnesse, NTAF, Selenium, watir
소프트웨어 품질목표
* 정확성(correctness): 시스템의 사양과 설계, 구현에 있어서 오류가 없는 정도
* 유용성(usability): 사용자가 시스템을 배우고 사용하는 데 있어서의 용이함
* 효율성(efficiency): 메모리와 실행 시간 같은 시스템 리소스의 최소 사용
* 신뢰성(reliability): 정해진 상황에서 언제든지 필요한 기능을 수행할 수 있는 시스템의 능력 - 고장 사이의 시간
* 무결성(integrity): 시스템이 프로그램이나 데이터에 대한 허용되지 않거나 잘못된 접근을 막는 정도.
무결성의 기본 개념에는 데이터의 적절한 접근을 보장할 뿐만 아니라 권한이 없는 사용자의 접근 제한 기능이 포한된다. 즉, 병렬 데이터를 갖는 데이블은 병렬로 변경되고 날짜 필드는 타당한 날짜만을 포함하는 식이다.
* 적응성(adaptablility): 시스템을 변경하지 않고 설계된 환경에서 뿐만 아니라 다른 응용 분야나 환경에서도 사용될 수 있는 정도
* 정밀성(accuracy): 구성된 시스템에 오류가 없는 정도. 특히 대량의 데이터를 고려한다. 정밀성은 정확성과 다르다. 정밀성은 시스템이 정확하게 구성되었는지가 아닌 시스템이 용도대로 얼마나 잘 수행하는지를 결정한다.
* 견고성(robustness): 시스템이 잘못된 입력이나 악조건에서도 기능을 계속해서 수행할 수 있는 정도
소프트웨어 품질 관련 국제 표준
ISO/IEC 25000
- SW 품질 평가 통합 모델
- SQuaRE로도 불림
- ISO/IEC 9126, ISO/IEC 12119, ISO/IEC 14598의 3개 표준을 통합한 모델
- 2500n : 개요 및 품질관리
- 2501n : 품질모델
- 2502n : 품질측정
- 2503n : 품질요구
- 2504n : 품질평가
- 2505n : 확장분야
'공부' 카테고리의 다른 글
정보처리기사 필기 공부하기 - [5과목] 정보시스템 구축관리 (0) | 2023.07.08 |
---|---|
정보처리기사 필기 공부하기 - [4과목] 프로그래밍 언어 활용 (0) | 2023.07.08 |
정보처리기사 필기 공부하기 - [3과목] 데이터베이스 구축 (0) | 2023.07.08 |
정보처리기사 필기 공부하기 - [1과목] 소프트웨어 설계 (0) | 2023.07.08 |