코드 검토가 주관적이거나 객관적인가 (정량화 가능)?


55

코드 검토를위한 지침을 마련하고 있습니다. 아직 공식적인 프로세스가 하나도 없으며 공식화하려고합니다. 우리 팀은 지리적으로 분산되어 있습니다.

우리는 개발을 위해 Visual Studio 2008과 함께 소스 제어에 TFS 를 사용하고 있습니다 (태스크 / 버그 추적 / 프로젝트 관리에도 사용했지만 JIRA 로 마이그레이션했습니다 ).

코드 검토를 수행 할 때 무엇을 찾아야합니까?

  • 이것들은 내가 생각해 낸 것들입니다.
    1. 적용 의 FxCop의 (우리는 마이크로 소프트 상점이다) 규칙을
    2. 성능 (모든 도구?) 및 보안 ( OWASP 코드 크롤러 사용 고려 ) 및 스레드 안전성 확인
    3. 명명 규칙 준수
    4. 코드는 에지 케이스 및 경계 조건을 포함해야합니다.
    5. 예외를 올바르게 처리해야합니다 (예외를 삼키지 마십시오)
    6. 기능이 다른 곳에 중복되어 있는지 확인
    7. 분석법 본문은 작아야하고 (20-30 줄), 분석법은 한 가지만 수행해야합니다 (부작용 없음, 시간적 결합 방지)
    8. 메소드에서 널을 전달 / 반환하지 마십시오
    9. 죽은 코드를 피하십시오
    10. 공개 및 보호 된 메소드 / 속성 / 변수 문서화

우리가 일반적으로 찾아야 할 다른 것들은 무엇입니까?

검토 프로세스를 정량화 할 수 있는지 확인하려고합니다 (다른 사람이 검토 할 때 동일한 결과를 생성 함) 예 : "메서드가 더 이상 20-30 줄의 코드를 넘지 않아야합니다"라고 말하는 방법 몸은 작아야합니다. "

아니면 코드 검토가 매우 주관적입니까 (그리고 검토 자마다 다를 수 있습니다)?

개발자가 코드를 체크인 할 때 더주의를 기울일 수 있도록 마킹 시스템 (각 FxCop 규칙 위반의 경우 -1 점, 명명 규칙을 따르지 않는 경우 -2 점, 리팩토링의 경우 2 점 등)을 사용하는 것이 목표입니다. 이런 식으로 우리는 지속적으로 좋은 / 나쁜 코드를 작성하는 개발자를 식별 할 수 있습니다. 목표는 검토자가 검토를 위해 최대 30 분을 소비하도록하는 것입니다 (변경 세트 / 개정에 여러 파일 / 기존 아키텍처의 변경 등이 포함될 수 있음을 고려하면 주관적인 것으로 알고 있습니다. 일반적으로 검토자는 다른 사람의 코드를 검토하는 데 며칠을 소비해서는 안됩니다).

개발자가 작성한 우수 / 불량 코드를 식별하기 위해 어떤 다른 객관적 / 양적 시스템을 따르고 있습니까?

도서 참조 : Clean Code : Robert Martin의 민첩한 소프트웨어 기술 핸드북 .


8
null을 반환 할 때 해로운 것으로 간주되는 것은 무엇입니까? 나는 C #과 같은 고급 언어에서 NULL 대신 빈 배열을 반환하는 것이 더 나은 이유를 이해합니다 (코드를 훨씬 더 우아하고 오류를 피하기 쉽게 만듭니다). 때로는 NULL 참조를 반환해야합니다.

4
null을 반환하지 않으면 클라이언트 / 소비 앱 / 라이브러리가 메소드를 호출 할 때 null 검사를 건너 뛸 수 있습니다. Clean Code의 Robert Martin 작성-7 장 (오류 처리) pp : 110 "null을 반환하면 본질적으로 우리 자신을위한 작업을 만들고 호출자에게 문제를 일으키는 것입니다. 통제. "

