관리 메뉴

나구리의 개발공부기록

2장 - 통합 구현 | 섹션7. 단위 모듈 구현, 섹션8. 단위 모듈 테스트, 섹션9. 개발 지원 도구 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/필기 2강 - 소프트웨어 개발

2장 - 통합 구현 | 섹션7. 단위 모듈 구현, 섹션8. 단위 모듈 테스트, 섹션9. 개발 지원 도구

소소한나구리 2024. 4. 25. 09:00

2024년도 시나공 필기 책 내용 정리


섹션7. 단위 모듈 구현

 

1. 단위 모듈 구현(Unit Module)의 개요

 

  • 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
  • 단위 모듈로 구현되는 하나의 기능을 단위 기능이라고 부름
  • 사용자나 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램을 의미함
  • 두 개의 단위 모듈이 합쳐질 경우 두 개의 기능을 구현할 수 있음
  • 구성 요소에는 처리문, 명령문, 데이터 구조 등이 있음
  • 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
  • 단위 모듈을 구현하기 위해서는 단위 기능 명세서를 작성한 후 입,출력 기능과 알고리즘을 구현해야 함

단위기능 명세서 작성 -> 입,출력 기능 구현 -> 알고리즘 구현


2. 단위 기능 명세서 작성

 

  • 설계 과정에서 작성하는 기능 및 코드 명세서나 설계 지침과 같이 단위 기능을 명세화한 문서들을 의미함
  • 복잡한 시스템을 단순하게 구현하기 위한 추상화 작업이 필요함
  • 대형 시스템을 분해하여 단위 기능별로 구분하고 각 기능들을 계층적으로 구성하는 구조화 과정을 거침
  • 모듈의 독립적인 운용과 한 모듈 내의 정보가 다른 모듈에 영향을 주지 않도록 정보 은닉의 원리를 고려

3. 입,출력 기능 구현

 

  • 단위 기능 명세서에서 정의한 데이터 형식에 따라 입,출력 기능을 위한 알고리즘 및 데이터를 구현
  • 단위 모듈 간의 연동 또는 통신을 위한 입,출력 데이터를 구현
  • 사용자 인터페이스인 CLI, GUI와의 연도을 고려
  • 네트워크나 외부 장치와의 입,출력은 무료로 공개 되어 있는 Open Source API를 이용하면 간편하게 구현이 가능

IPC(Inter-Process Communication)

 

  • 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합으로 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현이 가능함
  • IPC의 대표 메소드 5가지
    • Shared Memory : 다수의 프로세스가 공유 가능한 메모리를 구성하여 프로세스 간 통신을 수행
    • Socket : 네트워크 소켓을 이용하여 네트워크를 경우하는 프로세스들 간 통신을 수행
    • Semaphores : 공유 자원에 대한 접근 제어를 통해 프로세스 간 통신을 수행
    • Pipes&named Pipes : Pipe라로 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신을 수행, 하나의 프로세스가 Pipe를 이용 중 이라면 다른 프로세스는 접근할 수 없음
    • Message Queueing : 메세지가 발생하면 이를 전달하는 형태로 프로세스 간 통신을 수행

4. 알고리즘 구현

 

  • 입,출력 데이터를 바탕으로 단위 기능별 요구 사항들을 구현 가능한 언어를 이용하여 모듈로 구현
  • 구현된 단위 기능들이 사용자의 요구와 일치하는지 확인하는 과정이 필요
  • 구현되는 모듈은 단위 기능의 종류에 따라 디바이스 드라이버 모듈, 네트워크 모듈, 파일 모듈, 메모리 모듈, 프로세스 모듈 등으로 구분

    • 디바이스 드라이버 모듈 : 하드웨어 주변 장치의 동작을 구현한 모듈
    • 네트워크 모듈 : 네트워크 장비 및 데이터 통신을 위한 기능을 구현한 모듈
    • 파일 모듈 : 컴퓨터 내부의 데이터 구조 영역에 접근하는 방법을 구현한 모듈
    • 메모리 모듈 : 파일을 프로세스의 가상 메모리에 매핑/해제하는 방법, 프로세스 사이의 통신 기능을 구현한 모듈
    • 프로세스 모듈 : 하나의 프로세스 안에서 다른 프로세스를 생성하는 방법을 구현한 모듈

