오픈 스펙을 대상으로 한 테스트설계사례

26
오픈 스펙을 대으 한 테스트 계 Case Study : Case Study : Case Study : Case Study : TestCase TestCase TestCase TestCase Design with Open Design with Open Design with Open Design with Open Specification(FIDO Specification(FIDO Specification(FIDO Specification(FIDO) ) ) 2015.01 by JungGun home: genycho.blog.me

Upload: sangin-choung

Post on 07-Jan-2017

147 views

Category:

Software


2 download

TRANSCRIPT

Page 1: 오픈 스펙을 대상으로 한 테스트설계사례

오픈 스펙을 대상으로 한테스트 설계 사례Case Study : Case Study : Case Study : Case Study : TestCaseTestCaseTestCaseTestCase Design with Open Design with Open Design with Open Design with Open Specification(FIDOSpecification(FIDOSpecification(FIDOSpecification(FIDO))))

2015.01 by JungGunhome: genycho.blog.me

Page 2: 오픈 스펙을 대상으로 한 테스트설계사례

This is…테스트 케이스를 설계하는 일은

다양한 테스트 레벨에서 발생하고

각각에 따라 다른 목적, 형태의 결과물이 생성 됨

오픈 스펙으로부터 (RESTful) API에 대한

(블랙박스 기반) 테스트 설계 사례를 공유

상세 절차나 결과물보다는 접근방법(분석-리뷰-설계-리뷰-수행-리뷰) 이

다른 분들에게 참고가 되었으면...

Page 3: 오픈 스펙을 대상으로 한 테스트설계사례

FIDO?

Page 4: 오픈 스펙을 대상으로 한 테스트설계사례

프로젝트프로젝트프로젝트프로젝트 개요개요개요개요

- FIDO Alliance : http://fidoalliance.org/about

기존의 패쓰워드 기반 온라인 인증 방식을 생체정보를 기반으로 인증할 수 있는 기술

FIDO Alliance에서는 이를 위해 전세계적으로 통용될 수 있는 표준 스펙을 제공함

우리도 이 스펙을 기반으로 우리만의 FIDO(Fast IDentity Online) 기술을 구현

FIDO Alliance(Fast IDentity Online) FIDO Alliance

(Fast IDentity Online)

Open Specifications

구현 by A 회사

구현 by B 회사

구현 by 우리

… …

Page 5: 오픈 스펙을 대상으로 한 테스트설계사례

FIDO FIDO FIDO FIDO 아키텍처아키텍처아키텍처아키텍처- FIDO Server : 정의한 정책 및 DB 정보에 따라 앱별, 사용자별 인증 장비를 관리하고 인증을 수행

- FIDO Client : 사용자가 요청한 인증 정보를 FIDO Server에 전송하고 그 결과를 사용자에게 전달

- FIDO SDK(server, client) : FIDO server/client를 사용자가 사용(개발)할 수 있도록 제공해 준 개발

- Relying Party 서버/클라이언트(앱) : FIDO를 사용할 가상의 사용자 서버/클라이언트

- Authenticator-Specific Module (ASM) : 인증 장치와 인증 정보를 주고 받는 인터페이스 영역

FIDO Client(앱,apk)FIDO Client(앱,apk)

RPClient (테스트용앱)RPClient (테스트용앱)

FIDO ServerFIDO Server

RPServer (테스트용 서버)RPServer (테스트용 서버)RegistrationRegistration

Authentication(Transaction)

Authentication(Transaction)

FIDO protocols Web IDL

FIDO protocols? Web IDL ?

FIDO SDKFIDO SDKFIDO SDKFIDO SDK

REST API1133 1122

44 44

6655

11

DeRegistrationDeRegistration

ASM

※ 아키텍처 영역의 각 번호는 다음 장에 연결

Page 6: 오픈 스펙을 대상으로 한 테스트설계사례

어떤 테스트를강화할 것인가?

오픈 스펙으로표준 정의가 된

API 영역!

Page 7: 오픈 스펙을 대상으로 한 테스트설계사례

테스트테스트테스트테스트 단계단계단계단계 / / / / 아키텍처아키텍처아키텍처아키텍처 레벨에서의레벨에서의레벨에서의레벨에서의 테스트테스트테스트테스트 현황현황현황현황 파악파악파악파악

테스트테스트테스트테스트 단계단계단계단계 영역영역영역영역 위치위치위치위치 사용툴사용툴사용툴사용툴 정의정의정의정의 테스트테스트테스트테스트 수준수준수준수준

단위테스트

서버 [1] Junit작성한 단위 프로그램, 모듈 및 사용자 인터페이스 등에 대해단위 모듈 레벨에서 기능이 완전한지를 검증하는 테스트

우수

클라이언트 [1] Junit

API테스트

서버 [2]TestNG

SwaggerFIDO Server의 REST API에 대해 오픈 스펙 및 자체 정의한규약에 따라 요구된 기능을 만족하는지 검증하는 테스트

보완

필요

클라이언트 [3] JunitFIDO Client 앱에 정의된 각 API에 대해 요구된 기능을만족하는지 검증하는 테스트

보통

통합테스트

서버

S D K[4]

테스트용

RPServer구현

사용자가 FIDO SDK(소프트웨어 개발 키트)를 이용하여 FIDO Server와 연동하여 원하는 기능을 사용할 수 있는지 검증하기

위한 테스트

보통

클라이언트

S D K[4]

테스트용 앱구현

사용자가 FIDO SDK(소프트웨어 개발 키트)를 이용하여 FIDO Client 앱을 쉽게 사용할 수 있는지 검증하기 위한 테스트

보통

서버/클라이언

트 연동

[5],[6]

테스트용

RPServer, Client앱

FIDO Server/Client 전체 테스트를 위해 테스트용 사용자서버/클라이언트 앱을 만들고 정해진 사용 시나리오에 따라테스트를 수행

우수

※ 성능 테스트 등의 비기능 테스트는 포함하지 않음

Page 8: 오픈 스펙을 대상으로 한 테스트설계사례

FIDO FIDO FIDO FIDO 구성구성구성구성 ((((REST API)REST API)REST API)REST API)

No 구분구분구분구분1 ? API명명명명 설명설명설명설명 비고비고비고비고

1서버

20 Registration단말의 Secure Element에서 개인키, 공개키 생성 후 FIDO 서버에 공개키 등록

2 서버 8 Authentication 단말에서 생체인식 후 개인키/공개키를 이용하여 사용자 인증

3서버

22Transaction Confirmation

Authentication과 거의 유사하나, challenge값이 random이 아닌transaction data임ASM에서 제공하는 Secure Display로 display된 데이터를 사용자가confirm시 인증 수행

트랜잭션데이터 – 쇼핑몰,어떤물건,얼마에 샀는지를서버에서 추가로 확인해줌(데이터 조작 방지를 위해)

4서버

6 Deregistration 서버에 등록된 공개키와 Authenticator 내에 등록된 개인키 삭제

5 클라이언트 2 Discovery 단말에서 지원하는 Authenticator 검색

6 클라이언트 8 Registration단말의 Secure Element에서 개인키, 공개키 생성 후 FIDO 서버에 공개키 등록

7 클라이언트 8 Authentication 단말에서 생체인식 후 개인키/공개키를 이용하여 사용자 인증

8 클라이언트 8Transaction Confirmation

Authentication과 거의 유사하나, challenge값이 random이 아닌transaction data임ASM에서 제공하는 Secure Display로 display된 데이터를 사용자가confirm시 인증 수행

9 클라이언트 2 Deregistration 서버에 등록된 공개키와 Authenticator 내에 등록된 개인키 삭제

10 그외 Admin 기능

순번 시스템 설명

1 FIDO Client 앱(Android) 단말에 설치되며, RP App 및 ASM과 연동하여 FIDO operation 수행

2 FIDO Server Play Framework 기반의 데몬으로써 RP Server의 요청에 따른 FIDO operation 수행

3 FIDO Admin FIDO 관련 정보 및 정책 관리 모듈로써 CLI 형태로 동작

Page 9: 오픈 스펙을 대상으로 한 테스트설계사례

테스트 설계접근은 어떤 식으로

해야 할까?

오픈 스펙과반복적인

리뷰를 통해

Page 10: 오픈 스펙을 대상으로 한 테스트설계사례

수행수행수행수행 절차절차절차절차 개요개요개요개요

- Open Specfication 분석

- 테스트 설계

- 테스트 스크립트 작성(테스트 수행) 및 결과 리뷰

FIDO Open Specifications

분석분석

설계설계

구현 및 단위테스트구현 및 단위테스트

API/통합 테스트API/통합 테스트

스펙 리뷰, 테스트 요건 인터뷰

스펙 리뷰, 테스트 요건 인터뷰

테스트 설계테스트 설계

SoapUI 스크립트 작성

SoapUI 스크립트 작성

요건에 부합하는 제품 출시요건에 부합하는 제품 출시

개발 테스트인터뷰

검토

참조

Page 11: 오픈 스펙을 대상으로 한 테스트설계사례

상세상세상세상세 수행수행수행수행 절차절차절차절차

[ 테스트 케이스 ATS_RegRsp_003 ]서버에서 정의한 disallowed에 포함된 장비를 등록하려는 경우 에러가 발생하여야 한다[ REST API 호출 ]- URL BODY : http://70.30.160.97:9002/uaf/response/registration- 입력 파라미터. 장비 id : AA12#11CE. userName : soapui_testuser. App id : android:apk-key-hash:YHNHKiw[ 기대결과 ]에러코드 1492 Unacceptable Authenticator / 에러코드 1404 Not Found

[예]OpenSpecificationOpenSpecification 테스트 설계테스트 설계 SoapUI 테스트SoapUI 테스트

. API 관점에서 간이 스펙작성. 간이 스펙에 대해 개발팀과실제 구현내용과 비교하며리뷰. 구현 과정에서의 특이사항확인 및 현재 테스트하고 있는내용 확인

. 테스트 케이스 후보, 상세수행절차, 입력 데이터, 수행 결과 등에 대해 정리. 정리한 내용에 대해 개발팀과 리뷰(담당자 인터뷰). 리뷰한 내용 취합 후 개발팀전체에 공유, 피드백 요청. 테스트 케이스 작성

. 테스트 스크립트 작성(빠른시간 안에 수행하기 위해SoapUI 이용). Jenkins를 이용 테스트 자동수행 환경 구축. 결함 15건 개발팀과 리뷰

분석분석분석분석 설계설계설계설계 구현구현구현구현

Page 12: 오픈 스펙을 대상으로 한 테스트설계사례

1. 1. 1. 1. 간이간이간이간이 설계서설계서설계서설계서 작성작성작성작성- 테스트테스트테스트테스트 요건요건요건요건을 도출하기 위해서 개발개발개발개발 요건요건요건요건을 분석한다.

- 산출물이 없는 경우 커뮤니케이션을 위한 간이설계서 등을 작성한다

대상대상대상대상 API : API : API : API : RegistraionRegistraionRegistraionRegistraion대상대상대상대상 API : API : API : API : RegistraionRegistraionRegistraionRegistraion

API API API API 개요개요개요개요API API API API 개요개요개요개요

Server, Server, Server, Server, ClinetClinetClinetClinet 간의간의간의간의시퀀스시퀀스시퀀스시퀀스 다이어그램다이어그램다이어그램다이어그램 파악파악파악파악

Server, Server, Server, Server, ClinetClinetClinetClinet 간의간의간의간의시퀀스시퀀스시퀀스시퀀스 다이어그램다이어그램다이어그램다이어그램 파악파악파악파악

Operation Operation Operation Operation 설명설명설명설명((((로직로직로직로직))))Operation Operation Operation Operation 설명설명설명설명((((로직로직로직로직))))

데이터데이터데이터데이터 정의정의정의정의데이터데이터데이터데이터 정의정의정의정의

Page 13: 오픈 스펙을 대상으로 한 테스트설계사례

2. 2. 2. 2. 인터뷰인터뷰인터뷰인터뷰 준비준비준비준비

- 테스트 요건들을 빨간색, 메모 등으로 기록했다가 개발팀과 해당 항목에 대해 인터뷰를

수행한다. 이해한 내용이 맞는지, 실제 구현은 어떻게 됐는지, 어떻게 테스트해야 하는지,

현재 테스트는 어떻게/ 어떤 수준으로 하고 있는지 확인한다

OpenSpecificationOpenSpecificationOpenSpecificationOpenSpecificationOpenSpecificationOpenSpecificationOpenSpecificationOpenSpecification 테스트테스트테스트테스트 요건요건요건요건 도출도출도출도출테스트테스트테스트테스트 요건요건요건요건 도출도출도출도출 인터뷰인터뷰인터뷰인터뷰인터뷰인터뷰인터뷰인터뷰

시퀀스시퀀스시퀀스시퀀스 다이어그램다이어그램다이어그램다이어그램시퀀스시퀀스시퀀스시퀀스 다이어그램다이어그램다이어그램다이어그램

구현구현구현구현 로직로직로직로직구현구현구현구현 로직로직로직로직

데이터데이터데이터데이터 항목항목항목항목 정의정의정의정의데이터데이터데이터데이터 항목항목항목항목 정의정의정의정의

Page 14: 오픈 스펙을 대상으로 한 테스트설계사례

주어진 요건(오픈스펙)을1차 분석하고 추가 확인사항과테스트케이스 후보를 도출하여

개발팀과 인터뷰

잘못된 정보 제거,수행 로직, 수행결과 파악,테스트 케이스 후보 추가

Page 15: 오픈 스펙을 대상으로 한 테스트설계사례

※※※※ 테스트테스트테스트테스트 요건요건요건요건 분석분석분석분석 및및및및 케이스케이스케이스케이스 도출도출도출도출 예예예예

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: Protocol 버전이 없는 경우 기대한 에러가 발생하는가?

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: 필수 필드가 누락된 경우 기대한 에러가 발생하는가?

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: appID, challenge 값등이 최초 요청한 값과 동일하지 않은 경우 기대한 에러가 발생하는가?

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: 클라이언트가 요청한 AAID 가 정책에 맞지 않는 AAID일 때 서버단에서 기대한 동작을 하는가?

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: 헤더의 op 값이 정해진 값이 아닌 경우 기대한에러가 발생하는가?

테스트테스트테스트테스트 케이스케이스케이스케이스 후보후보후보후보: 필수 입력인 사용자 이름이 없거나, 공백문자가 입력되거나, 128바이트를 넘는 경우 기대한에러가 발생하는가?

데이터데이터데이터데이터 정의정의정의정의데이터데이터데이터데이터 정의정의정의정의

Operation Operation Operation Operation 설명설명설명설명((((로직로직로직로직))))Operation Operation Operation Operation 설명설명설명설명((((로직로직로직로직))))

Page 16: 오픈 스펙을 대상으로 한 테스트설계사례

3. 3. 3. 3. 인터뷰인터뷰인터뷰인터뷰 수행수행수행수행

- 개발 팀과 상세 리뷰

테스트 케이스 후보: Protocol 버전이 없는 경우 기대한 에러가 발생하는가?테스트 케이스 후보: 필수 필드가 누락된 경우 기대한 에러가 발생하는가?

테스트 케이스 후보: appID, challenge 값등이 최초 요청한 값과 동일하지 않은 경우 기대한 에러가 발생하는가?테스트 케이스 후보: 클라이언트가 요청한 AAID 가 정책에 맞지 않는AAID일 때 서버단에서 기대한 동작을 하는가?테스트 케이스 후보: 헤더의 op 값이 정해진 값이 아닌 경우 기대한 에러가 발생하는가?테스트 케이스 후보: 필수 입력인 사용자 이름이 없거나, 공백문자가입력되거나, 128바이트를 넘는 경우 기대한 에러가 발생하는가?

기존 테스트수행여부,

방법, 위치정보

발생가능성

발생시영향 정도

Exception 발생하도록 개발

완료 및 테스트 코드작성 완료

하 하

개발 및 테스트 코드작성 완료

중 하

개발 및 테스트 코드작성 완료

상 상

개발 및 테스트 코드작성 완료

하 하

개발 및 테스트 코드작성 완료

하 하

개발 및 테스트 코드작성 완료

중 하

전체 중 일부(예)

Page 17: 오픈 스펙을 대상으로 한 테스트설계사례

이런 리뷰 활동에 대한개발팀의 반응은?

예상 이상의만족도

Page 18: 오픈 스펙을 대상으로 한 테스트설계사례

※※※※ 개발팀과개발팀과개발팀과개발팀과 ROI ROI ROI ROI 포함포함포함포함 회고회고회고회고

- 테스트 지원 인력은 API당 평균 35개의 테스트 요건을 추출

(예: 등록API - 기본흐름 3개, 대안흐름 3개, validation 28개, 동시성 1개)

- (*)3자 검토에 대한 정성적 효과가 있는지 협의

(* 동일한 요건에 대해 다른 관점(품질)에서 동일 요건을 검토하여 협업하는 방법)

테스트 전문인력

개발 팀과중복 작업이 아닌지?

스펙 분석의어려움(시간)..

테스트 쪽의가용한 리소스는?

의미있는분석인지(중요도)?

전체적으로 이런 검토를 해 주는 것만도의미가 있고,검토해서 한 개라도 개발팀에서 놓친 건들을 찾기만 해도 큰 도움이 될 것 같다

개발팀 내에 개인개인이 알던 내용이개발팀 전체에 공유되어 의사소통이 개선된다

개발 초기부터 이렇게 같이 봐줬으면 좋았을 거 같다

Page 19: 오픈 스펙을 대상으로 한 테스트설계사례

테스트 상세 설계와테스트 수행

Page 20: 오픈 스펙을 대상으로 한 테스트설계사례

4. 4. 4. 4. 테스트테스트테스트테스트 설계설계설계설계

인터뷰인터뷰 테스트 설계테스트 설계

Page 21: 오픈 스펙을 대상으로 한 테스트설계사례

5. 5. 5. 5. 테스트테스트테스트테스트 스크립트스크립트스크립트스크립트 작성작성작성작성 및및및및 수행수행수행수행

테스트 설계테스트 설계 SoapUI 스크립트 작성및 수행

SoapUI 스크립트 작성및 수행

Page 22: 오픈 스펙을 대상으로 한 테스트설계사례

6. 6. 6. 6. 테스트테스트테스트테스트 수행수행수행수행 결과결과결과결과((((의견의견의견의견) ) ) ) 리뷰리뷰리뷰리뷰

(결과 정리 일부)

- 서버-클라이언트 연동 테스트를 위한 MockClient를 짧은 기간에 구현하다 보니 일부

테스트 케이스는 수행하지 못함

- 기능 상의 오류는 없었으나 일부 적합한 에러코드가 아닌 다른 에러코드가 발생하는

경우가 있음(예: 등록이 허용되지 않는 장비로 등록 시도 시

기대한 [1492 Unacceptable Authenticator]가 아닌 [1404 Not Found] 가 발생)

- 전체 결함은 17건(중복 9건)은 오프라인 결함 리뷰 후 정리하여 조치 중

- FIDO Server RestAPI의 에러코드가 상세히 정의되어 있지 않아 현재

에러코드만으로는 에러 원인을 알기 어려운 경우가 있음. 에러코드를 더 정의하거나

하위에 별도 에러코드 체계를 가져가야 할 것으로 보임

(예: 다양한 비정상 상황에 대해 다음과 같이 포괄적인 의미의 에러코드 발생 - 1500

Internal Server Error, 1496 Unacceptable Attestation, 1400 Bad Request, 1491

Request Invalid 등)

Page 23: 오픈 스펙을 대상으로 한 테스트설계사례

전하려는메시지

Page 24: 오픈 스펙을 대상으로 한 테스트설계사례

테스트테스트테스트테스트 설계에설계에설계에설계에 대한대한대한대한 메시지메시지메시지메시지

테스트 설계에서 가장 중요하다고 생각하는 것

Test Basis Test Basis Test Basis Test Basis 분석분석분석분석

테스트테스트테스트테스트 요건요건요건요건 도출도출도출도출

테스트테스트테스트테스트 케이스케이스케이스케이스 도출도출도출도출

테스트테스트테스트테스트 절차절차절차절차 작성작성작성작성

<<<<---- 가장가장가장가장 ValueValueValueValue를를를를 갖는갖는갖는갖는 것것것것, , , , 사람들이사람들이사람들이사람들이 잘잘잘잘 못하는못하는못하는못하는 것것것것

<<<<---- 일반적으로일반적으로일반적으로일반적으로 가장가장가장가장 중요하다고중요하다고중요하다고중요하다고 얘기되는얘기되는얘기되는얘기되는 것것것것테스트테스트테스트테스트 기법을기법을기법을기법을 통해통해통해통해 테스트테스트테스트테스트 케이스를케이스를케이스를케이스를 도출하는도출하는도출하는도출하는 것것것것

<<<<---- 실제실제실제실제 가장가장가장가장 많이많이많이많이, , , , 오래오래오래오래 걸려서걸려서걸려서걸려서 하는하는하는하는 것것것것

현장의현장의현장의현장의 경우경우경우경우 Test BasisTest BasisTest BasisTest Basis가가가가 굉장히굉장히굉장히굉장히 다양하거나다양하거나다양하거나다양하거나 없는없는없는없는 경우가경우가경우가경우가 많음많음많음많음다양한다양한다양한다양한 산출물산출물산출물산출물, , , , 기존기존기존기존 경험경험경험경험, , , , 각각각각 이해관계자이해관계자이해관계자이해관계자((((고객고객고객고객, , , , 분석분석분석분석////설계자설계자설계자설계자, , , , 개발자개발자개발자개발자 등등등등))))와의와의와의와의

인터뷰인터뷰인터뷰인터뷰 등으로부터등으로부터등으로부터등으로부터 Test BasisTest BasisTest BasisTest Basis를를를를 분석하고분석하고분석하고분석하고 테스트테스트테스트테스트 요건을요건을요건을요건을 도출하는도출하는도출하는도출하는 역량이역량이역량이역량이 필요필요필요필요

많이많이많이많이투자하는투자하는투자하는투자하는 것것것것

실제실제실제실제중요한중요한중요한중요한 것것것것

Page 25: 오픈 스펙을 대상으로 한 테스트설계사례

감. 사. 합. 니. 다.

Page 26: 오픈 스펙을 대상으로 한 테스트설계사례

지원내용지원내용지원내용지원내용 요약요약요약요약 ((((특이한특이한특이한특이한 케이스케이스케이스케이스))))

–––– 전체전체전체전체 테스트테스트테스트테스트 사이클이사이클이사이클이사이클이 아닌아닌아닌아닌 테스트테스트테스트테스트 설계만을설계만을설계만을설계만을 ((((테스트테스트테스트테스트 진단진단진단진단 별도별도별도별도 수행수행수행수행) ) ) ) 수행수행수행수행

테스트란 기대한 요구사항을 제품이 만족하는지를 검증하는 작업Software testing is the process of analyzing a software item to detect the differences betweenexisting and required conditions and to evaluate the features of the software item (IEEE)

테스트란 기대한 요구사항을 제품이 만족하는지를 검증하는 작업Software testing is the process of analyzing a software item to detect the differences betweenexisting and required conditions and to evaluate the features of the software item (IEEE)

※테스트란※테스트란

과제에 대해 테스트를 전문으로 하는 인력이, 짧은 기간 안에,도움이 되는 방법을 찾아 지원하기 바람과제에 대해 테스트를 전문으로 하는 인력이, 짧은 기간 안에,도움이 되는 방법을 찾아 지원하기 바람배경배경

수행인력 : 2명수행일정 : 2014.11.25~12.31수행인력 : 2명수행일정 : 2014.11.25~12.31지원개요지원개요

1단계(1주) - 과제 파악 및 Pilot 수행2단계(2주) - 확대수행3단계(1주) - 인수인계

1단계(1주) - 과제 파악 및 Pilot 수행2단계(2주) - 확대수행3단계(1주) - 인수인계

수행절차수행절차

구현해야 하는 요건에 대한 3자 검토요건에 대한 테스트 시나리오 작성 및 수행그 외 테스트 전반적인 부분에 대한 개선 의견 공유

구현해야 하는 요건에 대한 3자 검토요건에 대한 테스트 시나리오 작성 및 수행그 외 테스트 전반적인 부분에 대한 개선 의견 공유

기대효과기대효과