| 구분 | 설명 |
|---|---|
| Learned (학습용 테스트) | - Mock/Fake 인터페이스로 조건 주고 테스트 케이스 실행 - 디버거 사용 없이도 개발 가능 |
| Real Execution (실행 환경 테스트) | - 시스템을 모킹하는 대신 시스템 자체를 Fake 처리 - 시스템 API와 모듈 API를 모두 Fake - 쓰레드나 컴파일러 의존 부분은 실제 동작과 다를 수 있음 - 디버깅은 여전히 중요: 테스트 유지보수의 핵심 |
| 후보 도구 | 평가 |
|---|---|
| Source Insight | 정적 분석에 적합 |
| VS Code | C#/Native 모두 지원 |
| Visual Studio (C++) | 최종 선택 · 빠른 디버깅 · TDD 프레임워크 유지에 핵심 · 최적화된 에디터 |
Ecore Timer, std::thread, Callback, Remocon, Vconf, System InfoSubmicom: virtual 상속으로 FakeDBUS, FileInfoHDMI Control, Audio, App Manager, KPI LoggerPower, AVOC, AppControl, SoundManager, AOV, VirtualChannelAPI, TVSServiceUtilityTEST(SystemAudioModeTest, SetStreamPath_SHOULD_NOT_BE_REPLIED)
{
CECSubmicomMock cecSubmicomMock;
CECMainMock cecMain(&cecSubmicomMock);
TDDUtil tddutil(&cecMain);
cecMain.Initialize();
CECMessage cMsg1 = { 0xe0, 0x86, 0x12, 0x00 };
tddutil.GetCECMsgReceiver()->m_ProcessCECMsg(cMsg1, 4);
EXPECT_EQ(0, tddutil.GetSubmicom()->m_count.m_feature_abort);
cecMain.Uninitialize();
}
void CCECMsgReceiver::DefaultMsgProcessing(const CECMessage& cMsg)
{
if (cMsg.m_opcode == OPCODE_SET_STREAM_PATH) {
ERR("Recv <SetStreamPath>. should not be replied");
}
}
| 규칙 | 설명 |
|---|---|
| 공통 도구 사용 | 다른 에디터 금지 (ex. vi, Notepad++) |
| 동일 프로젝트 사용 | 로컬 프로젝트 금지, 공통 단축키 사용 |
| 클린 코드 준수 | 2줄 간격, 1줄 간격 등 통일된 코드 스타일 |
| 모든 코드 변경 → TC 작성 필수 | 신규 TC + 기존 TC 통과 여부 검토 |
| 리뷰 항목에 TC 포함 | 신규/전체 TC 결과 포함, 예외 처리 명시 |
| 코드 동기화 철저 | 모든 브랜치 및 메인과 동기화 유지 |
| 구분 | 설명 |
|---|---|
| Do TDD (지시로 함) | "했어요!"로 끝나는 TDD |
| Doing TDD (자발적 실행) | 내 코드 품질에 대한 불신 → TC와 함께 점검 진짜 개발자 마인드 |
| 주제 | 팁 |
|---|---|
| 디버깅 | 호출자는 항상 호출 이유를 제공해야 함 |
| void 반환 함수 | 테스트 가능성을 위해 return 값 만들기 |
| 항목 | 설명 |
|---|---|
| 테스트 안되면, 안전도 없음 | 기본 자세: '나도 믿지 마!' |
| 두려움 → 자신감 | 1번은 실수 가능, 2번은 없다 |
| 연속된 성공 | 아트급 코드 + 개발의 재미 |
| 가장 큰 가치 | 테스트 프레임워크 자체 → 진짜 코딩과 검증을 가능하게 하는 도구 |