[TOPCIT 목차]

 

01.아키텍처설계

    가) 소프트웨어 아키텍처 개요

- 소프트웨어 개발에 직간접적으로 영향을 미치고 복잡도를 높이는 다양한 요소들을 체계적으로 다루기 위한 개발 대상 소프트웨어 청사진이라고 볼 수 있다. 

- Booth : 소프트웨어 구조에 대한 중요한 의사결정 집합

- Myon Ahn : 모듈 , 프로세스 , 데이터 , 이들의 구조, 구성 요소들 간의 관계, 이러한 구성요소와 관계가 어떻게 확장 및 수정 될 수 있을지, 사용하는 기술은 무엇으로 이루어져 있으며 소프트웨어 아키턱처를 통해 시스템 유연성과 성능 및 시스템을 어떻게 구현하고 수정할 수 있는지를 판단할 수 있다

- 소프트웨어 아키턱처는 의사소통 수단 및 프로젝트 초기 의사결정 도구로 활용되며, 시스템 전체 구조 및 개발 프로젝트 조직 결정 시 참조되기도 한다.

구성요소  설명
Mission -이해관계자의 목적 달성을 위해 시스템이 수행하는 연산
System -시스템은 비즈니스 목적(Mission)을 완수해야 함
-특정 기능이나 기능 세트를 달성하기 위해 조직된 컴포넌트 집합
Environment -시스템에 대한 개발, 작동, 정책, 기타 여향요소들의 설정과 환경, 내부제약조건(내규), 외부제약조건(법규,제도), 하드웨어 시스템 등
Stakeholder -이해관계자들의 관심은 아키텍처로 수렴
-시스템에 관심을 갖는 사람이나 조직, 고객, 최종사용자, 개발자, 프로젝트 관리자, 유지보수자, 마케팅 담당자 등
Architecture -모든 시스템은 아키텍처를 가지고 아키텍처 기술서로 문서화되어 구체화, 아키텍처 결정의 근거(Rationale) 제시가 필수
Architecture Description -아키텍처를 기록하기 위한 산출물 의미
-이해관계자들의 시스템에 대한 관심을 관점(viewpoint)에 맞춰 작성한 뷰(view)로 구성
Rationale -아키텍처 기술서는 아키텍처 결정의 명확하 근거를 제시
-이해당사자간 불필요한 논쟁 감소, 아키텍처 평가 시 주요 판단 기준
View & Viewpoint -뷰포인트는 뷰를 구성하기 위한 규칙을 정의하는 패턴
-뷰포인트는 서로 다른 역할이나 책임으로 시스템이나 산출물에 대해 서로 다른 관점을 의미하고 뷰는 이런 이해관계자들과 이들이 가지는 생각이나 견해로부터 전체시스템을 표현하고 도식화한 것
Library Viewpoint -미리 정의해 놓은 뷰포인트, 이를 참조하여 해당 소프트웨어에 적합한 뷰포인트 결정
Concern -동일한 시스템에 대해 이해관계자들의 서로다른 의견과 목표 소유
-사용자는 기본적 기능 이외에 신뢰성, 보안, 사용성 등에 관심이 많고, 유지보수자는 유지보수 용이성에 , 개발자는 적은 비용과 인력으로 개발이 가능해야 함

    나) 소프트웨어 아키텍처 설계 절차

단계  활동 설명
요구사항분석 요구사항 분석 - 요구사항 수집, 식별, 명세, 분류, 검증
- 기능적/비기능적요구사항 분류 명세
아키텍처분석 품질요소 식별 - 기능성, 신뢰성, 효율성, 유지보수성, 이식성 
  품질요소 우선순위 결정 - 유틸리티 트리(품질요소의 목표  영향도 식별)
- 품질속성 시나리오 작성
아키텍처설계 관점  뷰의 정의 - 이해당사자 파악 이해당사자 관점,  정의
  아키텍처 스타일(패턴) 결정 - 파이프-필터스타일, MVC, 레이어  혼용 적용
  후보 아키텍처 도출 - 컨텍스트 다이어그램  각종 별로 다이어그램작성
- SAD(Software Architecture Description) 기술
아키텍처 평가 및 상세화 아키텍처 평가 - 아키텍처의 요구사항 만족 적합도 평가
- 품질속성 간의 Tradeoff 관계 평가(ATAM)
  아키텍처 상세화 - 설계 매커니즘도출(Persistency, Transaction )
  아키텍처 승인 - 고객  이해당사자 최종 승인

- 설계 초기 단계에서는 문제를 해결하기 위해 기능을 분할하거나 사용자 인터페이스를 논리적으로 분할한다.

- 상위레벨에서 분할한 시스템 구성 요소를 서브시스템(Subsystem)이라 부른다. 서브시스템은 일반적으로 자료와 제어구조를 포함하며, 독립적으로 기능을 수행할 수 있고 컴파일 될 수 있는 프로그램 구성요소를 일컫는다,

- 또한, 서브시스템은 어떠한 서비스 또는 기능을 제공하는가에 의해 구별된다.

- 프레임워크(Framework)는 서브시스템 설계 시 반복적으로 아키텍처 설계에 반영할 수 있는 지식을 모아 놓은 자원 단위.

