[topcit] 소프트웨어 개발
- I. 소프트웨어 공학 개요
01. 소프트웨어 공학의 배경과 목적
가) 소프트웨어 공학 소개
3가지 핵심 요소 : 프로세스, 전문지식을 갖춘 조직 및 인력, 기술
나) 소프트웨어 공학 배경
다) 소프트웨어 공학의 4가지 중요요소
소프트웨어 공학 : "소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문"
- 방법 : 자료구조, 알고리즘, 코딩 등과 같은 작업들로 구성
- 도구 : 생산성 혹은 일관성을 목적으로 사용하는 방법들을 자동화나 반자동화시켜 놓은 것
- 절차 : 방법과 도구 결합하여 소프트웨어 합리적이게 개발할 수 있게 함
- 사람 : 소프트웨어 공학에서는 사람에 대한 의존성이 상대적으로 큼
02. 소프트웨어 개발 생명주기
가) 정의
소프트웨어 생명주기
: 타당성 검토 -> 개발계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 운용 -> 유지보수
나) 목적
: 프로젝트 관리
다) 소프트웨어 생명주기 선정
: 프로젝트를 잘 실행하고 리스크를 최소화할 수 있어야겠지.
라) 소프트웨어 생명주기 모델 종류
자세한 정보는 생략했으니 깊게 공부하고 싶다면 원본을 보도록 하자.
1. V모델
: 프로젝트 적용, 관리 용이
: 프로젝트의 검증 및 확인을 강조하는 모델
2. VP모델(V Model with Prototyping)
프로토타이핑 : 리스크 등을 해결하기 위해 시스템 혹은 일부분을 빠르게 개발하는 방법
접근방법 1
불확실성 요소 정의 - 해결책 찾고 적용하기위한 방법 정의 - 해결책 정용해봄(반복 수행 ㄱㄴ) - 결과를 통해 불확실성 요소 원인 찾기
=> 문제가 명확하지 않을 때 적용
접근방법 2
불확실성 요소 정의 - 해결책 열거, 선택 기준 정의 - 선택 기준에 따라 해결책 평가 - 가장 적합한 해결책 선택
=> 해결책에 리스크 등이 존재하는 경우에 적용함
3. 점증적 모델
: 시스템 개발 시간 줄일 때 유용함
: V모델, VP모델 모두 적용 가능
4. 진화 모델
: 시스템에 대한 초기 교육 가능
: 개발 기간 단축
03. 소프트웨어 개발 방법론
가) 소프트웨어 개발 방법론의 필요성
- 개발 생산성 향상
- 효과적인 프로젝트 관리
- 의사소통 수단 제공
- 일정 수준의 품질 보증
나) 소프트웨어 개발 방법론 비교
다) 소프트웨어 개발 단계
- 요구사항 분석
- 설계
- 구현
- 테스팅
무슨 의미인지 알것같으니 자세한 설명은 생략함
04. 애자일 개발 방법론
가) 애자일 방법론 종류
스크럼, 린 소프트웨어 개발 방법론, 익스트림 프로그래밍(XP)...
나) 애자일 개발 방법론 - XP
1. XP 개요
2. XP 개발절차 및 용어
유저 스토리 : 요구사항 수집, 필요내용 간단 기재
스파이크 : 어려운 요구사항을 고려한 간단한 프로그램, 사용자 스토리의 신뢰성 증대, 기술 문제 위험 감소
릴리즈 : 배포계획 수립하여 균일 유지
3. XP가치
의사소통, 단순성, 피드백, 용기, 존중
4. XP 실천방법
5가지 가치 외에 12가지 실천방법 제시
다) 스크럼
1. 스크럼 개요
2. 스크럼 프로세스
3가지 미팅 : 일일 스크럼, 스프린트 계획, 스프린트 리뷰
3가지 산출물 : 제품 백로그, 스프린트 백로그, 소멸 차트
3. 스크럼 특징
투명성
타임박싱 : 스크럼 진행하는데 들어가는 시간 제한, 주기적 진행
커뮤니케이션
경험주의 모델
II. 소프트웨어 재사용
01. 소프트웨어 재사용
가) 소프트웨어 재사용 개요
소프트웨어 재사용 : 자산(기존의 소프트웨어나 지식)을 활용해 새로운 소프트웨어 구축하는 것
자산 - 설계, 요구명세, 검사, 아키텍처 등 포함
1. 소프트웨어 재사용 배경
: 생산성 저하, 등
2. 소프트웨어 재사용 정의
: 개발 생산성을 높이기 위하여 반복적으로 사용하기에 적합하도록 구성하는 방법
: 품질 생산성 신뢰성 향상, 개발일정 비용 감소
3. 소프트웨어 재사용 목적
: 신뢰성, 확장성, 생산성
나) 소프트웨어 재사용 대상
- 일반적 지식
- 설계 정보
- 데이터 정보
- 프로그램 코드
- 기타 (투자 대 효과 분석정보, 사용자 지침서, 타장성 조사방법 및 결과, 프로토타입, 인력)
다) 소프트웨어 재사용의 원칙
- 범용성
- 모듈성
- 하드웨어 독립성
- 소프트웨어 독립성
- 자기문서화 : 모듈의 정확한 기능, 용법, 인터페이스를 기술함
- 일반성
- 신뢰성
라) 실무에서 재사용 구현의 문제점
: 표준화가 부족하고~ 비현실적이고~ 이해가 곤란하고~ 등
마) 소프트웨어 재사용의 장애요인 및 대책
1. 장애요인
- 거부반응, 동기 결여, 표준화 부재, 사회적 또는 법적 장애
2. 장애요인 제거 대책
기술적
- 새로운 설계, 방법론 활용
- 재사용 라이브러리 구축
- 자동화 도구 활용
관리, 제도적
- 보상제도 확립
- 능동적인 경영전략
- 조직 변화
바) 재사용 적용시 고려사항
사) 소프트웨어 재사용 효과
02.역공학
역공학 : 이미 만들어진 시스템을 역으로 추적하여 처음 문서나 설계기법 등의 자료 얻는 것
소프트웨어 유지보수 단계에서 수행
장점
: 이미 개발된 소프트웨어 분석 도와줌
: 유지 보수성 향상
III. 자료구조와 알고리즘
01. 자료구조
가) 정의
자료를 컴퓨터의 기억장치 내에 저장하는 방법, 자료의 특성과 사용 용도를 고려하여 조직적, 체계적으로 정의한 것
나) 분류
자료구조 : 선형구조/ 비선형 구조
선형구조 : 1:1 관계
비선형 구조 : 1:다/ 다:다관계
순차자료구조
: 메모리저장을 빈자리 없이 순서대로 연속적으로 저장
: 논리적인 순서와 문리적 순서가 일치함
: 삽입 삭제 연산을 해도 빈자리가 없기 때문에 자료가 순서대로 연속하여 저장
: 배열을 이용한 구현
연결자료구조
: 메모리에 저장된 물리적 위치나 순서에 상관없이 링크에 의해 논리적인 순서 표현하는 방식
: 논리적 순서와 물리적 순서 일치하지 않음
: 삽입 삭제 연산으로 논리적 순서가 변경되어도 링크정보만 변경되어 물리적 순서 변경X
: 포인터를 이용한 구현
다) 스택과 큐
1. 스택(Stack)
: 선형리스트의 하나로 입력된 순서로 저장되어 LIFO출력
스택 연산 종류
- top() : 맨 위에 있는 데이터 반환
- push() : 스택에 데이터 삽입
- pop() : 스택에서 데이터 삭제하여 반환
- isemply() : 스택에 원소가 없으면 true 반환, 값을 반환하고 있으면 false값 반환
- isfull() : 스택에 원소가 없으면 false값 반환, 값을 반환하고 있으면 true값 반환
2. 큐
: 스택과 유사하지만 데이터가 삽입되는 곳과 삭제되는 곳이 다른 자료구조
: 뒤에서만 삽입되고 앞에서는 삭제만 할 수 있는 구조
: 가장 먼저 삽입한 원소는 가장 먼저 삭제됨
큐의 연산
- enQueue : 큐에 데이터 삽입, rear를 움직여 큐의 공간 확보한 후 데이터 삽입
- deQueue :큐에서 데이터 삭제, front를 움직여 가장 오래된 데이터를 다음 번째 데이터로 넘기게 됨.
3. 스택과 큐 연산 비교
라) 트리와 그래프
1. 트리
: 원소들 간데 계층관계를 가지는 계층형 자료 구조, 1대 다 관계
: 루트노드, 간선, 형제노드, 서브트리
2. 그래프
: 연결되어 있는 원소 사이의 다대다 관계를 표현하는 자료구조
: 정점, 간선의 집합
인접행렬 : 순차 자료구조를 이용한 그래프 구현방식, 2차원 배열을 사용하여 그래프의 두 정점을 연결한 간선의 유무로 행렬 저장하는 방식
인접리스트 : 연결 자료구조를 이용한 그래프 구현방식, 각 정점에 대한 인접 정점들을 연결하여 만든 단순 연결 리스트로 각 정점의 차수만큼 노드를 연결하는 방식
마) 자료구조의 선택 기준
- 자료의 처리시간
- 자료의 크기
- 자료의 활용 빈도
- 자료의 갱신 정도
- 프로그램의 용이성
바) 자료구조의 활용
데이터의 정렬, 검색, 파일 편성 및 인덱스등에서 주로 활용됨
02. 알고리즘
가) 알고리즘 개요
1. 알고리즘의 정의
주어진 문제를 해결하기 위한 일련의 처리 절차를 단계저그올 기술한 것으로 문제 해결 방법을 추상화하여 단계적 절차를 논리적으로 기술해 놓은 명세서
=> 처리시간이나 기억장소 사용 측면에서 효율적인 알고리즘 개발하는 것
2. 알고리즘 조건
나) 알고리즘 분석 기준
- 정확성
- 알고리즘이 타당한 입력에 대해서 유한 시간 내에 올바를 결과를 산출하는 가를 판단
- 작업량
- 알고리즘 수행하는데 걸리는 수행 횟수
- 기억 장소 사용량
- 알고리즘이 수행되는 동안 데이터와 정보 등을 저장하기 위해 필요한 컴퓨터 메모리의 사용량
- 최적성
- 시스템의 사용환경(수행량, 메모리 사용량 등)을 고려할 때 그 알고리즘보다 더 적합한 알고리즘이 없다는 것
- 단순성
- 얼마나 이해하기 쉽게 명확하게 작성되었는지
다) 알고리즘 표현 방법
라) 알고리즘 성능 분석
- 공간 복잡도
- 알고리즘을 프로그램으로 실행하여 완료하기까지 필요한 총 저장공간
- 공간 복잡도 = 고정 공간량 + 가변 공간량
- 고정 공간량 : 프로그램, 변수 및 상수들과 같이 프로그램의 크기나 입출력 횟수에 상관없이 고정적으로 피룡한 저장 공간
- 가변 공간량 : 프로그램 수행과정에서 사용하는 자료와 변수들을 저장하는 공간과 함수 실행에 관련된 정보를 저장하는 공간
- 시간 복잡도
- 시간복잡도 = 컴파일시간 + 실행시간
- 컴파일시간 : 프로그램 특성과 관련이 적은 고정적인 시간, 컴파일이 되면 프로그램의 수정이 일어나지 않는 한 일정하게 유지
- 실행시간 : 프로그램의 실행시간으로 컴퓨터의 성능 등에 의존하므로 실제 정확한 실행시간을 측정하기 보다는 명령문의 실행 빈도수를 구하여 계산
알고리즘 비교 시에는 주로 실행 시간을 사용하여 시간복잡도로 나타낼 빅-오 표기법 사용하여 O(n)로 표기
마) 정렬 알고리즘
- 정렬의 분류
- 내부 정렬 : 소량의 데이터에 대해 주기억 장치에 올려서 정렬하는 방식, 데이터 양 제한
- 외부정렬 : 대량의 데이터에 대해 보조 기억장치에서 정렬하는 방식, 몇개의 서브 파일로 나누어 내부 정렬 할 후 보조기억장치에서 정렬된 각 서브 파일들을 병합하는 방식으로 속도가 느림
- 내부 정렬 알고리즘의 분류
3. 버블정렬
바) 검색 알고리즘
1. 검색 알고리즘 개요
: 데이터의 정렬 여부에 따라 순차검색, 제어검색
2. 검색 알고리즘의 분류
사) 그래프 탐색 알고리즘
- 그래프 탐색
- 하나의 정점에서 시작하여 그래프에 있는 모든 정점을 한 번식 방문하여 처리하는 연산
- 깊이 우선 탐색(DFS)
- 왼쪽부터 시작
- A -B-F-G-C-H-I-N-D-J-O-P-E-K-L-Q-M
3. 너비 우선 탐색(BFS)
- A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q
- 인접해있는 노드 방문
아) 최소 신장 트리(Minimum Spanning Tree)
- 최소 신장 트리
- 신장 트리 : 무방향 가중치 그래프 내 모든 정점을 포함, 서로 연결, 사이클을 포함해서는 안되는 트리.
- 최소 신장 트리 : 가중치의 합이 최소인 신장 트리 - 크루스칼, 프림 알고리즘
- 크루스칼 알고리즘
- 연결된 간선 중 가중치 최소인 간선 선택, 사이클 만드는지 체크함
- 가중치가 작은 간선을 순서대로 선택
- 프림 알고리즘
- 임의의 한 정점을 선택하여 최소 신장 트리부분에 방문하지 않은 새로운 정점과 간선을 선택하여 확장
IV. 소프트웨어 설계 원리와 구조적 설계
추가적인 내용의 자료는 topcit 홈페이지에서 찾을 수 있음