본문 바로가기

정보처리기사/2과목 소프트웨어 개발

[정보처리기사] Chapter 02. 소프트웨어 개발: 통합 구현

1. 단위 모듈 구현 (중요도: C)

 소프트웨어 구현에 필요한 여러 동작 중, 한 가지 동작 수행 기능을 모듈로 표현한 것이 단위 모듈(Unit Module)이다. 단위 모듈로 구현되는 하나의 기능을 단위 기능이라고 칭하며, 단위 모듈은 사용자나 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램을 의미하기도 한다.  하나의 기능을 단위로 지칭하기 때문에 두 개의 단위 모듈이 합쳐지면 두개의 기능을 구현할 수 있다. 

 단위 모듈의 구성 요소는 처리문, 명령문, 데이터 구조 등이 있으며, 다른 모듈에 호출되거나 삽입되기도 한다. 또한 독립적인 컴파일이 가능하다. 단위 모듈을 구현하기 위해서는 단위 기능 명세서를 작성한 후 입·출력 기능과 알고리즘을 구현해야 한다. 

 

단위 모듈 구현 순서: 단위 기능 명세서 작성 → 입출력 기능 구현 → 알고리즘 구현 

 

1.1. 단위 기능 명세서 작성

 단위 기능 명세서는 설계 과정 중 작성하는 단위 기능을 명세화한 문서들을 의미한다. 단위 기능 명세서를 작성하기 위해서는 복잡한 시스템을 단순하게 구현하기 위한 추상화 작업이 필요하다. 이 단계에서는 대형 시스템을 분해해 단위 기능을 구분하고, 각 기능들을 계층적으로 구성하는 구조화 과정을 거친다.

  또한, 단위 기능 명세서 작성 시 모듈의 독립적인 운용과 한 모듈 내의 정보가 다른 모듈에 영향을 주지 않도록 정보 은닉의 원리를 고려한다.

 

1.2. 입출력 기능 구현

 단위 기능 명세서에서 정의한 데이터 형식에 따라 입출력 기능을 위한 알고리즘 및 데이터를 구현한다. 이 단계에서는 단위 모듈 간의 연동 또는 통신을 위한 입출력 데이터를 구현하고, 입출력 기능 구현 시 CLI, GUI와의 연동을 고려한다. 

 입·출력 기능 구현 시 네트워크나 외부 장치의 입출력은 Open Source API를 이용하면 간편하게 구현할 수 있다. 

 

◍  CLI (Command Line Interface): Telnet이나 DOS와 같이 키보드를 통해 명령어를 입력받는다.

◍  GUI (Graphical User Interface): 윈도우, MacOS와 같이 키보드, 마우스 등의 도구를 통해 화면의 아이콘, 메뉴 등 그래픽 요소로 명령을 입력 받는다.

 

IPC (Inter- Process Communication)

 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합으로, 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현이 가능하다. IPC의 대표적인 Method는 아래의 5가지이다.

 

Shared Memory: 다수의 프로세스가 공유 가능한 메모리를 구성해 프로세스 간 통신을 수행한다.

Socket: 네트워크 소켓을 이용해 네트워크를 공유하는 프로세스들 간 통신을 수행한다.

Semaphores: 공유 지원에 대한 접근 제어를 통해 프로세스 간 통신을 수행한다.

Pipes&named Pipes: 'Pipe'라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신을 수행한다. 하나의 프로세스가 Pipe를 이용중이라면 다른 프로세스는 접근할 수 없다.

Message Queuing: 메시지가 발생하면 이를 전달하는 형태로 프로세스 간 통신 수행한다.

 

1.3. 알고리즘 구현

 알고리즘 구현 단계는 입·출력 데이터를 바탕으로 단위 기능별 요구 사항들을 모듈로 구현하는 과정이다. 사용 가능한 언어를 이용하여 모듈로 구현한다. 이 단계에서는 구현된 단위 기능들이 사용자의 요구와 일치하는지 확인하여야 한다.

 구현되는 모듈의 종류를 단위 기능의 종류에 따라 다음으로 구분 한다.

 