- 프레임워크는 구체적인 서브시스템을 만들기 위해 확장될 수 있는 일반 구조를 나타내며, '프레임워크는 구체적인 구현방법 등을 제공함으로써 설계 추상화의 수준을 높인다.

- 아키텍처 설계는 시스템 요구사항을 만족시키기 위해 시스템 구성을 설정하는 프로세스이다. 요구사항 분석과정의 결과를 이용하여 프로그램 구조상에 있는 각 구성요소(모듈)들 사이의 관계를 기술한다. 

 

02.소프트웨어 아키텍처 스타일

스타일 개념도 설명
가) 저장소 구조
-모든 공유데이터를 한 곳에 보관
-모든 서브시스템들이 데이터 공유
-다량의 데이터를 저장하는데 적합
나) MVC(Model-View-Controller) 구조
-GUI설계에 많이 활용
-한 객체에 여러 가지 표현이 상호작용하도록 지원
-한 객체 수정시 다른 모든 표현도 따라서 갱신 , 이 방법으로 수정 단순화되며 재사용이 수월
다) 클라이언트-서버 모델
-서버와 클라이언트 집합으로 구성
-클라이언트가 서비스를 요구, 서버는 서비스를 제공
-분산 시스템에 적용
-네트워크 시스템을 효과적으로 이용
라) 계층구조
-시스템을 여러 계층으로 구성
-각 계층은 특정 서비스 제공
-계층구조는 문제해결 용이
-문제 발생하는 경우 각 층마다 단계적 확인되고, 장비가 표준화 되어 상호 호환 가능
-(예)osi 7 layer

 

03.소프트웨어 아키텍처 설계 표현 방법

설계 표현 방법 개념도 설명
가) 컨텍스트(Context) 모델
- 요구사항 분석 초기 시스템과 외부 환경의 경계 식별
- 분할되기 이전의 시스템을 하나의 큰 프로세스로 이해
- (목적) 1.개발해야할 시스템 영역 기술 2.시스템과 외부와 경계 결정 3.외부와의인터페이스 제시
나) 컴포넌트 다이어그램
- 컴포넌트(Component) : 소프트웨어 개발 속도와 생산성을 높이기 위해 재사용성(Reuseability)을 고려한 부품
- 컴포넌트 호환을 위해 컴포넌트 구현, 문서화 등에 대한 표준 정의 요구
- 컴포넌트 결합은 컴포넌트를 조립하는 프로세스
- 순차적 결합, 계층적 결합, 부가적 결합 등의 유형 
다) 패키지 다이어그램
- 패키지(Package) : 다수의 사용자를 위해 개발된 상업용 소프트웨어
- 패지지로 정의되면 패키지 내부의 자세한 사항을 외부에 감추어 패키지 사이의 의존 관계를 최소화 할 수 있다
- 패키지는 기능적으로 관련있는 클래스를 모아 놓은 것이다
- 패키지는 보통 서브시스템 형태로 나타난다
- 서브시스템들 사이의 연관 관계가 최소화되도록 서브시스템을 분할하면 객체사이의 의존을 최소화하고 복잡도를 줄일 수있다.

[TOPCIT 목차]

 

1.소프트웨어 설계원리

원리 설명
추상화 - 상위수준에서 제품의 구현을 먼저 생각하여 필수적인 것만  초점을 맞추는 것
정보은닉 - 각 모듈의 내부 내용을 감추고 인터페이스를 통해서만 메세지를 전달 할 수 있도록 하는 것 
단계적정제 - 프로그램의 구조에서 모듈에 대한 세부사항으로 내려가면서 구체화 되는 것
모듈화 - 소프트웨어의 성능을 향상시키거나, 프로그램의 시험, 통합 및 수정을 용이하게 하기 위하여 프로그램을  분해하고 추상화하는 설계 및 구현 기법
구조화 - 시스템의 중요 요소난 기능을 찾아 내어 분할 하는 과정

 - 설계 원리에 충실하여 좋은설계 지향

 

2.응집도와 결합도

1) 소프트웨어 응집도의 정의

- 정보은닉 개념의 확장개념으로, 하나의 모듈은 하나의 기능을 수행하는 집적성을 지칭함

응집도 설명
우연적 - 아무 관련성 없는 작업을 한 모듈에서 모음
논리적 - 유사한 성격의 작업들을 모음
시간적 - 같은 시간대에 처리되어야 하는 것들을 모음
절차적 - 모듈 진행 요소들이 서로 관계되어지고 순서대로 진행
통신적 - 동일한 입/출력 자료를 이용하여 서로 다른 기능을 수행하는 기능
순차적 - 작업의 결과가 다른 모듈의 입력자료로 사용
기능적 - 하나의 기능만 수행하는 모듈

- 응집도 높을수록 좋음

2)소프트웨어 결합도의 정의

- 모듈내부가 아닌 외부의 모듈과의 연관도(모듈간의 상호연관도)

응집도 설명
자료 - 모듈들이 간단히 변수를 파라미터로 교환
스탬프 - 모듈 사이에 자료구조 교환
제어 - 제어용 신호, 정보를 주고 받아 제어하는 경우
외부 - 모듈들이 소프트웨어의 외부환경과 연관 되는 경우
공통 - 많은 모듈들이 전역변수를 참조할 때 발생
내용 - 한 모듈이 다른 모듈의 내부 자료나 제어정보를 사용