섹션8. 단위 모듈 테스트

 

1. 단위 모듈 테스트의 개요

 

  • 프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것
  • 단위 테스트(Unit Test)라고도 하며, 화이트 박스 테스트와 블랙박스 테스트 기법을 사용함
  • 모듈을 단독적으로 실행할 수 있는 환경과 테스트에 필요한 데이터가 모두 준비되어있어야 함
  • 모듈의 통합 이후에는 오랜 시간 추적해야 발견할 수 있는 에러들도 단위 모듈 테스트를 수행하면 쉽게 발견하고 수정할 수 있음
  • 단위 모듈에 대한 코드이므로 시스템 수준의 오류는 잡아낼 수 없음

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

 

  • 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서로 명세 기반 테스트의 설계 산출물에 해당 됨
  • 단위 모듈을 테스트 하기 전에 테스트에 필요한 입력 데이터, 테스트 조건, 예상 결과 등을 모아 테스트 케이스를 만듦
  • 테스트 케이스를 이용하지 않고 수행하는 직관적인 테스트는 특정 요소에 대한 검증이 누락되거나 불필요한 검증의 반복으로 인해 인력과 시간을 낭비할 수 있음
  • ISO / IEC / IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
    • 식별자(Identifier) : 항목 식별자, 일렬번호
    • 테스트 항목(Test Item) : 테스트 대상(모듈 또는 기능)
    • 입력 명세(Input Specification) : 입력 데이터 또는 테스트 조건
    • 출력 명세(Output Specification) : 테스트 케이스 수행 시 예상되는 출력 결과
    • 환경 설정(Environmental Needs) : 필요한 하드웨어나 소프트웨어의 환경
    • 특수 절차 요구(Special Procedure Requirement) : 테스트 케이스 수행 시 특별히 요구되는 절차
    • 의존성 기술(Inter-case Dependencies) : 테스트 케이스 간의 의존성

3. 테스트 프로세스

 

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

테스트 프로세스 5단계

  • 계획 및 제어 단계 : 테스트 목표를 달성하기 위한 계획을 수립하고, 계획대로 진행 되도록 제어하는 단계
  • 분석 및 설계 단계 : 테스트 목표를 구체화하여 테스트 시나리오와 테스트 케이스를 작성하는 단계
  • 구현 및 실현 단계 : 효율적인 테스트 수행을 위해 테스트 케이스들을 조합하여 테스트 프로시저에 명세하는 단계, 모듈의 환경에 적합한 단위 테스트 도구를 이용하여 테스트를 수행하는 단계
  • 평가 단계 : 테스트가 계획과 목표에 맞게 수행되었는지 평가하고 기록하는 단계
  • 완료 단계 : 이후의 테스트를 위한 참고 자료 및 테스트 수행에 대한 증거 자료로 활용 하기 위해 수행 과정과 산출물을 기록 및 저장하는 단계

섹션8. 단위 모듈 테스트

 

1. 통합 개발 환경(IDE: Integrated Development Environment)

 

  • 코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램에서 처리할 수 있도록 제공하는 소프트웨어적인 개발 환경을 말함
  • 기존 소프트웨어 개발에서는 편집기(Editer), 컴파일러(Compiler), 디버거(Debugger)등의 다양한 툴을 별도로 사용했으나 현재는 하나의 인터페이스로 통합하여 제공
  • 통합 개발 환경을 제공하는 소프트웨어를 의미하며 플랫폼, 운영체제, 언어별로 다양하게 존재함
