[Project design] 프로그램 결합 테스트 - IT(Integration test) 테스트


Study/Project design  2020. 12. 24. 17:24

안녕하세요. 명월입니다.


이 글은 프로그램 결합 테스트 - IT(Integration test) 테스트에 대한 글입니다.


이전 글에서 단위 테스트(Unit 테스트)에 대해서 설명했습니다.

링크 - [Project design] 프로그램 검증과 테스트 - Unit 테스트


이 단위 테스트에서는 함수와 클래스 단위를 검사하는 것으로 테스트의 횟수는 거진 CI 툴에 의존하게 되면 상당히 자주 빈번하게 테스트를 하게 됩니다.

이제 이 결합 테스트는 무엇이냐고 하면 간단하게 이야기하면 Unit 테스트에서 검사를 마친 함수와 클래스를 전체적으로 합쳐서 하나의 흐름으로 테스트를 하는 것입니다.

웹 프로젝트에서는 실제 웹 서버(개발 서버 - Dev server)에 배포(Deploy)를 해서 실제로 운영되는 검사를 실시하는 것입니다.


테스트의 범위를 살펴보면 아래와 같습니다.

결합 테스트는 상세 설계에서 작성했던 시퀀스를 확인하는 것이기 때문에 정확하게는 사양을 검증하기 보다는 프로그램적인 불량 요소를 검증하는 것입니다.

예를 들면, 어떤 데이터를 넣었는데 null 에러가 발생한다던가.. 함수에 대해서 Input, Output은 정확하나 로직의 순서가 바뀌어서 원하는 값이 나오지 않는던가((1+2)*3과 1+(2*3)의 차이라고 생각하면...), 웹 화면에서 숫자를 넣어하는 텍스트 박스에 문자가 들어가는 경우의 에러 표시등등을 체크하는 테스트라고 생각하면 됩니다.


이 결합 테스트를 실시함에 있어서 크게 두가지로 나누어서 실시하게 됩니다.

첫번째는 Selenium이라는 라이브러리를 이용하는 검증하는 것과 두번째는 실제 사람이 이것저것 클릭하면서 검증하는 것입니다.


Selenium 라이브러리를 이용하는 것은 웹 스크래핑 기술을 이용하는 것입니다.

링크 - [Python] Selenium 라이브러리 (자동 웹 테스팅, 스크래핑)


Selenium 라이브러리를 통해서 테스트 봇을 만드는 것은 Java도 가능하고 C#도 가능합니다만 테스트의 특성상 스크립트 수정이 많이 발생하는 영역이이 때문에 수정할 때마다 빌드를 할 수 없으니 수정이 편한 Python이 개인적으로 좋다고 생각합니다.

Selenium 라이브러리를 사용하므로 얻는 이점은 우리가 웹 페이지를 보는 데 있어서 브라우저를 사용합니다만 최근에는 대체적으로 Chrome를 많이 사용합니다.

그러나 상황에 따라 맥 계열인 Safari를 사용할 수 있고 또 사용하는 사람의 취향에 따라 firefox나 IE를 사용할 수 있습니다.

사람이 이 모든 것을 각 오브젝트마다 브라우저마다 모든 걸 테스트하기에는 시간과 공수가 상당히 많이 들어가는 작업이기 때문에, 역시 스크립트를 통해 프로그램을 제작해서 검증을 하는 것이 효과적이라고 할 수 있습니다.


그러나 Selenium 라이브러리를 통한 검증하는 방법도 장점만 있는 것은 아닙니다.

Selenium 라이브러리를 통해 프로그램을 만드는 것도 또 다른 프로젝트가 생성되는 것입니다. 역시 프로젝트 공정이기 때문에 기본 설계부터 해야하는 부담이 있습니다. 프로젝트라고 해서 공정을 만들어서 만들 필요가 있는 건 아니지만 역시 프로그램을 만드는 것이기 때문에 검증이라는 게 필요합니다.

즉, 우리가 만드는 프로젝트를 검증하는 프로그램인데 이 프로그램이 버그가 발생해서 원 프로젝트의 버그를 발견하지 못한다면 역시나 최초의 프로젝트의 품질에도 영향이 가기 때문입니다.

그렇기 때문에 이 검증 프로그램을 만드는 자체도 꽤나 많은 비용이 발생하게 되는 것입니다.


그리고 이 Selenium 라이브러리를 통한 것으로 모든 테스트 검증을 할 수 있는 것은 아닙니다.

Selenium 라이브러리라는 것은 결국 html 태그를 통한 결과 확인인데.. 디자인이 오류가 나는 경우도 있습니다.

화면 크기에 따라 글자가 안 보인다던가 디자인이 설계에 나온 것과 다르다던가라는 부분은 역시 사람이 확인하는 수밖에 없습니다.


최근 RPA라는 자동화 에뮬레이터 시스템이라는 AI를 이용한 소프트웨어가 있습니다만, 이걸 이용하면 결합 테스트에 대한 공정에 대한 시간을 많이 줄일 수 있다고 합니다만, 아직은 소프트웨어가 비싸고 보편화되어 있는 기술은 아닙니다.

하지만 앞으로는 어떨지 잘 모르겠네요.