- 결합도는 낮을수록 좋음

 

3.구조적 설계 방법

 - 시스템을 논리적으로 분할하여 모듈화 하고 하향식으로 세분화 하는 설계 작업

설계 방법 프로그램 구조 설명
변환 흐름 중심 설계
- 정보를 받아들여 가공 처리 후 결과를 외부세계에 출력하는 구조
트랜잭션흐름 중심 설계
- 행위 등을 유발시키는 시그널에 대해 평가하고 그 결과에 따라 여러 출력 중 하나의 흐름으로 설계하는 구조

 - 시스템에 따라 적절히 설계

[TOPCIT 목차]

 

1. 자료구조 (Data Structure)

가) 정의

- 컴퓨터에서 자료를 저장하고 사용하는 방법의 정의

 

나) 분류

1) 자료구조의 분류

- 선형구조 (Linear) : 자료간의 관계가 1:1로 나열

- 비선형구조 (Nonlinear) : 자료간의 관계가 N:N으로 배치

 

2) 저장방식의 비교

구분 순차자료구조 연결자료구조
메모리 저장 방식 순차 저장 임의 위치 저장
논리/물리 순서 일치 여부 일치 불일치
연산 특징 삽입/삭제시 물리적 위치 재조정 필요 삽입/삭제시 링크정보만 변경
프로그램 기법 배열을 이용한 구현 포인터를 이용한 구현

 

다) 스택과 큐

1) 스택 (Stack)

- 데이터 삽입(push), 삭제(pop)은 top 위치에서 실행

 

2) 큐 (Queue)

- 데이터 삽입(enQueue)은 rear, 데이터 삭제(deQueue)는 front 위치에서 실행

 

라) 트리와 그래프

1) 트리 ( Tree)

- 원소들 간에 1:N의 계층관계를 가지는 계층형 자료구조

항목 설명
루트 노드 (root node) 최상위 노드
부모 노드 (parent node) 해당 노드의 상위 노드
조상 노드 (ancestor node) 부모 노드를 포함한 상위 모든 노드(들)
자식 노드 (child node) 해당 노드의 하위 노드(들)
자손 노드 (descendant node) 자식 노드를 포함한 하위 모든 노드(들)
형제노드 (sibling node) 같은 부모 노드를 갖는 노드(들)
간선 (edge) 노드간의 연결선
서브트리 (subtree) 트리에서 생성되는 트리

 

2) 그래프 (Graph)

- 원소들 간의 N:N 관계를 표현하는 자려구조

(1) 그래프의 종류

종류 설명  
무방향
그래프
정점(vertex) 사이에 방향성이 없는 간선(edge)으로 연결된 그래프
방향
그래프
정점 사이에 방향성이 있는 간선으로 연결된 그래프
완전
그래프
모든 정점이 서로 연결된 그래프
가중
그래프
정점을 연결하는 간선에 가중치를 할당한 그래프

 

(2) 그래프 구현 방식

- 인접행렬 (Adjacency Matrix) : 순차 자료구조를 이용한 방식으로 간선의 유무를 행열로 저장하는 방식

- 인접리스트 (Adjacency List) : 연결 자료구조를 이용한 방식으로 각 정점의 차수만큼 노드를 연결하는 방식

 

마) 자료구조의 선택 기준

(1) 자료의 처리 시간

(2) 자료의 크기

(3) 자료의 활용 빈도

(4) 자료의 갱신 정도

(5) 프로그램의 용이성

 

바) 자료구조의 활용

분류 자료구조 활용
선형구조 리스트 - 배열의 구현
- DBMS 인덱스
- 탐색, 정렬 등
스택 - 인터럽트 처리
- 프로세스 호출의 순서 제어
- 후위 표기법 수식의 연산
- 텍스트 에디터 Undo 
- OS 작업 스케줄링
- 대기 행렬의 처리
- 비동기 데이터 교환 (파일 I/O, Pipe, Sockets)
- 키보드 버퍼
데크 - 스택과 큐의 혼합
비선형구조 트리 - 탐색, 정렬
- 문법의 파싱
- 허프만 코드
- 결정트리
그래프 - 컴퓨터 네트워크
- 전기회로 분석
- 이항 관계
- 연립방정식

 

2. 알고리즘 (Algorithm)

가) 알고리즘 개요

1) 알고리즘의 정의

- 문제 해결 방법을 추상화하여 단계적 절차를 논리적으로 기술한 명세서

 

2) 알고리즘의 조건

조건 설명
입력 (Input) 0개 이상 입력 제공
출력 (Output) 1개 이상 출력
명확성 (Definiteness) 각 처리단계 명령어들의 명세
유한성 (Finiteness) 수행 후 종료
효과성 (Effectiveness) 모두 실행가능한 명령어

 

나) 알고리즘 분석 기준

분석기준 설명
정확성 (Correctness) - 입력에 대한 정확한 결과 산출
작업량 (Amount of Work Done) - 알고리즘을 수행하는데 걸리는 수행 횟수
기억 장소 사용량
(Amount of Space Used)
- 컴퓨터 메모리의 사용량
최적성 (Optimality) - 사용환경을 고려한 최적성
단순성 (Simplicity) - 알고리즘 표현의 단순성

 