3
한 페이지를 읽기 위해 책을 사고 싶지 않은 사람을 위해 설명 할 수 있습니까? :)? 대부분의 C # 프로그램의 경우 NULL을 피하면 코드가 더 복잡

2
다음은 null을 반환하는 것이 좋지 않은 이유를 설명하는 블로그 게시물입니다. thehackerchickblog.com/2008/10/… . 그리고 하나 더 leedumond.com/blog/should-we-return-null-from-our-methods . Bob이 그의 책에서 제안한 것은 null을 반환하려는 유혹을 받으면 Null 참조 예외를 발생 시키거나 대신 SPECIAL_CASE 객체를 반환 할 수 있다는 것입니다. 메소드 호출 체인에 대한 생각 this.Foo().FooBar().FooBarBar(); ()는 foobar를 호출 할 때 개체가 푸가 null에서, 당신은 확실히 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"피할 수 있습니다 여기에 반환하는 경우

@ 솔로 볼드 : 그리고 지적, 그들은 단지 지침입니다. (경우에 따라서있을 수 있습니다) 널 (null)을 반환하는 매우 강력한 이유가있는 경우, 반환 널 (null)이 SPECIAL_CASE 객체를 반환하는 것보다 나을

답변:


25

리뷰에서 개인채점 하는 것은 내가 함께 작업 한 대부분의 성공적인 시스템에 대한 것입니다. 그러나 제가 20 년 넘게 달성하려는 목표는 버그를 줄이고 엔지니어 당 시간당 생산성을 높이는 것입니다. 개인을 채점하는 것이 목표라면 리뷰를 사용할 수 있다고 생각합니다. 나는 노동자 나 지도자로서 필요한 상황을 본 적이 없다.

일부 객관적인 연구 (Fagan 등)와 많은 대중적 지혜는 동료 관계가 버그를 줄이고 생산성을 높이기위한 코드 검토를 촉진 한다고 제안합니다 . 실무 관리자는 관리자가 아닌 근로자로 참여할 수 있습니다. 논의의 요점에 주목하고, 검토자를 만족시키기위한 변경은 일반적으로 좋은 일이지만 필수는 아닙니다. 따라서 동료 관계.

모든 자동화 된 도구 할 수 있습니다 추가 분석이나 판단없이 수락 - 좋은 보풀 C, C ++, 자바있다. 정기적 인 편집. 컴파일러는 findng 컴파일러 버그에 능숙합니다. 자동화 된 검사에서 편차를 문서화하면 자동화 된 검사가 미묘하게 표시되는 것처럼 들립니다. 편차를 허용하는 코드 지시문 (Java와 동일)은 매우 위험합니다 (IMHO). 문제의 핵심을 신속하게 파악할 수 있도록 디버깅에 유용합니다. 문서화되지 않은 50,000 개의 주석 처리되지 않은 코드 블록을 찾는 것이 좋지 않습니다.

일부 규칙은 어리석지 만 시행하기 쉽습니다. 예를 들어 도달 할 수없는 경우에도 모든 스위치 명령문의 기본값입니다. 그런 다음 확인란 일 뿐이므로 일치하지 않는 값으로 시간과 비용을 테스트 할 필요가 없습니다. 당신이있는 경우 규칙을 , 당신이해야 어리 석음을 , 그들은있다 불가분 연결 . 모든 규칙의 이점은 비용이 드는 어리 석음의 가치가 있어야하며 해당 관계는 정기적으로 확인해야합니다.

다른 한편으로, "It runs"는 검토 전에 미덕이 아니며, 검토에서 방어입니다. 개발이 폭포 모델 을 따른다면 복잡한 오류가 발견되고 해결되기 전에 코딩이 85 % 완료 될 때 검토를 수행하려고합니다. 검토가 더 저렴한 방법이기 때문입니다. 실제 생활은 폭포 모델이 아니므로 검토 시점은 다소 예술적이며 사회적 규범에 해당합니다. 실제로 코드를 읽고 문제를 찾는 사람들은 순금입니다. 지속적인 방식으로이를 지원하는 관리는 가격 이상의 진주입니다. 리뷰 는 체크인- 초기 및 자주와 같아야합니다 .

