336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

위험도 기반의 우선순위 결정


Risk(위험도) = Likelihood(발생 가능성) x Impact(발생 시 심각도)


  • 발생 가능성 : 소스 코드의 복잡도, 구현 난이도, 테스트 대상 기능의 구현 크기(소스 코드 라인수), 해당 모듈을 개발한 개발자의 수준 등의 기술적인 내용을 통해서 판단
  • 발생 시 심각도 : 장애 발생시 비지니스적으로 끼치는 타격 기준

  • STA(Servere Test Area) :  발생 가능성도 크고, 발생 시 타격이 큼
  • SSTA(Strong Test Area) : 발생 가능성은 작지만, 발생 시 타격이 큼
  • ITA(Intensive Test Area) : 발생 가능성은 크지만, 발생 시 타격이 작음
  • FTA(Fundamental Test Area) : 발생 가능성도 작고, 발생 시 타격도 낮음

단위 및 통합 테스트 케이스 진행 : STA -> ITA -> SSTA -> FTA
하이레벨 테스트 단계(시스팀 및 인수 테스트) : STA -> SSTA -> ITA -> FTA



복잡도 기반의 우선순위 결정

코드의 복잡도가 높을수록 결함의 발생 확률이 높아짐

코드의 복잡도 측정하는 방법 : 순한 복잡도 (Cyclomatic Complexity)

이론적으로는 코드 분기가 많으면 코드의 복잡도가 높아짐


코드 복잡도 도구



'Software Quality Engineering > ⓣⓔⓢⓣ' 카테고리의 다른 글

[테스트 도구] 결함 관리 도구  (0) 2017.11.21
[테스트] 테스트 커버리지  (0) 2017.11.21
[테스트] 테스트 프로세스  (0) 2017.11.18
[테스트] 코드 리뷰  (0) 2017.11.17
[SCRUM] 이슈 종류  (0) 2017.11.16
블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

