프로젝트/ITAMS2013.03.26 01:26

1. 테스트 레벨


한 번에 총체적으로 조직화 하고 관리하는 테스트 활동의 묶음(단위 테스트, 시스템 테스트, 통합 테스트, 인수 테스틍 등.)


1.1. 특징

  • 독립적 계획 활동

  • 독립적인 테스트 설계, 실행, 완료 및 리포팅 마감 활동

  • 독립적 테스트 팀, 독립적 환경


각 테스트 레벨의 일반적인 목표(목적) 존재

테스트 케이스를 도출해 내는데 참조되는 개발 입력산출물(테스트베이시스)

테스트 대상

발견된 전형적인 결함과 장애

테스트 하네스(드라이버) 필요 여부와 툴 지원의 필요성

특정한 테스트 접근법과 담당 책임 

<각 테스트 레벨에서 독립적으로 식별 가능한 내용>






2. 단위 or 컴포넌트 테스팅


소프트웨어의 각각의 단위를 다른 부분과 연계되는 부분은 고려하지 않고 단위 자체에만 집중하여 테스트

개발자가 원시코드를 가지고 테스트 함.


2.1. 단위(컴포넌트) 테스팅의 목적

  • 기본적인 패스를 확인

  • 모든 에러 핸들링 패스를 확인

  • 모듈 인터페이스 확인

  • 로컬 데이터 확인, 경계값 확인



2.2. 단위 테스트 기법과 완료 조건


기법

  • Control flow 테스트

  • Condition decision 커버리지 테스트

  • 등가분할 & 경계값 입력 테스트


완료 조건 - 통합테스트 책임자가 테스트로의 시작 조건을 만족시켰다고 판단하는 경우






3. 통합 테스트


시스템이나 시스템 구성요소 또는 소프트웨어 프로그램의 데이터 및 기능의 인터페이스(흐름)가 정상적으로 작동하는지에 중점을 두고 수행하는 테스트.

단위 테스트를 통과한 개발 소프트웨어/하드웨어 컴포넌트간 인터페이스 및 연동 기능 등을 구조적으로 접근하여 테스트 한다.

 

3.1. 통합 테스팅 접근법


결합을 격리 시키기 위해 다양한 통합 테스팅 접근법이 존재


  • 빅뱅 통합 - 모든 모듈을 한번에 통합결합 격리 어려움
  • 상향식 통합 - DBMSOS등과 직접적으로 인터랙션하는 하위 모델을 먼저 개발 통합
  • 하향식 통합 - 비즈니스에 가까운 모듈부터 하위 모델로 통합
  • 백본 통합 - 소프트웨어 리스크가 높은 것을 우선적으로 통합 접근







4. 시스템 테스트


  • 실제환경과 가능한 유사한 환경에서 진행.

  • 개발 조직과는 독립된 테스트 조직에서 수행함.

  • 단위/통합 테스트가 가능한 완벽히 완료되어 기능상에 문제가 없는 상태여야 함.

  • 시스템 성능과 관련된 요구사항이 완벽하게 수행되는지를 테스트하기 때문에 사전 요구사항이 명확해야 함.

 

4.1. 시스템 테스팅의 테스트 베이시스


  • 요구사항 명세서

  • 리스크 분석 결과

  • 비즈니스 절차

  • 유즈케이스

  • 상위레벨의 시스템 동작 기록 문서

  • OS, 시스템 리소스와의 상호작용

 

4.2. 기능적 요구사항과 비기능적 요구사항 테스트


  • 기능적 요구사항 테스트 - 명세기반 기반

  • 비기능적 요구사항 테스트 - 구조기반 기법. 성능사용성신뢰성이식성 테스트 등





5. 인수 테스트


테스팅 환경 자체가 사용자 환경으로 바뀌고 수행하는 주체가 사용자이다.

인수 테스팅은 일반적인 테스트 레벨의 가장 마지막 상위 레벨로, SW 제품에 대한 요구사항이 제대로 이행되었는지 확인.

 

5.1. 인수 테스팅의 목적


  • 제품에 대한 확신
  • 배포 또는 실제 사용할 준비가 되었는지 평가
  • 최종 단계의 테스팅이 아닐 수 있음(인수 테스트 후 대규모 시스템 통합 테스트 실행 가능)

 

5.2. 인수 테스팅의 형태


  • 사용자 인수 테스팅
  • 운영상의 인수 테스팅
  • 계약 인수 테스팅과 규정 인수 테스팅
  • 알바 테스팅 & 베타(필드) 테스팅



'프로젝트 > ITAMS' 카테고리의 다른 글

프로젝트 개요  (0) 2013.03.26
리스크와 테스팅  (0) 2013.03.26
소프트웨어 수명주기와 테스트 레벨  (0) 2013.03.26
소프트웨어 수명주기와 테스팅  (0) 2013.03.26
Posted by devop