다) 알고리즘 표현 방법

표현 방법 설명
자연어 기술 일상 언어를 이용한 알고리즘 표현
순서도 표현 순서도나 NS차트를 이용한 알고리즘 표현
의사 코드 (Pseudo Code) 프로그래밍 언어와 유사한 형태로 알고리즘 표현

 

라) 알고리즘 성능 분석

항목 산출방법 설명
공간 복잡도 공간 복잡도 = 고정 공간량  + 가변 공간량 - 고정 공간량 : 입출력과 관계없이 고정된 공간
- 가변 공간량 : 수행과정에서 사용되는 공간
시간 복잡도 시간 복잡도 = 컴파일 시간 + 실행시간 - 컴파일 시간 : 컴파일 수행시간 (변동없음)
- 실행 시간 : 프로그램의 실행시간 (컴퓨터 성능과 비례)
** 객관적 지표를 위해 실제 실행시간보다 실행명령어 갯수로 사용

- 복잡도는 빅-오 표기법을 사용 ( O(n), O(log n), 등)

 

마) 정렬 알고리즘

1) 정렬의 분류

- 주기억장치에서 정렬하는 내부정렬, 보조기억장치에서 정렬하는 외부 정렬

항목 내부 정렬 외부 정렬
정렬 장소 - 주기억장치 - 보조기억장치
정렬 속도 - 빠른 정렬 속도 - 느린 정렬 속도
데이터량 - 주기억장치 용량에 따라 제한적 - 대량의 데이터
- 서브파일 분할 정렬

 

2) 내부 정렬 알고리즘의 분류

3) 내부 정렬 알고리즘의 수행시간 비교

정렬방법 설명 수행시간 추가
메모리
최악 평균 최선
삽입정렬 - 데이터의 정렬을 가정하고 해당 위치에 삽입 O(n^2) O(n^2) O(n) 없음
쉘정렬 - 데이터를 일정 기준으로 부파일로 쪼개고, 각 부파일의 삽입 정렬을 수행.
- 부파일의 크기를 눌리며 해당 과정을 반복 수행
O(nlog(2)n) O(n^1.5) O(n) 없음
선택정렬 - 최소값을 찾아 이동시키는 과정을 데이터 크기만큼 반복 수행 O(n^2) O(n^2) O(n^2) 없음
퀵정렬 - 분할정복방식으로, 임의의 기준점(pivot)으로 데이터 분할하는 작업의 반복수행으로 정렬
- 재귀호출 사용
O(n^2) O(nlog n) O(nlog n) 없음
버블정렬 - 인접한 데이터간의 비교를 통한 정렬 방법 O(n^2) O(n^2) O(n^2) 없음
힙정렬 - 최대/최소 힙트리를 구성해 정렬하는 방법 O(nlog n) O(nlog n) O(nlog n) 없음
머지정렬 - 분할정복방식으로, 데이터의 크기를 반으로 계속 나누고 이를 정렬하고 합치는 방법 O(nlog n) O(nlog n) O(nlog n) 있음
기수정렬 - 낮은 기수(자릿수)부터 비교하여 정렬하는 방법 O(dn) O(dn) O(dn) 있음

 

바) 검색 알고리즘

1) 검색 알고리즘의 개요

- 데이터 집합에서 원하는 항목을 효율적으로 찾는 기법

 

2) 검색 알고리즘의 분류

분류방법 데이터
정렬
종류 내용 및 특징
선형검색
(Linear
Search)
X 선형탐색
(Linear Search)
- 처음부터 마지막까지 비교 검색하는 방법
- 프로그램 작성 용이
- 평균비교횟수 : (n+1)/2
- 평균 검색시간 : O(n)
제어 검색
(Control
Search
O 이진 탐색
(Binary Search)
- 상한값(F)과 하한값(L)을 설정하고 그 중간값(M)을 구한 후 키와 중간값을 계속 비교하며 검색하는 방법
- 탐색 대상을 1/2씩 줄여가며 탐색
- 평균 검색시간 : O(log(2)n)
피보나치탐색
(Fibonacci
Search)
- 파보나치 순열을 이용하여 서브파일을 형성해 가면서 검색하는 방법
- 덧셈과 뺄샘만으로 검색
- 평균 검색시간 : O(log(2)n)
보간탐색
(Interpolation
Search)
- 예상되는 위치를 선택하여 그 위치에서 선형 탐색
- 사전, 전화번호부등 색인 탐색에 이용
- 평균 O(log(n))의 성능
블록탐색
(Block Search)
- 전체 데이터를 블록으로 분할하고, 블록 내에서 순차적 검색하는 방법
- 효율적인 블록크기는 √n
- 평균 O(log(n))의 성능
이진트리탐색
(Binary Tree 
Search)
- 이진트리를 이용하는 검색방법
- 평균 O(log(n))의 성능
특정 함수를
이용하여
접근하는 방식
X 해싱 (Hashing) - 해싱함수를 이용하여 데이터 주소를 찾는 검색 방법
- 삽입과 삭제가 빈번한 자료에 적합함

 

사) 그래프 탐색 알고리즘

