본문 바로가기
Computer Science/Software Engineering

[Software Engineering] Verification and Validation

by __K.Jun__ 2025. 2. 17.

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