댓글을 달아 주세요

프로젝트/ITAMS2013.03.26 01:05

1. V모델(순차적 개발 모델)


waterfall 개발 프로세스 모델(요구사항 분석 -> 설계 -> 코딩 -> 테스팅이 순차적으로 독립적으로 수행)을 기반으로 만들어졌으며 여러 테스팅 관련 컨셉을 함께 보여주는 모델로 폭포수 모델과 마찬가지로 요구사항 분석 -> 설계 -> 코딩 -> 테스팅이라는 일련의 단계를 통해 소프트웨어를 개발하는 모델.


또한 개발 각 단계에 대응하는 테스트 레벨이 존재하여 개발활동과 테스트 활동이 밀접하게 연계되있음을 보여준다.



1.1. 조기 테스팅(Early Testing)


* 개발 시작과 동시에 테스트를 수행하는 것 -> 결함을 예방할 수 있다.

* 명세서만 있어도 테스트를 설계하고 테스트 케이스를 도출할 수 있다.


한계점 : 조기 테스트 설계 적용 시에 요구사항이 자주 변경되면 V모델을 적용하는데 큰 한계가 있음.

(변경된 요구사항은 다른 단계 활동들에 큰 영향을 미치기 때문이다.)


대처법 : 리스크가 자장 높은 부분을 중점적으로 테스트 케이스로 변환한다.

