2. 소프트웨어 개발 - 통합 구현 (단위 모듈 구현, 단위 모듈 테스트, 개발 지원 도구)
42. 단위 모듈
: 소프트웨어 구현에 필요한 여러 동작 중 한 가지 기능을 수행하는 모듈
- 단위 기능 : 단위 모듈로 구현되는 하나의 기능
- 단위 모듈은 사용자나 다른 모듈로부터 값을 전달받아 시작된다
- 단위모듈은 처리문, 명령문, 데이터 구조 등으로 구성된다
- 단위 모듈은 독립적인 컴파일이 가능하고, 다른 모듈에 삽입되거나, 호출되기도 한다
1) 단위 모듈의 구현
단위 기능 명세서 작성 | ▶ | 입출력 기능 구현 | ▶ | 알고리즘 구현 |
1. 단위 기능 명세서 작성
: 단위 기능을 명세화한 문서 (ex. 기능 명세서, 코드 명세서, 설계 지침, etc.)
- 추상화 : 복잡한 시스템을 단순하게 구현해야 한다
- 구조화 : 대형 시스템을 분해하여 단위 기능별로 구분하고 각 단위 기능을 계층적으로 구성한다
- 정보 은닉 : 모듈의 독립성을 위해 정보 은닉의 원리를 고려한다
2. 입출력 기능 구현
: 단위 기능 명세서에서 정의한 데이터 형식에 따라 입출력 기능을 위한 알고리즘과 데이터를 구현한다
- 모듈 간 연동 및 통신에 쓰이는 입출력 데이터를 구현한다
- 사용자 인터페이스(CUI, GUI, etc)와의 연동을 고려한다
- 오픈 소스 API를 사용하여 네트워크 및 외부 장치와의 입력을 간편하게 구현할 수 있다
※ IPC (Inter-Process Communication)
: 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적 프로그래밍 인터페이스 집합
메소드 | 설명 |
공유 메모리 (Shared Memory) | 여러 프로세스가 공유 가능한 메모리를 구성해 통신 수행 |
소켓 (Socket) | 네트워크 소켓을 이용해 통신 수행 |
세마포어 (Semaphores) | 공유 자원에 대한 접근 제어를 통해 통신 수행 |
파이프 (Pipes, Named pipes) | 선입선출 형태의 메모리인 Pipe를 여러 프로세스가 공유하여 통신 수행 - Pipe는 동시에 하나의 프로세스만 이용 가능함 |
메시지 큐잉 (Message Queueing) | 발생한 메시지를 전달하는 형태로 통신 수행 |
3. 알고리즘 구현
: 입출력 데이터를 바탕으로 단위 기능별 요구 사항을 모듈로 구현
- 구현된 단위 기능들이 요구사항과 일치하는지 확인
- 모듈의 종류 (단위 기능의 종류에 따라)
- 디바이스 드라이버 모듈 : 하드웨어 주변 장치의 동작을 구현하는 모듈
- 네트워크 모듈 : 네트워크 장비 및 데이터 통신 기능을 구현하는 모듈
- 파일 모듈 : 컴퓨터 내부의 데이터 구조 영역에 접근하는 방법을 구현하는 모듈
- 메모리 모듈 : 파일을 프로세스의 가상 메모리에 매핑/해제하는 방법, 프로세스 간 통신 기능을 구현하는 모듈
- 프로세스 모듈 : 프로세스 내에서 다른 프로세스를 생성하는 모듈
43. 단위 모듈 테스트
: 특정 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 과정 (단위 테스트, Unit Test)
- 모듈을 단독적으로 실행할 수 있는 환경과 테스트에 사용할 데이터가 준비되어 있어야 한다
- 단위 모듈에 대한 코드를 기준으로 하므로 시스템 수준 오류는 잡아낼 수 없다
- 테스트 기법
- 화이트박스 테스트 : 모듈의 내부 구조와 논리적 경로를 테스트하는 방법
- 블랙박스 테스 : 모듈의 내부 구조를 참고하지 않고 정해진 기능을 완벽히 수행하는지 테스트하는 방법
1) 테스트 케이스 (Test Case)
: 단위 모듈 테스트를 위한 테스트 항목에 대한 명세서
- 명세 기반 테스트의 설계 산출물이 된다
- 입력 데이터, 테스트 조건, 예상 결과 등으로 구성된다
※ ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스 구성 요소
- 항목 식별자 (Identifier)
- 테스트 항목 (Test Item)
- 입력 명세 (Input Specification)
- 출력 명세 (Output Specification)
- 환경 설정 (Environmental Needs)
- 특수 절차 요구 (Special Procedure Requirement)
- 의존성 기술 (Inter-case Dependencies)
2) 테스트 프로세스
: 모든 테스트 수행 과정에서 테스트 목적과 조건을 달성할 수 있도록 하는 과정
계획 및 제어 |
- 테스트 목표 달성을 위한 계획 수립 - 테스트가 계획대로 진행되도록 제어 |
▼ | |
분석 및 설계 | - 테스트 시나리오 및 테스트 케이스 작성 |
▼ | |
구현 및 실현 |
- 테스트 케이스를 조합하여 테스트 프로시저 명세 ※ 테스트 프로시저 : 테스트 케이스 실행 순서 - 적절한 테스트 도구를 이용하여 테스트 수행 |
▼ | |
평가 | - 테스트가 계획과 목표에 맞게 수행되었는지 평가 및 기록 |
▼ | |
완료 | - 테스트 수행 과정 및 산출물 기록 및 저장 |
44. 개발 지원 도구
1) 통합 개발 환경 (IDE; Integrated Development Environment)
: 편집기, 컴파일러, 디버거 등의 개발에 필요한 툴을 하나의 인터페이스로 통합하여 제공하는 것
- 통합 개발 환경 도구 : 통합 개발 환경을 제공하는 소프트웨어
- 코드의 자동 생성 및 컴파일이 가능하며, 필요한 추가 기능을 다운로드할 수 있다
- 코드 실행 및 테스트 시에 오류가 발생한 부분을 시각화하여 수정이 용이하다
- 외부의 다양한 서비스와 연동하여 개발 편의를 제공하고 정보 공유를 가능케 한다
- ex) Eclipse(Eclipse Foundation, IBM), Visual Studio(Microsoft), Xcode(Apple), Android Studio(Google), IDEA(JetBrains)
2) 빌드 도구
: 소스 파일을 실행가능한 제품 소프트웨어로 변환하는 빌드(Build)를 지원하는 소프트웨어
- 소스 코드를 소프트웨어로 변환하는데 필요한 전처리, 컴파일 등의 작업을 수행한다
- ex
- ANT (Another Neat Tool) : 아파치 재단의 빌드 도구. XML 기반. 정해진 규칙이나 표준이 없으며 스크립트 재사용이 어렵다
- Maven : 아파치 재단의 빌드 도구. 규칙과 표준이 존재한다. 컴파일과 빌드를 동시에 수행할 수 있다. 의존성을 설정하여 라이브러리를 관리한다
- Gradle : Ant와 Maven을 보완한 빌드 도구. 의존성을 활용하여 라이브러리를 관리한다. Groovy 기반
3) 기타 협업 도구
: 개발 참여자들이 서로 다른 작업 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구
(협업 소프트웨어, 협업 툴, 그룹웨어)
- 협업 도구의 종류
- 프로젝트 및 일정 관리
- ex) 구글 캘린더, 분더리스트, 트렐로, 지라, 플로우
- 정보 공유 및 커뮤니케이션
- ex) 슬랙, 잔디, 태스크월드
- 디자인
- ex) 스케치, 제플린
- 이 외에 에버노트(아이디어 공유), 스웨거(API 문서화), 깃허브 등이 존재