교착상태, IPv6,4, TCP/IP, 프로세스의 상태 종류, Thread, 비용 산정
교착상태 필요충분 조건
상_호배제 (mutual exclusion) 점_유와대기 (hold and wait) 완(환)_형대기 (circular wait) 비_선점
IPv6, IPv4
- IPv6
- 128비트 주소 체계
- 유니캐스트(unicast) 멀티캐스트(multicast) 애니캐스트(anycast)
- 여덟 개의 16진수 블록
- IPsec(인터넷 프로토콜 보안)이 필수적으로 포함되어 있어 보안이 향상
- IPv4 :
- 32비트 주소 체계 2.유니캐스트(unicast) 멀티캐스트(multicast) 브로드캐스트(Broadcast)
- 네 개의 10진수로 구성되며, 각각이 0부터 255 사이의 값
- 네트워크 주소 변환(Network Address Translation)을 사용하여 여러 기기가 하나의 공용 IP 주소를 공유
TCP/IP
- UDP : 비연결형 서비스 제공 / 실시간 전송 네트워크에서 사용 ARP : IP 주소를 MAC Address로 변환 (논리 주소 → 물리 주소)
- TCP : 양방향 연결형 서비스 제공 / 가상 회선 연결 형태의 서비스 제공 / 스트릿 위주 패킷 전달
- ICMP : IP와 조합하여 통신 중에 발생하는 오류처리와 전송 경로 변경 등을 위한 제어 메시지를 관리
- IGMP : 멀티캐스트를 지원하는 호스트나 라우터 사이에서 멀티캐스트 그룹 유지를 위해 사용
프로세스의 상태 종류
- 보류 (pending)
- 준비 (ready)
- 실행 (running)
- 대기 (blocked)
- 교착 (deadlock)
- 완료 (terminated)
Thread
- 프로세스 내에서의 작업단위로 여러 자원을 할당받아 실행하는 프로그램 단위
- 한 개의 프로세스에는 하나 이상의 스레드가 존재
- 커널 스레드 : 운영체제 커널에 의해 스레드 운영 / 구현 쉬움 / 속도 느림
- 사용자 스레드 : 사용자가 만든 라이브러리를 사용해 스레드 운용 / 속도 빠름 / 구현 어렵
- 하드웨어 운용체제 성능과 처리율을 향상 가능
- 응용프로그램 응답시간 단축 가능
- 실행 환경을 공유시켜 기억장소 낭비 줄어듬
비용 산정 기법
- 전문가 감정 기법 : 조직 내에 있는 경험 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법
- 델파이 기법 : 전문가 감정 기법의 주관적 편견을 보완하기 위해 많은 전문가의 의견을 종합
- LOC 기법 : 원시 코드 라인 수 기법으로서 원시 코드 라인 수의 비관치 낙관치 기대치를 측정하여 산정하는 기법
- 개발 단계별 인월수 기법 : LOC를 보완하기 위한 기법, 필요 노력을 생명 주기의 각 단계별로 선정
- COCOMO : 보헴이 제안한 것으로 LOC에 의한 비용 산정 기법
유형별 COCOMO
- Organic : 조직형 / 소규모 소프트웨어 일괄 자료 처리 /5만 라인 이하
- Semi-detached : 반분리형 / 트랜잭션 처리 시스템이나 운영체제, DB / 30만 라인 이하
- Embedded : 내장형 / 최대형 규모 트랜잭션 처리 시스템이나 운영체제 / 30만 라인 이상
COCOMO 종류
- Basic (기본): 소프트웨어 크기 및 개발 유형만 이용
- Intermediate(중간) : 기본형의 공식 토대로 사용하나 4가지 특성 및 15가지 요인에 의해 비용 산정
- 제품 특성 : 신뢰도 / DB크기 / 복잡도 컴퓨터 특성 : 수행시간제한 / 기억장소제한 / - 가상 기계의 안정성 / Turn Around Time
- 개발 요원의 특성 : 분석가 능력 / 개발 분야 경험 / 가상 기계 경험 / 프로그래머 능력 및 언어 경험
- 프로젝트 특성 : 소프트웨어 도구 이용 / 프로젝트 개발 일정 / 최신 프로그래밍 기법 이용
- Detailed(발전) : 중간형 COCOMO 보완하여 만들어진 방법으로 개발 공정별보다 자세하고 정확하게 비용 산정
- Putnam 기법 : 소프트웨어 생명 주기의 전 과정 동안에 사용될 곡선의 노력의 분포를 가정해주는 모형 Rayleigh-Norden 곡선의 노력 분포도를 기초로 한다.
- FP 기법 : 기능 점수 모형으로 알브레히트가 제안 / 요인별 가중치를 합산하여 총 기능 점수를 산출하여 점수와 영향도를 이용 비용 산정
LOC 기법
- 소프트웨어 각 기능의 LOC의 비관치, 낙관치, 기대치를 측정 하여 예측치를 구한 후 이것으로 비용을 산정하는 방법이다.
- 예측치는 {낙관치+(4×기대치)+비관치}÷6으로 구할 수 있다
애자일
: 애자일(Agile) 기법은 소프트웨어 개발의 유연성과 속도를 높이기 위해 고안된 방법론입니다. 애자일 기법은 변화에 유연하게 대응하고, 고객과의 소통을 강조하며, 작은 단위로 작업을 나누어 개발합니다. 여기서 몇 가지 대표적인 애자일 기법을 소개할게요.
- 익스트림 프로그래밍(XP, Extreme Programming) 익스트림 프로그래밍은 애자일 기법 중 하나로, 소프트웨어 개발의 생산성과 품질을 향상시키기 위해 고안되었습니다. XP의 주요 특징은 다음과 같습니다:
용기, 단순성, 의사소통, 피트백, 존중
짧은 개발 주기: 주로 1~2주의 짧은 반복 주기를 가집니다.
테스트 주도 개발(TDD): 코드를 작성하기 전에 테스트 코드를 작성하고, 그 테스트를 통과하는 코드를 작성합니다.
짝 프로그래밍: 두 명의 개발자가 한 컴퓨터로 함께 코딩합니다. 한 명이 코드를 작성하고 다른 한 명은 그 과정을 리뷰합니다.
지속적인 통합: 코드를 자주 통합하고, 통합 시마다 자동으로 테스트를 실행하여 문제를 빠르게 발견하고 수정합니다.
- 스크럼(Scrum) 스크럼은 팀 간의 협력과 소통을 강조하는 애자일 프레임워크입니다. 스크럼의 주요 요소는 다음과 같습니다:
확약, 전념, 정직, 존중, 용기
xp와 달리 진행 체계 수립, 역할, 정의에 중심
스프린트: 2~4주 동안 일정한 반복 주기를 가지며, 각 주기마다 목표를 설정하고 그 목표를 달성하기 위해 작업합니다. “짧은 기간”
Product Owner : 제품 책임자, 제품에 대한 요구사항 즉 백로그를 작성하는 주체
Scrum Master : 팀의 애자일 프로세스를 지원하고 장애물을 제거해주는 역할을 합니다.
일일 스크럼 미팅: 매일 짧은 회의를 통해 팀원들이 진행 상황을 공유하고, 장애물을 논의합니다.
백로그: 요구사항 리스트(목록)
속도(Velocity): 한번의 스프린트에서 한 팀이 어느 정도의 제품 백로그를 감당할 수 있는지에 대한 추정치
이 외에도 칸반(Kanban), 린(Lean) 등 다양한 애자일 기법이 존재합니다.
CASE의 원천 기술
- 구조적 기법
- 프로토타이핑 기술
- 자동 프로그래밍 기술
- 정보 저장소 기술
- 분산 처리 기술
HIPO
HIPO 다이어그램(Hierarchy plus Input-Process-Output)은 시스템의 기능적 구조를 시각적으로 표현하는 도구입니다. 각 기능은 입력, 처리, 출력이라는 구성 요소로 나뉘어져 있어 시스템의 흐름을 쉽게 파악할 수 있습니다. 다음은 HIPO 다이어그램의 구성 요소와 종류에 대한 설명입니다.
HIPO 다이어그램 구성 요소
- 계층도(Hierarchy Chart)
시스템의 전체 기능을 계층 구조로 나열합니다.
상위 레벨에서 하위 레벨로 세부 기능이 점차적으로 분해됩니다.
- 총괄 다이어그램(Overview Diagram)
시스템의 주요 기능을 간략하게 요약한 다이어그램입니다.
각 기능에 대한 간단한 설명과 흐름을 포함합니다.
- 세부 다이어그램(Detail Diagram)
특정 기능에 대해 입력(Input), 처리(Process), 출력(Output)을 상세하게 표현한 다이어그램입니다.
기능 간의 상호 작용과 데이터 흐름을 구체적으로 설명합니다.
동적계획
작은 문제의 풀이를 활용
분할 정복
문제를 작게 나누는 것
해시 함수 기법 정리
1. 제산(Division)법
- 방식: 레코드 키를 해시표 크기보다 큰 수 중 가장 작은 소수로 나눈 나머지를 홈 주소로 사용
- 공식:
h(k) = k % p(p는 소수) - 특징: 간단하고 빠르며, 충돌 발생 가능성 존재
2. 제곱(Mid-square)법
- 방식: 레코드 키 값을 제곱한 후 중간 부분의 값을 홈 주소로 사용
- 공식:
h(k) = mid(k²) - 특징: 키 값 분포가 고르지 않을 경우 충돌 가능성 높음
3. 폴딩(Folding)법
- 방식: 레코드 키 값을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR 연산한 값을 홈 주소로 사용
- 공식:
- Shift Folding:
h(k) = sum(parts) - Boundary Folding:
h(k) = XOR(parts)
- Shift Folding:
- 특징: 키 길이가 긴 경우 유용
4. 기수(Radix)변환법
- 방식: 키 숫자의 진수를 다른 진수로 변환 후, 주소 크기를 초과한 높은 자릿수는 절단하고 주소 범위에 맞게 조정
- 공식:
h(k) = trunc(convert(k, base)) - 특징: 키 값의 분포를 균일하게 만드는 데 효과적
5. 대수적 코딩(Algebraic Coding)법
- 방식: 키 값을 다항식의 계수로 간주하고, 해시표 크기에 의해 정의된 다항식으로 나눈 나머지 다항식의 계수를 홈 주소로 사용
- 공식:
h(k) = coefficients(k(x) % p(x)) - 특징: 수학적 복잡성 높으나 충돌 최소화 가능
6. 계수분석법(숫자분석법)
- 방식: 키 값을 이루는 숫자의 분포를 분석하여 고른 자리를 선택해 홈 주소로 사용
- 공식:
h(k) = select_uniform_digits(k) - 특징: 키 값의 특정 부분만 사용하므로 간단
7. 무작위법
- 방식: 난수를 발생시켜 나온 값을 홈 주소로 사용
- 공식:
h(k) = random() - 특징: 충돌 가능성 낮으나 재현성 없음
인터페이스 구현 검증 도구의 종류
- xUnit : Java(Junit), C++(Cppunit), .Net(Nunit)와 같이 다양한 언어를 지원하는 단위 테스트 프레임워크
- STAF : 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
- FitNesse : 웹 기반 테스트 케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
- NTAF : FitNesse의 장점인 협업과 STAF의 장점인 재 사용 및 확장성을 통합한 NHN(Naver)의 테스트 자동화 프레임워크
- Selenium : 다양한 브라우저 및 개발 언어를 지원하는 웹 어플리케이션 테스트 프레임워크
- watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
단위 테스트 도구
- CppUnit : C++ 프로그래밍 언어용 단위 테스트 도구
- JUnit Java : 프로그래밍 언어용 단위 테스트 도구
- HttpUnit : 웹 브라우저 없이 웹 사이트 테스트를 수행하기 위해 사용되는 오픈소스 테스트 프레임워크
테스트
- 테스트 케이스(Test Case)
- 구현된 SW가 사용자 요구사항을 정확하게 준수했는지 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서이다.
명세 기반 테스트의 설계 산출물에 해당된다.
테스트 스크립트(Test Script) : 자동화된 테스트 실행 절차에 대한 명세서
테스트 스위트(Test Suites) : 시스템에 사용되는 테스트 케이스의 집합
테스트 드라이버(Test Driver) : 테스트 대상의 하위 모듈을 호출하고 모듈 테스트 수행 후의 결과를 도출하는 도구
v-모델 테스트
요구사항 분석 → 시스템 설계 → 아키텍처 설계 → 모듈 설계 → 코딩 ↓ ↓ ↓ ↓ 인수 테스트 ← 시스템 테스트 ← 통합 테스트 ← 단위 테스트
▶ 왼쪽 축: 개발 단계
- 요구사항 분석
- 목적: 사용자 요구사항 명확화
- 산출물: 요구사항 명세서(SRS)
- 시스템 설계
- 목적: 전체 시스템 구조 설계
- 산출물: 시스템 설계 문서
- 아키텍처 설계
- 목적: 하위 시스템 및 모듈 설계
- 산출물: 아키텍처 설계 문서
- 모듈 설계
- 목적: 개별 모듈의 상세 설계
- 산출물: 모듈 설계 문서
- 코딩
- 목적: 실제 코드 구현
- 산출물: 소스 코드
▶ 오른쪽 축: 테스트 단계
- 단위 테스트(Unit Test)
- 목적: 개별 모듈의 기능 검증
- 대상: 소스 코드
- 테스트 기법: 화이트박스 테스트
- 산출물: 단위 테스트 결과 보고서
- 통합 테스트(Integration Test)
- 목적: 모듈 간 상호작용 검증
- 대상: 모듈 간 인터페이스
- 테스트 기법: 블랙박스 테스트
- 산출물: 통합 테스트 결과 보고서
- 시스템 테스트(System Test)
- 목적: 전체 시스템의 기능 및 비기능 요구사항 검증
- 대상: 전체 시스템
- 테스트 기법: 블랙박스 테스트
- 산출물: 시스템 테스트 결과 보고서
- 인수 테스트(Acceptance Test)
- 목적: 사용자 요구사항 충족 여부 검증
- 대상: 최종 제품
- 테스트 기법: 블랙박스 테스트
- 산출물: 인수 테스트 결과 보고서
분석 도구
- 정적 분석 도구 : pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등
- 동적 분석 도구 : Avalanche, Valgrind 등
소프트웨어 테스트 원칙
- 테스팅은결함이 존재함을 밝히는 활동 : 테스트에서 결함을 찾지 못하더라고 그 SW에 결함이 없다고 할 수는 없음
- 완벽한 테스팅은 불가능 : 모든 가능성에 대해 테스팅하는 것은 불가능함
- 개발 초기에 시작 : 개발 초기 단계에서 테스트를 하면 초기에 결함을 발견할 수 있음
- 결함에 집중 : 대다수의 결함은 소수 특정 모듈에 집중되어 결함이 발생되는 경우가 많음
- 살충제 패러독스 (Pesticide Paradox) : 테스트 케이스로 동일한 절차를 반복 수행하면 새로운 결함을 찾을 수 없음
- 정확(Context)에 의존적 : 테스팅은 정황에 따라 진행되므로, SW에 따라 테스팅도 달라짐
- 오류 부재의 궤변 : 갤발된 시스템이 사용자의 요구사항을 만족하지 못하거나 사용성이 낮다면 오류를 발견하고 제거해도 품질이 높다고 말할 수 없음
검증-확인
- 검증(Verification) : 기능을 제대로 수행하고 명세서에 맞게 만들 어졌는지 개발자의 입장에서 점검하는 것
- 리팩토링(Refactoring) : 결과를 유지하면서 내부의 코드 구조를 재조정하는 것
- 디버깅(Debugging) : 프로그램에서 발견되는 버그를 찾아 수정하는 것
- 확인(Validation) : 개발된 소프트웨어가 요구사항을 만족시키는지 사용자의 입장에서 확인하는 것