* 단위 모듈 구현
☞ SW 개발에 있어 기능 분할하고 추상화하여 성능 향상시키고 유지보수 효과적으로 하기 위한 단위 컴포넌트 별 구현 기법
☞ 인터페이스 모듈, DB 접근 모듈 등 통합 구현에 필요한 단위에 컴포넌트 구현
1. 단위 모듈 종류
- 상세 설계된 단위 모듈, 환경 변수를 실제 프로그래밍 언어로 구현하는 것
- 화면 모듈, 화면에서 입력받은 데이터 처리 위한 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트
2. 단위 모듈 구현 원리
▶ 단위 모듈 구현 원리
▷ 정보 은닉 (Information Hiding)
- 객체에 대한 구체적인 정보 노출시키지 않도록 하는 기법
▷ 분할과 정복 (Divide & Conquer)
- 복잡한 문제 분해하여 모듈 단위로 문제 해결
▷ 데이터 추상화 (Data Abstraction)
- 객체 간 공통성 추출하여 일반화시키는 기법
▷ 모듈 독립성 (Module Inpendency)
- 낮은 결합도와 높은 응집도 가짐
3. 단위 모듈 구현 시 고려 사항
- 응집도 높이고 결합도 낮춤
- 공통 모듈 구현 먼저 하고, 개별 단위 모듈 구현 시 이를 재사용
- 항상 예외처리 로직 고려하여 구현
4. 화면 구현
ㄱ. HTML 5
- 웹 애플리케이션에서 화면 단위 모듈화 프로그래밍은 일반적으로 HTML 5 기반으로 구현됨
- 월드와이드웹(WWW) 통해 제공되는 정보 나타낼 목적으로 사용되는 마크업 언어
- 차세대 웹 표준으로 확정된 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()
'정보처리기사 > 필기' 카테고리의 다른 글
[정보처리기사] Part02-05-3. 인터페이스 구현 검증 (0) | 2022.02.25 |
---|---|
[정보처리기사] Part02-02-2. 통합구현 관리 (0) | 2022.02.25 |
[정보처리기사] Part02-01-4. 데이터 조작 프로시저 최적화 (0) | 2022.02.25 |
[정보처리기사] Part01-04-3. 인터페이스 상세 설계 (0) | 2022.02.25 |
[정보처리기사] Part01-04-2. 인터페이스 대상 식별 (0) | 2022.02.25 |
댓글