우리 팀은 잘 알려진 공통의 코딩 표준을 자체 기준으로 사용해야합니까?


9

내가 속한 R & D 팀은 코딩 표준을 채택하기로 결정했습니다. 우리는 최근에 조직을 구성했으며, 팀에서 유기적으로 개발 한 내용과 자체 코드 등의 좋은 예를 기반으로 표준 / 수집 문서를 기반으로하는 코드와 공통 코딩 시간이 너무 적습니다.

이제 우리 모두는 과거 직장에서 경험을 쌓았습니다. "우리는 여기에서 우리가하는 일에 적합한 것으로 밝혀진 포괄적 인 문서를 여기에서 채택하겠습니다"(*). 또한, 우리 중 일부 (나 자신을 포함하여)는 공식적인 코딩 표준이 없거나 다른 환경에서 다른 언어로 글을 쓰는 경험이 있습니다 (연구 중심의 개발 작업이 아닌 주간 주간 릴리스 프로덕션 환경)

그래서 내가 생각한 옵션 중 하나는 상대적으로 유명하고 잘 알려진 문서를 가져 와서 관심없는 / 관리하지 않는 것을 없애고 선호도에 따라 수정하는 것입니다.

이것이 일반적인 관행입니까? 이것이 좋은 생각이라고 생각하십니까? 그렇다면 합리적인 '기준선'코딩 표준은 무엇입니까 (어느 것이 가장 좋은지 말하지 말고 여기서 종교적 갈등을 시작하고 싶지는 않습니다. 단지 종합적이거나 '중립적'인 것을 지적하기 만하면됩니다. .)

노트:

  • 우리는 C, C ++, OpenCL, CUDA, Python과 함께 작동 할 것으로 기대합니다.
  • 우리는 4 명 + 관리자로 구성된 팀으로 1 년 안에 약 5-6 명으로 성장할 것으로 예상됩니다.
  • 우리 회사에서 팀은 거의 완전히 자율적이며 일반적으로 전혀 상호 작용하지 않습니다 (서로 다른 코드를 사용하더라도 전혀 다른 프로젝트에 있습니다). 따라서 회사 전체에서 고려해야 할 사항이 없습니다.
  • 도구에 관해서는, 현재 우리가 알고있는 것은 Eclipse 를 사용할 것이므로 코드 포매터는 최소한 하나의 도구가 될 것입니다. Ctrl + Shift + F는 오랫동안 내 친구였습니다.
  • Java를 작성할 때 Bloch의 Effective Java에 최대한 엄격하게 준수하는 관행을 채택했습니다 . 이제는 코딩 표준이 아니지만 코딩 표준으로 벽돌, 시멘트 및 박격포를 부를 수 있습니다. 나는 아마도 'mix'의 일부로 그런 것을 포함하려고 생각하고있었습니다 (Java를하지 않는다는 생각).
  • 더 넓은 의미에서 코딩 표준을 의미합니다. 예를 들어이 P.SE 질문 에 대한 답변에서 제시된 제안 채택 .
  • C ++ 코딩 표준 문서큰 목록을 찾았습니다 . 어쩌면 나는 우리의 기준을 채굴해야합니다.
  • (*) 사실이 아니지만이 질문을 너무 구체적으로 복잡하게하고 싶지 않습니다.

9
외부에서 생성 된 코딩 표준을 사용하면 특정 코딩 스타일에 대한 성스러운 전쟁을 줄일 수 있습니다.
로봇 고트

4
어떤 지침을 사용하는 것은 중요하지 않습니다. 중요한 것은 당신이 있다는 것입니다 사용 하나를 수행 하고 모두가 같은 사용하는 데 동의합니다 . 제정신을 선택하면 마지막 부분이 더 쉽습니다.
Joachim Sauer

3
명명 규칙이 과대 평가되었습니다. 함수가 CamelCase 인 모듈과 snake_case 인 모듈이 있다면 최소한 각 구성 요소에 대해 이미 마련된 규칙을 따르는 데 동의한다면 큰 문제가되지 않습니다. 따라서 거룩한 전쟁이 너무 뜨거워지면 중단하고 일관성을 유지하십시오.
Jan Hudec

1
Eclipse 경험이 거의 없지만 Eclipse 용 코드 표준 (스타일이 아님) 집행자 가 도움이 될 수 있습니다.
Dan Pichelman