나는 이것들이 유익하다는 것을 알았다.

1) 스타일 전쟁 없음 . 열린 중괄호 가있는 곳은 주어진 파일에서 일관성 검사를 받아야합니다. 모두 같은. 그럼 괜찮습니다. 저두 압입 깊이 **의 **는 탭 폭 . 대부분의 조직은 넓은 공간으로 사용되는 탭에 대한 공통 표준이 필요하다는 것을 알고 있습니다.

2)`비정형

   looking

그렇지 않은 텍스트

   line up is hard to read 

내용을 위해 .`

BTW, K & R은 5 개의 공간을 들여 쓰기 했으므로 권위에 대한 호소는 가치가 없습니다. 일관성을 유지하십시오.

3) 검토 할 파일의 줄 번호가 변경되지 않은 공개적으로 사용 가능한 파일의 사본을 검토하기 전에 72 시간 이상 지적해야합니다.

4) 즉시 디자인이 없습니다. 문제가 있거나 문제가 있으면 해당 위치를 기록하고 계속 움직이십시오.

5) 개발 환경에서 모든 경로를 통과하는 테스트는 매우 좋은 아이디어입니다. 방대한 외부 데이터, 하드웨어 리소스, 고객 사이트 사용 등을 요구하는 테스트는 비용이 많이 들고 철저하지 않은 테스트입니다.

6) 작성, 표시, 편집 등의 도구가 있거나 개발 초기에 작성된 경우 ASCII가 아닌 파일 형식을 사용할 수 있습니다. 이것은 개인적인 편견이지만 지배적 인 OS가 1 기가 바이트 미만의 RAM으로 자체적으로 벗어날 수없는 세계에서 10 메가 바이트 미만의 파일이 왜 필요한지 이해할 수 없습니다. ASCII 또는 기타 상업적으로 지원되는 형식 이외의 형식. 그래픽, 사운드, 동영상, 실행 파일 및 함께 제공되는 도구에 대한 표준이 있습니다. 일부 객체의 이진 표현을 포함하는 파일에 대한 변명은 없습니다.

릴리스 된 코드의 유지 관리, 리팩토링 또는 개발을 위해 한 그룹의 동료가 다른 사람의 검토를 사용 하여 디스플레이에 앉아 오래된 체크인 과 새로운 체크인을 분기 체크인의 게이트웨이로 사용했습니다. 나는 그것을 좋아했다, 그것은 싸고, 빠르고, 비교적 쉬운 일이었다. 코드를 미리 읽지 않은 사람들을위한 연습은 교육용이지만 개발자의 코드를 거의 개선하지는 않습니다.

지리적으로 분산되어 있다면 다른 사람과 대화를 나누면서 화면에서 차이점을 보는 것이 비교적 쉽습니다. 여기에는 변화를보고있는 두 사람이 포함됩니다. 문제의 코드를 읽은 더 큰 그룹의 경우 여러 사이트가 한 방에있는 것보다 훨씬 어렵지 않습니다. IMHO는 공유 컴퓨터 화면과 스 쿼크 박스로 연결된 여러 개의 방이 잘 작동합니다. 사이트가 많을수록 회의 관리가 더 필요합니다. 촉진자로서의 관리자는 여기에서 보관할 수 있습니다. 자신이없는 사이트를 계속 폴링해야합니다.

한 시점에서 동일한 조직은 회귀 테스트로 사용되는 자동화 된 단위 테스트를 수행했습니다. 정말 좋았습니다. 물론 우리는 플랫폼을 바꾸었고 자동화 된 테스트는 뒤쳐졌습니다. Agile Manifesto가 지적한 것처럼 프로세스 나 도구보다 관계가 더 중요합니다 . 그러나 일단 검토를 받으면 자동화 된 단위 테스트 / 회귀 테스트는 좋은 소프트웨어를 만드는 데있어 다음으로 중요한 도움이됩니다.

