소프트웨어 공학 Lecture #11: 품질 보증 최은만 저 6차 개정판 1
학습 목표 소프트웨어 품질 품질 측정 방법 품질 보증 활동 확인 및 검증 기법 프로세스 개선 품질 보증 도구
객체지향 기술 소프트웨어 품질 보증(software quality assurance) 개별 작업과 병행하여 품질에 관한 작업, 즉 표준을 정하고, 품질을 보증하는 작업, 품질 표준에 맞는지 체크하는 작업이 이루어져야 함 보호활동(umbrella activity) 프로젝트 관리, 문서화, 품질 보증 등의 작업 품질 보증(quality assurance) 소프트웨어 프로젝트의 프로세스와 프로덕트에 대한 품질을 관리하고 향상시키는 작업 품질 관리(quality control) 생산된 제품이 요구사항에 부합되는지를 확인하고 잘못되었을 때 원인을 규명하여 설계나 생산 및 조립 방법을 수정
11.1 소프트웨어 품질 소프트웨어 품질 복합적인 요소가 포함된 다중 개념(multi-dimensional concept) 소프트웨어를 사용하는 관점, 개발하는 관점, 발주하는 관점 모두 중요하게 생각하는 품질 특성이 다름
품질의 의미 넓은 범주에서 보면 고객만족의 차원으로 생각 좁은 의미에서 보면 개발자의 입장으로 국한 개발자가 생각하는 품질 : 소프트웨어가 요구를 만족하느냐 못하느냐
품질 속성 소프트웨어 품질 속성(quality attribute) 소프트웨어 품질 관련 측면을 나타내고 특징짓는 속성
품질 속성 소프트웨어의 품질의 특성은 세가지 차원이 존재 품질 요소(factor) : 사용자에 의한 외부 관점 품질 기준(criteria) : 개발자 측면의 내부 관점 메트릭 차원 : 품질을 제어
품질 속성 ISO/IEC 9126 ISO와 IEEE에서는 품질 속성의 계층을 다르게 정의 소프트웨어가 가질 수 잇는 여러 가지 품질 특성을 정의 ISO에서는 여섯 가지의 품질 특성을 정의 ISO와 IEEE에서는 품질 속성의 계층을 다르게 정의
품질 속성 신뢰성(reliability) – 소프트웨어에 요구된 기능을 명시된 조건 하에 실행하여 정확하고 일관성 있는 결과를 생성하는 능력 강인성(robustness) – 소프트웨어에 요구된 기능을 어렵거나 예외적인 환경에서 수행할 능력 효율성(efficiency) – 소프트웨어에 요구된 기능을 최소의 시간과 자원을 사용하여 원하는 결과를 생성하는 능력 상호운용성(interoperability) – 소프트웨어가 다른 소프트웨어와 정보를 교환하는 능력 유지보수성(maintainability) – 소프트웨어가 수리 및 진화될 수 있는 성질
품질 속성 테스트가능성 – 소프트웨어에 요구된 또는 적용될 수 있는 모든 형식의 평가 인스펙션, 동료검토, 화이트박스 테스팅, 블랙박스 테스팅 등 이식성(portability) – 소프트웨어가 여러 운영 환경 및 플랫폼에서 실행될 수 있도록 변형이 가능한 성질 재사용성(reusability) – 소프트웨어가 확장이나 커스텀화 없이 유사한 또는 다른 배경에서 사용될 수 있는 성질 모듈성(modularity) – 소프트웨어가 모듈 컴포넌트의 통합이나 조정을 쉽게 만드는 성질
소프트웨어 유형과 품질 소프트웨어 유형에 따른 품질 특성 중요도의 차이
11.2 품질 측정과 메트릭 소프트웨어 측정(software measurement) 소프트웨어 속성의 객관적이고 정량적인 평가 소프트웨어 메트릭(software metric) 표준화된 소프트웨어 측정 방법
품질 측정과 메트릭의 유용성 품질 측정과 메트릭 지표의 정의와 사용 중요한 부분에 자원을 투입 요구분석, 설계, 구현, 문서화가 포함된 소프트웨어의 정량적인 평가 지표의 정의와 사용 지표 – 상대적 의미가 있는 값의 범위 중요한 부분에 자원을 투입 유사 프로젝트와 시스템을 정량적으로 비교 개선의 정량적인 평가 기술의 객관적인 평가 프로세스 개선의 객관적인 평가
전통적인 품질 메트릭 전통적인 품질 메트릭의 일부
전통적인 품질 메트릭 전통적인 품질 메트릭의 일부
전통적인 품질 메트릭 요구 메트릭(R) 요구의 비모호성(unambiguity) 요구 완전성 메트릭 – 요구 명세서에 기술된 시스템의 상태와 시스템에 대한 외부자극이 완전하다는 가정에 근거 SRS – 시스템의 모든 가능한 상태와 모든 가능한 외부자극을 포함 f함수가 완벽하게 매핑된다면 SRS는 완벽한 것으로 간주
전통적인 품질 메트릭 설계 메트릭 모듈 설계 복잡도(mdc(M)) 선택 복잡도(S0) M0-M7 – 모듈 화살표 – 모듈 호출 다이아몬드 화살표 – 분기 호출 모듈 설계 복잡도(mdc(M)) mdc(M) = d + 1 d : M이 가진 다이아몬드의 수 다이아몬드 : 이진 조건의 분기 선택 복잡도(S0) S0(leaf) = 1, 각 단말 노드는 하나의 서브트리 S0(M) = 𝒊=𝟏 𝒏 𝑺𝟎 𝑴 𝒊 +𝒎𝒅𝒄(𝑴) M : 𝑴 𝒊 (i=1,2,…n) 모듈들을 호출
전통적인 품질 메트릭 M4~M7의 S0 = 1 M1 모듈복잡도 모듈 설계 복잡도 모두 단말 노드 S0(M1) = S0(M4)+S0(M5)+mdc(M1) = 1+1+1 =3 M1은 분기가 없기 때문에 mdc 값이 1 모듈 설계 복잡도 S0(M) = 𝑵 𝒅𝒎 + 𝑵 𝒂𝒅𝒃 𝑵 𝒅𝒎 : 모듈의 개수 𝑵 𝒂𝒅𝒃 : 선택적 모듈을 호출하는 분기의 수
전통적인 품질 메트릭 구현 및 시스템 메트릭 구현 메트릭 시스템 메트릭 LOC 메트릭 : 원시코드의 줄을 세는 것 싸이클로매틱 복잡도 메트릭 : 프로그램을 통과하는 독립된 경로의 개수이며 필요한 테스트의 횟수 시스템 메트릭 신뢰도 메트릭 MTBF = MTTF + MTTR MTBF(Mean Time Between Failure) : 고장 사이의 평균 시간 MTTF(Mean Time To Failure) : 고장 까지의 평균시간 MTTR(Mean Time To Repair) : 수리 평균시간
객체지향 소프트웨어의 품질 메트릭 Chidamber & Kamerer의 메트릭 클래스 당 가중 메소드(Weighted Method per Class) WMC(C) = 𝑪 𝒎𝟏 + 𝑪 𝒎𝟐 +…+ 𝑪 𝒎𝒏 𝑪 𝒎𝒏 , i=1,2,..n : 클래스 C에 있는 메소드의 복잡도 자식 노드의 개수(Number of Children) 해당 클래스의 상속 구조에서 직계 자식 클래스의 수 NOC(C) = |{C’:C’는 C의 직계 자식 클래스}| NOC=0 : Point, Square, LinkNode, PolygonNode NOC=1 : Rectangle, Triangle NOC=2 : Polygon
객체지향 소프트웨어의 품질 메트릭 상속 트리의 깊이(Depth of Inheritance Tree) 상속 트리의 루트로부터 해당 클래스까지 가장 싶은 상속 경로 DIT(C) = 0, 부모 클래스가 없는 경우 DIT(C) = 1+max({DIT(C’): C’ 는 해당 클래스의 직계 부모 클래스}) DIT=0 : Point, Polygon, LinkListNode, PolygonNode 클래스 DIT=1 : Rectangle, Triangle 클래스 DIT=2 : Square 클래스
객체지향 소프트웨어의 품질 메트릭 객체 클래스 사이의 결합(Coupling Between Object Classes) 해당 클래스가 의존하고 있는 클래스의 개수 CBO(C) = |{C’:C 클래스가 C’ 클래스에 의존함}| 의존 관계 : 상속과 집합 관계를 포함 CBO=0 : CBO=1 : Point와 Polygon 클래스 사이 CBO=2 : Polygon은 Point와 LinkListNode 영향을 받음 CBO=3 : LinkListNode는 자기 자신과 Polygon, PolygonNode의 영향 을 받음 CBO가 클수록 이해하고, 테스트하고, 유지보수 및 재사용이 어렵다
객체지향 소프트웨어의 품질 메트릭 클래스의 책임(Response for a Class) 클래스의 메소드 개수 + 그 클래스의 메소드가 호출하는 메소드의 개수 RFC(C) = |{m:m은 클래스의 메소드 또는 C클래스의 메소드에 의하여 호출되는 메소드 m}| 메소드 응집 결핍(Lack of Cohesion in Methods) 해당 클래스의 속성을 공유하지 않는 메소드 쌍의 수 LCOM=n*(n-1)/2-2*|{ 𝒎 𝒊 , 𝒎 𝒋 ): 𝒎 𝒊 와 𝒎 𝒋 가 C의 속성을 공유한다}| n : 클래스C의 메소드 개수 LCOM값이 크면 클래스 안에 있는 요소들 사이에 공하는 속성이 없고 클래스가 모듈로써 응집도가 떨어진다
11.3 품질보증 활동 품질보증 프로세스와 표준의 정의 품질 관리 프로세스 개선 소프트웨어 제품이나 아이템이 정해진 요구에 적합하다는 것을 보장하는데 필요한 계획적이고 체계적인 활동 프로세스와 표준의 정의 품질 관리 프로세스 개선
품질 보증 조직 관리적 활동 개발 조직의 표준화 방법론을 잘 따르도록 하는 것 기술적 활동 방법론을 잘 정의하는 것
프로세스와 표준 정의 전체 조직을 위하여 소프트웨어 품질 보증을 위한 프레임워크를 개발 프로세스와 방법론의 정의 소프트웨어 개발, 품질 관리 프로세스 및 방법론의 정의 개발 주기 동안 품질보증 작업을 수행할 표준, 절차, 가이드라인의 정의 품질 측정과 평가를 위한 품질 메트릭, 지표 정의 프로세스와 방법론의 정의 전통적인 프로세스에서 필요한 품질보증 활동
프로세스와 표준 정의 품질보증 표준과 절차의 정의 품질보증 표준 품질보증 절차 기관의 장기 및 단기 목표와 품질 목표를 포함한 소프트웨어 공학 목표로부터 도출 ISO9001이나 IEEE품질 모델과 같은 품질 모델을 기초하여 정의 품질보증 절차 소프트웨어 검토 및 확인 절차와 소프트웨어 형상관리 절차를 정의하여 명확하게 문서화
프로세스와 표준 정의 메트릭과 지표의 정의 프로젝트의 프로세스와 프로덕트 측면을 측정하는데 사용될 메트릭 지표는 관리자와 개발팀이 프로세스 개선이 어떻게 진행되고 있는지 파악하는데 도움을 준다
품질관리 품질계획 품질 보증 계획(IEEE730) 각 프로젝트 초기에 이루어짐 목적 관리 표준과 관례 리뷰와 감리 형상관리 프로세스, 방법론, 도구, 기술 메트릭, 지표 품질 보증 계획(IEEE730)
품질관리 품질보증 제어 계획이 정확하게 실행되고 있는지 확인하는 것 개발자가 품질보증 활동을 수행하도록 도와주는 것 품질 관련 데이터를 모아 데이터베이스 사용하여 관리 관리자에게 프로세스 개선을 위한 제안을 하고 수용된 제안이 적절히 실현되고 프로세스에 녹아들었는지 확인
11.4 확인 및 검증 기법 확인(verification) 검증(validation) 품질 보증을 위한 검토 작업 프로덕트(소프트웨어)를 올바로 만들었는가? 검증(validation) 올바른 프로덕트(소프트웨어)를 만들었는가? 품질 보증을 위한 검토 작업
인스펙션 품질 개선과 비용 절감을 위한 기법으로 사용 프로덕트를 공통되는 오류, 변칙, 표준이나 관례의 부적합 리스트와 체크해 보는 작업 인스펙션 과정
워크스루 단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행 개발자가 포함된 기술 스텝들이 참석
동료 검토 프로덕트를 동료가 검토 모든 소프트웨어 프로젝트 결과물에 대하여 적용 사람이 판단할 필요가 있는 문제점을 파악하는데 효과적
11.5 프로세스 개선 CMM ISO의 SPICE
CMM 미래의 고객이 소프트웨어 공급업자가 어떤 점이 부족하며 어떤점이 강한지 발견하기 위하여 평가하는 기준 소프트웨어 개발자 스스로 프로세스 능력을 평가하고 개선의 방향을 설정하는 것
CMM CMM의 구조
ISO 9001 SPICE (Software Process Improvement and Capability dEtermination) 소프트웨어 프로세스 평가를 위한 구제 표준
11.6 품질보증 도구 정적분석도구 메트릭 도구
Questions?