1
기존 표준을 사용하거나 표준을 작성하는 데 시간과 돈을 소비하는 것이 선택입니까? 나는 선택의 여지가 없다. 무료 옵션으로 이동하십시오.
Ramhound

답변:


9

다시 말해, 찾은 외부 표준을 차용하여 팀의 코딩 표준을 시작해야하는지 묻는 것입니다. 팀의 누군가가 그 표준이 무엇인지에 대해 매우 강한 의견을 가지고있는 것처럼 들리지 않습니다.

분명히 대답은 '그렇다'입니다.

외부에서 제공되는 표준은 다른 것보다 우수합니다. " https://softwareengineering.stackexchange.com/q/84203/53019 " 의 답변 을 참조하여 표준을 갖추었을 때의 몇 가지 장점을 확인하십시오. 일관성과 변화의 토대는 관점에서 중요합니다.

또한 " 직장에서 코딩 표준 처리 (나는 보스가 아닙니다) "를 살펴보십시오. 표준이 무엇인지 선택할 때 팀에서 고려해야 할 몇 가지 팀 역학에 적용됩니다. 팀은 코딩 표준을 소유해야하므로 모든 사람이 각 개인이 코딩하는 방식에 대한 제한 사항을 기꺼이 준수합니다.

이 질문에 연결했지만 가장 중요한 답변 과 요구 사항이 왜 필요한지 이해하는 데 중점을 두는 것이 좋습니다. 외부 표준을 사용하는 경우 팀에서 이러한 모든 요구 사항의 기초를 이해하기 어렵습니다. 그러나 팀에 무엇인가가 필요하기 때문에 단순히 거기에 있다는 것을 받아들이면 외부 표준을 팀에 더 적합한 것으로 변경하는 것이 쉽습니다.

표준을 갖추면 IDE에서 사용할 형식 규칙을 입력 할 수 있습니다 (귀하의 경우 일식). " 강제 코드 재 포맷의 장점과 단점 "은 팀의 모든 사람들이 작업중인 코드와 일관성을 유지하는 데 도움이되고 다른 프로젝트에서 빌릴 수있는 스 니펫을 재 포맷 할 수있는 기능을 제공합니다. 외부 표준을 사용하는 추가 이점은 IDE의 코드 형식 부분에 이미 미리 채워져있을 수 있다는 것입니다.

팀의 누군가가 표준의 특정 부분에 대해 불만을 제기하고 외부 표준을 기본으로 사용했다는 사실에 대해 책임을집니다. : 그들에게 읽어 본 적이
- 나는 우리의 코딩 표준 중 하나를 미워하고 저를 어떻게 처리하는 미친 드라이브?
- 레거시 코드를 전달할 때 자신의 코딩 편향을 어떻게 극복합니까?
그리고 그들이 어디에서 왔든 표준 내에서 어떤 것에 대해 불평했을 것임을 깨달으십시오. 내가 작업 한 여러 팀에서 나는 모든 사람이 보편적으로 좋아하고 b) 표준의 모든 부분에 동의 한 표준을 아직 보지 못했다. 이러한 문제를 해결하는 방법을 알아 보려면 초기 링크 중 일부를 다시 참조하십시오.


부록, 당신은 "어느 하나"를 사용해야하는지 물었습니다. 나는 어떤 대답이 잠재적으로 여론에 힘 입어 화염 전쟁으로 가득 차 있다고 대답하지 않을 것입니다. 그러나 IDE (Eclipse)를보고 표준 구성으로 제공하는 옵션을 확인할 수 있습니다. 또한 약간 검색하여 IDE에 플러그인하고 선택할 수있는 추가 표준 옵션을 제공하는 프로젝트가 있는지 확인합니다. 옳고 그름에 따라 이러한 표준은 이미 채워져 있으며 모든 사람을 위해 표준을 구성하는 작업을 팀에 저장할 수 있습니다.


6

파이썬부터 시작하겠습니다. 파이썬에는 거의 모든 단일 파이썬 프로그래머가 따르는 코딩 지침이 있습니다. 그것들은 PEP8 이라는 공식 문서의 일부입니다 .

C / C ++는 역사적 이유로 큰 혼란이지만 파이썬이 아니기 때문에 일관성을 유지하기 위해 C / C ++의 파이썬 명명 규칙을 따르는 것이 좋습니다.

