▶ 038 단위 모듈 구현
단위 모듈(Unit Module)
소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능이라고 칭함
- 단위 모듈은 사용자나 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램을 의미하기도 함
- 두 개의 단위 모듈이 합쳐지면 두개의 기능을 구현할 수 있음
- 단위 모듈의 구성 요소 : 처리문, 명령문, 데이터 구조 등
- 독립적인 컴파일 가능, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈 구현 순서 : 단위 기능 명세서 작성 → 입출력 기능 구현 → 알고리즘 구현
1. 단위 기능 명세서 작성
설계 과정에서 작성하는 기능 및 코드 명세서나 설계 지침과 같이 단위 기능을 명세화한 문서들을 의미
- 이 단계에서는 복잡한 시스템을 단순하게 구현하기 위한 추상화 작업 필요
- 이 단계에서는 대형 시스템을 분해해 단위 기능을 구분하고, 각 기능들을 계층적으로 구성하는 구조화 과정을 거침
- 단위 기능 명세서 작성 시 모듈의 독립적인 운용과 한 모듈 내의 정보가 다른 모듈에 영향을 주지 않도록 정보 은닉의 원리 고려
2. 입출력 기능 구현
단위 기능 명세서에서 정의한 데이터 형식에 따라 입출력 기능을 위한 알고리즘 및 데이터 구현
- 이 단계에서는 단위 모듈 간의 연동 또는 통신을 위한 입출력 데이터를 구현
- 입출력 기능 구현 시 CLI, GUI와의 연동 고려
*CLI(Command Line Interface) : Telnet이나 DOS와 같이 키보드를 통해 명령어를 입력받음
*GUI(Graphical User Interface) : 윈도우, MacOS와 같이 키보드, 마우스 등의 도구를 통해 화면의 아이콘, 메뉴 등 그래픽 요소로 명령을 입력 받음
- 입부출력 기능 구현 시 네트워크나 외부 장치의 입출력은 Open Source API를 이용하면 간편 구현 가능
☞ IPC(Inter-Process Communication)
모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현 가능
- IPC의 대표 메소드 5가지
> Shared Memory : 다수의 프로세스가 공유 가능한 메모리를 구성해 프로세스 간 통신 수행
> Socket : 네트워크 소켓을 이용해 네트워크를 공유하는 프로세스들 간 통신을 수행
> Semaphores : 공유 지원에 대한 접근 제어를 통해 프로세스 간 통신 수행
> Pipes & named Pipes : 'Pipe'라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신 수행
> Message Queuing : 메세지가 발생하면 이를 전달하는 형태로 프로세스 간 통신 수행
3. 알고리즘 구현
입출력 데이터를 바탕으로 단위 기능별 요구 사항들을 구현 가능한 언어를 이용해 모듈로 구현
- 구현된 단위 기능들이 사용자의 요구와 일치하는지 확인하는 과정 필요
- 구현되는 모듈의 종류를 단위 기능의 종류에 따라 다음으로 구분 할
> 디바이스 드라이버 모듈 : 하드웨어 주변 장치의 동작을 구현한 모듈
> 네트워크 모듈 : 네트워크 장비 및 데이터 통신을 위한 기능을 구현한 모듈
> 파일 모듈 : 컴퓨터 내부의 데이터 구조 영역에 접근하는 방법을 구현한 모듈
> 메모리 모듈 : 파일을 프로세스의 가상 메모리에 매칭/해제하는 방법, 프로세스 사이의 통신 기능을 구현한 모듈
> 프로세스 모듈 : 하나의 프로세스 안에서 다른 프로세스를 생성하는 방법을 구현한 모듈
▶ 039 단위 모듈 테스트
단위 모듈 테스트
프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것
- 단위 테스트라고도 하며, 화이트박스 테스트와 블랙박스 테스트 기법을 사용
*화이트박스 테스트 : 모듈의 소스 코드를 오픈시킨 상태에서 소스 코드의 모든 논리적 경로를 테스트하는 방법
*블랙박스 테스트 : 소프트웨어가 수행할 특정 기능이 완전히 작동되는 것을 입증하는 테스트
- 단위 모듈 테스트의 기준은 단위 모듈에 대한 코드이므로 시스템 수준의 오류는 잡아낼 수 없음
테스트 케이스(Test Case)
모듈이 올바르게 작성되었는지 확인하기 위해 모듈에 입력될 수 있는 여러 값들과 예상 결과들을 나열해 목록을 만드는 과정
- 테스트 항목에 대한 명세서로, 명세 기반 테스트의 설계 산출물에 해당
- 테스트 케이스를 이용하지 않는 직관적인 테스트는 인력과 시간을 낭비할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소는 다음과 같음
> 식별자(Identifier) : 항목 식별자, 일련번호
> 테스트 항목(Test Item) : 테스트 대상
> 입력 명세(Input Specification) : 입력 데이터 또는 테스트 조건
> 출력 명세(Output Specification) : 테스트 케이스 수행 시 예상되는 출력 결과
> 환경 설정(Environmental Needs) : 필요한 하드웨어나 소프트웨어의 환경
> 특수 절차 요구(Special Procedure Requirement) : 테스트 케이스 수행 시 특별히 요구되는 절차
> 의존성 기술(Inter-case Dependencies) : 테스트 케이스 간의 의존성
테스트 프로세스
테스트를 위해 수행하는 모든 작업들이 테스트의 목적과 조건을 달성할 수 있도록 도와주는 과정
• 테스트 프로세스 5단계
① 계획 및 제어 단계 : 테스트 목표를 달성하기 위한 계획 수립, 계획대로 진행되도록 제어
② 분석 및 설계 단계 : 테스트 목표를 구체화해 테스트 시나리오와 테스트 케이스를 작성하는 단계
*테스트 시나리오 : 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서
③ 구현 및 실행 단계 : 효율적인 테스트 수행을 위해 테스트 케이스들을 조합해 테스트 프로시저에 명세하는 단계
*테스트 프로시저 : 테스트 케이스의 실행 순서를 의미
④ 평가 단계 : 테스트가 계획과 목표에 맞게 수행되었는지 평가, 기록
⑤ 완료 단계 : 이후의 테스트를 위한 참고 자료 및 테스트 수행에 대한 증거 자료로 활용하기 위해 수행 과정과 산출물을 기록 및 저장하는 단계
▶ 040 개발 지원 도구
통합 개발 환경(IDE; Integrated Development Environment)
개발에 필요한 환경, 즉 편집기(Editor), 컴파일러(Compiler), 디버거(Debugger) 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 것을 의미
- 통합 개발 환경을 제공하는 소프트웨어를 의미
- 코드의 자동 생성 및 컴파일 가능, 추가 기능을 위한 도구들을 다운로드 할 수 있음
- 코드를 실행하거나 테스트할 때 오류가 발생한 부분을 시각화하므로 수정 용이
- 외부의 다양한 서비스와 연동 가능
- 통합 개발 환경을 지원하는 대표적인 도구는 다음과 같음
프로그램 |
개발사 |
플랫폼 |
운영체제 |
지원 언어 |
이클립스(Eclipse) |
Eclipse Foundation, IBM |
크로스 플랫폼 |
Windows, Linux, MacOS 등 |
JAVA, C++, C, PHP, JSP 등 |
비주얼 스튜디오 (Visual studio) |
Microsoft
|
Win32, Win64 |
Windows |
Basic, C++, C, C#, .NET 등 |
엑스 코드(Xcode) |
Apple |
Mac, iPhone |
MacOS, iOS |
C++, C, C#, JAVA 등 |
안드로이스 스튜디오 (Android Studio) |
Android |
Windows, Linux, MacOS |
JAVA, C, C++ |
|
IDEA |
JetBrains |
크로스 플랫폼 |
Windows, Linux, MacOS |
JAVA, JSP, XML, GO, Kotlin 등 |
빌드 도구
소스 코드를 소프트웨어로 변환하는 과정에 필요한 전처리, 컴파일 등의 작업들을 수행하는 소프트웨어
*전처리(Preprocessing) : 컴파일에 앞서 코드에 삽입된 주석을 제거하거나 매크로들을 처리하는 과정
- 빌드 : 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물을 말함
- 대표적인 도구
Ant (Another Neat Tool) |
- 아파치 소프트웨어 재단에서 개발한 소프트웨어, 자바 프로젝트의 공식적인 빌드 도구로 사용됨 - XML 기반의 빌드 스크립트 사용 - 자유도와 유연성 높음, 복잡한 빌드 환경에도 대처 가능 - 정해진 규칙이나 표준이 없어 개발자가 모든 것을 정의, 스크립트의 재사용 어려움 |
Maven |
- 아파치 소프트웨어 재단에서 개발한 소프트웨어, Ant의 대안으로 개발 됨 - 의존성을 설정해 라이브러리를 관리 - 컴파일과 빌드 동시 수행 가능 - 규칙이나 표준이 존재해 예외 사항만 기록하면 됨 |
Gradle |
- 기존의 Ant와 Maven을 보완해 개발된 빌드 도구 - 한스 토커 외 6인의 개발자가 모여 공동 개발함 - 안드로이드 스튜디오의 공식 빌드 도구로 채택된 도구 - 의존성 활용, 그루비(Groovy) 기반의 빌드 스크립트 사용 |
기타 협업 도구
개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구로, 협업 소프트웨어, 그룹웨어(Gropware) 등으로 불림
- 일정 관리, 업무흐름 관리, 정보 공유, 커뮤니케이션 등의 업무 보조 도구가 포함되어 있음
- 다양한 플랫폼에서 사용할 수 있도록 제공됨
- 협업 도구가 익숙하지 않거나 이용할 의지가 없으면 협업 도구가 요히려 협업의 방해 요소가 될 수 있음
- 협업 도구의 종류
프로젝트 및 일정 관리 | - 전체 프로젝트와 개별 업무들의 진행 상태, 일정 등을 공유하는 기능 제공 - 구글 캘린더, 분더리스트(Wunderlist), 트렐로(Trello), 지라(Jira), 플로우(Flow) 등 |
정보 공유 및 커뮤니케이션 | - 주체별로 구성원들을 지목해 방을 개설한 후 정보를 공유하고 대화하는 것 가능 - 파일 관리 간편, 의사소통 자유로움 - 슬랙(Slack), 잔디(Jandi), 태스크월드(Teskworld) 등 |
디자인 | - 디자이너가 설계한 UI나 이미지의 정보들을 코드화하여 개발자에게 전달하는 기능 제공 - 스케치(Sketch), 제플린(Zeplin) 등 |
기타 | - 아이디어 공유에 사용되는 에버노트(Evernote) - API를 문서화해 개발자들 간 협업을 도와주는 스웨거(Swagger) - 깃(Git)의 웹호스팅 서비스인 깃허브(Github) |