..PAGE:1위험천만 테스팅도서스터디 서평..PAGE:2리스크와 테스팅“리스크가 없으면 테스트도 없다(No risk, no test!)”리스크는 미래에 부정적 결과로 끝날 수 있는 요소영향도(impact)와 발생가능성(likelihood)로 표현됨리스크가 높은 부분은 강도를 높이고 리스크가 낮은 부분은 적절한 수준으로 테스트함조직에서는 SW를 테스트할 때 중요한 포인트를 고려해 테스팅함그러나 그 ‘중요성’이 프로젝트 이해관계자마다 다름이해관계자의 의견을 반영할 적절한 장치가 부족해 실제 테스트 시 원래 의도와 다르게 테스팅이 진행됨리스크 기반 테스팅(risk-based testing)은 개발 프로젝트 초기부터 제품 리스크 수준을 낮추고 이해관계자에게 리스크 상태 정보를 제공하는 테스트 접근법임..PAGE:3리스크 기반 테스트 전략(1)분석된 리스크는 다음과 같은 테스팅 활동의 depth를 결정하는데 활용함사용할 테스트 설계 기법 결정테스트 수행범위 결정심각한 결함을 조기에 발견하기 위한 테스트의 우선순위 결정테스트 일정 변경에 따른 테스트 계획 변경테스트와 연관되지는 않지만 리스크를 줄이기 위해 필요한 활동(예를 들면, 경험이 적은 개발 설계자에게 교육훈련을 제공할지를 결정개발 또는 품질 관련 교육을 제공할 대상의 적절한 결정(예를 들면, 리스크가 높은 부분을 맡은 개발자 대상으로 코딩 규칙을 교육)..PAGE:4리스크 기반 테스트 전략(2)분석된 리스크를 기반으로 다음과 같은 요소를 고려해 리스크 기반 테스트 전략을 수립함테스트 설계 기법테스트 종료조건(exit criteria(테스트 베이시스 / 설계 리뷰(경험과 스킬을 고려한) 인력 배치재테스팅(re-testing)리그레션 테스팅(regression testing)테스트 제어(test control), 리포팅(reporting)테스팅의 독립성 수준통합 절차(integration procedure)필수/선택적 표준테스트 환경(test environment)테스트 자동화(test automation)중간 산출물의 재사용성테스트 측정과 메트릭(test measure and metrics)인시던트(또는 결함) 관리(incident(or defect) management)..PAGE:5하위 레벨 테스트에서의 테스트 우선순위(단위/통합 테스트)2143사업적 영향도(Impact)기술적 장애 가능성(Likelihood)..PAGE:6하위 레벨 테스트에서의 테스트 설계 기법(단위/통합 테스트)2143사업적 영향도(Impact)기술적 장애 가능성(Likelihood)· 공식적 테스트 설계· 경계값 분석· 구문 커버리지 90%· 강도높은 코드 인스펙션· 구문 커버리지 70%· 페어(Pair) 인스펙션· 기회되면 자유롭게 테스팅· 구문 커버리지 70%..PAGE:7상위 레벨 테스트에서의 테스트 우선순위(시스템/인수 테스트)3142사업적 영향도(Impact)기술적 장애 가능성(Likelihood)..PAGE:8상위 레벨 테스트에서의 테스트 설계 기법(시스템/인수 테스트)3142사업적 영향도(Impact)기술적 장애 가능성(Likelihood)· 유즈케이스 테스팅(대안 흐름 포함)· 결정 테이블 테스팅· 경계값 분석· 페어와이즈 테스팅· 유즈케이스 테스팅(기본 흐름만)· 동등 분할· 유즈케이스 테스팅(기본 흐름만)· 유즈케이스 테스팅(대안 흐름 포함)· 동등 분할..PAGE:9테스팅 관련 프로젝트 리스크 점검항목(1)점검항목확인에 필요한 관련 질문제품 크기· 프로그램, 파일, 트랜잭션의 숫자로 제품의 크기를 추정하는가?· 제품 사용자 수는 얼마인가?· 재사용된 소프트웨어의 양은 얼마나 되는가?비즈니스 영향· 이 제품의 효과가 회사의 이익에 얼마나 기여하는가?· 이 제품의 가시성은 어느 정도인가?· 이 제품의 고객 니즈와의 일치성은 어느 정도인가?· 고객 인도 일정은 적절한가?· 이 제품과 상호 운용될 다른 제품이나 시스템의 수는 적절한가?· 인도 지연에 따라 발생하는 비용은 어느 정도인가?· 결함있는 제품 납품으로 인한 결함 수정비용은 어느 정도인가?고객· 고객이나 개발자와의 개별적 의사소통이 아닌 단일화된 의사소통 채널이 있는가?· 과거에 동일한 고객과 함께 프로젝트를 추진한 경험이 있는가?· 고객의 제품 분야에 대한 지식의 정도와 수준은 어느 정도인가?· 고객이 프로젝트 관련 미팅에 자발적으로 잘 참여하는가?· 고객이 테스트 프로세스를 잘 이해하고 있는가?테스트 프로세스· 프로젝트에서 사용될 테스트 프로세스나 방법론이 존재하는가?· 테스트 엔지니어가 프로세스에 동의하고 적극적으로 활용하는가?· 테스트 프로세스나 방법론이 리스크 기반 테스트 전략 수립에 대해 적절히 다루고 가이드 하는가?· 프로젝트 관련자에게 적절한 테스트 프로세스 및 방법론 교육을 제공하는가?· 리뷰 회의가 진행되고 그 결과 기록을 공유하는가?· 프로젝트 전체에 걸쳐 적절한 형상관리가 이뤄지는가?· 프로젝트 목표에 도달할 수 있는 테스트 가이드가 존재하는가?· 테스팅과 리뷰를 통해 발견된 정보(결함, 리스크 등)가 개발 프로젝트에 잘 반영되는가?..PAGE:10테스팅 관련 프로젝트 리스크 점검항목(2)점검항목확인에 필요한 관련 질문기술적· 완성도 높은 요구사항을 정의하는데 문제는 없는가?· 제약조건이 있다면 요구사항이 수용되는 범위와 정도는 어떠한가?· 설계, 코드, 테스트의 품질은 어떠한가?· 아직 적용해보지 않았던 신기술을 도입할 예정인가?· 프로젝트 수행시 새로운 도구(솔루션)를 도입할 예정인가?· 고객의 테스트 요구사항 만족을 위해 특정한 기술이 필요한가?· 테스트 방법론의 사용을 요구하는가?테스팅 환경· 테스트 수행에 필요한 테스트 환경이 적절히 지원되는가?· 결함 관리 툴을 비롯해 테스팅 관련 도구를 이용할 수 있는가?· 도구 사용과 관련해 교육 및 가이드 등의 적절한 지원이 이뤄지는가?· 테스팅이 용이하도록 자동화 테스팅 도구 등 자원의 지원과 분배가 적절하게 이뤄지는가?테스팅 조직· 프로젝트에 적절한 테스트 엔지니어가 가용한가?· 해당 테스트 엔지니어가 적절한 기술을 보유하고 있는가?· 테스트 엔지니어가 자신의 요구(needs)를 전달하는데 있어서 문제는 없는가?· 신입 테스트 엔지니어를 가이드할 수 있는 숙련된 기술자와 관련 체계가 있는가?· 다양한 테스트 활동 수행에 필요한 교육 및 훈련이 지원되는가?· 프로젝트 수행 중 담당자의 교체가 빈번하게 발생하는가?· 테스트 엔지니어가 이해관계자와 테스트 결과에 대해 의사소통하는데 이슈사항은 없는가?· 테스팅과 리뷰를 통해 파악된 정보가 개발 프로젝트에 잘 반영되는가?공급자· 공급자인 제3자 협력업체의 역할 수행에 문제는 없는가?· 제3자 협력업체와의 계약상 이슈사항은 없는가?· 제3자 협력업체의 테스트 프로세스나 방법론, 테스트 조직이 프로젝트 수행에 적절한 수준인가?..PAGE:11구글의 리스크 기반 테스트: ACC 기법(1)Attribute : 시스템의 목적과 목표를 설명하는 형용사해당 제품이 사용자와 비지니스에 왜 중요한가?왜 우리가 이것을 만들고 있는가?이 제품이 출시되면 그 중심 가치는 무엇인가?위 사항에 대해 설명하는 것이 아닌 단순 명기한다.크롬의 Attribute는 ‘빠른, 안전한, 안정적인, 세련된’..PAGE:12구글의 리스크 기반 테스트: ACC 기법(2)Component : 시스템의 여러 부분과 기능을 일컫는 명사컴포넌트는 너무 자세할 경우 큰 숲을 볼 수 없기 때문에 적절한 수여야 한다. 보통은 10개 정도의 컴포넌트로 쪼개는 것이 좋다. 자잘한 것들은 언급하지 않아도 된다.구글 사이트의 컴포넌트를 예로 들면 다음과 같다.Nav Bar, Sitemap, Settings, Page view, Audit trail, Search…
개발자에게 품질을 높이기 위해 무엇을 하냐고 물으면 ‘테스팅’이라고 주로 대답하는데 테스팅이 품질은 아니다. 품질은 녹아 들어가는 것이기 때문에 개발자의 또 다른 업무이다. 테스터가 개발자의 보조라는 생각을 가지는 순간 SW제품에는 심각한 결함을 가져올 수 있다. 테스팅에 대해 많이 생각하지 않고, 테스팅을 쉽게 생각하고, 결국에는 더 적은 테스팅을 하게 될 것이다. 세차 업체에서 내 차를 세차해준다면 사람들은 스스로 세차를 할 수 있지만, 세차 업체에서 내 차를 청소해 주면 아무것도 안 하고 있게 된다. 개발자가 신경 쓰지 않아도 되도록 테스팅이 진행되고 있다면 개발자는 테스팅에 대해 아예 생각을 안 할 것이다. 개발자도 테스팅에 대해 고려를 해야만 한다. 특정 팀에서만 테스팅을 한다면 품질을 그 팀의 책임으로 쉽게 돌려버릴 수 있을 것이다. 포커스가 제품에 있지 않으면 제품이 고통받는다.