-
validation과 verification 차이가 무엇일까?개발 일기장/개발 일상 2024. 1. 4. 03:01
파라미터나 상태에 대해 확인 또는 검증을 할 때 메서드 명을 뭘로 해야할까...?
딱히 관심을 안 가지다보니 어떤 메서드는 validate**, 어떤 메서드는 verify** 형태로 작성했다.
(개발업계 외에도 자주 혼용해서 사용하는 영어 단어로 보인다.)
그 차이도 있겠지만 일관성 없는 코딩을 하고 있다는게 마음에 들지 않아서 그 차이를 살펴봤다.
Validate
1. to make something officially acceptable or approved, especially after examining it
2. to prove that something is correct1. 무언가를 공식적으로 허용하거나 승인한다. 특히, 그것을 검사한 후에
2. 무언가를 옳은지 증명한다.
Verify
1. to prove that something exists or is true, or to make certain that something is correct
1. '무언가가 존재하는지 또는 참인지 증명하다' 또는 '무언가가 올바른가 확인한다'
비슷한듯, 안비슷한듯 하지만 차이점을 찾아보려하니, Verify가 무언가 더 기계적인 느낌이 든다. exist, is true라는 단어들에서 주는 뉘앙스에서 그렇달까. Validate는 증명을 해내야할 것 같고, acceptable한지 판단해야하는 느낌이고.
좀 더 신빙성 있게 여러 사이트 글들을 읽어보았다.
명사로 많이 설명되어있는데, 이 글에서는 명사, 동사 혼용해서 쓰겠다. 그 차이점을 아는게 중요하니깐.
키 포인트는 명세서 vs 요구사항
둘의 차이를 Validation은 'Are you building the right thing?', Verification은 'Are you building it right?'라고 표현하기도 한다.
'Building the right thing'은 유저의 요구에 맞게 올바른 걸 만들었는가
'Building it right'은 그것이 제대로 만들어졌는가, 명세서대로 시스템을 정확히 구현하였는가를 체크하는 것이다.
즉, Validation은 '유저가 요구하는 사항에 맞춰 제대로 개발 했는가'이다. 유저가 예상한대로 동작하는지가 중요하다.
Verification은 '명세서대로 개발되었는가'이다. 빌드가 제대로 되는지, 함수가 올바르게 동작하는지를 확인한다. 그래서 Verification 과정은 내부 프로세스인 경우가 많다.
단위 테스트나 통합 테스트처럼 테스트 코드를 작성하는 것도 일종의 Verification 과정이라 볼 수 있다. 빌드가 깨지진 않는지 함수가 명세서대로 동작하는지를 확인하기 때문이다.
QA 과정을 태우면서 UI 화면에서 직접 확인하는 테스트 같은 경우, Validation 과정이라 할 수 있다.
영단어 뜻에서도 보았듯이 Verification은 Validation보다 사전에 수행하는 프로세스이다.
Verification, Validation의 차이를 표로 정리해둔 글이 많은데, 제일 항목이 많은 표로 가져왔다.
아래 표에서 Verification 항목에서 static testing, not include execution of the code 이런 문구 때문에 '코드를 아예 안 돌린다는 뜻인가?'로 헷갈릴 사람들이 있을 듯하다.
Verification은 컴파일 환경까지, Validation은 런타임 환경에서 수행하는거라 생각하면 이해하기 좀 쉽다. 그래서 단위 테스트, 통합 테스트가 Verification 범주에 들어가는 걸 알 수 있다.
예시
Validation 실패
- 시스템에 버그는 없지만, 유저 요구사항에 맞지 않게 동작한다
- 결제 성공 시, 결제 내역을 띄워주지 않고 홈 화면으로 이동한다.
- 비회원이면 상품 목록을 보여주지 말고 회원가입 화면을 띄워주라고 했는데, 상품 목록이 보여진다
- 내 주문 내역을 다른 유저도 마음대로 볼 수 있다
- 패스워드를 잘못 입력했는데 로그인이 된다
Verification 실패
- 어떤 함수의 인수(argument)가 not null만 허용해야하는데, 값이 null이 넘어왔는데도 이상이 없었다.
- string으로 return 해야하는 함수가 int로 return한다.
- DB 테이블의 특정 컬럼이 정수만 허용하는데 소수점 데이터가 들어갔다
- 유일성을 보장해야하는 데이터가 중복으로 존재한다
- 조건문이 의도한대로 타지 않는다.
결론
Verify는 Validate에 비해 상대적으로 객관적인 의미를 내포한 것으로 느껴진다. 메서드를 작성할 때 검증 메서드 prefix로 뭐가 맞을까 고민하다 여기까지 찾아보았다.
정리한걸 바탕으로 생각해보면, 개발자가 코드 작성에 있어서 검증을 위해 Validate**를 메서드의 prefix 쓸 일이 있을까 싶다. 모든건 함수와 값, 조건문 등 명세대로 동작하는지 검증하는 일들이라서다.
Validation의 실패 예시도 코드 레벨에서 검증할 것 처럼 보이지만, 최종적인 프로덕트에서 발생하는 이슈이고, 그 이전에 코드 레벨에서 함수가 의도한대로 동작하지 않았던 것이다. 모든 동작이 명세서대로 작동하지만, Validation 실패라고 여기려면 요구사항을 놓쳤거나 명세서에 제대로 반영하지 못했다는게 아닐까?
출처
- https://www.arbourgroup.com/blog/2015/verification-vs-validation-whats-the-difference/
- https://www.geeksforgeeks.org/differences-between-verification-and-validation/
- https://www.softwaretestinghelp.com/what-is-verification-and-validation/
- https://en.wikipedia.org/wiki/Verification_and_validation
- https://uk.indeed.com/career-advice/career-development/verification-vs-validation
'개발 일기장 > 개발 일상' 카테고리의 다른 글
[백엔드 개발자] 대학교에서 직업 강연을 해보았다. (2) 2023.09.24 실무적인 디자인 패턴 정리 글 모음 (0) 2022.07.02 작지만 뿌듯한 경험 (0) 2022.01.28 올 상반기 만들어본 개인 프로젝트(국내 축제 알리미) (0) 2020.12.31 코로나 시대, 여행회사에서 개발자로 일한다는 건 (0) 2020.09.13