소프트웨어 품질이란?
소프트웨어 품질은 명시적·묵시적 요구사항을 충족시키는 소프트웨어의 특성 총체입니다. 정보처리기사에서는 ISO 품질 모델, 테스트 전략, 품질 메트릭이 출제됩니다.
ISO/IEC 25010 (SQuaRE)
소프트웨어 제품 품질 특성을 8가지로 분류합니다.
- 기능 적합성(Functional Suitability): 요구 기능을 얼마나 충족하는가
- 성능 효율성(Performance Efficiency): 자원 사용 대비 성능
- 호환성(Compatibility): 다른 제품과의 공존·상호운용성
- 사용성(Usability): 사용자가 쉽고 효과적으로 사용 가능한 정도
- 신뢰성(Reliability): 특정 조건에서 지정 기간 동안 정상 기능 유지
- 보안성(Security): 무결성, 기밀성, 인증, 부인방지
- 유지보수성(Maintainability): 수정의 용이성
- 이식성(Portability): 다른 환경으로의 이전 용이성
코드 복잡도 메트릭
McCabe의 순환 복잡도 (Cyclomatic Complexity)
- 제어 흐름 그래프에서 독립 경로 수 측정
- 공식: V(G) = E – N + 2P (E: 간선, N: 노드, P: 연결 성분)
- 단순화: 의사결정 포인트(if, while, for, case) 수 + 1
- 복잡도 1~10: 단순, 11~20: 중간, 21~50: 복잡, 50 이상: 테스트 불가 수준
기타 코드 메트릭
- LOC(Lines of Code): 코드 줄 수 (단순하지만 널리 사용)
- 팬인(Fan-in): 특정 모듈을 호출하는 모듈 수 (높을수록 재사용성 높음)
- 팬아웃(Fan-out): 특정 모듈이 호출하는 모듈 수 (높을수록 의존성 높음)
테스트 커버리지
- 구문(Statement) 커버리지: 모든 구문이 최소 1번 실행. 가장 약한 기준
- 결정(Decision/Branch) 커버리지: 모든 분기(참/거짓)가 최소 1번 실행
- 조건(Condition) 커버리지: 각 조건식이 참/거짓 모두 실행
- MC/DC: 조건·결정 커버리지 조합. 항공 소프트웨어 요구 기준
- 경로(Path) 커버리지: 모든 실행 경로 테스트. 가장 강한 기준
기술 부채 (Technical Debt)
단기 이익을 위해 최선이 아닌 선택을 한 결과로 발생하는 추가 작업 비용. 방치 시 이자(유지보수 비용)가 증가합니다.
- 의도적 기술 부채: 일정 압박으로 알면서 타협
- 비의도적 기술 부채: 지식 부족이나 요구사항 변경으로 발생
- 리팩토링으로 해소
코드 인스펙션과 리뷰
- 인스펙션(Inspection): 공식적인 정적 검토. 역할(모더레이터, 작성자, 검토자) 분담
- 워크스루(Walkthrough): 작성자가 설명하고 그룹이 검토. 비공식적
- 동료 검토(Peer Review): 코드 리뷰. 현재 가장 일반적
시험 핵심 포인트
- ISO 25010 품질 특성 8가지 암기 (FPCU RSMP)
- 맥케이브 순환 복잡도: 의사결정 수 + 1
- 테스트 커버리지 강도: 구문
- 팬인 높음 = 재사용성 높음 / 팬아웃 높음 = 의존성 높음
마무리
소프트웨어 품질 파트는 계산 문제(순환 복잡도)와 개념 정의 문제가 함께 출제됩니다. ISO 25010 품질 특성은 영문 약어와 함께 암기하면 시험장에서 빠르게 답을 고를 수 있습니다.