개요
지난 포스팅에서는 소프트웨어를 잘 설계하기 위한 다양한 다이어그램, 모델링 기법을 중점으로 알아보았는데요.
오늘은 소프트웨어의 개발 일정 관리 모델(Development Managing Model)과
형상 관리(Configuration Management), 그리고 개발 방법론 그리고 다양한 개발 도구(Development Kit)에 대해서 알아보도록 하겠습니다.
소프트웨어 일정 관리 모델
일정 관리 모델 | 설명 |
주 공정법 (CPM, Critical Path Method) |
여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정을 계산하는 기법 모든 자원 제약사항을 배제한 상태로 프로젝트의 시작과 끝을 나타내는 노드(Node)와 노드 간의 연결을 통해 공정을 계산하기 위한 액티비티(Activity) 표기법 |
PERT (Program Evalutaion and Review Technique) |
일의 순서를 계획적으로 정리하기 위한 수렴 기법으로 비관치, 중간치, 낙관치의 3점 추정 방식을 통해 일정을 관리하는 기법 |
중요 연쇄 프로젝트 관리 (CCPM, Critical Chain Project Management) |
주 공정 연쇄법으로 자원제약사항을 고려하여 일정을 작성하는 기법 |
형상 관리(Configuration Management)란?
- 소프트웨어 구성 관리 또는 형상 관리는 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것
- 형상 관리는 일반적인 단순 버전 관리 기반의 소프트웨어 운용을 좀 더 포괄적인 학술 분야의 형태로 넓히는 근간을 이야기한다
형상 관리의 절차
절차 | 설명 |
형상 식별 | - 형상 관리 대상을 정의 및 식별하는 활동 - 추적성 부여를 위해 ID와 관리번호를 부여 - 변경 관련 이슈 발생 시 ID와 관리번호를 이용하여 추적 |
형상 통제 |
- 형상 항목의 버전 관리를 위한 형상통제위원회 운영 - 변경요구 관리, 변경 제어, 형상 관리 등 통제 지원 - 베이스라인에 대한 관리 및 형상 통제 수행 가능 |
형상 감사 | - 소프트웨어 베이스라인의 무결성 평가 - 베이스라인 변경 시 요구사항과 일치 여부 검토 |
형상 기록 |
- 소프트웨어 형상 및 변경 관리에 대한 각종 수행 결과를 기록 - 형상결과 보고서 작성 |
형상관리 도구의 기능
기능 | 설명 |
체크인 (Check-In) |
개발자가 수정한 소스를 형상 관리 저장소로 업로드하는 기능 |
체크아웃 (Check-Out) |
형상 관리 저장소로부터 최신 버전을 개발자 PC로 다운로드 받는 기능 |
커밋 (Commit) |
개발자 소스를 형상 관리 저장소에 업로드 후 최종적으로 업데이트 되었을 때 형상 관리 서버에서 반영하도록 하는 기능 |
푸시 (Push) |
개발자가 형상 관리 저장소에 업로드한 소스 코드를 원격 저장소(Remote Storage)에 업로드하여 로컬(Local)과 클라우드(Cloud)환경에서 동기화될 수 있도록 하는 기능 |
개발 환경(인프라, Infra) 구성방식
- 소프트웨어는 누구나 접근할 수 있도록 허용하거나, 회사 내부에서의 인트라 넷 등에서만 동작하도록 구성할 수 있는데요.
- 소프트웨어가 개발을 마친 후, 서비스를 제공하는 네트워크 환경에 따라서 개발 환경, 즉 인프라 구성 방식을 구분 지을 수 있습니다.
방식 | 설명 |
온프레미스(On-Premise) 방식 | - 외부 인터넷 망이 차단된 상태에서 인트라넷 망만을 활용하여 개발환경을 구축하는 방식 - 데이터와 정보의 외부 유출이 민감할 경우 해당 장비를 자체 구매하고 특정 공간에 개발환경을 구축 |
클라우드(Cloud) 방식 | - 아마존, 구글, 마이크로소프트 등 클라우드 공급 서비스를 하는 회사들의 서비스를 임대하여 개발환경을 구축하는 방식 - 해당 장비를 초기에 구매하지 않기 때문에 개발환경 투자비용이 적고 구축 시간이 빠름 |
하이브리드(Hybrid) 방식 | - 온프레미스와 클라우드 방식을 혼용하는 방식 |
소프트웨어 개발 방법론
- 과거부터 소프트웨어의 개발에는 수많은 개발자가 참여했고, 회사와 같은 조직에서는 이들의 일정을 잘 계획하고 관리하는 것이 중요했습니다.
- 그래서 이러한 개발의 전체 과정을 계획하고 효율적으로 관리하기 위한 총체적인 전략으로서 다양한 '개발 방법론'이 소개되었습니다.
개발 방법론 | 설명 |
구조적 방법론 (Structured Development) |
- 전체 시스템을 기능에 따라 나누어 개발하고, 이를 통합하는 분할과 정복 접근 방식의 방법론 프로세스 중심의 하향식 방법론 - 구조적 프로그래밍 표현을 위해 나씨-슈나이더만(Nassi-Shneiderman) 차트 사용 *나씨-슈나이더만(Nassi-Shneiderman) 차트 - 논리의 기술에 중점을 둔 도형식 표현 방법 - 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조로 표현 - 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합 |
정보공학 방법론 (Information Engineering Development) |
- 정보 시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론 - 개발 주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론 |
객체지향 방법론 (Object-Oriented Development) |
- ‘객체’라는 기본 단위로 시스템을 분석 및 설계하는 방법론 - 복잡한 현실 세계를 사람이 해하는 방식으로 시스템에 적용하는 방법론 - 객체, 클래스, 메시지를 사용 |
컴포넌트 기반 방법론 (CBD, Component Based Development) |
- 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 작성하는 방법론 - 기존의 시스템 및 소프트웨어를 구성하고 있는 컴포넌트를 조립해서 하나의 새로운 애플리케이션을 만드는 소프트웨어 개발방법론은 CBD 개발 방법론이다. - CBD 방법론은 소프트웨어를 완제품으로 개발하던 방식과 달리 부품 역할을 하는 소프트웨어 컴포넌트를 기능별로 개발하고 각자에 필요한 것은 선택하여 조립함으로써 소프트웨어 개발에 드는 노력과 시간을 절약할 수 있다. |
애자일 방법론 (Agile Development) |
- 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 대응하면서 효율적으로 프로그램을 개발할 수 있는 경량화된 개발 방법론 애자일의 4대 선언문 - 공정과 도구보다 개인과 상호작용을 - 포괄적인 문서보다 작동하는 소프트웨어를 - 계약 협상보다 고객과의 협력을 - 계획을 따르기보다 변화에 대응하기를 |
제품 계열 방법론 (Product Line Development) |
특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론 임베디드 소프트웨어를 작성하는데 유용한 방법론 크게 영역 공학과 응용 공학으로 구분함 ⓵ 영역 공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역 ⓶ 응용 공학 : 제품 요구분석, 제품 설계, 제품을 구현하는 영역 |
소프트웨어 개발 생명 주기에 따른 모델(Model)
- 모든 소프트웨어의 개발은 '설계'로 부터 시작하여 '개발' 과정을 거쳐 '제품 출시'라는 큰 프로세스에 맞추어 진행됩니다.
- 그리고 이러한 개발에 대한 과정은 보다 효율적으로 관리될 수 있도록 다양한 모델(Model)이 소개 되었는데요.
- 세상에 존재하는 요구사항의 댜앙성 만큼 이에 대응할 전략에 대한 수요도 존재했기 때문에 아래와 같이 다양한 개발 모델이 소개되었습니다.
모델(Model) | 설명 |
폭포수 모델 (Waterfall Model) |
- 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델 - 선형 순차적 모형으로 고전적 생명주기 모형이라고도 함 |
프로토타이핑 모델 (Prototyping Model) |
- 고객이 요구한 주요 기능을 프로토타입으로 구현하여, 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델 |
나선형 모델 (Spiral Model) |
- 시스템 개발 시 위험을 최소화하기 위하여 점진적으로 완벽한 시스템으로 개발해나가는 모델 계획 정의 → 위험 분석 → 개발 → 고객의 평가 과정을 반복적으로 수행 |
반복적 모델 (Iteration Model) |
- 구축 대상을 나누어 병렬적으로 개발 후 통합하거나, 반복적으로 개발하여 점증 완성시키는 모델 |
소프트웨어 개발 도구
- 다음으로 소프트웨어 개발 과정에 사용되는 다양한 도구에 대해서 알아보도록 하겠습니다.
- 소프트웨어 개발 과정에서 개발의 편의성을 증대시켜주고 개발의 생산성 및 개발자의 실수를 줄여주기 위해 다양한 도구가 도입되었습니다.
개발 도구(Development Kit)
개발 도구(Development Kit) | 설명 |
빌드 도구 | - 작성한 코드의 빌드 및 배포를 수행하는 도구 - 각각의 구성요소와 모듈에 대한 의존성 관리를 지원 |
구현 도구 | - 개발자의 코드 작성과 디버깅, 수정 등과 같은 작업을 지워낳는 도구 - 프로그램을 개발할 때 가장 많이 사용되는 도구 |
테스트 도구 | - 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 - 코드의 테스트, 테스트에 대한 계획 수행 및 분석 등의 작업 가능 |
형상 관리 도구 | - 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 제공하는 도구 - 프로젝트 진행 시 필수로 포함되는 도구 |
소프트웨어 패키징 도구(Packaging Tools)
소프트웨어를 개발하고 묶는 작업(Packaging)하기 위해서는 아래와 같은 다양한 도구들이 사용됩니다,
구분 | 기술 | 설명 |
암호화 | 공개키 기반구조 (PKI) |
인증기관에서 공개키 암호 방식 기반의 전자 서명된 인증서를 발급받아 네트워크상에서 안전하게 비밀통신을 가능하도록 하는 기술 |
대칭 및 비대칭 암호화 | 대칭 암호화는 암호화와 복호화를 위해 동일한 키를 사용하는 암호화 방식 | |
전자서명 | 서명자를 확인하고 서명자가 해당 전자문서에 서명했다는 사실을 나타내기 위해 특정 전자문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보 | |
식별 기술 | DOI (Digital Object Identifier) |
디지털 저작물의 저작권 보호 및 정확한 위치 추적을 위해 특정한 번호를 부여하는 일종의 바코드 시스템 |
URI (Unifrom Resource Identifier) |
인터넷에 있는 자원을 고유하게 식별할 수 있도록 나타내는 주소 URI= URL(Uniform Resource Location) + URN(Uniform Resource Name)으로 구성 |
|
저작권 표현 | XrML (eXtensible Right Markup Language) |
디지털 콘텐츠 / 웹 서비스 권리 조건을 표현한 XML 기반의 마크업 언어 |
MPEG-21 | 멀티미디어 관련 요소 기술들이 통일된 형태로 상호 운용성을 보장하는 멀티미디어 표준 규격 | |
암호화 파일 생성 |
Pre-packaging | 콘텐츠를 등록하자마자 암호화하는 방법 |
On-the-fly Packaging | 사용자가 콘텐츠를 요청한 시점에 콘텐츠를 암호화는 기법 | |
정책 관리 |
XML (eXtensible Markup Language) |
특수한 목적을 갖는 마크업 만어를 만드는데 사용하는 다목적 언어 |
CMS (Contents Managements System) |
다양한 미디어 포맷에 따라 각종 콘텐츠를 작성, 수집, 관리, 배급하는 콘텐츠 생산에서 활용, 폐기까지 전 공급 과정을 관리하는 기술 | |
크랙 방지 |
코드 난독화 (Code Obfuscation) |
역공학을 통한 공격을 막기 위해 프로그램 소스 코드를 알아보기 힘든 형태로 바꾸는 기술 |
Secure DB | 커널 암호화 방식으로 데이터베이스 파일을 직접 암호화하고, 접근 제어와 감사 기록 기능이 추가된 데이터베이스 보안강화 기술 | |
인증 | SSO (Single Sign On) |
한 번의 시스템 인증을 통하여 여러 정보시스템에 재인증 절차 없이 접근할 수 있는 통합 로그인 기술 |
릴리즈 노트(Release Note)
최종 사용자인 고객에게 개발 과정에서 정리된 제품의 릴리즈 정보를 제공하는 문서
작성 항목 | 설명 |
헤더 | 문서 이름(릴리스 노트 이름), 제품 이름, 버전번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등의 정보 |
개요 | 제품 및 변경에 대한 간략한 전반적 개요 |
목적 | 릴리스 버전의 새로운 기능목록과 릴리스 노트의 목적에 대한 개요, 버그 수정 및 새로운 기능 기술 |
이슈 요약 | 버그의 간단한 설명 또는 릴리즈 추가 항목 요약 |
재현 항목 | 버그 발견에 따른 재현 단계 기술 |
수정-개선 내용 | 수정-개선의 간단한 설명 기술 |
사용자 영향도 | 버전 변경에 따른 최종 사용자 기준의 기능 및 응용 프로그램 상의 영향도 기술 |
소프트웨어 지원 영향도 | 버전 변경에 따른 소프트웨어의 지원 프로세스 및 영향도 기술 |
노트 | 소프트웨어 및 하드웨어 설치 항목, 제품, 문서를 포함한 업그레이드 항목 메모 |
면책 조항 | 회사 및 표준 제품과 관련된 메시지, 프리웨어 및 불법 복제 방지, 중복 등 참조에 대한 고지사항 |
연락 정보 | 사용자 지원 및 문의에 관련한 연락처 정보 |
참고자료
https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%84%B1_%EA%B4%80%EB%A6%AC
'CS BASIC > 소프트웨어 설계와 방법론' 카테고리의 다른 글
[CS BASIC] 사용자 요구 사항(User Requirements)과 사용자 인터페이스(User Interface) (1) | 2023.12.29 |
---|---|
[CS BASIC] 소프트웨어 테스트, 분석 도구, 소프트웨어 재공학(Software Testing, Analysis Tools And Software Reengineering) (1) | 2023.12.27 |
[CS BASIC] COCOMO, 자료흐름도(DFD), 자료 사전(DD), 코드 설계(Code Design) (1) | 2023.12.25 |
[CS BASIC] 모델(Model)과 UML, 다이어그램(Diagram) (1) | 2023.12.24 |
[CS BASIC] 소프트웨어의 디자인 패턴 (1) | 2023.12.23 |