소프트웨어 개발에서 테스팅(Testing)과 디버깅(Debugging)은 둘 다 품질을 보장하는 중요한 과정이지만, 목적과 수행 방법이 다르다.
1. 테스팅(Testing)과 디버깅(Debugging)의 차이점
💡 즉, 테스팅은 "버그를 찾는 과정", 디버깅은 "버그를 수정하는 과정"
2. 테스팅의 역할
테스팅은 소프트웨어의 결함을 찾아내는 과정이며, 다음과 같은 방법이 있음
1️⃣ 동적 테스팅(Dynamic Testing)
➡ 실제 소프트웨어를 실행하여 결함을 찾아내는 방식
➡ 실행 중 오류가 발생하면, 해당 오류를 개발자에게 전달하여 디버깅 진행
💡 예제:
웹사이트에서 로그인 버튼을 눌렀을 때 "서버 오류" 발생 → 테스터가 발견한 결함을 리포트
2️⃣ 정적 테스팅(Static Testing)
➡ 소프트웨어를 실행하지 않고 코드, 문서 등을 검토하여 결함을 찾아내는 방식
➡ 장애가 발생하지 않아도 결함을 직접 식별 가능
💡 예제:
코드 리뷰 중 if (password = "1234") 처럼 == 대신 =이 사용된 것을 발견 → 결함 수정 필요
3. 디버깅(Debugging) 프로세스
테스팅을 통해 버그가 발견되면, 개발자는 다음과 같은 과정으로 디버깅을 수행함!
1️⃣ 장애 재현 (Bug Reproduction)
➡ 보고된 결함을 실제로 발생시켜 재현 가능성을 확인
➡ 특정 환경에서만 발생하는 경우, 환경 설정을 조정하여 동일한 오류를 재현
💡 예제:
"결제 버튼을 누르면 화면이 멈춘다"는 버그 리포트를 확인하고, 동일한 시나리오로 테스트하여 오류 발생 확인
2️⃣ 원인 분석 (Root Cause Analysis)
➡ 오류 로그, 디버깅 도구 등을 활용하여 버그의 근본 원인(Root Cause)을 찾음
➡ 코드의 어느 부분에서 문제가 발생했는지 분석
💡 예제:
로그를 확인한 결과, NullPointerException이 발생하는 것을 발견 → 원인은 "결제 버튼 클릭 시 상품 정보가 null인 경우"
3️⃣ 원인 해결 (Fixing the Bug)
➡ 오류를 수정하고, 해당 코드가 정상적으로 동작하도록 수정
➡ 필요하면 관련 기능도 함께 개선
💡 예제:
"결제 버튼 클릭 시 상품 정보가 null인지 확인하는 코드 추가" → 버그 수정 완료!
4. 버그 수정 후 추가 검증
버그를 수정했다고 끝이 아니다! 수정이 제대로 되었는지 검증하는 추가적인 테스트가 필요함!
1️⃣ 확인 테스팅(Confirmation Testing)
➡ 처음 발견된 버그가 정상적으로 수정되었는지 확인하는 테스트
➡ 테스터가 동일한 시나리오로 다시 테스트하여 문제 해결 여부를 확인
💡 예제:
"결제 버튼을 눌렀을 때 오류 발생" 버그를 수정한 후, 다시 테스트하여 정상 작동하는지 확인
2️⃣ 리그레션 테스팅(Regression Testing)
➡ 버그 수정이 다른 기능에 영향을 주지 않았는지 확인하는 테스트!
➡ 새로운 코드 변경이 기존 기능을 망가뜨리지 않았는지 검증
💡 예제:
"결제 버튼 버그를 수정한 후, 기존 결제 수단(카드, 카카오페이, 네이버페이 등)도 정상적으로 동작하는지 추가 테스트!"