2과목 중 잘 안 외워지는 것 위주로 정리해봤습니다.
자료구조
선형 구조
배열, 선형 리스트(연속리스트, 연결리스트), 스택, 큐, 덱
연속 리스트 : 배열 사용, 삽입·삭제 시 자료 이동 필요
연결 리스트 : 포인터 사용, 접근 속도 느림, 노드 삽입·삭제 작업 용이
스택 : LIFO 구조(Last In First Out, 후입선출)
→ 오버플로우, 언더플로우 발생
큐 : FIFO 구조(First In First Out, 선입선출)
비선형 구조
트리, 그래프
- 디그리 : 노드에 뻗어나온 가지 수
- 단말노드(Terminal Node) : 자식이 없는 노드
- 트리의 디그리 : 노드들의 디그리 중 가장 많은 수
트리 순회 방법
- 전위 순회(Pre-Order) : 중왼오
- 중위 순회(In-Order) : 왼중오
- 후위 순회(Post-Order) : 왼오중
모듈 연계
단위모듈
단위 기능 명세서 작성 → 입출력기능 구현 → 알고리즘 구현
입출력 기능 구현
IPC(Inter Process Communication) : 모듈 간 통신 구현에 쓰이는 프로그래밍 인터페이스
→ 공유 메모리, 소켓, 세마포어(공유 자원 접근 제어), 파이프(선입선출 메모리 여러 프로세스 공유), 메시지 큐잉(메시지 발생 시 전달)
제품 소프트웨어 메뉴얼 작성
국제 제품 품질 표준
- ISO/IEC 9126 : 품질·특성 정의
- ISO/IEC 14598 : 품질 향상 및 품질 선정 기준 제공
- ISO/IEC 12119 : 품질 요구사항 및 테스트 국제 표준
- ISO/IEC 25000 :
소프트웨어 품질 평가 통합 모델
, 4+1 구조
국제 프로세스 품질 표준
- ISO/IEC 9001 : 품질 보증
- ISO/IEC 12207 : 체계적 관리
- ISO/IEC 15504
(SPICE)
: 프로세스 평가 및 개선으로 품질 향상
CMMI : 기존 CMM 모델 통합, ISO/IEC 15504(SPICE) 준수
소프트웨어 공학
- 브룩스 법칙 : 인력 추가는 생산성 향상이 아닌 방해
- 파레토 법칙 : 소프트웨어 모듈 20%에서 80%의 결함 발견
- 롱테일 법칙 : 80% 다수가 20% 소수보다 뛰어난 가치 창출(파레토 반대)
소프트웨어 버전 관리
소프트웨어 버전 등록 관련 주요 용어
Repository, Import, Check-Out, Check-In, Commit, Update
소프트웨어 버전 등록 과정
가져오기Import → 인출Check-Out → 예치Commit → 동기화Update → 차이Diff
애플리케이션 통합 테스트
개발 단계에 따른 애플리케이션 테스트
단위 테스트
구조 기반 테스트(화이트박스, 제어흐름 및 조건 결정), 명세 기반 테스트(블랙박스, 동등 분할 및 경계값 분석)
통합 테스트
- 비점진적 통합 방식
모듈 미리 결합 후 프로그램 전체 테스트, 빅뱅 통합 테스트, 오류 발견 및 장애 위치 파악 어려움
- 점진적 통합 방식
하향식 / 상향식 / 혼합식으로 구분
하향식 통합 테스트
- 상위 → 하위로 내려가면서 통합 테스트
- 깊이 우선 통합법, 넓이 우선 통합법
- 스텁Stub : 상위 모듈 가진 채 하위 모듈 대체
상향식 통합 테스트
- 하위 → 상위로 올라가면서 통합 테스트
- 주요 제어 모듈과 클러스터 필요
- 드라이버Driver : 상위 모듈 없이 하위 모듈 구동
혼합식 통합 테스트
회귀 테스팅
시스템 테스트
기능적 요구사항(명세서 기반 블랙박스)
비기능적 요구사항(구조적 요소 화이트박스)
인수테스트
사용자 요구사항 충족 중점, 사용자 직접 테스트
- 사용자 인수 테스트
- 운영상의 인수 테스트
- 계약 인수 테스트
- 알파 테스트 : 사용자가 개발자 앞에서 수행
- 베타 테스트 : 사용자가 직접 테스트
애플리케이션 성능 개선
알고리즘 기법
- 분할과 정복(Divide and Conqure) : 작은 문제로 분할하여 문제 해결
- 동적 계획법(Dynamic Programming) : 문제를 더 작은 문제의 연장선으로 생각
- 탐욕법(Greedy) : 그 순간 최적이라 생각되는 해답을 선택
- 백트레킹(Back Tracking) : 유망성 점검 후 유망하지 않을 시 부모노드로 돌아가 다른 자손 노트 검색부모노드로 돌아가 다른 자손 노트 검색(해답 찾다가 답이 안 나오면 이전으로 돌아가 다시 답 찾기)
모듈 연계
시간 복잡도
O(1) : 해시함수. 입력데이터 관계없이 일정
O(logⁿ) : 이진탐색 (데이터 크기가 커질수록 처리시간이 로그만큼 짧아짐)
O(n) : 순차탐색 (데이터 크기-처리시간 비례)
O(Nlog2ⁿ) : 퀵정렬, 병합정렬
O(N²) : 거품, 삽입, 선택정렬
모듈 연계를 위한 인터페이스 기능 식별
EAI(Enterprise Application Integration)
- Point-to-Point : 1:1 연결, 변경 및 재사용 어려움
- Hub & Spoke : 허브 시스템 통한 중앙 집중형 방식, 허브 장애 시 전체 시스템에 영향
- Message Bus : 애플리케이션 사이 미들웨어, 대용량 처리 가능
- Hybrid : Hub & Spoke + Message But 혼합, 그룹 내에선 Hub Spoke / 그룹 간 Message Bus 이용, 데이터 병목 현상 최소화
ESB(Enterpirse Sevice Bus)
표준 기반 인터페이스 제공. 서비스 중심, 결합도 약하게 유지
인터페이스 기능 구현
시큐어 코딩 가이드
- 입력데이터 검증 및 표현
- 보안 기능
- 시간 및 상태
- 에러 처리
- 코드 오류
- 캡슐화 API 오용
암호화 전송 시 보안 채널
인터페이스 구현 검증 도구
- xUnit : Java, C++, .Net 다양한 언어 지원
- STAF : 서비스 호출 및 컴포넌트 재사용 다양한 환경 지원
- FitNesse : 웹 기반 테스트 지원
- NTAF : FitNess 협업 기능 + STAF 재사용 확장성 통합, NHN 프레임워크
- Selenium : 다양한 브라우저 및 개발 언어 지원
- watir : Ruby 사용