본문 바로가기
정보처리기사/필기

[정보처리기사] Part02-02-1. 모듈 구현

by 채연2 2022. 2. 25.

* 단위 모듈 구현

☞ SW 개발에 있어 기능 분할하고 추상화하여 성능 향상시키고 유지보수 효과적으로 하기 위한 단위 컴포넌트 별 구현 기법

☞ 인터페이스 모듈, DB 접근 모듈 등 통합 구현에 필요한 단위에 컴포넌트 구현

 

    1. 단위 모듈 종류

        - 상세 설계된 단위 모듈, 환경 변수를 실제 프로그래밍 언어로 구현하는 것

        - 화면 모듈, 화면에서 입력받은 데이터 처리 위한 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트

 

    2. 단위 모듈 구현 원리

        ▶ 단위 모듈 구현 원리

            ▷ 정보 은닉 (Information Hiding)

                - 객체에 대한 구체적인 정보 노출시키지 않도록 하는 기법

            ▷ 분할과 정복 (Divide & Conquer)

                - 복잡한 문제 분해하여 모듈 단위로 문제 해결

            ▷ 데이터 추상화 (Data Abstraction)

                - 객체 간 공통성 추출하여 일반화시키는 기법

            ▷ 모듈 독립성 (Module Inpendency)

                - 낮은 결합도와 높은 응집도 가짐

 

    3. 단위 모듈 구현 시 고려 사항

        - 응집도 높이고 결합도 낮춤

        - 공통 모듈 구현 먼저 하고, 개별 단위 모듈 구현 시 이를 재사용

        - 항상 예외처리 로직 고려하여 구현

 

    4. 화면 구현

        ㄱ. HTML 5

            -  웹 애플리케이션에서 화면 단위 모듈화 프로그래밍은 일반적으로 HTML 5 기반으로 구현됨

            -  월드와이드웹(WWW) 통해 제공되는 정보 나타낼 목적으로 사용되는 마크업 언어

            -  차세대 웹 표준으로 확정된 HTML의 5번째 버전 의미

            -  오디오, 비디오, 그래픽 처리 등 다양한 기능 제공하고 웹, 모바일 등 다양한 환경에서 사용 가능

HTML 5 구조

 

            ▶ HTML 5 문서 구조 설명

                ▷ header

                    - 문서의 header 나타낼 때 사용

                ▷ footer

                    - 문서의 footer 나타낼 때 사용

                ▷ nav

                    - 문서 내에 Navigation 요소 있을 때 사용

                ▷ section

                    - 문맥 흐름 중 콘텐츠 주제 별로 묶을 때 사용하며 그 안에는 섹션 제목 나타내는 <h1>~<h6> 제목 태그 함께 사용

                ▷ artical

                    - 뉴스 기사나 블로그 본문과 같은 독립된 Contents 표시할 때 사용

                    - 태그 적용한 부분 떼어 내 독립적으로 배포, 재사용하더라도 완전히 하나의 콘텐츠가 되는 경우 사용

                    - <section>태그는 문맥 흐름 중에서 콘텐츠 주제 별로 묶을 때 사용

                ▷ aside

                    - 주요 콘텐츠 이외 참고가 될 수 있는 콘텐츠 구성 시 사용

                    - 사이드바는 필수 요소 아니므로 문서 메인 내용에 영향 미치지 않는 내용들 넣을 때만 사용

 

        ㄴ. 반응형 웹 (Responsive Web)

            -  하나의 소스로 제작된 콘텐츠가 디스플레이 종류에 따라서 UI가 최적화되는 웹페이지 의미

            -  모바일 환경 시작되면서 장치도 다양해져 해상도 크기 및 비율이 다양해졌고, 이를 지원하기 위한 웹 기술

            -  기본적인 기술 요소는 유동적 이미지, 유동적 그리드, 미디어 쿼리 존재

            -  리액트(React), 뷰(Vue), 앵귤러(Angular) 같은 웹 컴포넌트 활용하여 반응형 웹 구현 가능

            -  웹에서의 OSMU(One Source Multi Used)는 하나의 웹소스, 웹 콘텐츠를 다양한 해상도와 다양한 디바이스에 맞게 활용 가능한 의미로 통함

 

        ㄷ. 클린 코드(Clean Code)

            -  작성자가 아닌 사람도 읽기 쉽고 고치기 쉽게 만든 코드

            -  단순하고 직접적이며, 잘 쓴 문장처럼 읽힘

            -  결코 설계자 의도 숨기지 않음. 오히려 명쾌한 추상화와 단순한 제어문으로 가득함

 

            ▶ 클린 코드 특징

                - 가독성 뛰어남

                - 간단하고 작음

                - 의존성 최대한 줄임

                - 코드 의도와 목적 명확

                - 코드가 타인에 의해 변경 용이

                - 코드 중복 없거나 적음

                - 개체가 한 가지 작업만 수행

 


