답변:
코딩 표준은 이유가 있어야하며 ... 부적합을 확인해야합니다.
그러나 모든 컴파일 위반이 아닌 것처럼 모든 위반이 오류로 간주되는 것은 아닙니다. 선을 그리는 위치는 회사와 도구 결정이어야합니다.
예를 들어, MISRA는 규칙을 필수 및 권고로 정의합니다 ... 권고에서 빌드를 진행할 것을 제안합니다.
완전히 들어 본 적이 없으며 시도해보기 만해도 효과가 있는지 알 수 있습니다. 그 전에 수행 할 수있는 몇 가지 단계가 있습니다.
먼저 팀은 표준을 함께 결정해야합니다. 그런 다음 ReSharper와 같은 도구를 사용하여 개발자가 표준을 준수하지 않는지 알려야합니다. 모든 작업에서 동료 검토를 수행하면 도움이 될 수 있습니다.
이러한 단계를 수행 한 후 코딩 표준 검사를 CI 서버에 넣는 것으로 간주 할 수 있습니다. 그러나 코딩 표준을 준수하지 않기 위해 빌드를 중단하는 것이 현명한 경우에도 여전히 고려해야합니다. 위험은 빌드가 깨져서 빌드가 깨 졌음을 의미 할 수 있습니다.
빌드를 중단하는 대신 도구를 실행하여 보고서를 작성할 수 있습니다. 코딩 표준 위반이 증가하는 것 같으면 팀을 구성하여 그 원인을 파악할 수 있습니다.
정적 분석 도구 (예 : PMD, StyleCop / FxCop)를 실행하고 표준을 준수하지 않으면 빌드에 실패하는 지속적인 통합 서버에서 코딩 표준 / 스타일을 시행해야합니까?
이러한 지속적인 통합 점검은 매우 빠르고 매우 빨라야합니다. 상당한 지연이 발생하면 프로그래머가 결과를 기다리는 동안 사고 과정을 커밋하고 추적하지 못하게됩니다. 더 길게 만들면 일부 스포츠 팀의 최신 성능에 대해 커피 한 잔을 마시거나 사무실 동료와 채팅 할 수 있습니다. 이러한 지연은 비생산적입니다. 야간 빌드 또는 코드 검토에 가장 좋은 것이 있습니다.
빌드에 실패하는 데 어떤 유형의 규칙을 사용해서는 안됩니까?
주관적인 것부터 시작합니다. "규정은 자체 문서화 또는 잘 작성된 규칙"규칙을 어떻게 적용합니까? "매직 넘버 없음"규칙? 그것들은 코드 검토에 가장 적합한 것들입니다.
다른 범주는 이미 포기가 부여 된 규칙을 위반하는 것입니다. 상당한 규모의 코드 기반이 주어지면 필연적으로 표준을 위반하는 것이 옳은 일인 코드 덩어리가 생길 것입니다.
소프트웨어 품질 개선 계획의 일환으로 최근 빌드 프로세스에 통합하기 위해 일련의 코드 스 니프를 코딩했습니다.
우리는 PHP 응용 프로그램이기 때문에 실제 컴파일이 없으므로 빌드가 실제로 단위 테스트 / 정적 분석 / 러너이므로 많은 사이클을 소비 할 수 있습니다.
코드 품질 문제와 많은 문제가있는 레거시 코드가있었습니다.
커밋이 실패하지 않으면 커밋이 무시되고 '원하는'코딩 표준에 대한 커밋 확인을 시작하고 표준을 충족하지 않는 오류로 커밋이 실패하기 시작합니다.
유지 보수 작업 중단, 레거시 구성 요소에 대한 가장 간단한 수정조차도 개발자는 많은 양의 소스를 다시 포맷해야했으며 빌드가 더 자주 중단되었습니다. 말할 필요도없이 오류를 경고로 변경했으며 이제는 무시되고 '주로'무의미합니다.
그래서 나는 이것을 말할 것입니다 (어려운 경험에서 배웠습니다).
코드베이스의 표준이 개발자가 코드 양을 즉시 재 포맷 할 필요가 없도록 강제하는 표준에 충분히 근접해야합니다. 또는 .. 노력의 증가에 대비하고 준비하고 있습니다.
배달 요구 사항이 큰 소규모 팀이므로 팀을 대규모 리팩터링 작업으로 전환 할 여유가 없었습니다. 우리의 코딩 표준은 현재 대부분 수동 검토를 통해 처리되며 레거시는 지속적인 개선 계획의 일부로 다시 작성되고 있습니다.
경고가 '주로'무의미하다고 말했을 때, 이제 우리는 개선을 보여야하는 kpi를 측정 할 수있는 통계를 기록하는 데 사용합니다.
코드 스 니프를 다시 적용하면 표준이 적용될 때까지 가볍게 시작하고 한 번에 몇 개의 스 니프를 도입합니다.
그것은 당신의 궁극적 인 목표와 전략 에 달려 있습니다 .
CI 서버에서 언급 된 모든 표준을 강제하는 것은 매우 수익성이 높은 것처럼 보일 수 있습니다. 그러나 대규모 (6 명 이상의 개발자) 개발 팀이 서버에 대한 커밋마다 수행되는 경우 실용적이지 않을 수 있습니다. 커밋 후 서버가 응답하기를 기다리는 것이 오래 걸리지 않아야합니다. 잠재적으로 다운 타임이 발생할 수 있습니다.
그러나 코드 (실제로 변경 세트)에 종속성 문제가 있거나 컴파일되지 않은 경우 커밋을 차단하는 것이 합법적입니다. 그러나 코드 레이아웃 및 일부 명명 규칙으로 인해 코드가 실패하면 CI 서버 커밋 규칙에 대한 제한이 심각하지 않을 수 있습니다.
그러나 저녁 빌드 중에 적용하면 유용한 규칙이 될 가능성이 큽니다.
또한 리팩토링 도구는 개발자 의 Resharper 또는 JustCode 사용법 과 같은 표준 구현 및 학습 표준을 지원할 수 있습니다 .