글을 쓰게 된 계기
하계 현장실습을 SI업체에서 하던 도중단위 테스트를 받게 되었는데
알 던 단위테스트와 상이한 부분들이 있고
단위테스트가 아니고 다른 테스트 인 것 같아
한번 실무의 테스트를 유형을 찾아보고 정확한 개념을 잡고 가려고 적게되었다.
(왜 단위테스트라고 한건진 의문.... 디자이너분이라 그런가...?)
전체적인 테스트 과정
개발단계에 따라 구분을 한다.
- 단위 모듈에서 실행되어야 할 입력, 수정, 삭제 등의 단위 기능들을 시험하는 단위 테스트(unit test)
- 업무 흐름에 따라 정상 혹은 오류 처리되는지, 업무 간 연계되는 데이터 처리가 되는지 등을 확인하는 통합 테스트(integration test)
- 오픈을 결정하기 위해 가동 환경에서 정상 작동 여부를 확인하는 시스템 테스트(system test)
4.개발이 완료된 시스템과 데이터베이스를 운영팀으로 인계하기 위한 인수테스트(acceptance test) 등이 있다.
기본적으로 업무 마감시각이 중요한 SI에서는 몇개의 초기 테스트는 생략한다고 한다.
결국 결과물이 존재해야하기때문에다.
하지만 익숙해지면 고객의 요구사항에 유연하게 대처할 수 있다.
화면을 거치지 않는 테스트 코드는 개발자의 시간을 줄여준다.
단위 테스트
응용프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트이다.
- 테스트 대상 단위의 크기를 작게 설정해서 단위 테스트를 최대한 간단하고 디버깅하기 쉽게 작성해야 한다.
- 단위 테스트는 소프트웨어 내부 코드에 관련한 지식을 반드시 알고 있어야 하는 화이트박스 테스트이다. TDD
- 변화할 가능성이 없는 코드는 오히려 테스트 코드를 작성하여 활용할 수 없어 시간을 두배로 잡아먹는 악순환을 가질 수 있다.
- 하지만 틀린 곳을 바로 찾아낼 수 있다.
- Junit
화면 단위테스트는 다른 의미를 가지고있다.
이렇게 각 상황별로 발생할 수 있는 분기를 넣어서 단위테스트를 진행한다.
다양한 상황에 대해서 시나리오를 정의하고 체크리스트를 만들어서 체크를 한다.
SI 화면 단위테스트 참고 많이한 글
https://www.slideshare.net/genycho/si-231074752
통합 테스트
통합 테스트는 단위 테스트보다 더 큰 동작을 달성하기 위해 여러 모듈들을 모아 이들이 의도대로 협력하는지 확인하는 테스트이다.
- DB에 접근하거나 전체 코드와 다양한 환경이 제대로 작동하는지 확인하는데 필요한 모든 작업을 수행할 수 있다.
- 통합 테스트의 단점은 단위 테스트보다 더 많은 코드를 테스트하기 때문에 신뢰성이 떨어질 수 있다는 점이다.
- 어디서 에러가 발생했는지 확인하기 쉽지 않아 유지보수하기 힘들다는 점도 있다.
- @SpringBootTest
SI 통합 테스트 템플릿 유형
1.https://blog.naver.com/PostView.naver?blogId=sunhoskm&logNo=221956761376&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search
인수테스트
비즈니스에 초점을 둔 테스트
프로젝트에 참여하는 사람들이 토의해서 시나리오를 만들고 개발자는 이에 의거해서 코드를 작성한다.
다른 의사소통집단으로부터 시나리오를 받아(인수) 개발한다는 의미를 가지고 있다.
인수 테스트는 소프트웨어 인수를 목적으로 하는 테스트이다. 소프트웨어를 인수하기 전에 명세한 요구사항(인수 조건)대로 잘 작동하는지 검증한다.
- MockMVc 등
단위테스트 케이스와 통합 테스트 시나리오 간의 차이점
- 단지 특정 단위로 묶은 것은 통합 테스트 시나리오가 되지 않는다.
- 시나리오는 업무 흐름을 더 잘 아고 있는 시스템 운영자/관리자가 개발자와 함께 합동 작성하는 것이 바람직하다.
- 단위테스트는 한개의 모듈/ 컴포넌트가 가진 기능이 정상 작동하는지 사용되므로
업무의 주요 흐름 또는 타 업무와의 연계 등을 고려한 통합 테스트 시나리오와 케이스가 될 수 없다.
(참고는 가능하지만 목적 자체가 다르다.)
결론
하지만 하계 SI업체에서 같은 입력값을 계속 넣는 테스트를 받았기에
테스트 운영방식이 잘못된 것 같고 화면 단위테스트라기엔 분기점이 없다.
(CRUD가 잘된 것만 보고 임계값 테스트등 진행을 하지않는걸보니...)
위의 전체적인 테스트과정을 보자.
그나마 최종 단계의 시스템테스트와 인수테스트인데 개발이 많이 진행되지 않은 시점에서 둘 다 효율이 좋은 테스트는 아니지만 그나마 시스템 테스트에 가까운것 같다.
추가로 테스트 코드가 없으면
인수테스트나 화면상에 올라올때까지 메소드 검사 시점이 밀린다.
그만큼 문제를 늦게 알아차리는것이고 테스트코드와 개발 비용에 따른 차이를 고려해서 개발을 해야할듯하다.
REFERENCE
https://www.2e.co.kr/news/articleView.html?idxno=301002
https://bbubbush.tistory.com/19
https://brunch.co.kr/@kkangji/32