한빛출판네트워크

IT/모바일

좋은 품질을 위한 풀스택 테스트 10가지 기술

한빛미디어

|

2023-05-25

by 가야트리 모한

2014년 10월 인도의 대형 이커머스 업체인 스냅딜과 플립카트 는 몇 달간의 준비 과정을 거쳐 축제 기간 판매 행사에서 정면으로 맞붙었습니다. 안타깝게도 플립카트는 ‘빅 빌리언 데이’ 세일 기간 동안 엄청난 트래픽을 감당하지 못해 웹 사이트가 여러 번 다운되었고 많은 고객과 매출을 경쟁사인 스냅딜에 빼앗겼죠. 이와 비슷하게 야후는 초창기 검색 엔진의 선구자였음에도 불구하고 검색 품질을 신경 쓰지 않았고, 30억 사용자의 계정이 유출되는 보안 사고가 발생하여 시장에서 살아남지 못했습니다.


이 사례의 공통점은 무엇일까요? 바로 품질 관리에 소홀히 했다는 점입니다. 고객은 더 신뢰할 수 있고 대체 가능한 경쟁 업체로 빠르게 이동합니다. 이러한 이유로 참신한 아이디어를 가지고 있더라도 품질에 신경 쓰지 않는다면 기업은 빠르게 침몰할 수 있죠. 소프트웨어 품질보다 출시 일정을 더 고려해야 하는 상황은 언제든 발생할 수 있습니다. 하지만 이 경우에는 추후 해결이 필요한 기술 부채가 생긴다는 점을 기억해야 합니다. 

 

품질은 기업이 장기적으로 살아남기 위해 신경 써야 할 필수 요소입니다. 좋은 품질을 유지하기 위해서는 전체 스택에 걸친 애플리케이션의 구성 요소에 주의를 기울여야 하며 숙련된 개발 역량과 꼼꼼한 테스트를 잘 결합해야 하죠. 

 

사용자와 기업 관점에서 보는 좋은 소프트웨어 품질

 

과거에는 버그가 없는 애플리케이션과 소프트웨어 품질을 동일시했습니다. 하지만 오늘날 소프트웨어 세계에서 소프트웨어 품질은 단순히 버그가 없는 소스 코드만을 의미하지 않습니다. 


사용자 관점에서 품질을 정의하면 쉬운 사용성, 아름다운 디자인, 높은 보안성, 빠른 응답 속도, 장애 없는 서비스로 요약할 수 있습니다. 반면 기업 관점에서는 품질을 정의하면 높은 투자 수익률, 실시간 분석이 가능한 환경, 무중단 서비스, 벤더 독립성, 확장 가능한 인프라, 데이터 보안, 법률 규정 준수 등으로 요약할 수 있죠.

풀스택 테스트_사용자 관점, 기업 관점의 소프트웨어 품질.jpg


이 모든 것이 오늘날 애플리케이션을 좋은 소프트웨어로 만드는 중요한 요소입니다. 이 요소 중 하나라도 놓치면 좋은 품질을 유지할 수 없습니다. 따라서 우리는 모든 요소를 꼼꼼하게 테스트해야 합니다.

 

앞서 나열한 것들을 모두 테스트하기에는 목록이 많아 보일 수 있지만 이를 위한 다양한 도구와 방법론이 있으니 걱정하지 않아도 됩니다. 좋은 품질을 유지하기 위한 교두보를 마련하기 위해서는 다양한 도구에 관한 지식을 쌓고 개발 및 테스트 관점에서 주어진 상황에 맞는 도구를 잘 활용하는 능력이 무엇보다 중요합니다.

 

좋은 품질을 위한 풀스택 테스트


테스트는 간단히 말해 애플리케이션이 원하는 대로 작동하는지 검증하는 것입니다. 성공적인 테스트를 위해서는 마이크로micro 수준과 매크로macro 수준에서 테스트를 수행해야 합니다. 클래스의 메서드, 입력 데이터값, 로그 메시지, 에러 코드 같은 애플리케이션의 마이크로 측면과 기능 테스트, 기능 간 통합, 엔드 투 엔드end-to-end 워크플로 같은 매크로 측면을 검증해야 합니다. 더 나아가 보안, 성능, 접근성, 가용성 등 애플리케이션 전체의 품질을 고려해야 합니다. 필자는 이 모든 것을 종합하여 풀스택 테스트라고 부르고 있습니다.

 

 