"해리가 샐리를 만났을 때"에서 말하는 것처럼, 요구 사항에 따라 테스트를 수행 할 수 있다면 , 그녀가 가진 것을 갖게 될 것입니다!

모든 리뷰에는 코딩 위의 수준에서 요구 사항과 디자인 문제를 포착하기 위해 주차장 이 있어야 합니다 . 일단 주차장에 속하는 것으로 인식되면 검토에서 논의를 중단해야합니다.

때로는 코드 검토가 하드웨어 설계의 회로도 검토와 같아야한다고 생각합니다. 완전히 공개적이며 철저한 자습서, 프로세스의 끝, 빌드 및 테스트 후 게이트웨이입니다. 그러나 물리적 객체를 변경하는 것은 비용이 많이 들기 때문에 회로도 검토는 무겁습니다. 소프트웨어의 아키텍처, 인터페이스 및 문서 검토는 아마도 무거울 것입니다. 코드가 더 유동적입니다. 코드 검토는 더 가벼워 야합니다.

많은 방법으로 기술은 특정 도구에 대한 것만 큼 문화와 기대에 관한 것이라고 생각합니다. 마음을 즐겁게하고 마음에 도전하는 모든 " Swiss Family Robinson "/ Flintstones / McGyver 즉흥 연주를 생각하십시오. 우리는 우리의 물건이 작동하기를 원합니다 . 1960 년대 AI 프로그램에 의해 어떻게 추상화되고 자동화 될 수있는 "지능"이 존재하는 것 이상으로 그 길은 하나도 없습니다 .


그것은 특히 사람들을 채점하는 것과 관련하여 좋은 대답입니다. 이것은 코드 검토의 요점이 아닙니다.
Paddy

25

설명한 대부분의 요점은 코드 형식화 또는 "표면"에 관한 것입니다.

  • 명명 규칙 준수
  • 죽은 코드를 피하십시오
  • 문서
  • ...

이 모든 것은 자동화 된 도구를 사용하여 확인할 수 있습니다 . 경험이 풍부한 개발자가 코드를 살펴 보는 데 시간을 할애 할 필요가 없습니다.

나는 .NET 에 대해 전혀 모른다 . 그러나 PHP를 위해 , 우리는 그런 종류의 것들을 검사하는 도구를 가지고있다. .NET이 종종 PHP보다 "더 산업적"이라고 말하면 이런 종류의 도구를 확인할 도구가 없다는 사실에 놀랄 것입니다.


자동화 된 도구는 다음을 모두 수행 할 수 있습니다.

  • 매일 밤마다 실행되는 자동 빌드 프로세스에 통합
  • 이메일보고 보내기
    • 경고 (예 : 방법이 20 줄을 초과 함)
    • 오류 (예 : 방법이 50 줄을 초과 함)

메일은 모든 팀 또는 테스트를 통과하지 못한 코드를 커밋 한 사람에게 보내거나 일부 보고 웹 인터페이스를 사용할 수 있습니다 (.NET 및 PHP에 대한 동일한 참고 사항)


또한 자동화 된 테스트 는 코드가 프로덕션에 사용되기 전에 특정 수의 오류를 감지하는 데 많은 도움이 될 수 있다고 덧붙였습니다 . 자동화 된 테스트도 일부 메트릭에 도움이 될 수 있습니다.


숙련 된 개발자가 수행 한 코드 검토 는 사용자가 이야기하지 않은 또 다른 큰 이점을 제공합니다.

  • 숙련 된 개발자는 종종 소스 코드를보고 광범위한 버그를 탐지 할 수 있습니다 (코드 검토를 할 때 종종 버그를 발견합니다)
  • 숙련 된 개발자가 수행 한 코드 검토 를 통해 팀에 의견과 제안을 할 수 있습니다 .
    • 그는 코드에서 사용되는 알고리즘을 이해하려고 노력하고 더 나은 솔루션을 제안 할 수 있습니다.
    • 코드를 읽는 것만으로 자동화 도구가 감지하지 못하는 것을 종종 볼 수 있습니다.

