본문 바로가기

자격증 준비/정보처리기사필기 - 2과목(소프트웨어 개발)

[정보처리기사 필기] 2과목 - 성능과 품질

728x90
반응형

성능 분석

사용자가 요구한 기능을 최소한의 자원을 사용하여 최대한 많은 기능을 신속하게 처리하는 정도

측정 지표

처리량
(Throughtput)
일정 시간 내에 애플리케이션이 처리하는 일의 양
응답 시간
(Response Time)
애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때 까지 걸린 시간
경과 시간
(Turn Around Time)
애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때 까지 걸린 시간
자원 사용률
(Resource Usage)
애플리케이션이 의뢰한 작업을 처리하는 동안의 (CPU 사용량, 메모리 사용량, 네트워크 사용량 등) 자원 사용량

 

빅오 표기법(Big-O Notation)

알고리즘 실행 시간이 최악일 때를 표기하는 방법

 

순환 복잡도(Cyclomatic Complexity)

한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어 척도

맥케이브 순환도(McCabe's Cyclomatic) or 맥케이브 복잡도 메트릭(McCabe's Complexity Metrics)이라고도 함

제어 흐름도 이론에 기초를 둠

  • 순환 복잡도를 이용하여 계산된 값은 프로그램의 독립적인 경로의 수를 정의, 모든 경로가 한 번 이상 수행되었음을 보장하기 위해 행해지는 테스트 횟수의 상한 선을 제공
  • 제어 흐름도 G에서 순환 복잡도 V(G) 계산
    • 방법1 - 순환 복잡도 = 제어 흐름도의 영역 수 -> 제어 흐름도의 영역 수를 계산
    • 방법2 - V(G) = E - N + 2 
      • E : 화살표 수
      • N : 노드의 수

 

소스 코드 최적화

나쁜 코드(Bad Code)를 배제, 클린 코드(Clean Code)를 작성하는 것

나쁜 코드

  • 프로그램의 로직(Logic)이 복잡하고 이해가 어려운 코드
  • 스파게티 코드 : 코드의 로직이 서로 복잡하게 얽혀 있는 코드
  • 외계인 코드 : 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 코드

클린 코드

  • 누구나 쉽게 이해하고 수정 및 추가할 수 잇는 단순, 명료한 코드, 즉 잘 작성된 코드를 의미함
  • 클린 코드 작성 원칙
가독성 - 누구든지 코드를 쉽게 읽을 수 있도록 작성

- 코드 작성 시 이해하기 쉬운 용어를 사용하거나 들여쓰기 기능 등을 사용함
단순성 - 코드를 간단하게 작성

- 한번에 한 가지를 처리하도록 코드를 작성

- 클래스/메소드/함수 등을 최소 단위로 분리
의존성
배제
- 코드가 다른 모듈에 미치는 영향을 최소화

- 코드 변경 시 다른 부분에 영향이 없도록 작성
중복성
최소화
- 코드의 중복을 최소화 함

- 중복된 코드는 삭제하고 공통된 코드를 작성함
추상화 - 상위 클래스/메소드/ㅎ마수에서는 간략하게 애플리케이션의 특성을 나타냄

- 상세 내용을 하위 클래스/메소드/함수에서 구현

 

소스 코드 품질 분석 도구

소스 코드 품질 분석 도구는 코딩 스타일, 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구

 

대분류

  • 정적 분석 도구
    • 작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석 도구
    • 개발 초기의 결함을 찾는데 사용
    • 개발 완료 시점에서는 개발된 소스 코드의 품질을 검증하는 차원에서 사용
    • 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있음
    • 동적 분석 도구로는 발견하기 어려운 결함을 찾아내고, 소스 코드에서 코딩의 복잡도, 모델 의존성, 불일치성 등을 할 수 있음
    • 종류 : pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등
  • 동적 분석 도구
    • 작성한 소스 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석하는 도구
    • 종류 : Avalanche, Valgrind 등

 

EAI(Enterprise Application Integration)