풀스택 테스트.jpg

 

풀스택 테스트는 UI, 서비스, 데이터베이스 등 애플리케이션에 포함된 각 계층과 애플리케이션 전체를 테스트하는 것을 의미합니다. 풀스택 테스트와 개발은 떼어낼 수 없는 관계죠. 

 

이커머스 애플리케이션의 총 주문 금액을 계산하기 위한 작은 코드 블록을 작성한다고 생각해 봅시다. 우리는 코드가 올바른 금액을 계산하고 있는지, 계산 과정에서 보안상의 문제가 없는지 테스트해야 합니다. 테스트 과정 없이 개발한다면 기능 통합 과정에서 문제가 발생할 수 있죠. 테스트가 개발을 완료한 후 별도로 진행하는 독립적인 작업이라는 기존의 사고를 버려야 합니다. 풀스택 테스트는 개발과 병행되어야 하며 빠른 피드백을 얻기 위해 전달 주기 내에서 수행되어야 합니다. 시프트 레프트shift left는 소프트웨어 개발 초기에 테스트를 시행하는 것으로 풀스택 테스트에서 따라야 하는 핵심 원칙입니다.

 

시프트 레스트 테스트

전통적인 소프트웨어 개발 과정은 요구 사항 분석, 설계, 개발, 테스트 순이며 테스트를 가장 마지막에 수행합니다. 반면에 시프트 레프트 테스트는 초기 단계에서 테스트를 수행합니다. 

 풀스택 테스트_시프트 레프트 테스트.jpg


이해를 돕기 위해 집을 짓는 상황에 빗대어 생각해 보겠습니다. 집을 짓는 과정에서 완벽하게 시공을 마친 후에만 품질을 확인한다면 방의 크기가 정확하지 않거나 내부 벽이 하중을 견딜 만큼 강하지 않다는 것을 알게 되었을 때 어떻게 해야 할까요? 시프트 레프트 테스트는 계획 단계에서 품질을 점검하고 개발 단계 전반에 걸쳐 테스트를 계속 수행함으로써 이러한 문제를 예방합니다. 그리고 이를 통해 우리는 최종 결과물의 품질을 높일 수 있습니다.

 

개발 단계에서 품질 검사를 계속한다는 것은 변경 사항을 문제없이 통합하기 위해 작업마다 품질 검사를 반복하는 것을 의미합니다. 집을 짓는 과정에서 내벽을 쌓을 때마다 품질을 점검하고 문제가 있으면 바로 수정하는 것과 같습니다. 시프트 레프트 테스트는 광범위한 테스트를 수행하기 위해 자동화된 테스트와 지속적 통합continuous integration(CI) 및 지속적 전달continuous delivery(CD) 프로세스에 크게 의존합니다. CI/CD 프로세스는 마이크로 및 매크로 수준에서 품질 검사를 자동으로 수행하며 CI 서버에서 지속적으로 실행됩니다. 이는 같은 작업을 수동으로 테스트하는 것과 비교했을 때 노력과 비용이 훨씬 더 적게 들죠.


소프트웨어 개발 초기 과정에 테스트를 통합하는 개념은 기능적 애플리케이션 테스트에만 국한되지 않습니다. 보안 테스트, 성능 테스트 등 일반적인 테스트에 적용할 수 있습니다. 예를 들어 보안 분야에 시프트 레프트를 적용한다면 코드를 커밋하기 전에 탈리스만Talisman과 같은 코드의 보안 취약점을 스캔하는 도구를 실행하도록 통합할 수 있습니다.

 

시프트 레프트는 소프트웨어 개발의 모든 단계에서 다양한 역할의 구성원이 품질 검사에 참여하기 때문에 ‘품질은 팀 전체의 책임이다’를 강조합니다. 좋은 품질의 소프트웨어를 제공하기 위해서는 팀 구성원 모두가 다양한 품질 테스트 기술 역량을 쌓아야 합니다.

 

 

10가지 풀스택 테스트