디바이스 드라이버 모듈

하드웨어 주변 장치의 동작을 구현한 모듈

네트워크 모듈

네트워크 장비 및 데이터 통신을 위한 기능을 구현한 모듈

파일 모듈

컴퓨터 내부의 데이터 구조 영역에 접근하는 방법을 구현한 모듈

메모리 모듈

파일을 프로세스의 가상 메모리에 매칭/해제하는 방법, 프로세스 사이의 통신 기능을 구현한 모듈

프로세스 모듈

하나의 프로세스 안에서 다른 프로세스를 생성하는 방법을 구현한 모듈

 


2. 단위 모듈 테스트 (중요도: B)

 단위 모듈 테스트는 프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것을 말한다. 단위 테스트라고도 하며, 화이트박스 테스트(모듈의 소스 코드를 오픈시킨 상태에서 소스 코드의 모든 논리적 경로를 테스트하는 방법 )와 블랙박스 테스트(소프트웨어가 수행할 특정 기능이 완전히 작동되는 것을 입증하는 테스트 ) 기법을 사용한다. 단위 모듈 테스트의 기준은 단위 모듈에 대한 코드이므로 시스템 수준의 오류는 잡아낼 수 없다.

 

2.1. 테스트 케이스(Test Case)

 테스트 케이스는 구현된 소프트웨어가 사용자의 요구사항을 준수했는지 확인하기 위해 구성된 테스트 항목 명세서이다. 테스트 케이스는 명세 기반 테스트의 설계 산출물에 해당한다. 

 모듈이 올바르게 작성되었는지 확인하기 위해 모듈에 입력될 수 있는 여러 값들과 예상 결과들을 나열해 목록을 만든다. 테스트 케이스를 이용하지 않는 직관적인 테스트는 인력과 시간을 낭비할 수 있다는 장점을 가진다.

 

 ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소는 다음과 같다. 

 

