1. 통합 구현 – 모듈 구현 – 단위 모듈 구현
1) 단위 모듈 구현의 개념
단위 모듈 구현은 소프트웨어 개발에 있어 기능을 단위 모듈별로 분할하고 추상화하여 성능을 향상 시키고, 유지보수를 효과적으로 하기 위한 구현 기법이다.
모듈은 소프트웨어 구조를 이루며, 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위이다.
인터페이스 모듈, 데이터베이스 접근 모듈 등 통합 구현에 필요한 단위 컴포넌트를 구현한다.
* 컴포넌트(Component)
특정한 기능을 수행하기 위해 독립적으로 개발되어 보급하고, 다른 부품과 조립되어 응용시스템을 구축하기 위해 사용되는 소프트웨어 프로그램이다.
2) 단위 모듈 구현의 원리 - 정분추모
(1) 정보 은닉(Information Hiding)
어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐
(2) 분할과 정복(Divide & Conquer)
복잡한 문제를 분해, 모듈 단위로 문제 해결
(3) 데이터 추상화(Data Abstraction)
각 모듈 자료 구조를 액세스하고 수정하는 함수내에 자료 구조의 표현 내역을 은폐
(4) 모듈 독립성(Module Independency)
낮은 결합도와 높은 응집도를 가짐
*컴포넌트와 모듈의 차이
컴포넌트는 런타입에 독립적으로 배포되고 실행되는 단위이고, 모듈은 정적인 구조이다.
하나의 서버에서 5개의 클라이언트로 정보를 제공하게 될 경우 모듈은 2개(서버, 클라이언트),
컴포넌트는 6개(서버 1개, 클라이언트 4개)가 된다.
3) 구현 단계에서 작업 절차
(1) 코딩 계획
기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계
(2) 코딩
논리적으로 결정한 문제해결 방법을 특정 프로그래밍 언어를 사용하여 구현하는 단계
프로그래밍 언어 선택 시 개발 정보시스템의 특성, 사용자의 요구사항, 컴파일러의 가용성을 고려해야 함
(3) 컴파일
작성한 코드를 다른 언어의 코드(주로 기계어)로 변환하는 단계
(4) 테스트
기능이 요구 사항을 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계
4) 재사용 기법
(1) 재사용(Recuse) 기법 개념
재사용은 이미 개발되어 그 기능, 성능 및 품질을 인정 받았던 소프트웨어의 전체 또는 일부분을 다시 사용하는 기법이다.
(2) 재사용 종류
1-재공학(Re-Engineering)
기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법
재공학의 장점으로는 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류억제가 있음
소프트웨어 재공학의 주요 활동은 분석(Analysis), 재구조(Restructing), 역공학(Reverse Engineering),
이식(Migration)이 있음
[1] 분석(analysis)
기존 소프트웨어 명세서를 확인하여 소프트웨어 동작을 이해하고, 재공학 대상을 선정하는 작업
[2] 재구조(Restructing)
상대적으로 같은 추상적 수준에서 하나의 표현을 다른 형태로 바꾸는 작업
[3] 역공학(Reverse Engineering)
기존 소프트웨어를 분석하여 설계도를 추출하거나 다시 만들어내는 작업
[4] 이식(Migration)
소프트웨어 재공학의 주요 활동 중 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
2-재개발(Re-Development)
기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발, 기존 시스템에 새로운 기능을 추가, 기존 시스템의 기능을 변경하는 기법
(3) 재사용 규모에 따른 분류
1-함수와 객체
클래스나 메서드 단위의 소스 코드를 재사용함
2-컴포넌트
컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용함
3-애플리케이션
공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용함
2. 통합 구현 – 모듈 구현 – 단위 모듈 테스트
1) 단위 모듈 테스트의 개념
단위 모듈 테스트는 모듈의 개별적인 코드 단위가 예상대로 작동하는지 확인하는 기법이다.
단위 모듈 테스트를 위해 IDE(Integrated Development Environment)도구를 활용하여 개별 단위 모듈에 대한 디버깅을 수행한다.
* 테스트와 디버그의 차이
테스트(Test)
시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는
단계
목적 : 오류를 찾는 작업
2. 디버그(Debug)
개발 중에 발생하는 시스템의 논리적인 오류나 버그를 찾아서 수정하는 과정
목적 : 오류를 수정하는 작업
2) 단위 모듈 테스트의 종류
(1) 블랙박스 테스트(= 명세 기반 테스트)
프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
블랙박스 테스트는 소프트웨어의 특징, 요구사항, 설계 명세서 등에 초점을 맞춰 테스트가 이루어짐.
(2) 화이트박스 테스트(= 구조 기반 테스트)
단위 모듈 테스트의 가장 기본적 방법은 모듈 내부의 소스를 보면서 수행하는 테스트
소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트를 수행
3. 통합 구현 – 통합구현 관리 – IDE 도구
1) IDE(Integrated Development Environment) 도구의 개념
IDE 도구는 코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다.
기존에는 컴파일러(Compiler), 텍스트 편집기(Editor), 디버거(Debugger)를 따로 사용했으나 통합 개발환경을 통해 하나로 묶은 대화형 인터페이스를 제공한다.
2) IDE 도구의 기능
(1) 개발환경 지원
자바(Java), 파이썬(Python) 등 개발언어를 통해 어플리케이션 개발환경 제공
(2) 컴파일
문법에 어긋나는지 확인하고 기계어로 변환하는 기능 제공
(3) 디버깅
프로그래밍 과정에 발생하는 오류 및 비정상적인 연산 제거
(4) 외부 연계
외부 형상, 배포관리 기능과 연계되어 자동 배포등이 가능
(5) DB 연동
JDBC, ODBC 등을 통한 데이터베이스 연동
* JDBC(Java Database Connectivity)
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
* ODBC(Open Database Connectivity)
마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격이다.
4. 통합 구현 – 통합구현 관리 – 협업 도구
1) 협업 도구의 개념
협업 도구는 다른 개발자와 유대감을 형성하거나 개발 관련 소통을 위해서 지속적으로 커뮤니케이션을 수행하기 위한 도구이다.
통합 구현 관리를 위해 개발자 간 상호 소통을 하는 협업 도구가 필요하다.
2) 협업 도구의 분류
(1) 문서 공유 – 구글 드라이드(Google Drive)
팀원, 고객 문서를 공유하거나 공동작업 가능
(2) 소스 공유 – 깃허브(Github)
오픈소스 프로젝트 등을 진행 및 소스공유
(3) 아이디어 공유 – 에버노트(Evernote)
팀원 간 아이디어 공유, 기사 스크랩 등
(4) 디자인 공유 – 레드 팬(Red pen)
웹 디자이너 친화 협업 도구
(5) 마인드 맵 – 마인드 마이스터
공동의 브레인스토밍 지원 마인드맵 도구
(6) 프로젝트 관리
트렐로(Trello) : 최신 트랜드 UI 제공, 카드식 배열 작업 목록
레드마인(Redmine) : 다수의 프로젝트 이슈 관리 도구
지라(JIRA) : 프로젝트 이슈 트래킹 기반 협업 도구
(7) 일정 관리 – 구글캘린더
구글 제공 캘린더 내 다수 일정 공유 가능
3) 협업 도구의 기능
(1) 개발자 간 커뮤니케이션
개발자 간 작업 공유, 오류 현상 공유 등 다양한 의사소통을 제공
(2) 일정 및 이슈 공유
소스 코드 구현 도중 발생하는 오류 및 이슈와 프로젝트 일정을 공유
(3) 개발자 간 집단 지성 활용
새로운 아이디어를 개발자들 간에 공유함으로써 집단 지성을 활용
5. 통합 구현 – 통합구현 관리 – 형상 관리 도구
1) 형상 관리의 개념
형상 관리는 소프트웨어 생명주기 동안 발생하는 변경사항을 체계적으로 관리하여 소프트웨어의 품질 보증을 향상시키는 관리적 활동이다.
형상 관리는 개발 과정의 변경 사항을 관리한다.
형상 관리에서 관리 항목으로는 프로젝트 요구 분석서, 소스 코드, 운영 및 설치 지침서가 있다.
유지보수 단계뿐만 아니라 개발 단계에도 사용할 수 있다.
2) 형상 관리 절차 - 식통감기
(1) 형상 식별
형상 관리 계획을 근거로 형상 관리의 대상이 무엇인지 식별하는 활동
추적성 부여를 위해 ID와 관리번호를 부여
변경 관련 이슈(Issue) 발생 시 ID와 관리번호를 이용하여 추적
(2) 형상 통제
형상 항목의 변경사항에 대하여, 형상통제위원회가 승인/기각/보류를 결정하고, 승인된 변경사항의 이행을 체계적으로 통제하는 활동
형상 항목의 버전 관리를 위한 운영
(3) 형상 감사
형상 관리 계획대로 형상 관리가 진행되고 있는지, 형상 항목의 변경이 요구사항에 맞도록 제대로 이뤄졌는지 등을 살펴보는 활동
베이스라인 변경 시 요구사항과 일치 여부 검토
(4) 형상 기록
소프트웨어 형상 및 변경 관리에 대한 각종 수행결과를 기록하는 활동
형상결과 보고서 작성
* 형상통제위원회(CCB; Change Control Board)
프로젝트 진행 과정에서 변경 사항을 적용할지 여부를 결정하는 회의이다.
3) 형상 관리 도구의 개념
형상 관리 도구는 소프트웨어 변경사항을 관리하기 위해서 형상 식별, 통제, 감사, 기록을 수행하는 도구이다.
소스 코드나 문서의 버전 관리, 이력 관리, 추적 등 변경 사항을 체계적으로 관리할 수 있는 기능을 제공하는 도구이다.
대표 제품으로 CVS, SVN, Git이 있다.
4) 형상 관리 도구의 기능
(1) 체크인(Check-In)
개발자가 수정한 소스를 형상 관리 저장소로 업로드 하는 기능
(2) 체크아웃(Check-Out)
형상 관리 저장소로부터 최신 버전을 개발자 PC로 다운로드 받는 기능
(3) 커밋(Commit)
개발자가 소스를 형상 관fl 저장소에 업로드 후 최종적으로 업데이트가 되었을 때 형상 관리 서버에서 반영하도록 하는
기능
5) 형상 관리 도구 사례
(1) CVS
1-CVS(Concurrent Versions System) 개념
CVS는 가장 오래된 형상 관리 도구 중의 하나로서 중앙 집중형 서버 저장소를 두고 클라이언트가 접속해서 버전 관리를 실행하는 형상 관리 도구이다.
2-CVS 주요 기능
[1] 변경사항 동기화
Check-Out, Check-In, Update, Commit 등 서버 저장소와 클라이언트의 변경 사항 전송 기능 제공
[2] 파일 단위 관리
파일 단위로 변경사항 관리 가능
Diff를 통한 파일 내용의 비교
3-CVS 장단점
[1] 장점
직관적이고 비교적 단순한 명령 세트
[2] 단점
텍스트 기반 소스 코드 위주 지원
등록된 파일 및 디렉토리의 변동이 불편
커밋 실패 등에 대한 롤백 기능 미지원
(2) SVN
1-SVN(Subversion) 개념
SVN은 중앙 집중형 클라이언트-서버 방식으로 CVS의 단점을 보완해 가장 널리 사용되고 있는 형상 관리 도구이다.
2-SVN 주요 기능
[1] CVS 기능 제공
CVS의 대부분 명령어 수행 가능
[2] 바이너리 파일 관리
CVS에서는 텍스트 기반 파일만 가능했지만, SVN은 실행 파일과 같은 바이너리 파일 지원
[3] 롤백 기능 지원
커밋 실패 시 롤백 가능
*롤백(Rollback)
데이터베이스에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 행위이다.
* 형상 관리 도구는 거의 모든 IT기업에서 활용하고 있다. SVN, Git이 가장 많이 사용된다.
3-SVN 장단점
[1] 장점
디렉토리 파일을 자유롭게 이동 가능
CVS에 비해 비약적으로 빨라진 속도
Gzip으로 압축하여 공간 절약 가능
다양한 플러그인 API 제공
[2] 단점
Trunk, Branch, Tag가 모두 물리적 저장 위치 점유
잦은 커밋으로 인해 리비전 번호가 크게 증가할 수 있음
개별 개발자만의 개발 이력을 가질 수 없음
(3) Git
1-Git 개념
Git은 리누스 토발즈가 2005년 리눅스 커널의 개발을 위해 만든 형상 관리 시스템이다.
2-Git 주요 기능
[1] 로컬 / 원격 형상 관리
Branch, Check-Out, Commit 등 로컬 환경에서의 형상 관리 기능 제공
Push, Fetch, Pull 등 원격 환경에서의 형상 관리 기능 제공
[2] 이관 기능
커밋 실패 시 롤백 가능
3-Git 장단점
[1] 장점
저장소(Repository)의 완전한 복사본을 로컬(Local) 저장 가능
로컬 저장을 통해 오프라인(Offline) 작업 가능
일시적인 작업에 대한 이력 관리가 쉬움
[2] 단점
대용량 코드 관리에 부적절
한 번에 diff 명령어를 통한 변경사항을 보기 어려움
CVS, SVN과 개념이 상이하여 학습시간을 요구
*형상 관리 중 Git은 로컬 저장소와 원격 저장소로 나뉘어져 있는데, 로컬 저장소에서는 처리속도가 빠르고, 원격 저장소에서는 처리속도가 느린가?
로컬 저장소가 원격 저장소보다 처리 속도가 빠르다. 하지만 로컬 저장소는 원격 저장소가 속도때문에 있는 것이 아니라 분산시키기 위해서 존재한다.
SVN의 경우 원격 서버가 고장나서 원격 저장소에 접근하지 못하면 형상관리를 사용할 수 없다.
반면, Git의 경우 로컬 저장소에 저장해놨다가 서버가 복구되면 COMMIT을 하는 등의 조치를 할 수 있다.
'정보처리기사 > 2과목 소프트웨어 개발' 카테고리의 다른 글
Part 3. 제품 소프트웨어 패키징(2) 23.02.01(수) (0) | 2023.02.01 |
---|---|
Part 3. 제품 소프트웨어 패키징(1) 23.01.26(목) (0) | 2023.02.01 |
Part 1. 데이터 입출력 구현 23.01.19(목) (1) | 2023.01.19 |