과거에는 테스트를 수동 테스트와 자동 테스트로 나누는 경향이 있었습니다. 하지만 지난 수십 년 동안 기술이 발전하면서 고품질의 웹, 모바일 애플리케이션을 제공하기 위한 다양한 품질 테스트가 생겨났습니다. 아래 이미지는 풀스택 테스트를 효율적으로 수행하기 위한 10가지 테스트를 나타냅니다.

 

10가지 풀스택 테스트.jpg

 

 

 

좋은 소프트웨어 품질을 위한 풀스택 테스트 10가지 유형은 무엇이 있을까요? 지금부터 하나씩 알아보겠습니다.


① 수동 탐색적 테스트

수동 탐색적 테스트는 수동 테스트와는 다릅니다. 수동 테스트는 주어진 요구 사항을 단순히 확인하는 것을 의미하며 분석적 사고를 요구하지 않죠. 반면 수동 탐색적 테스트는 사용자 스토리에 기록된 것 외에도 다른 시나리오를 도출하고, 테스트 환경에서 시뮬레이션하고, 애플리케이션의 작동을 관찰하는 기술입니다. 수동 탐색적 테스트는 논리적이고 분석적인 사고를 요구하며 버그 없는 애플리케이션을 만들기 위해 꼭 필요한 기술입니다. 


② 자동화된 기능 테스트

자동화된 기능 테스트는 사람의 개입 없이 자동으로 요구 사항을 테스트하는 것으로, 앞서 설명한 시프트 레프트 테스트의 핵심 중 하나입니다. 테스트를 자동화하면 애플리케이션의 규모가 커졌을 경우 수동 테스트 작업의 부담을 줄일 수 있습니다. 이를 위해 다양한 애플리케이션 계층에서 테스트를 작성하는 데 사용할 수 있는 도구를 알아야 합니다. 또한 자동화된 테스트의 안티 패턴을 찾고 이를 피할 수 있어야 합니다. 


③ 지속적 테스트

CD는 대규모 단일 릴리스 대신, 짧은 주기로 사용자에게 점진적으로 피드백을 제공하는 방식입니다. CD를 통해 기업은 조기에 수익을 창출하고 사용자의 피드백을 기반으로 제품 전략을 빠르게 평가하고 조정할 수 있습니다. CD를 위해서는 애플리케이션이 항상 릴리스 준비 상태를 유지할 수 있도록 지속적으로 테스트해야 합니다. 가장 현명한 방법은 품질 검사를 CI/CD 파이프라인에 통합하고 자동화하여 테스트를 간편하게 자주 실행하는 것입니다. 지속적 테스트Continuous Testing, CT는 팀이 빠르게 피드백을 받고 CI/CD 파이프라인에 테스트를 효율적으로 통합할 수 있도록 각 단계에서 어떤 유형의 자동화된 테스트를 수행해야 하는지 결정하는 것을 포함합니다. 


④ 데이터 테스트

‘데이터가 곧 돈이다’ 또는 ‘데이터는 미래의 석유다’라는 말을 한 번쯤 들어봤을 것입니다. 이는 오늘날 데이터 무결성을 위한 테스트가 얼마나 중요한지 강조합니다. 사용자의 데이터가 손실되어 사용자에게 잘못된 데이터를 보여준다면 애플리케이션은 사용자의 신뢰를 잃을 수 있죠. 데이터 테스트는 웹과 모바일 애플리케이션에서 일반적으로 사용되는 다양한 유형의 데이터 저장 및 처리 시스템(데이터베이스, 캐시, 이벤트 스트림 등)에 관한 지식과 적절한 테스트 케이스를 도출할 수 있는 능력이 필요합니다.


➄ 시각적 테스트

애플리케이션의 룩앤필look and feel은 기업의 브랜드 가치에 크게 기여합니다. 특히 수백만 명이 사용하는 B2C 제품의 경우, 낮은 시각적 품질은 브랜드 가치에 즉각적으로 악영향을 미칠 수 있습니다. 따라서 애플리케이션에 대해 시각적 테스트를 수행하여 사용자에게 조화로움과 쾌적함을 제공할 수 있는지 검증해야 합니다. 시각적 테스트를 위해서는 웹 애플리케이션의 UI 구성 요소가 상호 작용하는 방식을 이해해야 합니다. 시각적 테스트는 기능 테스트와는 다른 방식의 도구를 사용하여 자동화됩니다. 


