Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Chimy's Program

정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 개선 본문

BASE

정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 개선

chimy 2020. 7. 31. 01:06

정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 개선

 

소스 코드 최적화의 이해

 

  • 소스 코드 최적화는 읽기 쉽고 변경  추가가 쉬운 클린 코드 작성
  • 소스 코드 품질을 위해 기본적으로 지킬 원칙과 기준 정의

 

나쁜 코드(Bad Code) 

 

⁠(1) 개요 

 

  • 다른 개발자가 로직(Logic) 이해하기 어렵게 작성된 코드
  • 처리 로직의 제어가 정제되지 않고 서로 얽혀 있는 스파게티 코드변수나 메소드에 대한 이름 정의를   없는 코드동일한 처리 로직이 중복되게 작성된 코드 

 

⁠(2) 문제점 

 

  • 스파게티 코드의 경우 잦은 오류가 발생할 가능성
  •  코드 이해가  되어 계속 덧붙이기할 경우 코드 복잡도 증가

 

클린 코드(Clean Code) 

 

⁠(1) 개요 

 

  •  작성되어 가독성이 높고 단순하며 의존성을 줄이고 중복을 최소화하여 깔끔하게  정리된 코드

 

(2) 효과

 

  • 중복 코드 제거로 애플리케이션의 설계 개선
  • 가독성이 높으므로 애플리케이션의 기능에 대해 쉽게 이해 가능
  • 버그 찾기가 쉬움
  • 프로그래밍 속도가 빠름

 

 

소스 코드 품질 분석 도구의 이해

 

정적 분석 도구

 

  • 작성된 소스 코드를 실행시키지 않고 코드 자체만으로 코딩 표준 준수 여부코딩 스타일 적정 여부잔존 결함 발견 여부를 확인하는 코드 분석 도구

 

⁠(1) 정적 분석 도구의 유형

 

  • 사전에 결함을 발견하고 예방하는 도구
  • 코딩 표준 준수 여부를 분석하는 도구
  • 소스 코드의 복잡도를 계산하는 도구

 

② 동적 분석 도구 

 

  • 애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고 발생한 스레드의 결함 등을 분석하기 위한 도구

 

 

수행

 

① 애플리케이션 성능 개선 방안 검토

 

  • 성능 테스트 결과를 분석하고 성능 저하 요인별 성능 개선 방안 계획

 

(1) 성능 저하 요인별 성능 개선 방안 검토

 

(가) DB 연결  쿼리 실행 단계의 성능 개선 방안 검토

 

  • DB Lock, 불필요한 DB Fetch, 네트워크 연결 오류 등에 대해 성능 개선 방안 검토

 

(나) 메모리 누수아키텍처 조정호출 순서 변경동기화  내부 로직 변경으로 인한 성능 개선 방안 검토

 

(2) 애플리케이션 성능 개선 계획서 작성

 

(가) 성능 개선 계획서의 필수 항목 결정

 

  • 성능 개선 개요성능 개선 수행 전략성능 개선 수행 일정  절차성능 개선 수행 방안에 대해 설정

 

(나) 선정된 항목을 토대로 성능 개선 계획서 작성

 

② 코드 최적화 기법을 통한 성능 개선 방안 작성

 

  • 나쁜 코드 형식으로 작성된 소스 코드를 클린 코드로 수정하여 성능을 개선할  있는 양한 방안에 대해 검토하고 정리

 

(1) 클린 코드를 작성하기 위한 원칙에 대해 파악

 

  • 클린 코드의 작성 원칙에 대해 파악하고 원칙에 대해 정의
  1. 가독성 : 누구든지 읽기 쉽게 코드를 작성
  2. 단순성 : 소스 코드는 복잡하지 않고 간단하게 작성
  3. 의존성 : 다른 모듈에 미치는 영향을 최소화하도록 작성
  4. 중복성 : 중복을 최소화할  있는 코드 작성
  5. 추상화 : 상위 클래스/메소드/함수를 통해 애플리케이션의 특성을 간략하게 나타내고 상세 내용 하위 클래스/메소드/함수에서 구현

 