알고리즘 설명
깊이 우선 탐색
(Depth First Search)
- 시작 정점의 한방향으로 계속 방문하고, 그 경로의 마지막 정점에 방문 후에 마지막 갈림길 간선이 있는 정점에서 한방향 방문을 반복하여 탐색.
- 구현시 스택을 이용.
- 상대적으로 적은 저장공간 사용
너비 우선 탐색
(Breadth First Search)
- 시작 정점을 방문 후 인접한 노드를 먼저 탐색하는 방법.
- 구현시 큐를 이용.

 

아) 최소 신장 트리(Minimum Spanning Tree)

- 무방향 그래프 내의 모든 정점이 연결되어있고, 사이클이 없고, 구성하는 가중치의 합이 최소인 트리

- 특징) 간선의 수는 n-1, 무 사이클

알고리즘 설명
크루스칼 알고르즘
(Kruskal)
- 간선을 가중치 기준으로 오름차순 정렬하고, 간선들을 순서대로 연결하는 알고리즘
- Union-Find 알고리즘 이용
프림 알고리즘
(Prim)
- 임의의 정점을 기준으로 최소비용 정점을 선택하며 방문하는 알고리즘
- Priority Queue를 이용

[TOPCIT 목차]

 

01.소프트웨어 재사용

    가) 소프트웨어 재사용(Reuse)의 개요

(정의) 사용 소프트웨어 개발관련 지식(기능, 모듈, 구성등)을 표준화하여 개발 생산성을 높이기 위하여 반복적으로 사용하기에 적합하도록 구성하는 방법

(목적) 신뢰성, 확장성, 생산성

(참고) Tailoring : '재단하다'의 뜻으로 조직의 표준 프로세스를 개별 프로젝트 환경에 맞게 재단하여 적용한다는 의미

 

    나) 소프트웨어 재사용의 대상

1.일반적인 지식 환경정보 : 교육 및 활용을 통해 얻어진 지식
외부지식 : 개발 및 특정분야의 참여를 통해 쌓은 지식
2.설계 정보 기본설계 , 상세설계
3.데이터 정보 시스템 데이터, 시험 사례
4.프로그램 코드 모듈, 프로그램
5.기타 투자대 효과분석 정보, 사용자 지침서, 타당성 조사방법 및 결과, 프로토타입, 인력

    다) 소프트웨어 재사용의 원칙

1.범용성(Generality) 2.모듈성(Modularity) 3.하드웨어 독립성 4.소프트웨어 독립성 5.자기 문서화(Self Documentation) 6.일반성(Commonality) 7.신뢰성(Reliability) 

 

    라) 실무에서 재사용 구현의 문제점

비용측면 재사용을 위한 소프트웨어 부품은 개발비가 더 들 수 있다
시간측면 사용에 대한 효익의 효과는 오래 걸린다
소프트웨어 이해측면 변경으로 인한 부차적인 이해가 곤란하다
소프트웨어 모듈의 내부 인터페이스 요구사항의 이해가 곤란하다
표준화측면 소프트웨어 표준화 부족하다.
재사용 대상 추출 측면 현존하는 소프트웨어 부품에서 재자사용 부품의 추출이 비현실적이다.
공통으로 사용할 수 있는 소프트웨어 모듈을 찾기가 어렵다.

   

    마) 소프트웨어 재사용의 장애요인 및 대책

재사용 장애요인 - 관리자와 개발담당자의 거부 반응
- 재사용 기술 적용의 동기 결여
- 소프트웨어 표준화의 부재
-사회적 또는 법적 장애
재사용 장애요인 제거 대책 기술적 방안 -새로운 설계 및 개발 방법론 활용
-재사용 소프트웨어 라이브러리의 구축
-자동화 도구(CASE)의 활용
관리.제도적 방안 -보상제도의 확립
-능동적인 경영전략
-조직의 변화

    바) 재사용 적용 시 고려사항

문화 측면 재사용 문화 조성을 위한 제도 장착
환경 측면 초기 투자를 통한 재사용 환경의 구축
개발방법론 측면 체계화된 재사용 기반의 소프트웨어 개발 프로세스
하향식/상향식 개발 접근법
재사용 컴포넌트에 대한 Granularity
지속적 관리 측면 지속적인 라이브러리의 개선 및 보강
생산성 측면 도구(tool)의 지원이 있는 재사용
재사용 컴포넌트에 대한 정보 집합의 관리
소프트웨어 생산성 평가  및 척도
생산성 향상이 가능한 재사용
산출물 측면 소프트웨어의 재사용 대상 산출물

 

    사) 소프트웨어 재사용의 효과

1. 소프트웨어 생산의 TCO(Total Cost of Ownership:총소유비용) 절감

2. 높은 품질의 소프트웨어 생산을 위한 공유 및 활용효과

3. 시스템 개발에 대한 정보공유 및 타 프로젝트의 산출물 공유

4. 시스템 구조와 좋은 시스템 구축방법에 대한 교육적 효과

 

02.역공학

    가) 역공학의 정의

(정의) 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일을 말한다. 이것은 시스템을 이해하여 수정하는 소프트웨어 유지보수 단계에 수행하는 일련의 활동이다. 

 

(역공학의 Input/Output)

Input Output
원시코드, 목적코드, 작업절차, 라이브러리 등 입출력 형태의 자료, 문서 구조도, 자료 흐름도, 제어 흐름 그래프, 개체 관계도

    나) 역공학이 필요한 경우

