nGrinder 소개 + 고급 사용법
- 아키텍쳐
- 자이선 / 그루비 스크립트 동작 방식
- DB 테스트
- 로그 레벨 조작 방법
- 리소스 처리 방법
- 라이브러리 처리 방법
- 대규모 응답 처리 방법
- 가중치 부여 방법
- 쓰레드별 다른 처리 방법
- XML / JSON 처리 방법
nGrinder 소개 + 고급 사용법
- 아키텍쳐
- 자이선 / 그루비 스크립트 동작 방식
- DB 테스트
- 로그 레벨 조작 방법
- 리소스 처리 방법
- 라이브러리 처리 방법
- 대규모 응답 처리 방법
- 가중치 부여 방법
- 쓰레드별 다른 처리 방법
- XML / JSON 처리 방법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
AgitarOne은 Java로 개발중인 Eclipse 프로젝트에 자동화된 단위 테스트의 환경을 제공하여 테스트 시간을 대폭 단축 시켜 개발 비용을 절감하게 하며, 작성된 소스 코드들이 실질적으로 수행되는지 명확히 파악할 수 있도록 하여 소스 코드의 품질을 향상시켜 줄 수 있는 Java 개발자의 단위 테스트 자동화 솔루션 입니다.
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)Sungmin Kim
Document presented at Korea Game Conference 2014.
Title is ''Software Enginner in Test' in Game Development' and sub-title is 'How can TERA verify too many scearios by automation ?'
블루홀 스튜디오의 김성민 입니다. 이번 Korea Game Conference 2014에서 발표한 자료를 공유합니다. 발표 주제는 'Software Enginner in Test' in 게임 개발 입니다.
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...Kay Kim
MIGS 2004에서, Noel Llopis가 발표한 "애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In The Real World)의 한글 슬라이드
http://betterways.tistory.com/139 참조.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
AgitarOne은 Java로 개발중인 Eclipse 프로젝트에 자동화된 단위 테스트의 환경을 제공하여 테스트 시간을 대폭 단축 시켜 개발 비용을 절감하게 하며, 작성된 소스 코드들이 실질적으로 수행되는지 명확히 파악할 수 있도록 하여 소스 코드의 품질을 향상시켜 줄 수 있는 Java 개발자의 단위 테스트 자동화 솔루션 입니다.
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)Sungmin Kim
Document presented at Korea Game Conference 2014.
Title is ''Software Enginner in Test' in Game Development' and sub-title is 'How can TERA verify too many scearios by automation ?'
블루홀 스튜디오의 김성민 입니다. 이번 Korea Game Conference 2014에서 발표한 자료를 공유합니다. 발표 주제는 'Software Enginner in Test' in 게임 개발 입니다.
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...Kay Kim
MIGS 2004에서, Noel Llopis가 발표한 "애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In The Real World)의 한글 슬라이드
http://betterways.tistory.com/139 참조.
5. 최적화란 무엇인가 ?
소프트웨어의 최적화
프로그램의 실행 속도를 높이는 것
실행 파일의 크기를 줄이는 것
코드의 질을 향상 시키는 것
출력의 정확성을 높이는 것
기동 시간 (Start up) 을 최소화 하는 것
단위 시간당 데이터의 처리량을 늘리는 것
저장 장치의 부담을 줄이는 것
6. 최적화란 무엇인가 ?
코드 성능의 결정 요소
소스 코드 각 행의 품질
저급 모듈 설계
실행 플랫폼
전개 또는 설치 구성 ( configuration )
아키텍처에서의 소프트웨어 관련 결정 사항
기존에 만들어져 있는 것들 ( 시스템의 기존 부분과의 상호 작용의 필요
성 )
23. 왜 최적화가 안 되나 ?
대안
합리화 하기
프로젝트가 끝날 때를 예상하여 더 빠른 기계를 사용
하드웨어 해결책 ( 더 큰 메모리 , 특정 연산용 유닛 추가 )
높은 성능을 요구하는 다른 프로세스 막기
백그라운드 스레드 만들기
작업 완료 전에 사용자 인터페이스를 미리 변화시키기
자동화 하여 사용자가 없도록 하기
더 효율적인 최적화를 하는 최신 컴파일러 사용
42. 실행 속도를 높이는 방법
느린 일의 속도를 높인다 .
느린 일을 덜 자주 한다 .
느린 일을 정말 필요할 때까지 미루었다가 한다 .
최적화 테크닉
43. 설계 변경
캐싱 , 버퍼링 추가하여 중복이나 느린 접근 개선
Resource pool 을 이용하여 자원 할당 부담 줄이기
저장 포맷을 바이너리로 바꾸어 파싱 속도 늘리기
병렬 처리를 사용하여 일들이 밀리지 않게 하기
스레드의 과도한 잠금을 피하거나 제거하기
과도한 예외 처리 피하여 컴파일러의 최적화를 돕기
설계의 품질을 떨어트려 속도를 높이기
기능 제거하기
최적화 테크닉
44. 알고리즘
최적화 테크닉
A A( 최적
화 )
B
시간 5ms 4ms 10ms
반복 횟수 1000 1000 100
총 시간 5000ms 4000ms 1000m
s
근본적인 알고리즘을 바꾸는 편이 좋다 .
45. 컴파일러가 알아서 최적화 해주는 것들
루프 풀기
코드 인라인
상수 접기
컴파일 시간으로 이동
강도 축소
부분식
죽은 코드의 제거
코드 변경
최적화 테크닉
56. 작업을 절대적으로 필요할 때까지 미루
기
최적화 테크닉
1
2
3
4
5
6
7
8
std::vector<Word> sameWords = GetSameWords( words );
std::sort( sameWords.begin(), sameWords.end() );
FileWriter fw( "test.txt" );
for ( auto itr = sameWords.begin(); itr != sameWords.end; ++itr )
{
fw.Write( itr.GetString() );
}
57. 조건 검사를 함수 위쪽으로 끌어올려서 불필요한 작업 피하기
최적화 테크닉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void InsertEncryptData( int idx, int data )
{
int encryptData = data;
for(int i = 0; i < 5; ++i)
{
encryptData <<= EncryptKey[i];
}
if ( idx < 0 || datas.size() <= idx )
{
return;
}
datas[idx] = encryptData;
}
58. 조건 검사를 함수 위쪽으로 끌어올려서 불필요한 작업 피하기
최적화 테크닉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void InsertEncryptData( int idx, int data )
{
if ( idx < 0 || datas.size() <= idx )
{
return;
}
int encryptData = data;
for(int i = 0; i < 5; ++i)
{
encryptData <<= EncryptKey[i];
}
datas[idx] = encryptData;
}
59. 결과 값이 바뀌지 않는 계산은 루프 밖으로 옮기기
최적화 테크닉
1 for ( int i = 0; i < tree.AppleCount(); ++i )
1
2
int appleCount = tree.AppleCount();
for ( int i = 0; i < appleCount; ++i )
프로파일을 하여 증명하는 것을 잊지 말아야 함
C# 에서는 아래의 경우가 더 느릴 수 있다 .
60. 실패할 가능성이 있는 테스트를 제일 앞에 두
기
최적화 테크닉
통계적으로 실패할 가능성이 더 많은 조건을 앞으로
1 if ( condition_one && condition_two )
61. 복잡한 계산은 테이블을 사용하여 시간과 공간을 교환하
기
최적화 테크닉
1
2
3
4
5
6
7
8
9
int DamageForEachLevel[] = {
3,
5,
8,
13,
18,
20,
...
};
62. 실행 전에 압축이 풀리는 압축 실행 파일 만들기
공통 코드를 함수에 넣어서 중복 피하기
호출 빈도가 낮은 함수는 DLL 이나 별도 프로그램으로 옮기기
크기에 초점을 맞춘 코드 변경
최적화 테크닉
69. 좋은 프로그래머
간추림
최적화가 절대적으로 필요하다고 증명되어야만 최적화를 합니다
.
신중한 접근 방법으로 체계적인 최적화를 시도합니다 .
코드의 품질을 파괴하지 않는 최적화를 선호합니다 .
코드 수준의 최적화를 하기 전에 대안을 찾아내고 설계 개선에
대해 연구합니다 .
70. 나쁜 프로그래머
간추림
코드의 부적절성을 증명하기도 전에 최적화부터 시작합니다 .
측정이나 조사 없이 보틀넥이라고 생각하는 코드를 수정합니다 .
코드의 품질보다 속도가 더 중요하다고 생각합니다 .
자기가 하는 최적화가 다른 코드 영역이나 사용 패턴에 대해 어
떤 의미를 갖는지 전체적으로 고려하지 않습니다 .
Editor's Notes
충분히 빠르지 않다면 최적화를 하게 되는데,
코드의 성능을 높이는 방법이 있다.
이러한 것들로 성능이 결정된다.
시스템적인 것도 있고 코드적인 부분도 있다
어떤 것들이 문제가 되는지 알아둘 필요
응집성
최적화를 하면 안되는 이유
덜 명료한 코드를 넣다보면..
최적화 하다보면 이런부분이 열외가 됨…
멤버변수 public으로 만들거나 함수 안만들고 커플링 높게 그냥 갖다가 쓰거나
다른 곳에서는 느려질 수 있고, 다른 플랫폼에서의 작업 희생
많은 시간과 노력이 필요
최적화 필요성 증명, 테스트… 해야할게 많다
많은 시간과 노력이 필요
실행파일 크기
메모리 소모 문제 -&gt; 메모리를 소진하는 데이터 구조를 타깃으로
최대한 신중하게
유의점..
개선의 여지가 전혀 없는 함수에서 시간을 보낼 수도 있다.
결과를 해석하고 머리를 써야함
프로파일러가 없을 때 사용할 수 있는 방법들
느리게 만들기 -&gt; 함수 두번씩 호출
현재 설계된 수준에서, 코드의 수준을 개선하도록 부추기기 때문
이런 순서로 행해져야 한다.
안하면 최악화의 여지가 있음
CPU, 메모리 상태등, 자원을 많이먹는 프로그램을 실행시키고 한다던가…
스레드 lock.. 오버헤드
품질떨어트리고 속도 얻는 것은 응집성 낮추고 커플링 늘려서 속도 높이는 방법임, 예로 클래스 멤버를 모두 publi으로..