국방에 기여하는 국방기술품질원의 이야기

기술로 품질로

[기품人터뷰]

항공기 품질보증에서 소프트웨어 테스팅까지

2024 소프트웨어 테스트 경진대회 최우수상 수상

항공3팀 이준호·김동현 연구원

지난 8월, 과학기술정보통신부와 정보통신산업진흥원이 주최하는 제3회 소프트웨어 테스트 경진대회에서 최우수상을 받는 쾌거를 올렸다.
본 대회는 전국 각지에서 참가한 40개 팀이 크라우드 테스팅* 기반으로 기업의 제품을 테스트하여 소프트웨어 품질 및 테스팅 분야의 실력을 겨룬다.
우리는 기업의 베타 버전 제품(어플리케이션)을 사용자 관점에서 철저하게 검토해 숨겨진 결함을 밝혀내고자 했다. 또한, 기업에 결함 발생 시나리오를 제공하고, 더 나아가 사용자 친화적인 개선방안도 함께 제시하였다. 그 결과, 최종 2위(최우수상)에 이름을 올려 대구광역시장상을 수상하는 영예를 안았다.
항공3팀 이준호 연구원
항공3팀 김동현 연구원
Q대회에 참가하게 된 계기

A. 본 대회에 앞서 신입직원인 우리의 실무역량을 점검해보고자 부산정보산업진흥원이 주최하는 ‘동남권 소프트웨어 품질캠프’에 참가했습니다. 해당 캠프는 소프트웨어 품질과 테스팅에 대한 이론 교육 후, 실제 기업의 베타 버전 제품(어플리케이션)을 테스팅하고 결함을 도출해 결과보고서를 작성하는 방식으로 진행됐는데요. 저희는 제품을 테스트하는 과정에서 기능적인 문제뿐만 아니라 시스템이 충돌하는 치명적인 결함을 다수 발견했습니다. 이러한 점을 인정받아 최우수상(경남테크노파크원장상, 25팀 중 2위)을 수상했고, 여기서 얻은 자신감을 바탕으로 전국대회에 과감히 참가하게 됐습니다.

동남권 소프트웨어 품질캠프(2024.6.25.~6.26.) 및 시상식

Q소프트웨어 테스팅에 관심을 갖게 된 계기

A. 현재 국방기술품질원 항공센터에서 회전익 항공기의 품질보증을 담당하고 있습니다. 항공기에 장착되는 구성품이 정해진 시험 절차에 따라 정상적으로 동작하는지를 확인하는 업무도 수행하는데요. 해당 과정에서 “절차와 요구도에서 벗어난 비정상적인 테스트 값을 입력할 경우, 시스템은 어떻게 동작할 것인가?”란 의문을 갖게 됐습니다. 예를 들어, 기능시험에서 항공기에 장착되는 무장 탄의 수를 입력할 때, 실제 장착되는 탄의 수보다 많은 값을 입력하면 시스템은 어떻게 반응할지에 대한 고민이 많았습니다. 이러한 고민 속에서 자연스럽게 소프트웨어 테스팅에 관심을 갖게 된 것 같습니다.

Q소프트웨어 테스팅 기법은?

A. 소프트웨어 테스팅 기법은 종류가 다양한데, 그 중 많이 알려진 블랙박스 테스팅(Black-box testing) 기법과 화이트박스 테스팅(White-box testing) 기법에 관해 설명하겠습니다.

블랙박스 테스팅 기법은 소프트웨어 내부 구조에 대한 지식 없이 입력에 대한 출력만을 기준으로 소프트웨어의 기능을 테스트합니다. 이 기법은 ‘블랙박스’라는 용어에서도 알 수 있듯이, 상자 안이 어떻게 생겼는지 모른 채로 기능을 테스트하는 데 목적이 있습니다. 반면, 화이트박스 테스트 기법은 ‘화이트박스’라는 용어에서 알 수 있듯이, 상자 안이 어떻게 생겼는지 아는 상태로 내부가 어떻게 동작하는지를 테스트하는 데 목적이 있습니다.

쉽게 설명하면 블랙박스 테스트 기법은 ‘기능’ 중심으로 테스트를 수행하고, 화이트박스 테스트 기법은 내부 코드의 실행률 등 ‘로직’ 중심으로 테스트를 수행합니다. 예를 들어, 로그인 화면에서 아이디와 비밀번호를 입력했을 때, 블랙박스 테스트 기법은 “로그인 성공” 또는 “로그인 실패”라는 결과가 제대로 나오는지 확인합니다. 반면, 화이트박스 테스트 기법은 로그인 기능을 수행하는 함수의 코드 실행률 등 내부 코드를 분석합니다.

구분 블랙박스 테스팅 화이트박스 테스팅
내부 구조 이해 필요 없음 필요함
테스트 기준 기능적 요구사항 코드의 논리와 실행 경로
테스트 목적 소프트웨어가 (기능적) 요구사항을 만족하는지 확인 프로그램의 동작이 올바른지, 코드가 제대로 실행되는지 확인
테스트 방법 입력과 출력 기반 테스트 코드 커버리지, 제어 흐름 분석 등 내부 코드 분석 기반 테스트
테스트 예시 로그인 기능 테스트 로그인 기능을 수행하는 함수의 모든 실행경로 테스트
테스트 종류 동등 분할, 경계값 분석 등 문장 커버리지, 조건 커버리지, 경로 커버리지 등

블랙박스 테스팅에 사용되는 대표적인 테스트 종류로는 동등 분할(Equivalence Partitioning), 경계값 분석(Boundary Value Analysis), 의사결정 테이블 테스트(Decision Table Testing) 등이 있습니다.