식별자(Identifier

항목 식별자, 일련번호

테스트 항목(Test Item)

테스트 대상

입력 명세(Input Specification)

입력 데이터 또는 테스트 조건

출력 명세(Output Specification)

테스트 케이스 수행 시 예상되는 출력 결과

환경 설정(Environmental Needs)

필요한 하드웨어나 소프트웨어의 환경

특수 절차 요구(Special Procedure Requirement)

테스트 케이스 수행 시 특별히 요구되는 절차

의존성 기술(Inter-case Dependencies)

테스트 케이스 간의 의존성

 

1.2. 테스트 프로세스

 테스트 프로세스는 테스트를 위해 수행하는 모든 작업들이 테스트의 목적과 조건을 달성할 수 있도록 도와주는 과정이다. 

 

 테스트 프로세스 5단계

계획 및 제어 단계: 테스트 목표를 달성하기 위한 계획 수립, 계획대로 진행되도록 제어

분석 및 설계 단계: 테스트 목표를 구체화해 테스트 시나리오(테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서 )와 테스트 케이스를 작성하는 단계

구현 및 실행 단계: 효율적인 테스트 수행을 위해 테스트 케이스들을 조합해 테스트 프로시저(테스트 케이스의 실행 순서를 의미 )에 명세하는 단계

평가 단계: 테스트가 계획과 목표에 맞게 수행되었는지 평가, 기록

완료 단계: 이후의 테스트를 위한 참고 자료 및 테스트 수행에 대한 증거 자료로 활용하기 위해 수행 과정과 산출물을 기록 및 저장하는 단계

 

 


3. 개발 지원 도구 (중요도: B)

3.1. 통합 개발 환경(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)

Google 

Android 

Windows,

Linux, MacOS 

JAVA, C, C++

IDEA 

JetBrains 

크로스 플랫폼 

Windows, Linux, MacOS 

JAVA, JSP, 

XML, GO, 

Kotlin 등

 

3.2. 빌드 도구

 빌드는 소스 코드를 소프트웨어로 변환하는 과정을 말하며, 빌드 도구는 빌드에 필요한 전처리(컴파일에 앞서 코드에 삽입된 주석을 제거하거나 매크로들을 처리하는 과정 ), 컴파일 등의 작업들을 수행하는 소프트웨어를 말한다. 

 

◍  빌드를 지원하는 대표적인 도구는 다음과 같다.

 

Ant

(Another 

Neat Tool)

◍ 아파치 소프트웨어 재단에서 개발한 소프트웨어, 자바 프로젝트의 공식적인 빌드 도구로 사용된다.

◍ XML 기반의 빌드 스크립트 사용한다.

◍ 자유도와 유연성이 높고, 복잡한 빌드 환경에도 대처가 가능하다.

◍ 정해진 규칙이나 표준이 없어 개발자가 모든 것을 정의한다. 표준이 없어 스크립트의 재사용이 어렵다.

Maven

◍ 아파치 소프트웨어 재단에서 개발한 소프트웨어이다. Ant의 대안으로 개발 되었다.

◍ 의존성을 설정해 라이브러리를 관리한다.

◍ 컴파일과 빌드 동시 수행할 수 있다.

◍ 규칙이나 표준이 존재해 예외 사항만 기록하면 된다.

Gradle

◍ 기존의 Ant와 Maven을 보완해 개발된 빌드 도구이다.

◍ 한스 토커 외 6인의 개발자가 모여 공동 개발하였다.

◍ 안드로이드 스튜디오의 공식 빌드 도구로 채택되었다.

◍ Maven과 동일하게 의존성을 활용한다.

◍ 그루비(Groovy) 기반의 빌드 스크립트를 사용한다.

의존성(Dependency): 빌드 스크립트 안에 사용하고자 하는 라이브러리를 <dependency> 예약어로 등록하면, 빌드 수행시 인터넷 상의 라이브러리 저장소에서 해당 라이브러리를 찾아 코드에 추가해 준다.

 

3.3. 기타 협업 도구

 협업 도구는 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구로, 협업 소프트웨어, 그룹웨어(Groupware) 등으로 불린다. 

 협업 일정 관리, 업무 흐름 관리, 정보 공유, 커뮤니케이션 등의 업무 보조 도구가 포함되어 있고, 다양한 플랫폼에서 사용할 수 있도록 제공된다. 다만, 협업 도구가 익숙하지 않거나 이용할 의지가 없으면 협업 도구가 오히려 협업의 방해 요소가 될 수 있다. 

 

◍  협업 도구의 종류

프로젝트 및 

일정 관리

◍ 전체 프로젝트와 개별 업무들의 진행 상태, 일정 등을 공유하는 기능을 제공한다.

◍ 구글 캘린더(Google Calendar), 분더리스트(Wunderlist), 트렐로(Trello), 지라(Jira), 플로우(Flow) 등

정보 공유 및

커뮤니케이션

◍ 주제별로 구성원들을 지목해 방을 개설한 후 정보를 공유하고 대화하는 것이 가능하다.

◍ 파일 관리 간편하고 의사소통이 자유로운 것이 특징이다.

◍ 슬랙(Slack), 잔디(Jandi), 태스크월드(Teskworld) 등

디자인

◍ 디자이너가 설계한 UI나 이미지의 정보들을 코드화하여 개발자에게 전달하는 기능을 제공한다.

◍ 스케치(Sketch), 제플린(Zeplin) 등

기타

◍ 아이디어 공유에 사용되는 에버노트(Evernote)

◍ API를 문서화해 개발자들 간 협업을 도와주는 스웨거(Swagger)

◍ 깃(Git)의 웹호스팅 서비스인 깃허브(Github)