이제 C ++의 경우 공통 관용구에 동의하고 명명 규칙에 대한 전쟁보다 모든 사람이 합리적인 현대 C ++ 스타일을 이해하도록하는 것이 더 중요합니다. C ++ 코딩 표준으로 시작해야 하며 온라인 자원에서 C ++ FAQ 를 읽으십시오 .


실제로 우리는 C, C ++ 및 Python 각각에 대해 다른 명명 규칙을 가질 것이라고 생각합니다. 적어도 대문자, 밑줄 사용 등 MyTypeName은 C보다 C ++이 더 좋으며 C my_type_name_t는 반대입니다. 참조.
einpoklum

C ++의 경우 STL 및 부스트에서 사용하는 표준을 사용할 수 있습니다. 모든 사람이 그것을 좋아하는 것은 아니지만 가장 확실하게 stl 컨테이너를 사용하기 때문에 그와 일치합니다.
Laurent Bourgault-Roy

@einpoklum : 모든 유형이 아닌 C, C ++ 표준 라이브러리 및 Python의 경우 "snake_case"를 사용합니다. 아무런 차이가 없습니다. 유일한 차이점은 유형에 "MixedCase"를 사용할 것인지 또는 "snake_case"를 사용할 것인지입니다. C 및 C ++ 라이브러리는 "snake_case"를 사용하지만 "MixedCase"는 매우 일반적입니다.
Jan Hudec

@einpoklum C ++ 용 표준 라이브러리에서 설정 한 표준을 사용하십시오.
Miles Rout

3

코딩 표준코딩 스타일 표준을 구분하지 않으면이 주제에 대해 논의 할 수도 없습니다 .

코딩 표준은 사용할 수있는 언어 메커니즘, 사용할 수없는 언어 메커니즘 및 사용 방법을 정의하는 규칙 집합입니다. 즉, 코딩 표준이 특정 비표준 확장을 해결하는 경우 사용 된 언어의 하위 집합 및 / 또는 수퍼 셋을 정의합니다.

코딩 스타일 표준은 괄호와 공백을 배치 할 위치, 식별자 이름을 지정하는 방법, 주석을 배치하는 방법 등과 같은 외관상의 문제에만 관련됩니다.

이 두 가지 다른 내용이 같은 문서에있을 수 있습니다. 그러나 가장 심각한 코딩 표준은 스타일과 관련이 없습니다. 아래 권장하는 표준은 그렇지 않습니다. 코딩 스타일이 매우 주관적이기 때문에 의견이 충돌 할 때 많은 마찰을 유발할 가능성이 높습니다.

C / C ++의 경우 최고의 명성을 가진 코딩 표준은 MISRA의 표준입니다 . 안전 / 미션 크리티컬 애플리케이션을 위해 기본적으로 설계되었지만 프로그램을보다 안전하게 만드는 핵심은 버그를 제거하고 피하는 것이므로 MISRA 표준은 버그를 원하지 않는 모든 프로그래밍 지점에 적용됩니다.

CERT 의 표준은 상당히 잘 알려져 있으며 데스크톱 프로그래밍 및 소프트웨어 보안 (안전이 아닌)에 더 치우칩니다. CERT에는 C, C ++, Java 및 Perl에 대한 표준이 있으며 표준은 무료입니다.

웹에서 찾은 임의의 차고 표준이 아니라 MISRA와 CERT를 살펴 보는 것으로 시작합니다.


1
나는 전에 MISRA에 대해 들어 본 적이 없으며 그 구성 요소가 지나치게 중요한 선수라는 것을 알지 못합니다. 그들의 명성을 설명 할 수 있습니까? CERT 문서에 관해서는, 이것이 보안 프로그램에 대한 표준인지 아니면 더 일반적인 표준인지를 명확히 할 수 있습니까?
einpoklum

@einpoklum 우선 MISRA-C는 전 세계 거의 모든 자동차 제조업체에서 사용합니다. 이 시스템은 가장 널리 알려진 임베디드 시스템 산업 전체에서 C 프로그래밍에 대한 "사실상"표준이되고 있습니다. 그럼에도 불구하고 MISRA 문서에는 실제로 어떤 형태의 C 프로그램에서도 사용되지 못하게하는 내용이 없습니다. MISRA와 CERT는 상당히 일반적이며 프로그램의 버그 수, 나쁜 연습 및 취약점을 줄이는 것을 목표로합니다. 이러한 표준은 정적 코드 분석을 권장합니다.