그러나 코드 형식화보다 심층적 인 코드 검토를 위해서는 30 분 이상이 필요합니다 .


.Net 용 도구 (현재 C # 만 해당)는 StyleCop입니다. code.msdn.microsoft.com/sourceanalysis
Bryan Anderson

15

코드 검토에 대한 저의 경험은 코드를 개선하기위한 결합 된 노력이어야하며, 누가 자신의 일에 좋은지 나쁜지를 결정하는 '측정'이 아닙니다. 코드를 검토하는 동안 많은 의견을 얻는 것이 중요하지 않은 경우 검토자가 더 엄격 해 지므로 코드를 개선하기위한 제안을합니다.

체크인 된 코드의 품질을 향상 시키려면 검토 주석이 처리되도록하고 (검토자가 처리 된 주석을 승인하게 함) 정적 코드 확인 도구를 사용하여 초기 커밋에 대한 품질 수준을 강요하십시오.


2
이것이 자신의 직업에서 더 나은 사람을 비교하지 못하게하는 것에 대한 귀하의 의견에 +1하십시오. 이것은 사기에 나쁜 것입니다!

2
@ KarstenF : 맞습니다. 또한 DeveloperA는보다 복잡한 작업 (더 많은 코드 줄)으로 작업하는 반면 DeveloperB는 간단한 작업으로 작업하고 점수가 적을 수 있습니다. 모두 자신의 작업 / 업무를 정상화 할 수있는 방법이 없을 때 데바 나쁜 일을했다는 것을 말할 불공정 것

2
또한 일부 개발자는 동료를 불신하려고 할 수도 있습니다.

이 시점이 맞습니다. 사소한 개념 (등급과 같은)은 사소함을 유발합니다.
Dan Rosenstark

이 중요한 점에서 +1. 프로세스에서 숫자를 생성하자마자 사람들은 숫자를 늘리기 위해 코드를 게임하려고합니다. 예를 들어, 벌칙 / 방법 등급이 매우 낮도록 많은 간단한 코드를 작성합니다. 또는 그들은 완벽한 변수 이름을 찾기 위해 모든 시간을 보냅니다. 그리고 그것은 친구의 코드에서 사소한 실수를 지적하기를 원하지 않을 것이기 때문에 정치적 일이됩니다. 왜냐하면 그들은 그들의 점수를 낮추고 나쁜 것으로 보이기 때문입니다! 아뇨! 요컨대, 당신의 마음은 올바른 곳에 있지만 나쁜 생각입니다. 프로그래머는 개를 보여주지 않습니다.
leoger

5

나는 당신의 등급 시스템이 나쁜 생각이라고 생각합니다. 요점이 뭐야? 좋고 나쁜 프로그래머를 식별하려면? 코드 검토의 모든 사람은 코드 검토에 제시된 코드를 기반으로 특정 프로그래머에 대한 평가를 구성 할 수 있습니다. 좋고 나쁜 프로그래머를 식별하려면 프로그래머에게 물어보십시오. 인간이 당신의 어리석은 휴리스틱보다이 평가를 더 잘 수행 할 수 있음을 보증합니다.

사람들은 판단력이없고 적대적이지 않은 환경에서 사람들이 아이디어와 의견을 공개적으로 공유 할 수 있도록 코드 검토를 시도하고 개선하는 것이 좋습니다. 그렇게 할 수 있다면 프로그래머를 평가하는 데 도움이되는 바보 같은 체크리스트를 기반으로 프로그래머에 대한 판단을 내리는 것보다 100 배나 더 좋습니다. 나는 많은 프로그래머들이 이미 코드 리뷰에 열악한 행동을한다면 자랑스럽고 힘들다고 생각합니다. 성능 저하에 대한 추가 '처벌'이 일반적으로 도움이되는지 의문입니다.


4

내 유일한 조언은 코드 검토 프로세스를 너무 엄격하게하지 않는 것입니다. 가장 중요한 것은 코드 검토가 실제로 발생 하고 심각하게 처리된다는 것입니다 .

검토자가 프로세스를 소진할수록 코드 검토가 발생할 가능성이 적고 단지 성가신 것으로 간주되기보다는 심각하게 고려 될 것입니다. 또한 코드 검토의 실제 가치는 검토자가 자체 판단을 사용할 수있는 능력에 있으며 FXCop 규칙의 통과 여부를 확인하는 데 자동화 도구를 사용할 수 있습니다.


+100! 내 말은 +1이지만 실제로는 이것이 요점이 아닙니다. 코드 검토 및 단위 테스트 (및 기타 사항)의 경우 더 적습니다. 더 많은 것이 제로가 될 때까지만 더 많은 것이기 때문에 이것은 사실이다 :)
Dan Rosenstark