➅ 보안 테스트

보안 침해는 오늘날 전 세계적으로 빈번하게 발생하고 있습니다. 페이스북과 트위터 같은 대기업도 예외는 아니죠. 보안 문제는 민감한 정보의 유출, 법적 처벌, 브랜드 평판 측면에서 사용자와 기업 모두에게 막대한 손해를 입힐 수 있습니다. 지금까지의 보안 테스트는 개발이 끝날 무렵에 보안 문제를 찾기 위해 진행되어 왔습니다. 하지만 전문적인 보안 테스트 인력이 부족하고 보안 침해 사례가 증가함에 따라 소프트웨어 개발팀은 기본 보안 테스트를 일상적인 작업의 일부로 통합하는 것이 좋습니다.


⑦ 성능 테스트

앞서 플립카트 사례와 같이 애플리케이션의 성능이 조금만 떨어져도 기업의 매출과 평판에 막대한 손실이 발생할 수 있습니다. 성능 테스트는 서로 다른 애플리케이션 계층에서 주요 성능 지표를 측정하는 것을 포함합니다. 성능 테스트 또한 자동화하고 CI 파이프라인에 통합하여 지속적인 피드백을 얻을 수 있습니다.


접근성 테스트

오늘날 웹과 모바일 애플리케이션은 우리의 일상이 되었습니다. 장애를 가진 사람이 애플리케이션을 쉽게 이용할 수 있도록 하는 것은 많은 나라에서 법적으로 의무화되었으며, 이는 윤리적으로도 옳은 일입니다. 접근성 테스트를 이해하려면 먼저 법에서 요구하는 접근성 기준을 알아야 합니다. 그런 다음 수동 또는 자동화된 접근성 감사 도구를 사용해 이러한 기준을 충족하는지 확인해야 합니다.


교차 기능 요구 사항 테스트

교차 기능 요구 사항 (cross-functional requirement, CFR)은 가용성availability, 확장성scalability, 유지 보수성maintainability, 관찰 가능성observability과 같은 요구 사항을 포함합니다. 일반적으로 기능적 요구 사항이 가장 많은 관심을 끌지만 애플리케이션의 품질을 결정짓는 중요한 요소는 CFR입니다. CFR 테스트를 만족시키지 못한다면 기업, 소프트웨어 팀, 최종 사용자 모두에게 실망스러운 결과를 안겨줄 것입니다. 따라서 CFR 테스트는 가장 기본적인 테스트라고 할 수 있습니다.


⑩ 모바일 테스트

2021년 기준 구글 플레이와 애플 앱 스토어에 등록된 앱의 수는 총 570만 개에 달합니다. 모바일 앱의 수가 폭발적으로 증가한 주요 원인은 모바일 기기 이용 증가에 있습니다. 전 세계 모바일 및 태블릿 기기의 인터넷 사용량은 데스크톱의 인터넷 사용량을 초과했다는 발표 (웹 분석 회사인 글로벌 스탯 Global Stats의 2016년 발표)도 있죠. 따라서 오늘날 모바일 애플리케이션을 테스트하고 모바일 장치 간 웹 사이트 호환성을 테스트하는 것은 매우 중요합니다.


모바일 애플리케이션을 테스트하기 위해서는 앞서 언급한 모든 기술이 필요하지만 사고 방식의 변화도 필요합니다. 또한 모바일 애플리케이션에서 다양한 품질 검사를 수행하려면 모바일 테스트 도구를 학습해야 합니다.

 

 


 

 

위 글은 <풀스택 테스트: 10가지 테스트 기술의 기본 원칙과 전략>의 내용을 기반으로로 작성 되었습니다. 웹과 모바일 애플리케이션의 모든 측면에서 품질을 테스트할 수 있는 풀스택 테스트에 대한 자세한 내용은 하기 링크의 도서에서 만나보실 수 있습니다.

 

풀스택 테스트.jpg

풀스택 테스트: 10가지 테스트 기술의 기본 원칙과 전략

 

댓글 입력