* 단위 모듈 테스트

☞ 단위 모듈 구현이 완료 되었으면 단위 모듈 테스트 수행

☞ IDE (Integrated Development Environment) 도구 활용해 단위 모듈 하나 하나에 대한 디버깅 수행

☞ 화이트박스 테스트 기법 사용

 

    1. 단위 모듈 테스트 방법

        ① 화이트 박스 테스트

            - 모듈 내부 소스를 보면서 수행하는 테스트

            - 단위 모듈 테스트의 가장 기본적인 방법

            - 소스 코드 보면서 테스트 케이스 다양하게 만들어서 테스트 가능

 

        ② 메소드(Method) 기반 테스트

            - 단위 모듈 외부에 공개된 메소드 기반 테스트

            - 메소드에 파라미터 값 다르게 호출하면서 다양한 테스트 수행

 

        ③ 화면 기반 테스트

            - 사용자용 화면 있는 경우 각각 화면 단위로 단위 모듈 개발 후 화면에 직접 데이터 입력해 테스트 수행

            - 화면과 연계된 서비스 컴포넌트, 비즈니스 컴포넌트, 공통 컴포넌트를 한꺼번에 단위 테스트에 참여 가능

            - 사용자 시나리오에 기반한 단위 모듈 테스트 가능

 

        ④ 스텁(Stub)과 드라이버(Driver) 활용

            - 사용자용 화면, 하위 모듈 등과 같이 테스트 수행에 필요한 다른 모듈 개발 안 된 경우 스텁과 드라이버 활용

구분 설명
스텁 (Stub) 하위 모듈 제공 : 상위 모듈은 있지만, 하위 모듈은 없는 경우 사용하는 기법
드라이버 (Driver) 상위 모듈 제공 : 하위 모듈은 있지만, 상위 모듈은 없는 경우 사용하는 기법

 

    2. 소스 코드 커버리지

        - 프로그램 테스트 수행 정도 나타내는 값으로 테스트 수행 결과를 정량적인 수치로 나타내는 방법

 

        ▶ 소스코드 커버리지 유형

           ▷ 구문 커버리지 (Statement Coverage)

               - 프로그램 내에 있는 조건문이 적어도 한 번은 실행하는 커버리지

               - 조건문 결과와 관계 없이 구문 실행된 갯수로 계산

           ▷ 결정 커버리지 (Decisio Coverage)

               - 결정 조건 내 전체 조건식에 대한 참/거짓을 적어도 한 번은 수행하는 커버리지

               - 개별 조건식이 아닌 전체 조건식의 참/거짓 구분

           ▷ 조건 커버리지 (Condiition Coverage)

               - 결정 조건 내 개별 조건식에 대한 참/거짓을 적어도 한 번은 수행하는 커버리지

               - 전체 조건식이 아닌 개별 조건식의 참/거짓 구분

           ▷ 조건/결정 커버리지 (Condition/Decision Coverage)

               - 전체 조건식이 참/거짓 한 번씩 가지면서, 개별 조건식이 참/거짓 모두 한 번씩 갖는 커버리지

               - 결정 커버리지와 조건 커버리지 동시 만족

           ▷ 변경 조건/결정 커버리지 (Modified Condition/Decision Coverage)

               - 각 개별 조건식이 다른 개별 조건식에 무관하게 전체 조건식 결과에 영향

               - 조건이 하나라도 변경되는 경우 결정 포인트 참/거짓에 변경 발생하는 커버리지 도출

           ▷ 다중조건 커버리지 (Multiple Condition Coverage)

               - 결정 조건 내 모든 개별 조건식의 모든 가능한 논리적 조합 100% 보장

 

    3. 단위 모듈 디버깅

        ① IDE 도구 활용한 디버깅

            -  Eclipse 혹은 Windows Visual Studio 같은 IDE 도구 활용하여 단위 모듈에 대한 디버깅 실시

            -  디버깅 시 에러가 나온 코드에 대해 로직 따라가면서 변수 값 변화 관찰

 

        ② 단위 테스트 자동화 도구 활용한 디버깅

            -  JUnit : Java 기반 단위 모듈 테스트 자동화 도구

            -  CppUnit : C++ 언어 기반 단위 테스트 자동화 도구

            -  unittest : Python 에서 단위 테스트 수행하기 위한 자동화 도구

 

# myCalc.py

def add(a, b):
    return a+b
    
def subtract(a,b):
    reuturn a*b
    
    
# test.py
import unittest
import myCalc

class MyCalcTest (uniitest.TestCase):
    def test_add(self):
        c = myCalc.add(20, 10)
        self.assertEqual(c, 30)
    
    def test_subtract(self):
        c = myCalc.subtract(20, 10)
        self.assertEqual(c, 200)
        
if __name__=='__main__':
    uniitest.main()
320x100

댓글