C05 프로젝트 관리1. 프로젝트 관리 필요성프로젝트 실패의 원인: 소프트웨어 마인드 부족, 적절한 기술 활용 못함, 프로젝트 관리 기술 부족프로젝트 관리의 정의프로젝트 관리의 정의: 개발자 또는 개발 팀이 프로젝트 목표를 효율적이고 효과적으로 달성하는 데 필요한 내적 환경 요소를을 준비하고 유지하는 활동프로젝트 관리 단계프로젝트 관리 단계계획 수립: 개발 목적, 필요 자원, 정보의 흐름, 소요 인력, 산출물 정의자원 획득: 계획단계에서 예측한 장비/시설/ 확보, 팀 구성, R&R 지정실행: 수행 계획서에서 정의한 일정대로 개발, 진도 관리, 품질/리스크 관리모니터링: 계획한 베이스라인에 근거하여 진척도를 관리소프트웨어 개발의 가장 중요한 요소는 능력있는 개발 팀을 구성하는 것프로젝트 관리의 실패 원인부..
C01 소프트웨어 공학 개요소프트웨어 위기소프트웨어 개발이 어려운 이유의사소통의 문제시스템의 순차 특성개발의 의한 결과물프로젝트의 복잡한 특성개발자의 특성다양한 관리 이슈소프트웨어의 특성 정보분석 및 설계 40%, 개발 20%, 테스트 40%운영 유지 비용 67%, 개발 비용 33%소프트웨어 공학 기술의 적용IDE소프트웨어 프로토타이핑소프트웨어 개발 프로세스폭포수, 점진적, 프로토타입, 나선형, V 모델, 에자일소프트웨어 검사 및 검증소프트웨어 형상 관리소프트웨어 아키텍처소프트웨어 공학의 원리엄격성과 정형성관심사의 분할모듈화추상화변경의 예측일반화점진성명세화C02 소프트웨어 품질소프트웨어 품질의 중요성소프트웨어 품질 요소외적 품질 요소정확성: 소프트웨어가 명세서 대로 동작하는지신뢰성: 소프트웨어 사용시 오..
어셈블리어에서 movq(mov)는 크게 헷갈리지 않는다. 특정값을 이동하는 것. 괄호()로 쌓여있으면 주소에 접근하여 이동한다. 이때 source는 Register, Memory, Immediate 모두가 가능하고, dest는 Register와 Memory만 가능하다. 또한 D(Rb, Ri, S) 연산도 가능하다. 그렇다면 leaq(lea)는 무엇일까? lea는 Load Effective Address로, 뭔가 효율적인 '주소' 연산을 위해 설계된 것이다. lea의 헷갈리는 점은 바로 기본적으로 source에 괄호()를 사용한다는 것이다. 괄호는 해당 Register에 있는 주소에 접근하는 포인터의 역할을 하는데, lea에서는 딱히 포인터라고 하기는 애매한 느낌이 있다. 다른 헷갈리는 점은 주소 연산을 ..
Directed graph란 유방향 간선으로 이루어진 그래프를 의미합니다. 이에 대치되는 개념은 앞선 시간에서 살펴보았던 undireced graph, 즉 무방향 간선으로 이루어진 그래프입니다. Directed graph에서 간선 정리 Undirected graph에서 그래프 탐색을 할 때는 DFS의 경우 unvisited, discovery, back edge의 3가지 간선 종류가 있었고, BFS의 경우에는 unexplored, discovery, cross edge의 3가지 간선 종류가 있었습니다. Directed graph의 탐색된 간선은 4가지가 있는데, 이를 정리해 보도록 하겠습니다. 정점 v에서 시작하여 DFS와 BFS 등으로 탐색된 경로가 정점 v를 루트로 하는 트리와 같은 형식이라는 것을 ..
Breadth First Search(BFS)는 그래프 탐색 방식중 하나이다. BFS는 시작 정점을 기준으로 가까운 정점부터 차례대로 방문하는 방식이다. 이런 특성을 통하여 가중치가 없는 간선 그래프에서 가장 가까운 경로를 발견할때 사용할 수 있다. 구현 시작 정점 v에서 출발하고, 큐 Q에 시작 정점을 추가하고 VISITED 상태로 만든 후 다음 과정을 반복한다. 1. Q가 비었다면 종료한다. 정점이 있다면 해당 정점 v에 대하여 다음을 실행한다 2. v에 인접한 정점중 UNVISITED인 정점을 큐에 삽입하고, VISITED상태로 변경한다. 용어 unvisited vertex: 아직 방문하지 않은 정점 visited vertex: 방문한 정점 unexlored edge: 아직 방문하지 않은 간선 di..
Depth First Search(DFS)는 그래프 탐색 방식중 하나이다. DFS의 방식은 분기점이 생겼을시, 우선 무시하고 한 방향의 끝에 다다를때 까지 진행한 후, 하나의 경로를 완전히 탐색했으면, 분기점으로 돌아가 분기점을 탐색하는 방식이다. 구현 시작 정점 v에서 출발하여, 다음과 같은 과정을 거친다. 1. 현재 정점이 VISITED라면 재귀를 종료하고 다시 돌아가기 2. 현재 정점을 VISITED로 설정(중복 방문을 막기 위하여) 3. 연결되어 있는 다른 정점 탐색 4. 연결된 모든 다른 정점에 대하여 해당 알고리즘 반복 용어 unvisited vertex: 아직 방문하지 않은 정점 visited vertex: 방문한 정점 unvisited edge: 아직 방문하지 않은 간선 discovery ..
그래프는 정점과 간선의 집합으로 이루어진 자료구조이다. 정점(vertex)는 노드(node)라고도 부른다. 간선(edge)는 정점의 쌍으로 표현되는데, 간선을 통해서 정점 사이를 이동할 수 있다. 이때 간선에 방향이 존재하면 directed edge, 존재하지 않으면 undirected edge라고 하는데, 모든 간선이 directed edge인 그래프를 directed graph, 모든 간선이 undirected edge인 그래프를 undirected graph라고 한다. 용어 directed edge: 방향이 존재하는 간선. undirected edge: 방향이 존재하지 않는 간선. directed graph: 모든 간선이 directed edge인 그래프. undirected graph: 모든 간선..
해시 테이블(Hash table) 해시 테이블은 해시 함수를 이용하는 자료구조로 dictionary의 기능을 한다. 기본적인 원리는 적당한 크기의 공간(배열)을 할당해 두고, 특정 키 x로 접근할 시에 해당 키를 해싱하여 나온 값 h(x)를 배열의 인덱스로 이용하여 배열을 즉시 탐색하는 방식이다. 이진 탐색 트리와의 비교 해시 테이블은 맵 자료구조를 만들 때 유용한데, 이전에 소개한 이진 탐색 트리가 O(h)에 접근이 가능한 것과 달리 O(1)에 접근이 가능하다. 그러나 이진 탐색 트리는 범위를 두고 쿼리가 가능한 반면, 해시 테이블은 정확한 키값을 지정해 줘야 탐색이 가능하다. 공간 면에서도 이진 탐색 트리는 당장 필요한 만큼의 공간을 사용하지만, 해시 테이블은 사용할 공간을 에측해서 미리 할당해 두어..
이전 시간에 살펴보았던 이진탐색트리는 O(h)의 시간 복잡도를 가지기에, 높이의 균형을 유지하여야 O(log n)의 효율을 유지할 수 있었다. 이렇게 밸런스를 유지하는 방법으로는 height-balanced와 weight-balanced의 방식이 있는데 그중 height-balanced 트리는 대표적으로 AVL 트리와 레드-블랙 트리가 존재한다. 이번 글에서는 이 중 AVL 트리에 대해서 다루어 보려 한다. AVL 트리 AVL 트리의 정의는 모든 노드 v에 대하여 v 양옆의 자식들의 높이(height) 차이가 1 이하인 이진탐색트리를 의미한다. AVL트리의 효율 증명 이러한 방식으로 AVL트리를 제작했을 때 이 효율이 O(log n)인 것의 증명을 서술...나중에 한다. ADT search(key) in..
이진 탐색 트리는 이진트리로서, 중위순회(In-order traversal) 시 정렬된 형태라는 특징을 가지고 있다. ADT lookup(key): key값을 가지는 노드를 리턴하고, 없다면(NULL일시) NULL의 부모를 리턴한다 put(key): key값을 가지는 노드에 삽입한다. delete(key): key값을 가지는 노드를 삭제한다. 구현 이진탐색트리 구현의 핵심은 계속 중위순회순으로 정렬된 상태를 유지하는 것이다. 탐색 루트에서 시작해서 노드의 값이 탐색값보다 크면 left child로 탐색, 작으면 right child로 탐색을 반복하면 된다. 삽입 삽입은 탐색을 한 후 값을 변경하거나 추가만 해주니 단순하다. 경우를 나누어 보자면, 탐색하여 노드를 발견했다면 그대로 값을 수정하면 되고, 값..