동등 분할 기법은 입력값을 다양한 동등한 그룹으로 나누고, 각 그룹의 대푯값을 선택하여 테스트하는 방법입니다. 다양한 입력 조건을 테스트함으로써 프로그램 전체를 효과적으로 검증할 수 있습니다. 예를 들어, 나이를 입력하는 프로그램이 있다고 가정하겠습니다. 0~100 사이의 입력값을 허용하는 프로그램에서 동등 분할을 사용하면 다음과 같이 그룹을 나누고 테스트값을 선정할 수 있습니다.

그룹 구분 범위 테스트 값
그룹 1 미성년자 0 ~ 18 9
그룹 2 성인 19 ~ 64 42
그룹 3 노인 65 ~ 100 77

경계값 분석 기법은 입력값 범위의 경계에서 테스트를 수행하여 결함을 찾아내는 기법입니다. 이 기법은 입력값의 경계에서 결함이 발생할 확률이 높다는 가정하에 테스트를 수행합니다. 정수 1~100을 입력받는 프로그램에서 경계값 분석을 활용할 경우 다음과 같이 테스트값을 선정할 수 있습니다.

경계값 1 10
경계값 바로 안쪽의 값 2 9
경계값 바로 바깥쪽의 값 0 11

화이트 박스 테스팅에 사용되는 대표적인 테스트 종류로는 문장 커버리지(Statement Coverage), 조건 커버리지(Condition Coverage), 경로 커버리지(Path Coverage) 등이 있습니다. 문장 커버리지 테스트는 코드의 모든 문장이 최소 한 번은 실행되는지 확인하는 기법입니다. 조건 커버리지 테스트는 조건문이 참과 거짓 두 가지의 결과를 모두 생성하는지를 확인합니다. 경로 커버리지는 코드 내 실행 가능한 모든 경로를 테스트하여 모든 분기점과 루프가 예상대로 작동하는지를 확인합니다.

Q소프트웨어 테스팅 전략과 인상 깊었던 결함

A. 기업의 제품이 어떻게 설계됐는지, 내부 로직을 알 수 없어 블랙박스 테스팅 기법을 활용해 기능 중심의 테스트를 수행했습니다. 특히, 최대한 많은 테스트 케이스를 생성하여 다양한 관점에서 테스트하려고 노력했는데요. 예를 들어, 로그인 기능을 테스트할 때, 로그인 성공 또는 실패 여부뿐 아니라 동등 분할 기법을 활용해 다양한 비밀번호(언어조합, 길이 등) 그룹을 나누고, 각 그룹에서 대푯값을 선택하는 방식을 활용했습니다. 또, 입력값에 대한 출력값이 예상되는 경우도 빠짐없이 확인했는데요. 예를 들어, “1+1”이라는 값을 입력할 경우 당연히 “2”가 출력될 것으로 예상되지만, 그럼에도 이러한 기본적인 기능에 오류가 없도록 테스트를 진행했습니다.

다양한 테스트 케이스를 수립하여 시험한 결과, 사소한 오류부터 시스템에 치명적인 결함을 발견할 수 있었는데요. 가장 인상 깊었던 소프트웨어 결함은 SQL 인젝션(Injection)*과 검색창의 입력값 크기 초과로 인한 결함입니다.

SQL 인젝션 결함은 로그인 화면에서 다양한 테스트 값으로 로그인을 시도하는 상황에서 발생했습니다. 비밀번호 테스트 값에 서버의 데이터베이스를 공격하는 SQL 문구를 포함해 봤는데요. 그 결과, 사용자가 설정한 비밀번호와 다른 비밀번호를 입력하여도 로그인에 성공하는 문제가 발생한 것입니다. 검색창의 입력값 크기 초과로 인한 결함은 검색창에 지나치게 많은 텍스트를 입력했을 때 발생했습니다. 챗GPT의 검색 엔진을 활용해 검색창에 과도하게 많은 텍스트를 입력해 봤는데요. 그 결과, 시스템이 충돌하는 문제가 발생했습니다.

이러한 결함을 직접 발견하면서 제품의 기능이 정상적으로 동작하는 것도 중요하지만, 보안성과 사용성 등 비기능적인 요소도 무척 중요함을 느낄 수 있었습니다.

Q소프트웨어 경진대회에서 최우수상을 수상하며

A. 저희는 최대한 사용자의 관점에서 제품의 기능을 세분화하여 테스트하고자 노력했는데요. 이러한 노력 덕분에 전국 각지에서 참가한 40팀(80명) 중 최우수상(2등)을 받는 영예를 얻을 수 있었습니다.

이번 대회로 고객의 만족도를 높이기 위해서는 소프트웨어 결함을 사전에 제거하는 ‘소프트웨어 테스팅’이 매우 중요함을 알게 됐습니다. 또한, 앞으로의 업무 방향을 정하는 데도 많은 도움이 됐는데요.

작은 규모의 소프트웨어에서도 사용자가 불편해할 만한 다양한 결함이 발견된 것처럼, 항공기와 같이 규모가 크고 복잡한, 우리군의 생명과 전투력을 결정하는 무기체계의 소프트웨어 결함을 방지하기 위해서는 더욱 체계적인 품질관리가 필요함을 느꼈습니다.

앞으로 항공기의 소프트웨어 결함을 조기에 식별하고 제거하는 데 더욱 관심을 갖고, 소요군이 만족하는 회전익 항공기를 우리군에 제공하기 위해 노력하겠습니다.

2024 소프트웨어 테스트 경진대회 시상식

* 크라우드 테스팅
크라우드 테스터(Crowd Tester)가 다양한 실환경에서 표준적인 테스트 프로세스에 따라 수행하는 일련의 테스트 활동
* SQL 인젝션(Injection)
입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격방식