※ 클린 코드 작성 원칙

 

① 가독성 

 

  • 이해하기 쉬운 용어 사용
  • 코드 작성  들여쓰기 기능 사용

 

② 단순성

 

  •  번에  가지 처리만 수행
  • 클래스/메소드/함수를 최소 단위로 분리

 

③ 의존성 

 

  • 영향도 최소화
  • 코드의 변경이 다른 부분에 영향이 없게 작성

 

④ 중복성 

 

  • 중복된 코드 제거
  • 공통된 코드 사용

 

⑤ 추상화 

 

  • 클래스/메소드/함수에 대해 동일한 수준의 추상화
  • 상세 내용은 하위 클래스/메소드/함수에서 구현

 

(2) 소스 코드 최적화 기법의 유형에 대해 파악

 

  • 클래스/메소드의 분할배치느슨한 결합(Loosely coupled), 다형성코딩 작성 표준 준수좋은 이름 사용적절한 주석문 사용 등에 대해 파악하고 정리

 

(가) 클래스 분할 배치 기법 파악

 

  • 클래스는 하나의 역할책임만 수행할  있도록 응집도를 높이고 크기를 작게 작성

 

(나) 느슨한 결합(Loosely Coupled) 기법 파악

 

  • 클래스의 자료 구조메소드를 추상화할  있는 인터페이스 클래스를 이용하여 클래 간의 의존성 최소화

 