프로그램 개발사 플랫폼 운영체제 지원 언어
이클립스
(Eclipe)
Eclipse Foundation,
IBM
크로스 플랫폼 Windows, Linux,
MacOS등
Java, C, C++, PHP, JSP, Python 등
비주얼 스튜디오
(Visual Studio)
Microsoft Win32, Win64 Windows Basic, C, C++, Python
엑스 코드(Xcode) Apple Mac, iPhone Mac OS, iOS C, C++, C#, Java, Python, AppleScript등
안드로이드 스튜디오
(Android Studio)
Google Android Windows, Linux,
MacOS
Java, C, C++
IDEA JetBrains
(이전 IntelliJ)
크로스 플랫폼 Windows, Linux,
MacOS
Java, JSP, XML, Go, Kotlim, PHP
  • 통합 개발 환경 도구의 대표적인 기능
코딩(Coding) C, JAVA, Python 등의 프로그래밍 언어로 프로그램을 작성하는 기능
컴파일(Complie) 개발자가 작성한 고급 언어로 된 프로그램을 컴퓨터가 이해할 수 있는 목적 프로그램으로 변역하여 컴퓨터에서 실행 가능한 형태로 변환하는 기능
디버깅(Debugging) 소프트웨어나 하드웨어의 오류나 잘못된 동작, 즉, 버그(Bug)를 찾아 수정하는 기능
배포(Deployment) 소프트웨어를 사용자에게 전달하는 기능

2. 빌드 도구

 

  • 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물을 말함
  • 소스 코드를 소프트웨어로 변환하는 과정에 필요한 전처리(Preprocessing), 컴파일(Complie) 등의 작업들을 수행하는 소프트웨어를 말함
  • 대표적인 도구 목록
Ant
(Another Neat Tool)
아파치 소프트웨어 재단에서 개발한 소프트웨어로 자바 프로젝트의 공식적인 빌드도구
XML기반의 빌드 스크립트를 사용하며, 자유도와 유연성이 높아 복잡한 빌드 환경에도 대처가 가능
Maven Ant와 동일한 아파치 소프트웨어 재단에서 개발된 것으로, Ant의 대안으로 개발됨
규칙이나 표준이 존재하여 예외 사항만 기록하면 되며, 컴파일과 빌드를 동시에 수행할 수 있음
의존성(Dependency)을 설정하여 라이브러리를 관리
Gradle 기존의 Ant와 Maven을 보완하여 개발된 빌드 도구
한스 도커(Hans Dockter) 외 6인의 개발자가 모여 공동으로 개발하였음
안드로이드 스튜디오의 공식 빌드 도구로 채택된 소프트웨어
Maven과 동일하게 의존성을 활용하며 그루비(Groovy) 기반의 빌드 스크립트 사용함

 

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

*라이브러리(Library) : 라이브러리는 개발 편의를 위해 자주 사용되는 코드, API, 클래스, 값, 자료형 등의 다양한 자원들을 모아놓은 것을 의미

*그로비(groovy) : 자바를 기반으로 여러 프로그래밍 언어들의 장점을 모아 만들어진 동적 객체지향 프로그래밍 언어


3. 기타 협업 도구

 

  • 개발에 참여하는 사람들이 서로 다른 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구(Tool)
  • 협업 소프트웨어, 그룹웨어(Groupware)등으로도 불림
  • 협업 도구의 종류
프로젝트 및 일정 관리 전체 프로젝트와 개별 업무들의 진행 상태, 일정 등을 공유하는 기능을 제공
구글캘린더, 분더리스트, 트렐로, 지라, 플로우 등
정보 공유 및 커뮤니케이션 주제별로 구성원들을 지목하여 방을 개설한 후 정보를 공유하고 대화하는 것이 가능
파일 관리가 간편하고 의사소통이 자유로운 것이 특징
슬랙, 잔디, 태스크월드 등
디자인 디자이너가 설게한 UI나 이미지의 정보들을 코드화하여 개발자에게 전달하는 기능을 제공
스케치(Sketch), 제플린(Zeplin) 등
기타 아이디어 공유에 사용되는 에버노트(Evernote)
API를 문서화하여 개발자들 간 협업을 도와주는 스웨어(Swagger)
깃(Git)의 웹 호스팅 서비스인 깃허브(Git Hub)