책 발췌 – 크로스기능 요구사항에 대한 테스팅 전략 by Gayathri Mohan
출처: 2022년, Full Stack Testing - A Practical Guide for Delivering High Quality Software, Gayathri Mohan, 10장. Cross-Functional Requirements Testing
크로스기능 요구사항(Cross-Functional Requirements: CFR)
기업은 고객을 위한 가치를 더하고 수익을 얻기 위해 수백 가지 기능적 요구사항(functional requirements)을 생각하는 경우가 많다. 이러한 기능적 요구사항은 고객에게 제공되는 핵심 비즈니스 서비스를 구성한다. 예를 들어 차량 호출 앱(ride-hailing app)에서 차량을 예약하거나 인터넷 뱅킹을 통해 결제하는 기능이 있다. 그러나 이러한 기능적 요구사항을 구현하는 것만으로는 성공을 보장할 수 없다. 차량 서비스를 예약하려고 하는데 사용 가능한 옵션 목록을 보려면 5분을 기다려야 한다고 상상해 보라. 그 시간에 택시를 부를 수도 있는데 왜 굳이 앱을 사용해야 할까? 또는 앱이 기능적으로는 잘 작동하지만 차량을 예약하려면 많은 단계를 거쳐야 할 수도 있다. 이 복잡성에 실망한 사람들은 조만간 보다 사용자 친화적인 대안을 찾게 될 것이다. 마찬가지로 앱이 나의 개인 정보를 노출하고 있다는 사실을 알게 되면 해당 앱을 제거하게 될 것이다. 이것들은 비즈니스 및 소프트웨어 팀이 크로스기능 요구사항(CFR)에 집중해야 하는 이유에 대한 몇 가지 예일뿐이다. CFR은 애플리케이션을 완성하고 높은 품질을 불어넣는다.
CFR은 모든 기능적 특성(functional features)에 내장되어야 하는 애플리케이션의 특성이다. 예를 들어, 차량 호출 앱의 CFR로 앱이 x초 내에 사용자에게 응답해야 하고, 사용자는 모든 액션을 n 단계 이내에 수행할 수 있어야 하며, 앱은 사용자의 세부 정보를 안전하게 전송 및 저장해야 한다 등이 있다. CFR이 모든 기능에 걸쳐 철저하게 구축되고 테스트되어야만 앱이 시장에서 강력한 경쟁자로 부상하는 기회를 얻을 수 있다.
크로스기능 요구사항(CFR) vs. 비기능 요구사항(NFR)
과거 소프트웨어 요구사항을 기능적(functional)과 비기능적(non-functional)으로 구분하는 경우가 많아서 CFR을 비기능 요구사항(non-functional requirements: NFR)으로 부르는 것을 자주 듣게 된다. 저자는 크로스기능(cross-functional)이라는 용어를 선호한다. 이 용어는 요구사항이 애플리케이션 전체에 분산되어 있고 모든 사용자 스토리 및 기능의 일부로 구축 및 테스트되어야 함을 강조하기 때문이다. 또한 "비기능적(non-functional)"이라고 부르면 그것이 필수적이지 않다는 잘못된 인상을 줄 수 있다. 이는 우리가 달성하고자 하는 목표, 즉 고품질 애플리케이션 구축에 완전히 어긋나는 것이다!
CFR 테스팅 전략 – FURPS 모델
모든 소프트웨어 요구사항을 분류하는 데 사용되는 FURPS 모델을 통해 상위 레벨의 CFR 테스팅 전략을 수립할 수 있다. FURPS는 기능성(Functionality), 사용용이성(Usability), 신뢰성(Reliability), 성능(Performance) 및 지속가능성(Supportability)을 나타낸다.
- Functionality: 이 범주의 소프트웨어 요구사항은 로그인 흐름, 승차 가능 흐름, 예약 흐름과 같은 애플리케이션의 사용자 흐름(user flows)으로 경험할 수 있다.
- Usability: 이 범주는 시각적 품질, 브라우저 호환성, 접근성, 사용 편의성 등과 같이 사용자 경험(user experience)에 영향을 미치는 일련의 요구사항을 나타낸다.
- Reliability: 이 요구사항은 애플리케이션의 일관성(consistent), 고장허용성(fault tolerant) 및 복구가능성(recoverable)을 높이는 데 기여한다.
- Performance: 이 요구사항은 백엔드 KPI 및 프런트엔드 성능 지표와 관련이 있다.
- Supportability: 이 범주에는 유지관리가능성(maintainability), 테스트가능성(testability), 코드 안전성(secure code) 등과 같은 모든 진화적인 코드 품질이 포함된다.