단위 모듈 구현
단위모듈
- 개념
- 소프트웨어 구현에 필요한 다양한 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 값을 전달 받아 시작되는 작은 프로그램
- 특징
- 독립적인 컴파일 가능
- 다른 모듈에 호출과 삽입 가능
- 두 개의 단위 모듈이 합쳐지면 두 개의 기능들을 같은 모듈로 구현 가능
- 종류
- 화면, DB접근, 인터페이스, 비즈니스 트랜잭션, 데이터 암호화 등
모듈화의 원리
- 모듈화 개념
- 기능을 나누고 추상화해 소프트웨어의 성능을 향상시키고 유지보수를 효과적으로 구현하기 위한 기법
- 모듈화 종류
- 분할 정복법, 정보은닉, 자료 추상화, 모듈의 독립성 ⭐
분할 정복법 (Divide & Conquer)
- 복잡한 문제를 분해, 모듈 단위로 문제를 해결
- Divide : 큰 문제를 작은 부분 문제로 나눔
- Conquer : 각각의 작은 부분 문제를 해결
- Combine : 작은 부분 문제를 결합해 전체 문제를 해결
정보 은닉 (Information Hiding)
- 모듈을 타 모듈로부터 은폐 시킴
- 새로운 모듈을 추가하거나 기존 모듈을 변경하더라도 시스템 전체에 영향을 미치지 않도록 할 수 있음
자료 추상화 (Data Abstraction)
- 함수 내에 자료 구조 표현 명세를 은폐
- 사용자가 데이터를 다루는 데 필요한 최소한의 정보만을 들어냄
모듈의 독립성 (Module Independence)
- 낮은 결합도, 높은 응집도를 갖도록 함
- 유지 보수와 확장성 개선
단위 모듈 테스트 (Unit Test)
- 모듈이 정해진 기능을 정확히 수행하는지 검증
- 단독적으로 실행할 수 있는 환경, 테스트에 필요한 데이터가 준비되어 있어야함
- 기법: 화이트박스 테스트, 블랙박스 테스트
- 코딩 계획 → 코딩 → 컴파일 → 코딩 테스트
통합 개발 환경
IDE(Integrated Development Environment)
C++, Java 등의 언어를 이용한 소프트웨어 개발 단계에서 패키지 인크루딩, 소스코드 편집, 컴파일, 디버깅, 바이너리 배포 등 모든 작업을 통합 지원
- 편집기, 컴파일러, 디버거 등의 다양한 도구를 하나의 인터페이스로 통합하여 제공
IDE 종류 | 설명 |
---|---|
이클립스(Eclipse) | Java 기반 개발도구 |
비주얼 스튜디오(Visual Studio) | 마이크로소프트에서 개발한 개발 도구 |
Xcode | iOS 및 macOS 애플리케이션 개발에 사용 |
안드로이드 스튜디오(Android Studio) | 안드로이드 애플리케이션 개발에 특화된 도구, Java 및 Kotlin언어 지원 |
IntelliJ IDEA | Java 및 다양한 언어를 지원하는 개발 도구, 안드로이드 스튜디오의 기반이 됨 |
PyCharm | Python 개발 도구 |
Atom | 오픈소스 기반의 텍스트 에디터, Git과의 연동 가능 |
- IDE 구성 요소
- 소스코드 편집기
- 컴파일러 : 기계어 명령으로 변환
- 디버거
- IDE 도구의 기능
- 개발 환경 지원, 컴파일, 디버깅, 외부 연계, DB연동, Deployment(배치, 배포)
빌드 자동화 도구
- 개념
- 소스코드 컴파일 후 다수의 연관된 모듈을 묶어 실행 파일로 만듦
- 실행할 수 있는 애플리케이션으로 자동 생성하는 프로그램
- 라이브러리의 자동 추가 및 관리(전처리, Preprocessing)를 지원
- 기능
- 코드 컴파일, 컴포넌트 패키징, 파일 조작, 개발 테스트 실행, 버전 관리 도구 통합, 문서 생성, 배포 기능, 코드 품질 분석
빌드 자동화 도구의 종류 | 설명 |
---|---|
Ant | 아파치 재단에서 개발한 Java의 공식적인 빌드 도구, XML 기반, 절차적, 복잡해지면 Build 과정 이해가 어려움, XML과 Remote Repository를 가져올 수 없고 스크립트의 재사용이 어려움 |
Maven | 종속성을 리스트 형태로 관리, XML 기반, Groovy 기반 |
Gradle | 안드로이드 앱 개발 환경에서 사용, JVM기반, Groovy 기반, XML을 사용하지 않아 간결하고 빠름 |
Jenkins⭐ | Java 기반의 오픈 소스 형태의 빌드 자동화 도구 |
Makefile | 복잡한 빌드 과정을 자동화할 수 있는 도구 |
Travis CI | 분산 빌드 서비스, GitHub 연동해 자동화 가능 |
TeamCity | CI/CD 도구 |
형상 관리 (Configuration Management)
- 개발 단계에서 생성되는 모든 문서, 코드 등 소프트웨어의 변경 사항을 체계적으로 관리하기 위해 추적하고 통제하는 것
- 작업 산출물을 형상 항목(Configuration Item)이라는 형태로 선정
- 형상 항목: 프로젝트 요구 분석서, 요구사항 명세서, V&V 계획서(V모델)
- 형상 항목 간의 변경 사항 추적과 통제 정책을 수립하고 관리
- 지속해서 변화하는 자료
- 소프트웨어는 가시성이 없으므로 개발과정의 진행 정도를 확인하는 도구로 사용
- 형상 관리의 필요성
- 오류가 갑자기 나타나거나, 사용하던 문서나 코드가 갑자기 사라지는 등 찾을 수 없는 경우가 발생할 수 있음
- 원시 코드와 실행 코드의 버전이 일치하지 않음
- 요구사항이 자주 변경됨
- 형상 관리의 효과
- 관리적 효과
- 품질 향상 효과
- 형상 관리 도구
- 생성되는 소스 코드와 문서 등과 같은 산출물의 종합 및 변경 과정을 체계적으로 관리하고 유지
- 개발 관리 활동
형상 관리 담당자
- 프로젝트 팀원 중 프로젝트 전체 흐름을 볼 수 있는 중간 개발자 이상의 인원 중 선정
- 형상 관리 절차의 개발 및 문서화
- 베이스라인의 확립 및 변화 관리
- 수행 활동
- Kick-off Metting 참석
- 형상 관리 계획서 작성에 참여
- 형상 항목 식별 및 관리
- 주기적인 형상 상태 보고
형상 통제 위원회(CCB : Configuration Control Board) ⭐
- 형상 항목 결정
- 베이스라인 수립 여부 결정
- 승인된 변경에 대한 책임 및 보증
- 베이스라인의 변경 요청이 필요한 경우, 이에 대한 검토 및 승인
- 베이스라인 라이브러리에 산출물들의 완성을 승인
베이스라인(Baseline, 기준선)
- 추후 개발의 기초
- 오직 공식적인 변경 통제 절차에 의해서만(형상 통제 위원회에 의해서만)변경 가능
형상 관리 절차
형상 식별 → 통제 → 기록/보고 → 감사
- 형상 식별 (Configuration Identification)
- 형상 항목 대상 : 품질 관리 계획서, 요구사항 명세서, 소스코드, …
- 형상 식별자 선정 : 항목별 구분
- 형상 통제 (Configuration Control)
버전 관리
형상 관리는 버전 관리, 리비전 관리, 변경 관리, 빌드 관리, 이슈 관리 등을 모두 포함
- 변경 관리 $\sube$ 버전 관리 $\sube$ 형상 관리
- 버전 관리 (Version Management)
- 요구사항 등의 변화에 따라 버전을 부여
- 변경 이력을 추적 관리하는 가장 좋은 방법
- 변경 관리 (Change Management)
- 변경된 요구사항에 대해 비용 및 기간 등을 고려하고 타당성을 평가
- 소스코드의 변경 상황을 관리
버전 관리 도구 구분
- 공유 폴더 방식
- 담당자 한 명의 공유 폴더 내 자료를 자신의 PC로 복사해 컴파일함
- 오류가 확인되면 해당파일을 등록한 개발자에게 수정 의뢰
- SCCS, RCS, PVCS, QVCS
- 클라이언트/서버 방식
- 중앙 시스템(서버에 자장되어 관리)
- 클라이언트로 복사해 작업 후 서버에 반영
- 모든 버전 관리는 서버에서 수행
- CVS, SVN, CMVC, Clear Case, …
- 분산 저장소 방식
- 원격 저장소, 지역 저장소에 함께 저장되어 관리
- 지역 저장소에 먼저 커밋한 이후, 원격 저장소에 반영(Push)하는 방식
- Git, Bitkeeper, …
🔎CVS (Concurrent Versions System)
- 동시 버전 시스템
- 한계로 인해 대체하는 Subversion이 개발됨
🔎RCS (Revision Control System) ⭐
- 소스파일의 수정을 한 사람만으로 제한
- 파일 잠금 방식으로 버전을 관리
- 동시에 소스를 수정하는 것을 방지
🔎SVN (Sebversion)
- CVS 에 비해 속도 개선, 저장 공간 절약, 변경 관리 단위가 작업 모음 단위로 개선
- 디렉터리 파일을 자유롭게 이동 가능
- 다양한 보안 기능 제공(Windows, Mac, Linux 등 다양한 플랫폼에서 사용 가능)
- 주요 용어
- repository
- trunk : commit했을 때 개발 소스가 모이는 곳
- branch
- tag : 특정 시점에서 프로젝트의 스냅숏을 찍어두는 것
- check-in : 저장소에 새로운 버전으로 갱신
SVN 주요 명령어 | 설명 |
---|---|
import | 빈 서버의 저장소에 맨 처음 소스 파일을 저장 |
check out | 타 개발자가 저장소의 저장된 파일을 자신의 작업 공간으로 인출 |
commit | 갱신 사항이 있는 경우 예치 과정 수행 |
branch | 파생된 프로젝트 |
merge | 기본 개발 작업과 병합 |
diff | 처음 추가한 파일과 이후 변경된 파일의 차이를 봄 |
update | 최신 버전 자료와 자신의 작업 공간과 동기화 |
fork | 소스코드를 통째로 복사 |
info | 파일에 대한 정보 표시 |
🔎Clear Case
- 복수 서버, 복수 클라이언트 구조
🔎Bit Keeper
- SVN 과 비슷한 중앙 통제 방식
- 대규모 프로젝트에서 빠른 속도
- Linux 커널 개발에서 사용
🔎Git
- 분산 저장소 방식 시스템
- 지역 저장소에서 버전 관리
- 버전 관리가 빠름
Git 주요 명령어 | 설명 |
---|---|
init | 새로운 로컬 git 생성 |
add | 저장소에 파일 추가 |
commit | 지역 저장소에 저장 |
branch | 브랜치 생성 |
check out | 선택한 브랜치로 이동 |
merge | 브랜치 병합 |
fetch | 서버에서 코드 받아오기 |
pull | 서버에서 최신 코드 받아와 병합 |
remote | 원격 저장소 추가 |
clone | 원격 저장소 프로젝트 복사해 내려받기 |
push | 원격 저장소에 업로드 |
'자격증 > 정보처리기사' 카테고리의 다른 글
[소프트웨어개발] 3. 제품 소프트웨어 패키징 (0) | 2024.01.26 |
---|---|
[소프트웨어개발] 2. 시스템인터페이스 구현 (0) | 2024.01.26 |
[소프트웨어설계] 6. 시스템 인터페이스 설계 (0) | 2024.01.21 |
[소프트웨어설계] 5. 객체지향 설계와 디자인 패턴 (0) | 2024.01.19 |
[소프트웨어설계] 4. 소프트웨어설계 (0) | 2024.01.18 |