(향후에 테스트 케이스 재작업을 줄일 수 있고, 요구사항이 변경되더라도 리스크가 높은 부분을 테스트 케이스로 만들면서 검증하는 과정을 거치는 것은 의미가 크다.


1.2. V모델의 장점


* 각각의 요구사항 분석서를 보고 테스트 케이스를 만들어 요구사항의 결함을 미리 발견하여 예방할 수 있다.

* 개발 초기에 있을 수 있는 결함을 줄여 개발기간도 줄이고 제품의 완성도를 높임






2. 반복적 - 점진적 개발 모델


점진적으로 효과적인 결과물을 산출하기 위해 일련의 활동을 반복적으로 적용하려는 개발 스타일. 최근에는 XP, Scrum 등 애자일 개발 방법론이 상당히 회자되고 있으며 적용 사례를 급속히 늘려가고 있다.


2.1. waterfall 개발 VS Iterative 개발 프로세스


waterfall 개발 프로세스 장단점


  • 단순한 형태의 개발 수명 주기
  • 결과물로 수행 전까지 문서만 존재
  • 리스크를 프로젝트 중간 이후의 코딩 단계까지 가지고 감
  • 개발 프로젝트 예측이 어려움




Iterative 개발 프로세스 장단점


  • 각 Iteration별 실제 개발 결과물 존재
  • 리스크를 개발 앞 단에서 처리
  • 개발 프로젝트 예측이 용이
  • 개발 과정이 폭포수 개발에 비해 복잡함



2.2. Iterative 개발 프로세스에 대한 테스팅 이슈


  • 반복 과정에 의해 생성된 결과 시스템은 여러 테스트 레벨에서 개발과정의 일부로 테스트
  • 증분 산출물 테스트 & 부분 시스템 테스트
  • 리그레이션 테스팅이 점차적으로 중요해짐 -> TDD테스트
  • 테스트 대상은 다수개로 증가하고, 테스트 환경의 변화로 유즈케이스 간의 활동 테스팅이 요구됨
  • 반복주기에 작은 V모델이 존재

'프로젝트 > ITAMS' 카테고리의 다른 글

프로젝트 개요  (0) 2013.03.26
리스크와 테스팅  (0) 2013.03.26
소프트웨어 수명주기와 테스트 레벨  (0) 2013.03.26
소프트웨어 수명주기와 테스팅  (0) 2013.03.26
Posted by devop

댓글을 달아 주세요

프로그래밍/JAVA2013.02.01 11:40

포함된 메소드


  • Date getNextYear(Date date) - 1년 후의 날을 구한다.
  • Date getPreviousYear(Date date) - 1년 전의 날을 구한다.
  • Date getNextMonth(Date date) - 한달 후의 날을 구한다.
  • Date getPreviousMonth(Date date) - 한달 전의 날을 구한다.
  • Date getNextWeek(Date date) - 7일 후의 날을 구한다.
  • Date getPreviousWeek(Date date) - 7일 전의 날을 구한다.
  • Date getNextDate(Date date) - 다음 날을 구한다.
  • Date getPreviousDate(Date date) - 하루 전 날을 구한다.
  • Date getFirstDateOfWeek(Date date) - 해당 주의 첫번째 날을 구한다.
  • Date getLastDateOfWeek(Date date) - 해당 주의 마지막 날을 구한다.
  • Date getFirstDateOfMonth(Date date) - 해당 연도 달의 첫번째 날을 구한다.
  • Date getFirstDateOfMonth(int year, int month) - 해당 연도 달의 첫번째 날을 구한다.
  • Date getLastDateOfMonth(Date date) - 해당 연도 달의 마지막 날을 구한다.
  • Date getLastDateOfMonth(int year, int month) - 해당 연도 달의 마지막 날을 구한다.
  • Date minimized(Date date) - 시,분,초를 모두 최소치로 초기화한다.
  • Date maximize(Date date) - 시,분,초를 모두 최대치로 초기화한다.

소스코드
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.time.DateUtils;

public class DateUtilsEx {

	public static Date getDate(int year, int month, boolean truncate) {
    	Calendar cal = Calendar.getInstance();
    	cal.set(Calendar.YEAR, year);
    	cal.set(Calendar.MONTH, month);
    	
    	if( truncate ) {
    		cal = DateUtils.truncate(cal, Calendar.MONTH);
    	}
    	
    	return cal.getTime();
    }

    public static Date getDate(int year, int month) {
    	return getDate(year, month, false); 
    }
    
    /**
	 * 1년 후의 날을 구한다.
	 */
	public static Date getNextYear(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.YEAR, 1);
    	
    	return cal.getTime();
    }

	/**
	 * 1년 전의 날을 구한다.
	 */
    public static Date getPreviousYear(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.YEAR, -1);
    	
    	return cal.getTime();
    }
    
    /**
	 * 한달 후의 날을 구한다.
	 */
    public static Date getNextMonth(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.MONTH, 1);
    	
    	return cal.getTime();
    }
    
    /**
	 * 한달 전의 날을 구한다.
	 */
	public static Date getPreviousMonth(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.MONTH, -1);
    	
    	return cal.getTime();
    }
	
	/**
	 * 7일 후의 날을 구한다.
	 */
	public static Date getNextWeek(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.DATE, 7);
    	
    	return cal.getTime();
    }
    
	/**
	 * 7일전의 날을 구한다.
	 */
	public static Date getPreviousWeek(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.DATE, -7);
    	
    	return cal.getTime();
    }
	
	/**
	 * 다음 날을 구한다.
	 */
	public static Date getNextDate(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.DATE, 1);
    	
    	return cal.getTime();
    }
    
	/**
	 * 하루 전 날을 구한다.
	 */
	public static Date getPreviousDate(Date date) {
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.add(Calendar.DATE, -1);
    	
    	return cal.getTime();
    }
	
	/**
	 * 해당 주의 첫번째 날을 구한다.
	 */
	public static Date getFirstDateOfWeek(Date date) {
		Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    	cal.add(Calendar.DATE, (dayOfWeek-1)*-1);
    	
    	return cal.getTime();
	}
	
	/**
	 * 해당 주의 마지막 날을 구한다.
	 */
	public static Date getLastDateOfWeek(Date date) {
		Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    	cal.add(Calendar.DATE, 7-dayOfWeek);
    	
    	return cal.getTime();
	}
	
	/**
	 * 해당 연도 달의 첫번째 날을 구한다.
	 */
	public static Date getFirstDateOfMonth(Date date) {
		Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.getActualMinimum(Calendar.DAY_OF_MONTH));
		return cal.getTime();
	}
	
	/**
	 * 해당 연도 달의 첫번째 날을 구한다.
	 */
	public static Date getFirstDateOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
    	
		cal.set(Calendar.YEAR, year);
    	cal.set(Calendar.MONTH, month-1);
    	cal.set(Calendar.DATE, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
		
		return minimized(cal.getTime());
	}
	
	/**
	 * 해당 연도 달의 마지막 날을 구한다.
	 */
	public static Date getLastDateOfMonth(Date date) {
		Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.getActualMaximum(Calendar.DAY_OF_MONTH));
		return cal.getTime();
	}
	
	/**
	 * 해당 연도 달의 마지막 날을 구한다.
	 */
	public static Date getLastDateOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
    	
		cal.set(Calendar.YEAR, year);
    	cal.set(Calendar.MONTH, month-1);
    	cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
		
		return maximize(cal.getTime());
	}
	
	/**
	 * 시,분,초를 모두 최소치로 초기화한다.
	 */
	public static Date minimized(Date date) {
		return DateUtils.truncate(date, Calendar.DATE);
	}
	
	/**
	 * 시,분,초를 모두 최대치로 초기화한다.
	 */
	public static Date maximize(Date date) {
		Calendar cal = Calendar.getInstance();
    	cal.setTime(date);
    	
    	cal.set(Calendar.HOUR_OF_DAY, 23);
    	cal.set(Calendar.MINUTE, 59);
    	cal.set(Calendar.SECOND, 59);
		
		return cal.getTime();
	}
	
}


Posted by devop

댓글을 달아 주세요

  1. 짱이에용

    2019.10.21 15:44 신고 [ ADDR : EDIT/ DEL : REPLY ]