import re
url = '<a href="/Users/hongkun/PycharmProjects/module/koala.jpg"> 그림 </a> <font size = "10">'
print(re.search('href="(.*?)"', url).group(1)) # 정규식 기호의 의미 ''' 1) . : 임의의 문자 하나 2) ? : 바로 앞의 문자가 존재하거나 존재하지 않음 3) * : 바로 앞의 문자가 존재하지 않거나 무한대로 존재 4) (문자열) : 문자나 문자열을 묶음 5)[] : 기호 안에 들어 가는 글자들 중 하나 ''' r = re.compile('[ab]') # 찾는 글자나 패턴을 Python에게 전해주는 역 print (r.search('pizza')) # <_sre.SRE_Match object; span=(4, 5), match='a'> print (r.search('boogieboard')) # <_sre.SRE_Match object; span=(0, 1), match='b'> print (r.match('pizza')) # none # search : 해당 패턴이 하나라도 나오면 결과를 출력 # match : 정확한 글자만 출력 print(re.search('[pP]', 'apPle')) # <_sre.SRE_Match object; span=(1, 2), match='p'> print('.' * 40) # 임의의 한문자 (.) r = re.compile('a.c') print(r.search('abc')) # <_sre.SRE_Match object; span=(0, 3), match='abc'> print(r.search('afc')) # <_sre.SRE_Match object; span=(0, 3), match='afc'> print(r.search('ac')) # None # 문자가 하나 (0 혹은 1_ 존재하거나 존재 하지 않음 (?) print('?' * 40) r = re.compile('ck?w') print(r.search('cw')) # <_sre.SRE_Match object; span=(0, 2), match='cw'> print(r.search('ckw')) # <_sre.SRE_Match object; span=(0, 3), match='ckw'> print(r.search('ckkw')) # None print(r.search('ckk')) # None print(r.search('kkkw')) # None # 바로 앞의 문자가 존재하지 않거나 개수와 상관없이 존재 (*) print('*' * 40) r = re.compile('ck*w') print(r.search('cw')) # <_sre.SRE_Match object; span=(0, 2), match='cw'> print(r.search('ckw')) # <_sre.SRE_Match object; span=(0, 3), match='ckw'> print(r.search('ckkw')) # <_sre.SRE_Match object; span=(0, 4), match='ckkw'> print(r.search('ckk')) # None print(r.search('kkkw')) # None # 바로 앞의 문자가 한번 이상 존재 (+) print('+' * 40) r = re.compile('ck+w') print(r.search('ckw')) # <_sre.SRE_Match object; span=(0, 3), match='ckw'> print(r.search('ckkkkkkkkw')) # <_sre.SRE_Match object; span=(0, 10), match='ckkkkkkkkw'> print(r.search('cw')) # None # 시작되는 문자를 지정 (^) print('^' * 40) r = re.compile('^c') print(r.search('ckw')) # <_sre.SRE_Match object; span=(0, 1), match='c'> print(r.search('sjs')) # None print(r.search('scjs')) # NNone # 끝난 문자를 지정 ($) print('$' * 40) r = re.compile('e$') print(r.search('apple')) # <_sre.SRE_Match object; span=(4, 5), match='e'> print(r.search('banana')) # None # [문자,문자] 기호 - 대괄호 안에 있는 문자들이 존재하는지 검색 print('[]' * 40) r = re.compile('[abcd]') print(r.search('pizza')) # <_sre.SRE_Match object; span=(4, 5), match='a'> print(r.search('mashroom')) # <_sre.SRE_Match object; span=(1, 2), match='a'> # [^문자,문자] 기호 - ^ 분자들을 제외한 모든 문자 검색 print('[^]' * 40) print(re.search('[^ap]','apple')) # <_sre.SRE_Match object; span=(3, 4), match='l'> print(re.search('[^ab]','bread')) # <_sre.SRE_Match object; span=(1, 2), match='r'> print(re.search('[^ap]','oragne')) # <_sre.SRE_Match object; span=(0, 1), match='o'> # 연속적인 패턴 print(re.search('[a-g]','apple')) # <_sre.SRE_Match object; span=(0, 1), match='a'> print(re.search('[0-5]','12345678')) # <_sre.SRE_Match object; span=(0, 1), match='1'> print(re.search('[가사]','강원도에서')) # None ''' 기호 정규식 설명 \s [\t\n\r\f\v] 공백과 각종 이스케이프 코드 \S [^ \t\n\r\f\v] 공백과 각종 이스케이프 코드를 제외한 문자 \d [0-9] 모든 숫자 \D [^0-9] 숫자를 제외한 모든 문자 \w [a-zA-Z0-9] 모든 알파벳 문자 \W [^a-zA-Z0-9] 모든 알파벳과 숫자를 제외한 문자 ''' #print ('나는 '천재다' 라고 말합니다') print ('나는 \'천재다\' 라고 말합니다') # 나는 '천재다' 라고 말합니다 print ('나는 "천재다" 라고 말합니다') # 나는 "천재다" 라고 말합니다 # Match Object print ('*************** Match Object ***************') print (re.search('\d', '햄버거가 무려 7000 원이나 하다니!!')) # <_sre.SRE_Match object; span=(8, 9), match='7'> print (re.search('\d+', '햄버거가 무려 7000 원이나 하다니!!')) # <_sre.SRE_Match object; span=(8, 12), match='7000'> result = re.search('\d+', '햄버거가 무려 7000 원이나 하다니!!') print (result.start()) # 8 (0부터 시작해서 시작되는 7 지점 print (result.end()) # 12 (끝나는 0의 다음 지점 print (result.span()) # (8,12) print (result.group()) # 7000 --> 정규식에서 찾으 결과를 출력하는 함수 # search : 문자열 전체에서 정규식에 부합하는 문자열이 있는지 검색 # match : 문자열의 처음이 정규식과 부합하는지 검색 print (re.match('\d+', '2017년은 대항의 시대')) # <_sre.SRE_Match object; span=(0, 4), match='2017'> print (re.match('\d+', '대항의 시대는 2017년')) # None # findall : 정규식에 부합하는 모든 뭄ㄴ자열을 리스트로 리턴 print(re.findall('\d+', '오늘은 2017년 11월 21일 입니다^^')) # ['2017', '11', '21'] # split : 주어진 문자열을 특정 패턴을 기준으로 분리함 print(re.split('[:]+]', 'apple orange : grape cherry')) # ['apple orange : grape cherry'] print(re.split('[: ]+', 'apple orange : grape cherry')) # ['apple', 'orange', 'grape', 'cherry'] # sub() : 주어진 패턴과 일치하는 문자를 변경함 print (re.sub('-', '**', '751023-1901813')) # 751023**1901813