1. 기 가동중인 시스템이 유지보수가 어려운 경우

2. 변경이 빈번하여 시스템 효율이 저하된 경우

3. 파일 시스템으로 개발된 업무를 관계형 데이터베이스로 재구축 하려는 경우

4. 기본 메인 프레임을 다운사이징 하는 경우

    다) 역공학의 장점

1. 상용되거나 기 개발된 소프트웨어의 분석을 도와줌

2. 기존 시스템의 자료와 정보를 설계 수준에서 분석할 수 있어 유지 보수성을 향상

3. 기존 시스템 정보를 Repository에 보관하여 CASE의 사용을 용이하게 함

    라) 역공학의 종류

종류 설명
논리역공학 원시코드로부터 정보를 추출하여 물리적 설계 정보저장소에 저장
물리적 설계정보를 얻어내는 역할 수행
자료역공학 기존 데이터베이스를 수정하거나 새로운 데이터베이스 관리시스템으로 전이하는 역할 수행

 

 

 

 

[TOPCIT 목차]

 

목표:
(1) SW 특성, 문제점 설명
(2) SW 공학 배경, 목적 설명
(3) SW 개발 프로세스 모델 설명

핵심키워드:
(1) SW 특성
(2) SW 생명주기
(3) SW 요구관리, 유지관리, 형상관리, 품질관리

1 소프트웨어 공학의 배경과 목적
가) 소프트웨어 공학 소개
소프트웨어공학: sw성공개발위해 전과정  관리와 업무 수행을 지원해 주는 기술


나) 소프트웨어 공학 배경
1950년대: 도입시작
1960년대: SW 수요급증, 인력, 경험, 능력, 수적인 부족으로 인한 위기 발생하면서 본적격적으로 SW 공학도입
1970년대: 선코딩, 후수정 접근방식, 폭포수모델 개발, 사용시작
1980년대: 개발생산성을 높이기 위한 방법연구
1990년대: 동시공학 집중한 모델 활용
2000년대: 애자일 방법론 본격도입

다) 소프트웨어 공학의 4가지 중요요소
소프트웨어 공학정의 : 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
목적: 고품질의 소프트웨어를 생산하고 주어진 비용과 일정에 딜리버리

(1) 방법:
-. 프로젝트 계획 수립과 추정, 시스템과 소프트웨어 분석, 자료구조, 프로그램 구조, 알고리즘 코딩, 테스팅, 유지 관리과 같은 작업들로 구성
-. 종종 특수한 언어중심 (예: 객체지향방법) 또는 그래프 표기법을 도입
-. 소프트웨어 품질에 대한 일련의 평가 기준을 도입

(2) 도구:
-. 어떤 일을 수행할 때 생산성 혹은 일관성을 목적으로 사용하는 방법들을 자동화나 반자동화시켜 놓은 것
-. 소프트웨어 개발 생명주기 상 수많은 도구(예: 요구관리도구, 모델링 도구, 형상관리 도구, 변경관리 도구)가 존재
-. 도구들이 통합되어 하나의 도구가 생성한 정보를 다른 도구가 사용할 수 있을 때, 소프트웨어 개발을 지원하는 시스템으로 설정

(3) 절차
-. 절차는 방법과 도구를 결합하여, 그것으로 하여금 소프트웨어를 합리적이고 적시에 개발할 수 있도록 함
-. 절차는 적용된 방법들, 요구되는 결과물(문서, 보고서 등) 품질을 보증하고 변경을 조정하게 도와주는 제어들 그리고 소프트웨어 관리자들이 진행을 평가하게 해주는 마일스톤 등의 순서를 정의함

(4) 사람
-. 소프트웨어 공학에서는 많은 것(수립, 개선, 유지 등)들이 사람과 조직에 의해서 움직이기 때문에 사람에 대한 의존성이 상대적으로 큼
-. 다른 공학의 상황보다 훨씬 다양한 이슈들이 생기기 때문에 소프트웨어 개발을 일목요연하게 공학적으로 정리한다는 것은 현실적으로 불가능

2 소프트웨어 개발 생명주기
가) 정의
-. 사용자 환경 및 문제점 이해에서 시작, 운용, 유지보수에 이르기까지의 모든 과정
-. 구성 : 타당성 검토 -> 개발계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 운용 -> 유지보수

나) 목적
-. 프로젝트 비용 산정과 개발 계획 수립, 기본 골격 구성
-. 용어의 표준화
-. 프로젝트 관리

다) 소프트웨어 생명주기 선정
-. 프로젝트 개발 프로세스 테일러링 위한 중요 활동
-. 시스템 개발의 리스트와 불확실성에 대한 이해바탕 수행
-. 리스크/불확실성 최소화하는 모델 선택
-. 폭포수 모델, 프로토타입 모델, 진화 모델, 점증적 모델등이 있음

라) 소프트웨어 생명주기 모델 종류
(1) V 모델
-. 프로젝트에 적용, 관리하기 용이
-. 요구사항이 명확할때 이상적인 생명주기 모델
-. 개발활동의 시작, 종료조건, 관리척도 명확히 정의
-. 검증 및 확인 강조, 개발활동과 테스트 활동 병행
-. 테스트를 통해 결함 발견시 재수행 필요 단계 파악가능