결합 테스트는 납품하기 전의 프로그램적인 최종 테스트 단계이기 때문에 공정을 제대로 만들지 않으면 엄청난 시간이 들어가는 부분입니다.

다음 단계인 시나리오 테스트(ST)가 있습니다만, 그 부분은 프로그램에 대한 검증보다는 사양에 대한 검증입니다. 고객과 서로 확인하면서 의뢰했던 내용이 맞는 가하는 검증에 가깝습니다. 게임으로 치면 베타 테스트같은 개념입니다.

그렇기 때문에 가능하면 이 결합 테스트에서 발생하는 버그를 모두 잡아야 합니다.


보통 이 결합 테스트를 진행하는 것은 테스트 사양서를 작성하고 실시를 합니다.

이 테스트 사양서에 들어가는 항목은 먼저 오브젝트에 대한 테스트, 처리 테스트, 보안 테스트, 성능 테스트, 시스템 테스트, 로그 테스트등이 있습니다.

이 사양 항목은 프로젝트마다 들어가는 항목은 다릅니다만 웹 환경은 거의 비슷하지 않을까 싶습니다.

오브젝트 테스트는 텍스트 박스나 체크 박스에 대한 Null처리, 숫자만 허용하는 오브젝트에 숫자를 넣는 경우, 문자 깨짐은 없나등을 확인하게 됩니다.

처리 테스트는 Post Request를 할 경우 데이터 베이스에 올바른 데이터가 들어가는 지, 데이터 베이스의 내용이 제대로 화면에 표시가 되는지, 메시지가 제대로 표시가 되는 지를 확인합니다.

보안 테스트는 역시 Inject의 관한 테스트가 많은데 텍스트 박스에 특수 문자가 허용되는 지, 허용된다면 SQL Inject 즉, SQL 구문을 넣어도 문제가 없는지, GET 방식으로 인한 혹은 스크립트 변조로 인한 입력을 제대로 막는지에 대한 테스트입니다.

성능 테스트는 요청을 할 결우 얼마만에 Response가 발생하는 지, 같은 Post Request를 발생할 경우 어떻게 처리되는 지에 대한 확인입니다.

시스템 테스트는 메일이 제대로 발송되는지, 여러 시스템을 소켓이나 여러가지 규약으로 묶었을 경우 상호간에 문제없이 통신이 되는지를 확인하게 됩니다.

로그 테스트는 웹 상에 동작에 대한 로그가 제대로 작성이 되는 지에 대한 테스트입니다.

그 외의 메시지 확인 테스트, 오류 테스트, 즉 데이터 베이스가 꺼졌을 경우라던가 WAS 서버가 꺼졌다던가의 처리 화면, 그래도 에러나 버그가 발생할 경우 대처되는 화면 표시등을 확인해야 합니다.


프로그램을 만든다고 하면 보통 코딩이나 설계에서 시간이 많이 들어간다고 생각하는 경우가 많습니다. 그러나 개인적으로는 프로그램 공정 중에서는 가장 중요하지 않을까 생각합니다.

그리고 도움을 받을 수 있는 프로그램이 있으면 많이 활용할 수 있는 구간입니다. HP의 fortify등등을 이용해서 말입니다.


이 결합 테스트가 곧 제품의 품질을 결정하는 부분이기 때문에 점검을 해야하는 것도 많고 인원도 많이 필요합니다.

그래서 예전에 팀을 구성하게 되면 개발자가 10라면 테스터는 20으로 책정하곤 했습니다. 즉, 2배의 인력을 계산하는 것입니다.

그러나 인력이 2배로 들어간다고 또 반드시 가격이 많이드는 것도 아닙니다. 물론 보안 테스트나 성능 테스트등은 전문적인 기술 지식이 필요한 영역도 있습니다만 오브젝트 테스트는 단순한 테스트이기 때문에 누구나 할 수 있기 때문에 상대적으로 인건비 배치가 낮은 부분도 있습니다.

이런 부분을 고려해서 팀을 구성하고 공정을 짜게 되면 품질 좋은 제품이 나옵니다.


개인적인 여담입니다만, 예전에 한국에서 일할 때 Unit 테스트까지는 실시했었는데 결합 테스트라는 건 없었습니다. 일본에 오고 프로젝트를 참여하니 이런 공정이 있다는 걸 알았습니다.

아 이래서 메이드인 제팬하는 구나 싶어서 일본의 독특한 문화인 줄만 알았는데... 나중에 다른 외국 프로젝트도 하니.. 다 이렇게 만들더군요... 즉, 지금 생각해보니 한국에서만 이런 테스트 작업을 안하는 것이더군요.

다른 업계나 게임등은 잘 모르겠습니다만 이런 문제로 한국의 소프트웨어의 신뢰도가 낮아서 세계로 못 뻗어나가는 것인가 하는 생각도 드네요.... 솔직히 우리가 사용하는 프로그램은 거진 MS나 외국 소프트웨어가 대부분이잖아요... 혹시나 있다해도 국내 전용이고...외국에서는 사용하지 않는 거죠...

개인적으로 한국도 신뢰도 높은 프로그램이 많이 개발되어서 수출이 많이 되었으면 바램이네요.


여기까지 프로그램 결합 테스트 - IT(Integration test) 테스트에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.