4

경험상 코드 검토에서 기계로 수행 할 수있는 작업을 수행하는 데 시간을 소비하지 마십시오. 예를 들어, 첫 번째 항목은 "FxCop 규칙을 적용"하는 것이지만 아마도 사람도 그렇게하지 않아도 FxCop에서 수행 할 수 있습니다.


3

측정이 가능하고 객관적이고 수량 화가 가능하다면 도구를 사용하십시오. 경험이 풍부한 리뷰어가 필요한 곳은 퍼지 주관적인 것입니다.


도구를 만드는 데 100 시간, 도구를 사용하여 1000을 저장했습니다.
Dan Rosenstark

3

스타일 문제에 대해서는 이미 많은 좋은 의견이있었습니다. 팀 프로젝트에서는 모든 코드가 단일 작성자가 작성한 것처럼 보이는 것이 중요합니다. 이를 통해 팀의 다른 구성원이 문제가 발생할 때 쉽게 문제를 해결할 수 있습니다. 이 광범위한 목표를 달성하기 위해 선택한 정량적 측정이 덜 중요합니다.

하나의 추가 항목은 코드가 나머지 시스템에 대해 합의 된 전체 아키텍처와 일치하는지 확인하는 것입니다. 비슷한 문제는 모두 같은 방식으로 해결해야합니다. 응용 프로그램 논리가 여러 계층으로 분할 된 경우 검토중인 코드가 나머지 시스템과 동일한 방식으로 기능을 분리합니까? 또는 검토중인 코드가 나머지 시스템에서 철회해야 할 새로운 것을 가르쳐 줍니까? 스타일 검사를 통해 코드가 모두 동일하게 보이는 것처럼 아키텍처 검토를 통해 코드가 모두 동일한 방식으로 작동하는지 확인해야합니다. 여기서 다시 강조하는 것은 유지 보수성입니다. 팀의 모든 사람은이 코드를 작성하여 바로 무슨 일이 일어나고 있는지 파악할 수 있어야합니다.

채점 아이디어는 제작 과정에서 재앙처럼 보이지만 팀을 가장 잘 알고 있습니다. 그들이 그러한 시스템에 의해 동기 부여 될 가능성이 있지만, 사람들이 문제를 해결하는 것보다 자신의 등급에 대해 더 걱정하기 시작할 가능성이 더 높습니다. 코드 검토의 가장 중요한 부작용 중 하나는 그들이 제공하는 멘토링 기회입니다. 검토자는 코드를 작성한 사람을 멘토링중인 사람으로 취급해야합니다. 발견 된 각 문제는 문제가 아니라보다 지식이 풍부하고 정교한 팀 구성원과 전체적으로 더 긴밀한 팀을 만들 수있는 기회입니다.


2

나는 실제로 다른 어떤 것보다 "주관적인"것에 더 신경을 쓴다. 좋은 코드 검토에서 원하는 것은 입력이 아닌 내 논리를 확인하는 사람입니다. 그리고 그것이 코드 검토를 할 때 내가 집중하는 것입니다.

