정적 코드 분석과 코드 검토의 차이점이 무엇인지 알고 싶었습니다. 이 두 가지는 각각 어떻게 이루어 집니까? 보다 구체적으로, 오늘날 PHP의 코드 검토 / 정적 분석을 위해 사용할 수있는 도구는 무엇입니까? 또한 모든 언어의 코드 검토를위한 유용한 도구에 대해 알고 싶습니다.
정적 코드 분석과 코드 검토의 차이점이 무엇인지 알고 싶었습니다. 이 두 가지는 각각 어떻게 이루어 집니까? 보다 구체적으로, 오늘날 PHP의 코드 검토 / 정적 분석을 위해 사용할 수있는 도구는 무엇입니까? 또한 모든 언어의 코드 검토를위한 유용한 도구에 대해 알고 싶습니다.
답변:
코드 검토는 사람들이하는 일이고 정적 분석은 기계가하는 일입니다. 정적 분석 도구가 있습니다. 코드 검토는 동료 / 멘토 / 교수 / 친구가 코드를 검토하고 건설적인 비판을 제공 할 때입니다.
반면에 정적 분석은 기계가 분석하는 언어 (일반적으로 유형 시스템에서)에 대해 알고있는 정보를 통해 기계가 프로그램을 분석하고 틀릴 수있는 것을 선택하려고 시도하는 자동화 된 프로세스입니다. 비효율적이거나 열악한 스타일 또는 차선책.
정적 분석은 소프트웨어를 실행하지 않고 분석하는 프로세스입니다. 이것은 매우 좋고 권장되지만 다음을 명심해야합니다.
이 두 가지 접근 방식 모두 맥락이 부족하여 어려움을 겪고 있습니다.
코드 검토는 다른 코더가 수행하며,이를 알고 있고 확인할 수 있습니다.
훨씬 더 비싸고 다양한 정도의 반복성이 있지만 큰 도움이됩니다.
항상 그렇듯이 모든 버그를 수정하고 모든 문제를 피할 수있는 은색 총알이 하나도 없습니다. 적용-가능한 장소, 코드, 시간, 세 가지 형태의 검사 (정적, 역동적, 더 많은 눈 (및 뇌)가 코드를보고 있음)를 권장합니다.
추신 : 나는 도구를 처음부터 적용하는 것이 일반적으로 훨씬 낫다는 것을 알아야합니다. 기존 시스템을 변환하는 것은 잘못된 긍정으로 인해 훨씬 덜 즐거운 경험입니다. 처음부터 시작하여 항상 분석 도구를 깨끗하게 유지하려는 경우 많은 문제를 피할 수 있습니다.
pps : 도구는 언어에 따라 다릅니다. C 및 C ++ 세계에서는 내장 된 정적 분석 도구가 포함 된 Visual Studio 자체를 살펴 보는 것으로 시작할 수 있습니다. 비교적 완전한 목록 은 Wikipedia에서 찾을 수 있습니다.
ppps : 정적 분석은 C 또는 C ++와 같은 정적 언어에 더 적합합니다. 파이썬의 경우 특정 지점의 목록을 참조하는 이름이 동적 속성으로 인해 나머지 프로그램의 목록을 참조하는지 말하기가 실제로 어려울 수 있습니다. 이것은 PyPy 와 같은 JIT 노력이 보여 주듯이 아무것도 할 수 없다는 것을 의미하지는 않습니다 .
코드 검토는 상급 또는 전담 기관에서 코드, 코딩 방식, 코드에 따른 표준 및 코드의 논리 수준을 확인할 때입니다.
정적 분석에 관한 한, 해당 소프트웨어로 작성된 프로그램을 실제로 실행하지 않고 수행되는 것은 컴퓨터 소프트웨어의 분석입니다 (프로그램 실행시 수행되는 분석은 동적 분석이라고 함).
기술에 따른 도구 목록은 아래 링크에 있습니다.
따라서 코드 검토와 정적 분석은 완전히 다른 용어입니다.
코드 검토는보다 정성적인 평가이고 정적 코드 분석은보다 정성적인 평가입니다.
이봐,이 방법은 더 잘 쓸 수있어
vs, fe
성능 저하 'wcslen (str)> 0'구문을 사용하여 빈 문자열을 식별하는 것은 비효율적입니다. 보다 효율적인 방법은 str [0]! = '\ 0'을 확인하는 것입니다.
성능 저하 strlen (MyStr.c_str ()) 종류의 표현은 MyStr.length ()로 다시 쓸 수 있습니다
성능 저하 '주문'이 반복자 인 경우 접두사 형태의 증분을 사용하는 것이 더 효과적입니다. iterator ++를 ++ iterator로 바꾸십시오.
실제 오류 는 (분명히) 존재하고 SCA에 의해 감지 될 수 있지만
잘못된 형식입니다. 'Foo'함수의 N 실제 인수를 확인하십시오.
표현식은 괄호로 두 번 묶었습니다 : ((식)). 한 쌍의 괄호가 불필요하거나 잘못 인쇄되었습니다
'memset'함수를 호출하면 버퍼 'dest.lfFaceName'의 언더 플로가 발생합니다.
정적 분석은 이슈가 실행되지 않고 분석 될 때입니다. 모든 아티팩트에 적용 할 수 있지만 종종 소스 코드 또는 객체 코드에 적용되며 이러한 작업 제품에 대한 정보를 분석하고 정보를 얻기 위해 특정 도구를 사용하는 것을 말합니다. 이 도구는 건설중인 시스템의 품질을 결정하고 개발 및 유지 관리 계획을위한 지침으로 엔지니어가 해석 한 보고서를 생성합니다. Wikipedia에는 언어별로 구성되고 해당 기능에 대한 간단한 설명이 포함 된 정적 분석 도구 목록이 있습니다 .
리뷰는 일부 작업 제품에 대한 인간 평가이며 코드 일 수 있습니다. 디자인이나 다른 문서에서도 검토를 수행 할 수 있습니다. 아이디어는 개발자 이외의 작업 제품에 익숙한 사람들이 보안 문제에서 코딩 표준 위반에 이르기까지 실수를 찾기 위해보고 있습니다.
기술적으로 코드 검토는 코드가 실제로 검토 중에 실행되지 않기 때문에 정적 분석의 한 형태로 간주 될 수 있습니다. 그러나 일반적인 용어로 "정적 분석"은 일반적으로 소스 또는 오브젝트 파일의 기계 구문 분석을 의미하는 반면 "검토"는 인간이 분석을 수행하는 사람임을 나타냅니다.
코드 검토는 소스 코드의 문제를 매우 초기에 냄새 맡는 데 유용한 기술입니다. 이 연습의 일부로 성능, 확장 성 및 코딩 표준과 같은 많은 문제가 식별되고 수정되었습니다. 코드 품질이 향상됩니다.
정적 분석은 사이클로 메트릭 복잡성, 유지 관리 성 지수, 상속 깊이 및 클래스 커플 링과 같은 코드 품질 메트릭을 분석하는 데 사용됩니다. 코드 품질을 분석하기 위해 시장에서 다양한 도구를 사용할 수 있습니다. C # 개발자는 Microsoft Visual Studio를 사용하여 메트릭 보고서를 생성합니다.
정적 코드 분석은 자동화 된 도구로 수행되며, 코드가 커밋되기 전에 사람들과 함께 코드 검토가 수행됩니다.
코드 검토 도구 :
1. 비교를 넘어
버전 관리 소프트웨어의 2.The diff
이 도구는 항상 이전 버전과 새 버전의 차이를 생성하는 데 사용됩니다.