2010년 7월 21일 수요일

C++를 이용한 크로스 플랫폼 개발 - 정책과 관리

Chap1 정책과 관리

아이템1: 모든 플랫폼을 동등하게 생각하라

Netscape 의 예
1군 플랫폼: Mac OS X, Linux, Windows
그 외: BSD, Solaris, AIX, HP/UX 등
1군 플랫폼에서 모든 기능이 구현되어야 하며, 릴리즈에 앞서 모든 내부 테스트를 통과해야 함
기준을 만족하지 못하면 릴리즈 불가

플랫폼간 차이는 동일한 구현을 어렵게 한다
1. 컴파일 타임의 에러를 체크한다
2. 스모크 테스트. 매일 아침마다 마지막 빌드된 바이너리로 QA에서 전체적인 테스트를 수행한다

아이템2: 공통된 코드베이스를 구축한다

공통적으로 사용할 수 있는 코드와 플랫폼 특화 코드를 분리한다
팩토리 디자인 패턴을 사용한다.
플랫폼 특화 팩토리를 만든다
플랫폼 별의 차이는 폴더를 나누어 저장한다.
크로스 플랫폼 빌드에서의 주의해야 할 내용
- 해당 플랫폼에 맞는 컴포넌트와 라이브러리만 빌드한다
- 올바른 Makefile 파일을 사용하도록 한다
- #define이 잘 동작하도록 명령 행 인수를 이용한다
- 빌드된 컴포넌트와 응용 프로그램은 적당한 폴더에 복사한다. 테스트와 배포는 이 폴더를 기준으로 한다

아이템3: 개발자가 작성한 코드는 여러 컴파일러로 컴파일해봐야 한다

여러 컴파일러로 빌드하는 것의 중요성
- 컴파일러에 특화된 기능, 플래그, 매크로의 사용을 피할수 있도록 해준다
- C/C++ 표준의 구현 차이로 인한 충격을 최소한으로 막아주고 검증되지 않은 기능을 사용하지 않도록 해준다
- 각 컴파일러는 서로 다른 종류의 경고와 에러를 알려주기 마련이다. 이런 경고와 에러를 수정하면 개발이 좀 더 부드럽게 이루어질 수 있으며 코드도 건강해진다
- 각 컴파일러가 생성하는 이진 코드는 서로 다르다. 때문에 발견하기 어려운 문제들을 해명하는데 도움이 된다

아이템4: 여러 플랫폼에서 코드를 빌드한다

- 모든 플랫폼에서 빌드 테스트와 스모크 테스트를 하는 것은 빌드 트리를 깨끗하게 관리하는 것 이상의 의미를 가진다
- 모든 개발자가 모든 플랫폼에서 빌드해보길 원하지도 않고, 그럴수도 없다
- 소스 코드를 저장소에 체크인하기 전에 모든 플랫폼에서 빌드하고 테스트해볼것을 강제한다면 모든 플랫폼이 동일한 속도로 개발될 것이며, 그만큼 크로스 플랫폼 개발이 성공적으로 이루어질 가능성이 높아진다

아이템5: 각 플랫폼에서 빌드를 테스트한다

세 개의 메인 플랫폼을 매일 아침 테스트
스모크 테스트를 위해, 매일 아침에 Tinderbox 빌드들이 취합되어 QA에 전달(스모크 테스트 완료전까지 모든 체크인은 금지)
플랫폼 중 하나에서 새로운 문제 발견시 Tinderbox와 bonsai는 해당 문제와 관련된 체크인을 격리시킴

아이템6: 컴파일러 경고에 귀 기울이자

경고가 발생한 코드는 거의 이식 불가능하다
1. 일정 시간을 추자하여 경고를 수정하고 체크인한다
2. 빌드 과정에서 발생한 경고의 수를 확인하여 일정 수준을 넘어서면 체크인을 금지시킨다
컴파일러 옵션을 조정하여 언어 표준을 강제할 수 있다(언어 표준에 맞지 않은 모든 코드들을 경고나 에러로 출력할 수 있도록)