Verification and Validation
- Verification (검증):
- "우리가 올바른 방식으로 제품을 만들고 있는가?'
- 소프트웨어가 명세에 맞게 구현되었는지를 확인
- Validation (확인):
- "우리는 올바른 제품을 만들고 있는가?"
- 소프트웨어가 사용자의 요구사항을 충족하는지를 확인
- 차이점:
- Verification은 제품이 명세를 따르고 있는지 점검하는 과정
- Validation은 제품이 실제 사용자 요구를 충족하는지 평가하는 과정
- 두 과정 모두 소프트웨어가 목적에 적합한지 확신을 가지게 하는 것이 목적
Two Complementary Approaches
- Software Inspection (Static Verification)
- 요구사항 문서, 설계 다이어그램, 소스 코드 등을 분석하여 문제를 발견
- Software Testing (Dynamic Verification)
- 테스트 데이터를 이용하여 실제 실행을 통해 소프트웨어 동작 확인
Software Inspection
- 소스 코드 중심 검토
- 오류, 누락, 이상 여부를 확인
- 테스트보다 검토가 가지는 장점
- 테스트에서는 한 오류가 다른 오류를 숨길 가능성이 있음
- 불완전한 소프트웨어도 검토가 가능함
- 프로그램 결함뿐만 아니라 유지보수성, 표준 준수 여부도 평가 가능
- 검토 도입의 어려움
- 소프트웨어 개발 조직에서 공식적인 검도 절차 도입이 어려움
- 기존 테스터들이 검토 방식에 대한 효과성을 믿지 않는 경우가 있음
- 관리자의 경우 초기 검토 비용이 부담스러워 보일 수 있음
The Inspection Process
- 초기 개념
- 역할: 저자(Author), 낭독자(Reader), 테스터(Tester), 진행자(Moderator)
- 검토 방법: 코드 한 줄 한 줄을 검토하는 팀 기반 방식
- 검토 절차
- 1. 계획(Planning): 검토 팀 구성 및 문서 준비
- 2. 개요 설명(Overview): 저자가 프로그램의 목적 설명
- 3. 개별 준비(Individual Preparation): 팀원들이 각자 오류 탐색
- 4. 검토 회의(Inspection Meeting): 결함 분석, 개선 방향 논의 (2시간 이내)
- 5. 수정(Rework): 저자가 문제를 해결
- 6. 후속 조치(Follow-up): 수정된 코드 검토 및 승인
- 검토 체크리스트
- 데이터 오류: 모든 변수가 초기화되었는가?
- 제어 오류: 모든 루프가 종료되는가?
- 인터페이스 오류: 함수의 매개변수 개수 및 타입이 일치하는가?
- 메모리 관리 오류: 동적 메모리가 적절히 할당/해제되는가?
Lightweight Code Review
1. Over-the-Shoulder:
- 개발자가 다른 개발자의 어깨너머로 코드 리뷰
- 장점: 도구 불필요, 단순
- 단점: 기록 없음, 비효율적
2. Email Pass-Around:
- 코드 변경사항을 이메일로 공유하고 피드백 받음
- 장점: 원격 협업 가능
- 단점: 추적 불가, 리뷰가 흐지부지될 가능성 높음
3. Tool-Based Review:
- 코드 리뷰 지원 도구 사용 (예: Coverity)
- 장점: 자동화된 기록 및 분석 가능
- 단점: 추가 학습 필요, 비용 발생 가능
4. Pair-Programming:
- 두 명의 개발자가 한 키보드와 모니터를 사용해 개발
- 장점: 높은 코드 품질
- 단점: 많은 시간 소요, 일부 개발자가 선호하지 않음
Static Analysis and Formal Methods
- 정적 분석 (Static Analysis)
- 프로그램을 실행하지 않고 코드의 잠재적 오류를 탐색하는 도구 활용
- 대표적인 도구: Lint, Coverity, CCured, Introspector 등
- C 언어의 경우, 포인터 관련 오류 및 타입 검사를 강화할 필요가 있음
- 정적 분석 체크 항목
- 데이터 오류: 초기화되지 않은 변수, 사용되지 않는 변수
- 제어 오류: 도달할 수 없는 코드, 루프 내 무조건 분기
- 인터페이스 오류: 매개변수 타입 불일치, 사용되지 않는 함수
- 공식 방법 (Formal Methods)
- 수학적 모델과 논리적 증명을 이용해 소프트웨어의 정확성을 보장
- 사용 예: 정형 명세(Formal Specification), 정형 검증(Formal Verification)
- 비용이 높고, 실제 요구사항과 다를 수 있는 한계점 존재
728x90
'Computer Science > Software Engineering' 카테고리의 다른 글
[Software Engineering] Testing Techniques (0) | 2025.02.19 |
---|---|
[Software Engineering] Software Testing (0) | 2025.02.18 |
[Software Engineering] People Management (0) | 2025.02.16 |
[Software Engineering] Agile Software Development (0) | 2025.02.14 |
[Software Engineering] Process Improvement: CMMI (0) | 2025.02.12 |