[소프트웨어개발] 1. 통합구현

단위 모듈 구현

단위모듈

  • 개념
    • 소프트웨어 구현에 필요한 다양한 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
    • 값을 전달 받아 시작되는 작은 프로그램
  • 특징
    • 독립적인 컴파일 가능
    • 다른 모듈에 호출과 삽입 가능
    • 두 개의 단위 모듈이 합쳐지면 두 개의 기능들을 같은 모듈로 구현 가능
  • 종류
    • 화면, 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 원격 저장소에 업로드