(2) VP 모델(V model with Protytyping)
-. 시스템 이해, 리스크, 불확실성요소 등의 이슈 해결위해 빠르게 개발하는 방법
-. 개발자와 고객이 요구사항에 대한 공통적인 이해 도출가능
-. 폭포수 모델이나 V 모델의 개발 단계에 적용가능, 독립적인 모델로 사용가능
-. 리스크: 요구사항 구현가능성, 시스템 성능 검증 여부, 새로운 도구 구입 외주 개발 시스템 위험요소 등
-. 접근 방법1: 불확실 요소 정의 -> 해결책, 적용방법 정의 -> 해결책 적용(반복가능)-> 불확실성 원인 파악
-. 접근 방법2: 불확실 요소 정의 -> 해결책 나열, 선택기준 정의 -> 기준에 따라 해결책 평가 -> 최적의 해결책 선택

(3) 점증적 모델
-. 시스템 개발 시간을 줄일 필요가 있을 때 유용
-. 핵심 부분 먼저 개발하여 동작확인후 나머지 기능 구현하는 방식
-. 기능확장을 통해 시스템 개발, 마지막 버전은 모든 기능이 구현된 시스템
-. 초기 외부 인터페이스 리스크 감소에 유용
-. 각 기능 확장 개발 단계 요구사항이 명확하여 V, VP 모두 적용 가능

(4) 진화모델
-. 시스템 개발 시간을 줄일 필요가 있을 때 유용
-. 전체 시스템에 대한 개발 단계가 여러번 반복됨(기능이 점차 확장되는 점증적모델과 차이)
-. 시스템 명세가 불분명한 경우나 제품 개선이 지속적으로 요구되는 경우 적합
-. 개발 기간 단축, 시스템 조기 사용, 경쟁력 강화
-. 시스템 문제 도출 및 조기 수정 가능
-. 전문 분야별 나누어서 개발 가능( 예 텍스트기반, 그래픽 기반)

3 소프트웨어 개발 방법론
가) 소프트웨어 개발 방법론의 필요성
(1) 개발 경험의 축적 및 재활용을 통한 개발생산성 향상
(2) 효과적인 프로젝트 관리
(3) 공식 절차와 산출물을 제시하고 표준 용어를 통일하여 의사소통 수단 제공
(4) 각 단계별 검증과 승인된 종료를 통해 일정 수준의 품질 보증

나) 소프트웨어 개발 방법론 비교

구분 구조적 방법론 정보공학 방법론 객체 지향 방법론 CBD 방법론
개요 업무 활동 중심의 방법론 데이터 중심의 방법론 객체 클래스 간의 관계를 식별하여 설계 모델로 변환하는 방법론 재사용이 가능한 컴포넌트의 개발/상용 컴포넌트들을 조합하는 방법론
기본원리
추상화
구조화
단계적 상세화
모듈화
정보전략계획
업무 영역 분석
업무시스템 설계
시스템 구축
요건정의
객체지향분석(객체모델링, 동적모델링, 기능모델링)
객체지향설계
테스트/배포
요구분석
분석(아키텍쳐정의, 유스케이스모델링)
설계
개발
구현(릴리스,교육)
특징
분할과 정복의 원칙
프로그램 로직 중심
컨트롤 가능한 모듈로 구조화
기업업무 지원시스템 지원방법론
데이터모델 중시
프로그램 로직은 데이터 구조에 종속(CRUD)
전사적 통합데이터 모델
프로그램 단위는 객체
데이터와 로직 통합
고도의 모듈화
상속에 의한 재사용 분석
설계간 갭(gap) 없음
객체방법론의 진화
인터페이스 중시
인터페이스의 구현은 컴포넌트
블랙박스 재사용 지향
주요 산출물
도메인분석서
데이터흐름도
구조도
프로그램사양서
도메인분석서
ERD
기능차트
어플리케이션구조도
프로그램 사양서
테이블정의서/목록
비즈프로세스/개념도
다이어그램(유스케이스, 시퀀스, 클라스, 컴포넌트 등)
비즈프로세스/개념도
다이어그램(유스케이스, 시퀀스, 클라스, 컴포넌트 등)
재사용계획서
.Net, EJB
지원도구
Teamwork, SA
Cool Gen, SA
Rose, SA, Palstic
Cool Joe, Together
주요지원언어
COBOL, C, VB, PASCAL
COBOL, C, VB, PASCAL
C++, Java, VB
원칙적으로 개발언어 무관

다) 소프트웨어 개발 단계
(1) 요구사항 분석 : 초기 사용자 요구 이해 통한 요구사항을 명확히 정의시 기간, 비용 초과, 품질 저하 방지 가능
(2) 설계: 시스템 구조 결정, 물리적 실현의 첫 단계. 설계는 품질, 안정감있는 시스템, 유지보수에 영향 미침
(3) 구현: 설계를 구현, 코딩 표준 정의, 명확하게 코딩 작성하는 것 필요
(4) 테스팅: 요구사항 만족 여부, 예상과 실제 차이를 검사하고 평가하는 과정, 소프트웨어 품질 보증 단계