내가 좋아하는 일반적인 형식은 다음과 같습니다.

  1. 우리는 무엇을 고치고 있습니까?
  2. 그 원인은 무엇입니까? (코드를보십시오)
  3. 우리는 그것을 어떻게 고치고 있습니까?
  4. 새 코드를 보여주세요
  5. 작동하는 코드를 보여주세요

그것 없이는 단지 diff를 보는 것이 사소한 문제 나 문체에 대한 의견을 제시하는 경향이 있습니다. 논리가 올바른지, 전체적으로 사용 된 접근 방식이 좋고, 솔루션을 유지 관리 할 수 ​​있는지에 대해 훨씬 더 우려하고 있습니다.

예를 들어, 최근 동료가 작성한 코드를 보았습니다. 원래 문제는 FxCop 위반이었습니다. 그러나 버전 번호를 확인하여 Windows 기능의 존재 여부를 확인하려고했습니다. 필자의 주요 의견은 이것이 깨지기 쉬운 방법이라는 것이었고, 기능 존재와 Windows sku 간의 매핑이 미래에 변경 될 수 있고 미래에 전혀 보장되지 않았기 때문에 서비스를 직접 쿼리하는 것이 좋습니다.


당신의 대답에서 명확하지 않습니다 : FxCop이 그 취약성을 잡았습니까?
Dan Rosenstark

2

CC ( Cyclomatic Complex )는 '나쁘지 않은'코드를 평가하는 한 가지 방법입니다.

CC가 높은 실제 코드에서는 "여기서 무슨 일이 일어나고 있는지 기억 나지 않습니다"라는 요소가 있습니다. CC 코드가 낮을수록 이해하기 쉽습니다.

분명히 일반적인 경고는 메트릭에 적용됩니다.


1
@AfermeraInfo : 응?
Paul Nathan

1

코드 검토는 주관적이며 객관적입니다. "메소드 본문은 20-30 줄이어야합니다"와 같은 규칙은 주관적이지만 (일부 사람들은 100 줄이면 괜찮다고 생각할 수 있습니다) 회사에서 20-30 줄이 한계라고 결정한 경우 괜찮습니다. 나는 당신이 생각 해낸 포인트 시스템이 좋은 생각이라고 생각합니다. 특정 규칙이 점수를 매기는 데 다소의 무게가 필요하다는 것을 알기 때문에 정기적으로 다시 평가해야하지만 모든 사람이 규칙을 알고있는 한 좋은 시스템처럼 보입니다.

내가 찾은 다른 것들 :

  • 코드의 명확성-때로는 한 줄 또는 여러 줄로 코드 조각을 작성할 수 있습니다. 일반적인 프로그래머는 몇 줄의 코드가 무엇인지 알아 내기 위해 몇 분을 소비 할 필요가 없습니다. 만약 그렇다면, 코드를 더 간단한 방법으로 다시 작성해야 할 것입니다. 이것은 주관적이지만 핵심은 회사의 대부분의 프로그래머가 코드를 즉시 이해할 수 있어야한다는 것입니다.
  • 기능 입력 매개 변수 확인-입력 매개 변수가 허용 가능한 범위 내에 있는지 확인하는 코드가 있어야합니다. 함수 문서와도 일치해야합니다.
  • 설명 변수 이름-몇 가지 특수한 경우 (루프 인덱스 등)를 제외하고 변수 이름은 설명 적이어야합니다. 명명 규칙 등을 살펴 보려는 리소스 중 하나는 코드 완성입니다.

1

너무 자세하게 설명하고있는 것 같습니다. 더 세분화해야합니다. 코드 품질 및 기능 준수에 대한 코드를 준수해야합니다. 당신은 분리되어 있어야하고 그것은 이야기의 끝이 아니어야합니다 ... 그래서 여기 내 제안이 있습니다 :

코드 품질 :

  • 자동 검사 :
    • 스타일의 형태 : 명명 규칙이 정확하고 모든 코드가 올바르게 들여 쓰기됩니다.
    • 효율성 표준 : 메모리 누수 확인, 복잡성 확인, 중복 변수 등
  • 실제 동료 검토 :
    • 디자인의 간단한 안내
    • 자동 검사와의 편차 설명
    • 유지 관리의 용이성, 유지 관리 방법 및 모든 방법에 대해 이야기
    • 테스트 가능성 :이 코드를 테스트하는 것이 얼마나 쉬운가요? 계획 있어요?