(다) 코딩 형식 기법을 파악

 

  • 줄바꿈으로 개념을 구분
  • 종속(개념적 유사성 높음함수 사용
  • 호출하는 함수를  배치하고 호출되는 함수는 나중에 배치
  • 변수 선언 위치를 지역 변수는  함수  처음에 선언할  사용

 

(라) 좋은 이름 사용 방법 파악

 

  • 기억하기 좋은 이름발음이 쉬운 용어접두어 사용  기본적인 명명 규칙(Naming Rule) 정의하고 정의된 이름 사용

 

(마) 적절한 주석문 사용 방법 파악

 

  • 소스 코드 작업  앞으로 해야  일을 기록하거나 소스상의 중요한 부분을 강조할  사용

 

(3) 소스 코드 최적화 기법을 통해 애플리케이션의 성능 개선

 

  • 애플리케이션 개발 프레임워크의 코딩 표준을 설정하고 인터페이스 클래스를 이용하여 느슨한 결합(Loosely coupled) 코드 구현
  1. 통합 개발 프레임워크 Eclipse JAVA Code Style Formatter 설정
  2. 인터페이스를 통해 추상화된 자료 구조를 구현하여 의존성 최소화

 

③ 아키텍처 조정을 통한 성능 개선 방안 작성

 

  • 소프트웨어 아키텍처 기법  사용자 화면 계층(User Interface Layer) Spring MVC    컴포넌트에 대해 파악하고 아키텍처 기법인 생성과 사용의 분리 작업을 통해 애플리케이션의 성능 개선

 

(1) Spring MVC(Model View Controller) 구조와  컴포넌트의 역할에 대해 조사하고 정리

 

(가) Spring MVC(Model View Controller) 구조  동작 순서에 대해 정리

 

(나) Spring MVC  컴포넌트에 대해 정리

 

  1. DispatcherServlet(디스패처 서블릿) : Spring MVC 프레임워크의 Front Controller,  요청과 응답의 수명주기(Life Cycle) 주관하는 컴포넌트
  2. HandlerMapping(핸들러매핑) :  요청  해당 URL 매핑되는 컨트롤러를 검색결정하는 컴포넌트
  3. Controller(컨트롤러) : 비즈니스 로직을 수행하고 결과를 ModelAndView 반영하는 컴포넌트
  4. ModelAndView : 수행 결과와 반영하는 모델 데이터 객체이동할 페이지 정보  뷰로 이루어짐
  5. View Resolver( 리졸버) : 결과를 표시할 어떤 뷰를 선택할지 결정
  6. View : 결과 데이터인 모델 객체 표현(Display)

 

(2) 아키텍처 조정을 통한 성능 개선 방안 수행

 

  • 객체의 생성과 사용을 분리함으로써 소프트웨어의 의존성을 최소화하기 위하여 팩토리 메소드(Factory Method) 패턴을 이용하여 성능 개선 방안 수행

 

④ 프로그램 호출 순서 조정을 통한 성능 개선 방안 작성

 

  • 서로 연관된 내용은 세로로 가깝게 작성함으로써 밀집도를 높이고 유사성이 높은 함수나 코드끼리 가깝게 배치
  • 호출하는 함수를 먼저 작성하고 호출되는 함수는 나중에 배치

 

(1) 프로그램 호출 순서를 조정하여 성능 개선 방안 수행

 

  • 호출하는 함수를 먼저 코딩하고 호출되는 함수는 나중에 배치하여 애플리케이션의 성능 개선

 

⑤ 소스 코드 품질 분석 도구를 활용하여 애플리케이션 성능 개선

 

(1) 메모리 사용 최소화를 통해 성능 개선

 

(가) String 클래스를 StringBuffer 또는 StringBuilder 클래스로 수정하여 코딩

 

  • String 클래스는 연산 시마다 new 객체를 생성하여 Heap 메모리 사용량이 증가함에 따라 속도 저하의 가능성 존재
  • StringBuffer 또는 StringBuilder 클래스가 기존 체의 크기를 증가시키면서 이를 처리

 

(나) 루  불필요한 메소드의 호출이 반복되지 않도록 코딩

 

  • 루프 내에서 메소드(함수) 호출이 반복되는 코드를 루프 진입 전에 호출하도록 소스 코드를 수정하여 성능 개선

 

(2) 입출력 발생 최소화를 통하여 성능 개선

 

  • 문자 입력 스트림 또는 파일 정보를 읽어올  버퍼(Buffer) 사용하거나 BufferedReader 사용하여 입출력 발생 최소화를 통해 애플리케이션 성능 개선

 

(3) System.out.println() 사용하지 않음으로써 성능 개선

 

  • 파일콘솔에 로그를 남기면 애플리케이션 대기 시간 발생
  • 이에 대응하여 Log4j 거를 사용함으로써 성능 개선

 

⑥ 애플리케이션 성능 현황 관리

 

(1) 성능 현황판(Q-Board) 작성

 

(가) 성능 테스트 수행 단계 기록

 

  • 성능 테스트 계획성능 테스트 수행 단계성능 개선 단계로 나누어 기록

 

(나) 업무 기능별로  진행 완료 항목 준비

 

  • 수행 단계의 업무 기능별로 앞으로 테스트를 수행할 단위 업무명현재 진행 중인 테스트 단위 업무명이미 테스트를 완료한 단위 업무명 작성

 

(다) 성능 테스트 단계와  업무 기능별 매트릭스 작성

 

  • 가령 xx응용체계 개발 프로젝트 성능 테스트를 진행 시 테스트 대상  건강/인사관리, OO관리교육훈련관리종합OOO  업무 기능별로 나누고  진행 완료 항목에 접착 메모지 등을 이용하여 기록하고 관리

 

(라) 소멸 차트 작성

 

  • 가로축은 날짜를 기록하고 세로축은 남은 작업량을 기록하여 정해진 날짜가 되었을  남은 작업량이 0 되도록 관리

 

(2) 성능 현황판을 이용하여 애플리케이션 성능 개선

 

  • 성능 관리자는 성능 현황판을 이용하여 성능 테스트 분석 결과  성능 저하 원인을 발자에게 전달함으로써 애플리케이션 성능을 개선하도록 관리

 

Comments