4 애자일 개발 방법론
가) 애자일 방법론 종류
-. 스크럼(Scrum), 켄 슈와버/제프 서덜랜드
-. 익스트림 프로그래밍(eXtreme Programming, XP), 켄트 벡/에릭 감마
-.린(Lean) 소프트웨어 개발방법론, 메리 포펜딕/톰 포펜딕
-. 애자일 UP(Agile Unified Process, AUP), 스콧 엠블러

나) 애자일 개발 방법론-XP
(1) XP 개요: 테스트주도개발, 일일빌드, 지속적인 통합 등과 연관, 가치와 실천법, 균형위한 원칙 필요

(2) 개발절차 및 용어

-. 유저스토리: 요구사항, 의사소통도구, 기능단위의 필요한 내용 간단 기재
-. 스파이크: 요구사항이나 잠재 솔루션 고려 간단 프로그램
-. 릴리즈계획: 하나의 반복 1~3주로 나눈 전체 프로젝트 배포계획
-. 승인테스트: 인수테스트, 고객수행
-. 작은 릴리즈: 소규모 수차례 배포

(3) XP 가치:
-. 의사소통: 팀빌딩 강화필요
-. 단순성: 불필요한 복잡성 제거
-. 피드백: 팀내 최대한 빨리, 최대한 많은 피드백
-. 용기: 요구사항, 기술변경에 용감하게 대처
-. 존중: 팀원 존중 필요

(4) XP 실천 방법

구분 실천방법 설명
개발 단순한 설계(Simple Design) 가능한 단순하게 설계
테스트 기반 개발 코드 작성전 테스트케이스 작성, 테스트 도구 사용 자동화
리팩토링 코드의 중복과 복잡성 제거, 기존 코드의 디자인 향상
코딩 표준 효과적인 의사소통을 위해 코딩표준 준수
짝 프로그래밍 두명의 개발자가 소스코드에 대해 공동책임,
지속적인 통합 작업이 끝날 통합 작업 수행
관리 계획게임 프로젝트 전체 계획과 주기 계획을 비즈니스와 기술측면 고려하여 세우고 실행과 피드백을 통해 업데이트 유지
작은 릴리즈 실행가능 모듈 가능한 빨리 배포, 고객이 수시로 SW 확인하게 하라
메타포 시스테에 대한 전체 모습을 이해하기 쉬운 그림과 스토리로 표현하라
환경 주당 40시간 작업 품질의 유지를 위해 주40시간 이상 일하지 마라
현장 고객 실제 시스템을 사용한 고객이 개발 현장에 상주하게 하라

다) 스크럼( SCRUM)
(1) 스크럼 개요
추정 및 조정 기반의 경험적 관리기법의 대표적 형태
[스크럼 역할자 유형]

역할 업무
제품책임자
(Product Owner)
제품 백로그 생성, 우선순위 조정, 새로운 항목 추가
스프린트 계획수립시는 핵심역할, 스프린트 시작후 팀의 운영에 관여하지 않음
스크럼 마스터
(Scrum Master)
팀의 업무 방해 요소 제거
원칙과 가치를 지키면서 팀개발 진행 지원
스크럼
(Scrum Team)
5~9명 구성, 사용자 스토리를 사용하여 스프린트 개발 동안 개발

(2) 스크럼 프로세스
-. 스프린트: 달력기준 1~4주 단위 반복개발기간
-. 3가지 미팅: 일일 스크럼, 스프린트 계획, 스프린트 리뷰
-. 3가지 산출물: 제품 백로그, 스프린트 백로그, 소멸챠트

[스크럼 프로세스 3가지 산출물]

역할 설명
제품 백로그 제품에 담고자 하는 기능의 우선순위를 정리한 목록
제품 백로그에 정의된 기능은 사용자 스토리
사용자 업무량에 대한 추정은 스토리 포인트라는 기준 이용
스프린트 백로그 하나의 스프린트 동안 개발할 목록
과업: 사용자 스토리와 이를 완료하기 위한 작업
과업의 크기는 시간단위로 추정
소멸챠트 개발을 완료하기까지 남은 작업량을 보여주는 그래프
스토리포인트 : iteration별 남아있는 작업량



[스크럼 프로세스 3가지 미팅]

미팅 설명
스프린트 계획 스프린트 목표, 스프린트 진행항목 선택, 담당자 배정, 태스크 단위 계획 수립
일일 스크럼 매일 15분간의 프로젝트 진행상호아 공유 회의, 팀원이 한일, 할일, 문제점 이야기
스프린트 리뷰 작업진행과 결과물을 확인하는 회의, 작업결과 데모, 피드백, 고객참여가능, 스크럼 마스터는 잘된점, 아쉬운점, 개선점 찾는 회고 진행가능

(3) 스크럼 특징
-. 투명성: 회의, 소멸챠드, 리뷰 통해 프로젝트 상태, 문제점 파악가능
-. 타임박싱: 시간제한으로 프로젝트 진행 집중 가능, 일일스크럼 15분 진행, 스프린트 리뷰 매이터테이션마다 진행
-. 커뮤니케이션: 문제점 공유, 플래닝 포커로 사용자 스토리 구현난이도, 시간 토론
-. 경험주의 모델: 기본적인 구조 동일, 팀마다 달라지는 것 인정, 개개인의 경험 중시

+ Recent posts