문제

나는 어제 공식적인 테스트를 하면서 품질 관련 작업을 하고 있었습니다.해당 절차에서 그들은 테스트 시스템의 모든 파일이 릴리스에서 추출되었는지 확인했습니다.이러한 파일이 동일한지 확인하는 방법은 Windows 탐색기에서 해당 파일의 크기와 날짜/시간 스탬프 창을 확인하는 것이었습니다.내가 이유를 알아낼 수 있었던 또 다른 이유 때문에 이것들이 꺼진 일이 일어났습니다.

파일이 동일한지 확인하는 유효한 방법입니까?나는 그렇게 생각하지 않고 논쟁을 벌이기 시작했는데, 여기에서는 내가 어리기 때문에 너무 멀리 밀어붙이면 안 된다고 생각했다.나는 그 내용이 정확한지 확인하기 위해 파일에 대해 바이너리 비교를 수행해야 한다고 주장하고 싶었습니다.내 경험상 시간/날짜 스탬프와 크기 속성이 항상 예상대로 작동하는 것은 아닙니다.이견있는 사람???

도움이 되었습니까?

해결책

두 파일이 동일한지 알아내는 유일한 100% 방법은 두 파일의 이진 비교를 수행하는 것입니다.

거짓 긍정의 위험을 감수할 수 있는 경우(예:100% 동일하지는 않지만 코드에서는 동일하다고 표시되는 두 파일), 다이제스트 및 체크섬 알고리즘을 사용하여 작업을 줄일 수 있습니다. 특히 파일이 최적의 대역폭보다 낮은 두 개의 서로 다른 시스템에 있는 경우 바이너리 비교가 가능합니다. 불가능합니다.

다이제스트 및 체크섬 알고리즘은 모두 오탐 가능성이 있지만 정확한 가능성은 알고리즘에 따라 다릅니다.일반적인 규칙은 암호화된 제품이 많을수록, 출력되는 비트가 많을수록 오탐 가능성이 낮아진다는 것입니다.

CRC-32 알고리즘도 사용하기 매우 좋으며 이를 구현하는 코드 예제를 인터넷에서 쉽게 찾을 수 있습니다.

크기/타임스탬프 비교만 수행한다면 이를 우회하기 쉽고 파일이 동일하거나 다르다는 확신을 실제로 제공하지 못한다는 점을 유감스럽게 생각합니다.

하지만 귀하의 세계에서 타임스탬프가 유지되고 파일이 수정될 때만 변경된다는 것을 알고 있다면 이를 사용할 수 있습니다. 그렇지 않으면 보장되지 않습니다.

다른 팁

해싱은 매우 좋습니다.그러나 약간 낮은 기술 대안은 WinMerge 또는 TextWrangler와 같은 diff 도구를 실행하고 각 파일의 두 버전을 비교하는 것입니다.지루하고 사람이 실수할 여지가 있습니다.

무엇보다도, 버전 제어를 사용하여 테스트 중인 파일이 편집한 파일이고 실행하려는 파일인지 확인하세요.우리 리포지토리에는 스테이징 및 라이브 사이트로 체크아웃 폴더가 있으므로 작업 복사본에서 변경 사항을 커밋한 후에는 테스트하고 스테이징으로 푸시한 다음 라이브로 실행하는 파일이 동일하다는 것을 100% 확신할 수 있습니다. 각 상자에서 "svn update"를 실행하고 개정 번호를 확인하면 됩니다.

아, 그리고 급하게 롤백해야 하는 경우(언젠가 우리 모두에게 발생함) -r 스위치를 사용하여 svn update를 다시 실행하고 거의 즉시 이전 개정판으로 돌아갑니다.

파일에 대해 md5sum 해시와 같은 작업을 수행하고 이를 릴리스의 알려진 해시와 비교합니다.날짜/시간 비교보다 더 정확하며 더 많이 자동화할 수 있어야 합니다.

일반적인 방법은 다음을 계산하는 것입니다. 해시시 두 파일을 비교해 보세요.MD5 및 SHA1은 일반적인 해시 알고리즘입니다.md5sum은 대부분의 유닉스 유형 시스템에 기본적으로 설치되어야 하며 Wikipedia의 md5sum 기사에는 일부 Windows 구현에 대한 링크가 있습니다.

각 파일에 대해 CRC 검사를 수행해야 합니다...위키에서:

순환 중복 검사, 전송 또는 저장 오류를 감지하기 위해 체크섬을 생성하는 데 사용되는 해시 함수 유형입니다.

파일 내용을 기반으로 거의 고유한 값을 생성합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top