기능 준수 :

  1. 요구 사항 및 / 또는 디자인 검토 이후 기능 요구 사항 및 변경 사항 검토
  2. 요구 사항과 관련된 기능을 시연하고 하나씩 확인
  3. 구현 중에 발생하는 소프트웨어의 다른 측면 (배포 계획, 인프라 등)에 대한 추가 요구 사항에 대해 논의
  4. 해당 포인트에 의한 요구 사항과의 편차 설명.

코드 검토의이 두 가지 측면을 다룰 수 있다면 황금색입니다.



1

따라 다릅니다.

검토의 일부 부분은 쉽게 정량화 할 수 있습니다 (FxCop 문제 없음, StyleCop 오류 없음, CAT.NET 오류 없음 )

그러나 스타일은 주관적 일 수 있습니다.하지만보다 구체적으로 말하면 (방법> 20 줄 없음) 스타일을 측정하면 NDepend 와 같은 도구 가 자동으로이를 수행 할 수 있습니다. 일부 사례는 자동으로 처리되지 않습니다. 최첨단 사례 처리를 확인하려면 테스트가 필요하므로 코드 적용 범위가 늘어나며 많은 경우 100 %가 도달 할 수없는 이상적입니다. 복제 검사는 자동으로 수행하기가 어렵습니다. 널 확인, 나는 당신에 동의하지는 않지만, NDepend 규칙 또는 FxCop 규칙을 작성할 수 있습니다.

도구가 많을수록 좋고, 도구를 사용하여 개발자가 변경 사항을 커밋하기 전에 작업을 확인하고 CI 프로세스의 일부로 검사를 수행 할 수 있으면 검토 필요성이 최소화됩니다.


0

마킹 시스템은 까다로워 보이지만 측정 도구로는 가치가 있습니다. 측정 할 수없는 것을 개선 할 수는 없습니다. 그러나 일부는 정확하게 정량화하기 어렵거나 불가능하다는 점을 인정해야합니다. 까다로운 것은 각 품질에 점수를 매기는 점수를 계산하는 것입니다.

간단한 체크리스트와 같은 것이 더 좋을 수 있으므로 코드가 특정 품질에 부합하거나 부분적으로 적합하거나 적합하지 않은 것으로 표시 될 수 있습니다. 나중에 어떤 품질 문제가 가장 자주 발생하거나 가장 많은 문제가 발생했는지 확인한 후 점검표에 점수를 추가 할 수 있습니다.

또한 검토 과정은 코드가 검토 과정에서 정당화되고 문서화 될 수있는 경우 검토 과정에서 실패 할 수 있도록 유연해야합니다. 구성 요소가 불필요하게 복잡하거나 관리 불가능하게되는 일부 코드 품질 표준을 눈에 띄게하는 것은 나쁜 생각입니다!


현 상황이 발생합니다.

0

일부 개발자가 불평하는 것처럼 사람들이 코드를 "표준화하는 데 시간을 낭비하지"않고 사람들의 코드를보다 표준화하려면. 서식 및 기타 리팩토링 작업을 거의 자동화 된 프로세스로 만드는 ReSharper 와 같은 도구에 투자하십시오 .


0
  • 기계가 그것을 확인할 수 있다면 사람들은 그렇게하지 않아야합니다.
  • 하나의 점검 목록 항목 만 : 모든 오류 사례가 모든 곳에서 올바르게 처리됩니까?
  • 코드 검토를 사용하여 품질을 개선하고 지식을 이전하십시오.
  • "불량한"개발자를 식별하기 위해 코드 검토를 사용하지 마십시오.
  • 자아 딩은 명시 적 포인트보다 효과적입니다.
  • 짧게 유지하십시오-90 분 500 줄은 거대합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.