1

기존 표준을 자신의 기초로 사용하면 몇 가지 장점이 있습니다. 코드는 아마도 외부 코드와 더 유사하여 코드를 더 쉽게 읽고 통합 할 수 있습니다. 또한 좋은 표준을 선택하면 특정 규칙을 결정해야 할 충분한 이유가있는 전문가가이를 검토하게됩니다. 팀원 중 어느 누구도 표준과 특별히 관련이없는 한 기존 표준을 자신의 기초로 사용하지 않는 이유는 거의 없습니다.

어떤 코딩 표준을 사용해야할지 확실하지 않은 경우 가장 이상적인 첫 번째 선택 방법이 있습니다. 특별한 순서는 없습니다 :
1. IDE에서 이미 지원하는 표준. 이것은 아마도 구성 가능합니다.
2. 컴파일러 작성자가 사용하거나 권장하는 표준.
3. 기본 프레임 워크 작성자 (있는 경우)가 사용하거나 권장하는 표준.
4. 프로그래밍 언어의 저자 / 디자이너가 사용하거나 권장하는 표준.
5. 대기업에서 어떤 표준을 사용 / 권장합니까?

기술 전문 지식을 가진 사람이 자신의 표준의 기초로 사용하는 표준을 읽어보십시오. 좋은 표준은 종종 각 규칙에 대한 정당성을 가지므로, 요구에 가장 잘 맞게 표준을 수정하는 데 도움이됩니다.


0

표준은 일반적으로 통신 및 유지 관리에 도움이됩니다. 제 생각에는, 특히 소규모 팀에서주고받는 것이 있어야하며 진화해야합니다. 그들에게 지침을 호출하면 도움이 될 수 있습니다 :-)

영감을주기위한 Google 가이드 라인 을 살펴보세요 .


5
C / C ++에 대해 어떤 코딩 지침을 선택해야하는지는 매우 주관적입니다. 그리고 내가 선택 하지 않을 것이 있으면 구글입니다. 그들은 부스트와 같은 다른 사람들에 의해 일반적으로 좋은 현대 C ++ 스타일로 간주되는 많은 것들을 금지합니다.
Jan Hudec

1
귀하의 답변은 외부 표준 사용에 대한 OP의 우려를 어떻게 해결합니까? 코딩 표준의 이름 변경을 제안한다고해서 해결해야하는 핵심 문제에는 도움이되지 않습니다.

1
@JanHudec 동의합니다. 금지하는 것 중 하나는 예외 사용입니다.
BЈовић

-3

아니요, 귀찮게하지 않을 것입니다. 귀하의 팀이 표준을 사용하는 곳으로 이사하면 유일한 이점이 될 것이라고 생각합니다.

표준은 협업을보다 쉽게하기 위해 존재하기 때문에 #define 매크로가 항상 대문자 인 것을 알고 있다면 코드에서 대문자 식별자를 볼 때 매크로라는 훌륭한 아이디어가 있습니다. 마찬가지로 다른 명명 규칙이나 스타일 규칙은 처리중인 내용을 상기시켜줍니다.

readme.txt가 / bin / doc / debug에 있다는 것을 모르는 동안 파일 위치 및 이름과 같은 표준이 코드보다 유용합니다. / release / documents는 정말 고통 스럽습니다. (그런 엉뚱한 길이지만 다른 이야기입니다).

나는 당신이 갈 때 자신의 표준을 세우는 것이 좋습니다. 그런 식으로, 당신은 당신이 좋아하는 것을 얻을뿐만 아니라 당신, 당신의 팀과 당신이하는 일에 꼭 맞는 것을 얻습니다. while 루프가 어떻게 생겼는지 신경 쓰지 않거나 해당 사례 진술을 특정 방식으로 들여 쓰기해야한다고 결정하면 좋습니다. ++ 연산자가 금지되었다고 결정하면 좋습니다. 모든 당신의 선택.

텍스트 설명에서 위키를 찾거나 자동으로 생성 된 웹 페이지를 쉽게 찾아서 업데이트해야하지만 그렇지 않은 경우에는 계속하십시오. 표준은 좋은 코드를 작성하는 것보다 광범하게 표준을 따르는 것에 관심이있는 일부 사람들의 신화적인 태도를 가지고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.