블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


1. 테스트 계획 단계 (Test Plan)

  • 테스트 목적과 테스트의 범위 정의 : 테스트를 수행할 시스템/기능 범위, 테스트를 수행할 방법 (성능? 안정성? 기능 테스트?)
  • 테스트 대상 시스템에 대한 구조 파악 : 업무 컴포넌트 구성, 소프트웨어 배포 구조(업무 컴포넌트가 실제 어떤 솔루션으로 구현돼서 배포되었나? 예를들어, 가상화 소프트웨어는 Hyper-V 사용, 사용자 인증 정보는 LDAP에 저장), 하드웨어 배포 구조(네트워크 구성, 스토리지등)
  • 테스트 일정 정의 : 테스트 활동을 위한 주요 일정 정의, 상세한 테스트 케이스별 일정 정의가 아니라 전체적인 절차에 필요한 일정을 정의
  • 테스트 종료 조건(Exit Criteria) 정의
  • 테스트 조직 구성 및 비용 산정


2. 테스트 분석 및 디자인 단계 (Test Design)

  • 테스트 목적과 기본 원칙(Principles)에 대한 리뷰
  • 테스트 케이스 디자인 및 우선순위 설정 : 테스트 범위에 해당하는 컴포넌트와 각 기능에 대해서 상세 테스트 시나리오 정의(테스트 케이스), 상세 테스트 시나리오는 테스트 대상 시스템의 릴리즈 버전의 기능을 기준으로 작성하고 각 기능에 대해서테스트 시나리오 작성 , * 테스트 케이스를 정의할 때 필수적으로 포함되어야 하는 내용은 상세한 테스트 절차와 테스트 성공 조건(예를들어, 성능의 경우 TPS)이다.
  • 우선순위 : 가벼운 결함은 낮은 우선순위, 우선순위가 높은 테스트 케이스는 앞쪽에 몰아서 배치
  • 테스트 데이터 준비 : 실제와 유사 데이터 준비, 테스트용 데이터는 최대한 실 운영 환경과 유사하게 작성되어야 하며 필요에 따라서는 테스트 데이터를 생성하는 도구를 개발해서 데이터를 생성하는 것을 권장한다.
  • 테스팅 환경 및 도구 준비 : 개발 환경과 별도의 분리된 환경을 구축

3. 테스트 케이스 구현 및 수행 단계(Test Execution)

  • 테스트 케이스 구현 및 스크립트 작성 : JUnit, SOAP UI Script등
  • 개통 테스트 : 테스트 케이스가 제대로 작동하는지 테스트 케이스 자체를 테스트, 테스트 환경에 대한 검증. 외부 연동 시스템과 API 연동 규약 준수 확인
  • 테스트 수행과 결과 수집 : 테스트 결과와 자원의 사용률 기록
  • 결함 리포팅

4. 테스트 결과 평가 및 리포팅 단계(Test Reporting)
  • 테스트 결과 정리 : 테스트 결과 문서화 (테스트 계획, 디자인 문서, 개별 테스트 시나리오, 테스트 결과 모두 포함), 품질 상태 (테스트 커버리지, 테스트 성공률, 발생한 결함의 수와 중요도 포함), 개발팀을 위한 테스트 결과서 (결함 내용 및 경함 발생시의 상황 - CPU 등의 자원의 사용률과 로그 정보, 결함의 재현 순서)
  • 테스트 프로세스 및 결과 평가



블로그 이미지

뚱땡이 우주인

,