Acceptance Tests

비즈니스 요구사항/유즈케이스에 대한 구현에서 에러를 찾는다.
Formalized 요구사항
시스템 테스트(완성한 시스템에 대한 테스트)를 할 때 보통 한다.
보통 수동으로 한다.(반복하기 힘들기 때문에)

Fit/FitNesse

목적 : 고객이 인수 테스트를 작성하도록 만든다. <= XP의 목표가 되었다. 근데 이걸 어떻게 할 건가?
HTML을 input으로 사용한다.
    간단한 형식
    여러 도구로 사용가능(Ms Office)
    테스트와 문서(요구사항에 대한..)를 섞어 둘 수 있다.
테스트 만드는 방법
    public 필드 사용
    errors() 메소드 구현
    @Configurable 사용

스프링 아키텍처가 Fit 테스트를 간단하게 해준다.

    서비스들이 유즈케이스나 비즈니스 로직을 나타낸다.
    따라서 요구사항 테스트로 사용할 수 이쓴ㄴ 부분이 정의되어 있는 것이다.
    도메인 객체는 파라미터로 사용할 수 있다.
    시스템 테스트와 관계없이 비즈니스 요구사항에 대한 구현에서 에러를 찾아 볼 수 있다.
    쉽게 자동화 할 수 있다.
    사용자는 GUI가 보이지 않더라도 테스트가 수행됐다는 것을 믿을 수 있다.

사용 방법
   
    서비스 클래스 마다 Fit 테스트를 작성하라.
    public 속성을 도메인 객체로 변환해주는 어댑터를 만들어라.
    서비스를 호출하라

그냥 서비스를 Fit으로 Export 할 순 없을까?

    비즈니스 계층은 별다른 노력 없이 FIt으로 테스트 가능하다.
    할 수 있다. Generic Fit Exporter를 만들어야 한다. 이게 바로 Spring-FitNesse 프로젝트 목표다.
       스프링 Bean에 접근할 수 있어야한다.

이 후는 FitNesse 구현에 대한 여러 고민이 이어집니다. 이럴까 저럴까..이렇게 했다.
    PropertyEditor와 BeanWrapperImpl 사용해서 구현함.
    그 결과..
        도메인 객체를 자동으로 만들고 제공합니다.
        도메인 객체를 파라미터로 서비스들을 호출합니다.
        그 결과를 확인합니다.

주요 클래스
    SpringColumnFixture
    SpringActionFixture

결론

Fit을 쉽게 사용할 수 있으며
Generic 어댑터를 사용할 수 있다.
완성된 시스템이 없더라도 요구사항을 테스트 할 수 있다.
https://spring-fitnesse.dev.java.net

Stress Tests

Non functional Requirement
성능을 측정하는 방법
    JMeter

원하는 것

    계층 마다 측정하기
    JAMon
       모니터링 프레임워크
       결과를 웹 페이지에 보여준다.
       스프링은 JAMon 인터셉터를 제공해 준다.

JAMon
   
    웹 계층
       JAMonFilter
          HTTP Request/Response
          뷰와 컨트롤러까지 처리에 걸리는 시간을 계산해서 전체 시간에서 뺀준다.
    다른 계층
       포인트컷을 조정하면 된다.
    SQL 까지 프로파일 할 수 있다.
   
왜 JAMon을 사용해야 하나?

    기존의 포인트컷과 Spring AOP 프록시들을 재사용할 수 있다.
    오버헤드가 적다.
    모든 계층을 조사할 수 있다.
    스프링이 묶어 줄 것이다.

결론

    테스트와 관련된 스프링의 다양한 기능
       DI
       환경에 독립적
       통합 테스트용 클레스
    스프링 아키텍처가 Fit에 가져다 주는 장점
       도메인 객체를 데이터 컨터이너로 사용할 수 있다.
       JMeter, JAMon 그리고 Spring AOP는 성능 측정을 쉽게 해준다.