기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션

비즈니스 간 통합 및 연계성을 증대시켜 효율성 및 각 시스템 간의 확장성(Determinacy)을 높여줌

구축 유형

 

ESB(Enterprise Ssrvice Bus)

애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 표준 기반의 인터페이스를 제공하는 솔루션

  • 통합 측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향하는 점이 다름
  • 특정 서비스에 국한되지 않고 범용적으로 사용하기 위하여 애플리케이션과 결합도를 약하게 유지
  • 관리 및 보안 유지가 쉽고, 높은 수준의 품질 지원이 가능

 

 

인터페이스 보안 기능 적용

인터페이스 보안 기능은 일반적으로 네트워크, 애플리케이션, 데이터베이스 영역에 적용

네트워크 영역 - 인터페이스 송, 수신 간 스니핑(Sniffing) 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정

- 암호하는 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP등의 다양한 방식으로 적용
애플리케이션 영역 - 소프트웨어 개발 보안 가이드를 참조하여 애플리케이션 코드 상의 보안 취약점을 보완하는 방향으로 애플리케이션 보안 기능 적용
데이터베이스 영역 - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저(Procedure), 트리거(Trigger) 등의 데이터베이스 동작 객체의 보안 취약점에 보안 기능을 적용

IPsec(IP Security) : 네트워크 계층에서 IP 패킷 단위의 데이터 변조 방지 및 은닉 기능을 제공하는 프로토콜, 암호화 수행 시 양방향 암호화를 지원

 

데이터 무결성 검사 도구

  • 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려주는 도구
    • 인터페이스 보안 취약점을 분석하는데 사용
  • 크래커나 허가 받지 않는 내부 사용자들이 시스템에 침입하고 그 흔적을 감추는 데(백도어, 시스템 파일 변경 등), 이를 감지할 수 있음
  • 해시(Hash) 함수를 이용하여 현재 파일 및 디렉토리의 상태를 DB에 저장한 후 감시하다가 현재 상태와 DB의 상태가 달라지면 관리자에게 변경 사실을 알려줌
  • 대표적인 데이터 무결성 검사도구
    • Tripwire, AIDE, Samhain, Claymore, Slipwire, Fcheck등

 

인터페이스 구현 검증 도구

인터페이스 구현을 검증하기 위해 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요

통합 테스트는 테스트 자동화 도구를 이용하여 효율적으로 수행

도구 기능
xUnit - 같은 테스트 코드를 여러번 작성하지 않게 도와줌

- 테스트마다 예상 결과를 기억할 필요 없는 자동화된 해법을 제공하는 단위 테스트 프레임워크

- Smalltalk에 처음 적용되어 SUnit이라는 이름이였으나 Java용의 JUnit, C++용의 CppUnit, .NET 용의 NUnit, HTTP 용의 HttpUnit 등 다양한 언어에 적용되면서 xUnit으로 통칭
STAF - 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크

- 크로스 플랫폼, 분산 소프트웨어 테스트 환경을 조성할 수 있도록 지원

- 분산 소프트웨어의 경우 각 분산 환경에 설치된 데몬이 프로그램 테스트에 대한 응답을 대신하며, 테스트가 완료되면 이를 통합하고 자동하여 프로그램을 완성
FitNesse - 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
NTAF - FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 NHN(Naver)의 테스트 자동화 프레임워크
Selenium - 다양한 브라우저 및 개발 언어를 지원하느 웹 어플리케이션 테스트 프레임워크
watir - Ruby를 사용하는 애플리케이션 테스트 프레임워크

 

APM(Application Performace Management/Monitoring)

애플리케이션의 성능 관리를 위해 접속자, 자원현황, 트랜잭션 수행 내역, 장애 진단 등 다양한 모니터링 기능을 제공하는 도구

리소스 방식 - Nagios, Zabbix, Cacti등

엔드투엔드 방식(End-to-End) - VisualVM, 제니퍼, 스카우터 등

728x90
반응형