고품질 코드 체크 인 지침
업데이트: 2007년 11월
다음 목록에서는 여러 가지 고품질 코드 체크 인 지침을 제공합니다.
필수 사항
반드시 고품질 체크 인을 수행합니다.
나중에 제품 주기에 문제가 발생할 수 있으므로 코드를 체크 인하는 동안 낮은 품질은 허용하지 마십시오. 대개 팀에서는 지나치게 복잡하거나 모호하거나 제품 주기에서 너무 늦게 발견되는 문제는 해결하지 않습니다.
검사 목록을 사용합니다.
일반적으로 발생하는 실수의 종류를 추적하여 이후의 코드에 대한 검사 목록으로 사용합니다. 해당 그룹이나 부서에서 발생하는 일반적인 오류로 검사 목록을 만든 후 용도에 맞게 검사 목록을 사용자 지정할 수 있습니다.
코드 검토를 진행합니다.
코드를 검토하면 해당 코드를 설명하고 쉽게 이해할 수 있을 뿐 아니라 다른 사용자들이 이 코드를 다시 한번 확인할 수 있습니다.
단위 테스트를 작성합니다.
품질을 보장하는 가장 좋은 방법은 데이터와 알고리즘의 유효성을 검사하는 테스트를 작성하고 이전의 실수가 반복되지 않도록 하는 것입니다. 다음과 같은 네 가지의 단위 테스트가 있습니다.
긍정적 단위 테스트에서는 코드를 의도한 대로 실행하여 올바른 결과가 나오는지 확인합니다.
부정적 단위 테스트에서는 코드를 일부러 잘못 사용하여 코드가 견고한지, 오류 처리가 적절한지 확인합니다.
스트레스 테스트에서는 코드를 해당 한계까지 실행하여 미묘한 리소스, 타이밍 또는 재진입 오류에 노출시킵니다.
오류 삽입 테스트에서는 오류 처리에 이상이 없는지 확인합니다.
자세한 내용은 방법: 단위 테스트 작성을 참조하십시오.
코드 분석 도구를 사용합니다.
버그를 일찍 찾아내는 가장 간단한 방법은 컴파일러의 경고 수준을 높이고 코드 분석 도구를 사용하는 것입니다. 경고를 무시하지 말고 코드를 수정하는 것이 중요합니다.
자세한 내용은 C/C++ 코드 오류 검색 및 수정 및 관리 코드 오류 검색 및 수정을 참조하십시오.
소스 코드에 부적절한 언어를 사용하지 않습니다.
소스 코드에 부적절한 언어와 참조가 포함되면 안 됩니다. 전 세계의 많은 고객들은 특정 단계나 이름, 특히 지위가 문제시될 수 있는 정치적 실체에 대한 참조를 매우 중요하게 여깁니다. 소스 코드에 정치적으로 민감한 참조와 언어가 있는지 검색한 다음 오류를 보고하도록 합니다.
작업 항목을 만듭니다.
끝내지 않은 작업이 있는지 확인하고 TODO, REVIEW, BUG 및 UNDONE 주석에 대한 작업 항목을 만들어야 합니다. 자세한 내용은 방법: 새 작업 항목 추가를 참조하십시오.
금지 사항
사양이 없는 기능
사양 없이 코드를 작성하지 않도록 합니다. 먼저 사양을 작성하여 검토합니다. 사양이 없으면 테스트 팀에서 올바르게 작동하는 항목과 그렇지 않은 항목을 알 수 없습니다. 코드에 사양이 없으면 서로 오해의 소지가 있으며 고객의 요구를 파악하기 어렵고 제품의 품질이 저하될 수 있습니다. 자세한 내용은 Team Foundation 팀 프로젝트를 참조하십시오.
제품을 제대로 설치하지 않고 첫 번째 과정 진행
테스트 팀은 프로토타입 설치에 불과하더라도 컴퓨터에 제품을 설치할 수 있는 방법을 갖고 있어야 합니다. 자세한 내용은 Team Foundation Build 개요를 참조하십시오.
권장 사항
일관된 코딩 스타일을 사용합니다.
전체 팀 코드를 같은 스타일로 작성하면 제품의 가독성, 일관성, 유지 관리 편의성 및 전체적인 품질이 향상됩니다. 지침 자체의 세부 사항은 그리 중요하지 않으며, 지침을 세우고 팀에서 이 지침을 충실히 따르는 것이 중요합니다. 스타일을 선택하면 일관성을 유지하고 코딩 패턴을 쉽게 인식할 수 있는 이점이 있으므로 스타일을 선택하여 사용하십시오.
코드를 작성하기 전에 단위 테스트를 작성합니다.
테스트 우선 개발은 신속한 개발과 최고의 프로그래밍에 있어 핵심적인 방법입니다. 단위 테스트를 먼저 작성하면 여러 품질 목표를 달성할 수 있습니다.
단위 테스트를 작성했는지 확인합니다.
코드를 쉽게 테스트할 수 있어야 합니다. 그러면 대개 코드 결합은 향상되고 모듈 간의 결합은 느슨해집니다.
디자인을 테스트할 방법을 먼저 결정하면 종종 작업에 맞는 적절한 디자인을 알 수 있습니다.
자세한 내용은 방법: 단위 테스트 작성을 참조하십시오.
코드를 다른 플랫폼으로 이식할 수 있게 만듭니다.
실제로 코드를 다른 플랫폼에 옮기지 않더라도 이식 가능하도록 디자인하고 코딩하면 코드가 더욱 견고해집니다. 다음을 참조하여 코드를 이식 가능하게 만듭니다.
적합한 가정을 세웁니다.
데이터 형식과 디자인 의도를 분명히 이해합니다.
새로 나오는 플랫폼을 지원할 수 있도록 코드를 만듭니다.
기존의 코드를 작은 함수로 리팩터링합니다.
리팩터링을 통해 기존의 코드를 새롭게 만들 수 있습니다. 일부 코드는 상호 작용이 너무 복잡하여 주석조차 변경하는 것이 번거롭기 때문에 크고 오래된 시스템은 수정하기 어려울 수 있습니다
제대로 리팩터링하려면 먼저 강력한 단위 테스트를 통합하여 리팩터링으로 인해 새로운 오류가 발생하지 않도록 해야 합니다. 그런 다음 기능을 전혀 변경하지 않고 큰 함수를 작은 함수의 컬렉션으로 분리합니다. 다음 지침을 따릅니다.
작은 함수는 각각 사용자 인터페이스, 데이터베이스 액세스, 단일 인터페이스에 대한 COM 상호 작용 등과 같은 한 가지 유형의 작업을 수행해야 합니다.
하위 시스템의 모든 함수를 완전히 리팩터링한 후에는 전체 시스템에 영향을 주지 않고 작은 함수들을 개별적으로 변경할 수 있습니다. 한 번에 함수 하나씩 기능을 추가, 제거 또는 향상시킬 수 있습니다.
자세한 내용은 클래스 및 형식 리팩터링을 참조하십시오.
기존 코드를 검사합니다.
종종 특정 모듈에 버그가 모여 있습니다. 새 코드에 문제가 없지만 이전 코드의 특정 모듈에 버그가 있으면 해당 모듈만 검사합니다. 새 코드가 이전 코드와 너무 섞여 있을 경우 리팩터링을 수행하면 문제 해결에 도움이 될 수 있습니다. 자세한 내용은 C/C++ 코드 오류 검색 및 수정 및 관리 코드 오류 검색 및 수정을 참조하십시오.
디버거에서 모든 코드 경로를 단계별로 실행합니다.
코드를 확인하는 가장 좋은 방법 중 하나는 디버거에서 코드를 단계별로 실행하는 것입니다. 각 줄에서 예상되는 동작이 실제로 발생하고 있는지 확인합니다. 디버거에서 모든 코드 경로를 단계별로 실행하는 것은 한 줄씩 단위 테스트를 수행하는 것과 같습니다. 이 과정은 지루하지만 예상 동작을 효율적으로 확인할 수 있습니다.
권장되지 않는 사항
요구 사항 문서를 사양으로 사용
요구 사항 문서의 사양을 해석하지 마십시오. 본인의 해석이 프로그램 관리자나 테스터의 해석과 다를 수 있습니다. 해석이 다르면 다른 사람들이 예상하는 대로 구현할 수 없게 됩니다.