Test management: The greatest risk

위험 관리 전문가 Felix Redmill은 테스트 매니저의 결정에 따라 프로젝트나 팀
그리고 산출물까지 영향을 받는 다는 것을 상세히 고려해야 한다고 말한다.

개발중인 하나의 시스템을 테스트 하는 것은 그 자체로도 하나의 프로젝트이다.
효과적으로 수행 하기 위해서 신중한 계획이 필요하다. 테스터들이 테스트 계획대로
움직이지 못하게 강제하는 수많은 요인들이 있기 때문에 동적인 프로젝트 관리가
요구된다. 테스트 매니저는 프로젝트 매니저가 되어야 할 필요가 있으며
단지 그때 그때 마다 적절한 매니저가 아닌 탁월한 매니저가 되어야 한다.

모든 매니저들은 결정을 내려야 할 필요가 있다. 그들은 진행을 계획하고 모니터링
하며 가장 필요한 곳으로 직원을 배치한다. 그들은 변경 사항을 예상해야 하고,
변경 사항이 발생했을 때 변경 사항을 뒤집을 것인지, 약간 바꿀 것인지, 그것을
우선시 할 것인지 결정을 내려야 한다. 의사 결정의 업무는 관리 업무일 수는 있지만
그렇게 두드러지진 않으며, 관리자의 몫은 아니다.

프로젝트는 목적을 달성하기 위한 다양한 접근 방법이며 의사 결정은 목적을 달성
하는데 있어 매우 중요하다. 변경이란 빈번하게 발생할 수 있으며 항상 불가피하게
계획으로 부터 벗어나게 될 수 있다. 변경의 영향을 컨트롤하는 것은 매우 어렵지만(
가끔은 갑자기 발생한 변화 조차도), 변화들을 예측하는 능력과 그 변경으로 인해
발생할 수 있는 영향을 초기에 무력화 시키기 위해 조치를 취하는 것은 더 필요하다.
변화의 양에 따라 완전히 압도당 할 수도 있고, 가끔은 프로젝트 매니저를 완전히
반발 모드로 돌변시킬 수도 있다. 하지만 훌륭한 프로젝트 매니저는 변경된 상황으로
이끄는 원인을 찾을 수 있으며, 그 변경이 발생시킬 수 있는 효과를 예상하고 그와
반대로 행동하거나 오히려 그 상황에서 이득을 찾아내기도 한다. 이러한 프로젝트
매니저들은 매우 조심스럽게 계획을 세우지만 그 계획을 자신의 목적을 달성하기
위한 도구로 인식한다. 그들은 목표에 맞추어 계획을 끊임없이 체크하며, 계획이
목표에서 벗어날 때를 발견하고 쓸모 없게된 계획을 새로운 것으로 대체한다. 이런
행동은 계획을 세우는데 시간이 필요하기 때문에 용기가 있어야 하며, 궁극의 목적은
원래의 목표를 달성하는 것이다.

모든 매니저들은 자신의 목표를 위협하는 위험 요소를 인식하고 있어야 한다.
프로젝트는 그 속성상, 특별히 위험이 많을 수 있다. 테스팅 프로젝트가 올바르게
셋업 되어 있지 않거나, 상위 개발 프로젝트에 정확하게 통합되어 있지 않거나, 최고
수준의 활동적인 관리하에 있지 않다면 매우 위험해질 수 있다. 시간과 예산의 여유
양쪽다 자주 시작하기에는 너무나 모자라고, 제한된 범위 이상으로 재 테스트의
필요가 발생할 수도 있다. 스케쥴은 계획을 세우기 어렵고 개발팀으로 부터 아주
늦게 릴리즈가 전달되어 오는 경우 혼돈에 빠질 수 있다. 작업 인원 요구 사항의
변경은 자주, 빈번하게 발생할 수 있으며 그 폭은 중요해질 수 있다.

모든 프로젝트 매니저들에게는 때때로 적절하지 못한 정보를 기초로 판단을 내릴
필요가 있다. 하지만 결정에 필요한 것을 미리 예견하고 시간이 없더라도 사전에
필요한 정보를 얻으려고 착수하는 것은 가능하다. 훌륭한 의사 결정은 모든 프로젝트
매니저의 필수 조건이고 의사 결정의 특성은 특별히 테스팅 프로젝트의 매니저에게
매우 필요하다.

프로젝트의 이런 상황에서 고려되어야 할 세 가지 중요한 위험 요소 범주가 있다.

첫째로, 테스터의 관점에서 볼 때 '앞으로의 위험'인 시스템의 운영에 관련한 위험
요소가 있다. 이것들은 '위험 요소 기반의 테스팅'의 계획을 기초로 해서 다루어질
수 있다.

둘째로, 소프트웨어 개발팀으로 부터 오는 소프트웨어의 불확실성과 낮은 수준의
품질이 테스팅 프로젝트에 강요하는 '후방으로 부터의 위험'이 있다.

세째로, 테스팅 프로세스 그 자체에서 만들어진 위험 요소가 있다. 이것들은 내재되어
있는 리더쉽, 팀워크, 훈령, 테스팅 활동의 할당 및 배분, 작업의 우선 순위 조정
등으로 부터 발생한다.

만일 앞으로의 위험을 테스트 계획에서 알 수 있다면, 그것들은 고려되어야 한다.
테스트 매니저는 그 위험들을 구별해내고 분석해서 테스트 계획에 반영해야 하며
그런 다음 무언가 잘못되어 질때 재계획의 기초로 그것을 재사용한다. 이것은 사소한
부분이 아니며 이전 관련 기사들에서 다루어졌었다.

두 번째 유형인 후방으로 부터의 위험은 처음에는 테스팅 프로젝트의 통제를 받지
않는 것처럼 보일 수 있다. 하지만 테스트 매니저가 프로젝트 회의 자리에 않게 되면
프로젝트 계획에 휘말리게 되어 그녀는 개발과 테스트 계획 모두에게 동등한 영향을
미칠 수 있다. 더우기, 테스트 매니저의 개발 매니저는 동료로만 관계가 있는 것이
아니라 공급자와 고객으로 까지 확장된다. 그녀는 계획되고 관리되어야 하는 테스팅
서비스를 제공하는 공급자이다. 그녀는 또 시간과 품질의 통과 기준에 적합한
소프트웨어를 제공하는 개발팀에 의지하는 고객이기도 하다. 구조적이지 않거나,
잘못된 문서화 그리고 불충분한 코드 검토, 기한 미 엄수 들이 기준이 될 수는 없다.
하지만 받아 들여져서는 안된다. 전문가 기질이란 '일을 잘하는 것'에 국한되지
않고 우리가 의지하는 다른 사람들의 훌륭하고 믿을 수 있는 업무를 요구한다.
전문가들에게는 그들 사이의 업무 처리를 위해서 훌륭한 특정 품질 요구 사항이
있을 것이다. 적절한 사전 합의는 당황하지 않고 '예외'나 '실수'에 대해서 정상적인
반응을 보이는 좋지 않은 품질에 대해서 거부하게 한다. 만일 테스트 매니저가
정기적으로 개발 매니저와 만나서 릴리즈 전달과 테스트 수용 기준, 문제 사항 협의,
제안 발의 및 수용 그리고 계획 개선에 대해서 동의한다면, 테스트 매니저는
위험 요소만 감소 하는게 아니라, 그녀의 관리 대상들에게 전달할 정보를 얻게 된다.

따라서, 테스트 매니저가 테스팅 프로젝트의 후방으로 부터의 위험을 상당히 감소시킬
수 있는 여러 가지 방법이 존재한다. 훌륭한 테스트 매니저는 위험 기반의 접근법을
사용해서 감소 되어야 하는 모든 위험 요소와, 실제 구별해 내고 감소시키는 절차를
결정해서, 다른 이들이 염려하는 형식적이고, 피할 수 없고 제어되지 않는 문제를
극복할 수 있다.

테스팅 프로젝트 내에서 만들어지는 세번째 위험 요소는 다양한 원인을 가지고 있지만
모든 것은 테스트 매니저의 판단 범위 내에 있다.(테스트 매니저가 제거할 수 있다고
말하지 않는) 프로젝트나 실제 모든 종류의 관리 업무는 의사 결정으로 부터 발생할
수 있는 위험을 제어하는 것이다. 테스팅 프로젝트가 의사 결정이 많기 때문에, 특히
위의 내용이 적용된다. 어떤 의사 결정은 첫째 카테고리인 '앞으로의 위험'을
발생시킨다. 예를 들어, 우리는 무엇을 테스트 할지, 어떻게 테스트 할지만 결정해야
하는 것은 아니며 무엇을 가장 먼저 테스트해야 할지도 결정해야 한다. 위험 요소가
존재하기 때문에, 시간이 부족한 경우 무엇이 충분히 테스트 되어야 할까?
그런 다음에 어떻게 그것을 알 수 있을까? 이 모듈이나 하부 시스템을 테스트 하지
않았을 때 발생할 수 있는 내재된 결과를 이해할 수 있을까? 결과를 분석하지 못하는
테스트 매니저는 안에 들어 있는 위험 요소를 알기 위해 솔직하게 요구할 수 없으며,
그녀의 결정에 대해서도 확신하지 못하게 된다.

작업 스케쥴에 관련된 또 다른 결정은 세번째 카테고리 유형의 위험 요소를 테스팅
프로젝트 그 자체에 발생시킨다. 예를 들어, 하부 시스템 테스팅에 허용된 시간이
어느 정도인지 알려면 어떻게 해야 하는가? 첫번째 어림 짐작은 테스트 계획을
수행하는데 얼마나 오래 또는 얼마나 많은 맨아워가 필요한지 추정하게 한다.
하지만 이것은 최소한의 허용치이다. 어쨋든 테스트 매니저가 대략적인 추정을 해서
얼마나 확신하게 될까? 이것이 '교육된' 추정일까? 유사한 하부 시스템을 테스트한
경험에서 나온 것일까? 업무를 할당 받은 테스트의 지식을 근거로 한 추정일까?
만일 낙관적인 추정이고 경험이 없는 테스트가 일을 맡았다면, 스케쥴에 차질이
생기는 것은 거의 필연적인 결과이다. 재 테스트에 들어가는 시간과 리소스의
스케쥴링은 또 다른 문제가 되거나 위험한 결정을 수반한다. 만일 이러한 일이
개발팀에게 달려 있다면, 우리는 어떻게 알 수 있을까? 만일 개발 매니저가 경험이
없거나 문제가 있는 디자이너나 프로그래머를 수정 작업에 투입하거나, 관리를 소홀히
하거나, 검증 하는데 실패한다면, 재 테스트는 더 늘어나거나 반복되어야 할 것이다.
이렇게 될 가능성이 얼마나 되나? 만약 테스트 매니저가 그녀의 팀 내부에만 이
내용을 언급하는 것이 아니라 개발 매니저에게도 한다면 위험을 피할 수는 없지만
감소시킬 수는 있다.

다음으로 우연적으로 발생하는 일이 있다. 얼마나 많은 테스트 팀의 인원과 리소스가
투입될 수 있을까? 너무나 많이 투입되는 경우 테스트 예산이 불필요하게, 불확실하게
, 턱없이 증가될 것이다. 너무 적게 투입되는 경우 소소한 지연이 쌓이게 되어
프로젝트가 범위를 넘어서거나 테스트가 충분치 않게되고, 테스트의 목표에 부합하지
못하게 된다. 앞으로 발생할 수 있는 우연성 요구를 정확하게 예측하는 것은 가능하지
않지만 테스트 매니저는 위험 요소와 의사 결정의 균형을 맞추기 위해 질문의 양쪽
면에서 부터 증거를 모아야 할 필요가 있다. 테스트 매니저에게 있어서 결정은 업무와
재앙 양쪽 모두에 해당된다.

일반적으로 소프트웨어 개발 프로젝트는 문제가 많으며, 그 안에 속한 테스트
프로젝트는 특별히 더 그렇다. 현실적인 주요한 원인은 프로젝트 관리가 조악하다는
사실이 종종 간과된다. 우리의 타성은 지연과 비효율이 더 낫게 만들수도 있었던
결정의 결과로 생각하기 보다는 오히려 '당신이 예상하지 못했던" 것으로 치부되는
경우가 많다. 모든 결정은 위험이 수반되고, 의사결정은 진보된 정보를 수집해서
내려지고, 위험을 평가해서 지원되어야 한다. 그리고, 적절한 시점에서 위험 관리
활동에 의해 보호되어야 한다. 간단한 상황에서는 직관(감)에 의한 통찰이 충분하지만
많은 프로젝트의 상황에서는 위험 분석과 관리에 대한 이해를 필요로 한다.

테스트 매니저의 결정은 테스트 프로젝트의 성공에 결정적이다. 그들은 시스템의
운영에만 영향을 미치지 않고 테스트 팀의 능률과 효율에도 영향을 미친다. 부장
관리자가 재능있고 적합한 테스트 매니저 임명과 적시에 제공되고 충분히 지원되는
중요성에 대해서 알고 있는가? 그들이 내린 선택이 테스팅 프로젝트에 대단히 큰
위험을 가져 올 수 있는 결정일 수 있다는 사실을 인식하고 있는가?

'It's IT > It's Testing(job?)' 카테고리의 다른 글

사공이 많으니까 배가 하늘을 난다.쩝  (0) 2007.12.18
How To Design Practical Test Cases by Tsuneo Yamaura (1998, IEEE Software)  (0) 2007.12.17
Test 간략  (0) 2007.08.23
Testing 용어  (0) 2007.08.23
GCF  (0) 2007.08.16

인수 테스트


인수 테스트는 고객이 개발된 시스템을 최종 인수하기 전 제공된 기능과 성능이 고객의 요구사항과 일치하는지를 고객이 주관하여 최종으로 실행하는 것이다. 실제 사용자를 기준으로 테스트가 진행됨으로 비즈니스 측면의 테스트가 진행된다. 일반적으로 고객의 통합 테스트에 대한 참여를 통해 발생한 에러에 대한 수정, 보완 등이 끝난 것을 확인한 경우 인수 테스트를 대체하곤 한다.


현장 테스트


현장 테스트는 실제 사용자의 인프라 환경과 역할에 따른 사용방법 등을 고려하여 선정된 사용자들의 사업장에서 이루어지는 실전 테스트이다. 홈페이지 등 인터넷 환경에서 불특정다수가 사용하는 시스템인 경우는 PC방도 예외가 아니다. 다양한 PC, OS, 네트워크 환경 등 여러 조합에 대한 선정을 통해 최대한 현장의 목소리를 듣고자 하는 것이다.


성능 테스트


소프트웨어의 효율성(응답속도, 처리량, 처리속도)을 테스트하는 것으로서 볼륨 테스트나 스트레스 테스트와 병행하여 수행될 수도 있다. 다량의 데이터를 조회하거나 수정하는 중요 프로그램에 대해 테스트를 수행하고 응답속도를 측정한다.


1. 주요 대상
­ 다량의 데이터를 편집하여 조회하는 중요 프로그램에 대해 테스트를 수행함

2. 수행절차
­ 테스트에 필요한 데이터를 준비함
­ 테이터를 편집/조회할 프로그램을 수행시켜 테스트를 수행함


볼륨 테스트


소프트웨어로 하여금 사용자가 요구한 만큼의 데이터 처리가 가능한 지를 테스트하는 것이다.


1. 주요 대상
­ 중요 마스터 데이터에 대해서는 테스트를 수행함
­ 다량의 데이터가 조회되거나 업데이트되는 화면으로 테스트를 수행함
­ 볼륨 테스트에는 매우 많은 비용이 필요하므로 필요 이상으로 과다한 테스트가 되지 않도록 시스템의 특성을 잘 고려하여 수행해야 함

2. 수행절차
­ 볼륨 테스트의 대상이 되는 테이타베이스에 사용자가 요구한 만큼의 데이터를 임의로 준비함
­ 해당 테이터를 입력, 또는 배치로 생성하는 애플리케이션을 수행하여 데이터의 정상처리 여부를 테스트함  


스트레스 테스트


소프트웨어에 다양한 스트레스를 가해봄으로써 짧은 시간 동안에 많은 양의 데이터를 처리할 수 있는지를 테스트하는 것이다. 또한 분산처리 시 시스템 구성요소별로 스트레스가 적절히 분배되는지를 테스트한다.


1. 주요 대상
­ 하나의 데이터베이스에 많은 양의 데이터를 한 번에 입력/수정하거나, 여러 개의 데이터베이스에 다양한 데이터를 한 번에 입력/수정하는 프로그램에 대해 테스트를 수행함
­ 사용빈도가 높은 화면을 대상으로 테스트를 수행함

2. 수행절차
­ 테스트에 필요한 데이터베이스를 준비함
­ 프로그램이 처리 할 데이터를 준비함
­ 다수의 사용자가 동시에 데이터를 처리하는 경우 해당 테스트 환경을 준비함


보안 테스트


불법적인 소프트웨어 사용을 방지하는 테스트로서 자체의 보안체계가 완벽한 지를 테스트하는 것이다. 또한 적합한 권한을 가지지 않은 사람에게 자료나 정보가 제공되지 않는 것을 보장하기 위한 테스트이다.


1. 주요 대상
­ 전체 시스템에 대한 접근시 보안 상태와 개별적으로 보안이 정의된 프로그램에 대하여 테스트를 수행함

2. 수행절차
­ 보안이 정의된 프로그램을 파악함
­ 해당 프로그램을 다양한 방법(임의 패스워드 등)으로 테스트를 수행함


“죄 없는 자가 있다면 돌을 던져라”


국내 OO은행은 전사 DW(DataWarehouse)를 구축하기 위해 RFP(Request for Proposal)를 공지해 발주를 냈고 대형 SI와 글로벌 솔루션 업체들의 합종연횡을 통해 S사, 국내 H 솔루션사 컨소시엄과 EDW 구축 계약을 했다. 기간은 7개월, 은행 기간계의 여신, 수신, 외환, 공제, 증권 등 은행 내 모든 데이터를 추출, 정제, 로딩을 거쳐 DW를 구축하고 이의 활용을 위한 신 정보계 시스템을 구축하는 것이다.


박 대리는 여신파트 정보계 시스템 구축을 위한 웹 프로그램 담당자이다. 개발자로서 은행 여신업무에 대한 이해를 위해 현업 담당자(이하 현업)와 수차례에 걸쳐 인터뷰를 하고, 데이터 모델에 대한 분석과 설계, 애플리케이션 아키텍처에 대한 스터디와 연습을 통해 개발을 위한 준비 작업을 완료했다. 본격적인 코딩의 시간이 되었다. 2개월의 짧은 기간 동안 200여 개의 조회 화면을 개발해야 한다. 그리고 1개월의 통합 테스트를 거쳐 그랜드 오픈을 한다. 그러기 위해 PL(Project Leader)의 관리 하에 개발을 진행하는 동안에도 현업의 단위 테스트를 거쳐야 한다. 단위 테스트는 개발자의 몫이자 현업 고객이 해야 할 1차 기능 테스트이다.


하루에 화면 5개씩 SQL 쿼리를 짜고 웹 화면에 적용한다. 화면이 복잡하면 할수록 화면 변수에 맵핑해야 할 Input 변수가 많아진다. 개발된 화면에 대한 단위 테스트를 위해 박 대리는 기본적인 자가 기능 테스트를 거쳐 현업에게 단위 테스트를 의뢰한다. 정해진 테스트 프로세스에 의해 하루에 5개씩 개발이 완료된 화면을 현업에게 제공하고 현업은 테스트 후 테스트 결과를 피드백해야 한다.


그런데 고객인 이 차장은 테스트 프로세스를 무시하고 우선 자신이 요구사항에 적은 대로 개발해 놓으라고 한다. 그러면 시간을 갖고 천천히 테스트를 하겠노라고…. 고객의 요청사항인 만큼 맘 놓고 정해진 요구사항대로 휴일도 없이 열심히 개발하고 자가 단위 테스트를 했다. 드디어 2개월이 지나 화면 200여 개발을 다 완료했다. 박 대리는 뿌듯해했다. 이제 남은 건 통합 테스트다. 그리고 통합 테스트는 내일부터 시작이다. 그런데 이 차장이 박 대리가 개발한 화면을 놓고 볼멘소리를 하기 시작한다. 화면 한 개를 테스트했는데 OO은행의 자산이 10조밖에 안 되는데 박 대리가 만든 화면은 100조가 나왔다는 것이다. 박 대리는 이 차장에게 “차장님께서 말씀하신 요구사항대로 개발했다”고 말했다. 이 차장은 개발자인 박 대리의 능력을 믿었고 대충 이야기해도 제대로 알아듣고 개발한다고 생각했다고 한다.


그리고 박 대리는 PL로부터 “내일부터 통합 테스트인데 박 대리가 맡은 부분에 대한 단위 테스트를 진행해 주세요”라고 들었다. 눈앞이 캄캄했다. 남들보다 열심히 고군분투하며 앞서서 개발을 했고, 고객이 원하는 대로 진행했으며, PL에게 진행 상황에 대한 보고까지 하면서 열심히 개발에 매진했지만 박 대리는 통합 테스트에도 미치지 못하는 단위 테스트 불량 개발자였다. 박 대리는 눈물을 머금고 이 차장과 함께 단위 테스트를 다시 진행했다. 200여 화면에 대해 하나씩 기능에 대한 검증과 조건에 대한 검증 그리고 데이터에 대한 검증을 진행해 나갔다. 1개월이 흘러 다른 부분은 통합 테스트를 완료한 상태에서 오픈을 했고 박 대리가 맡은 부분은 오픈이 연기가 되어 통합 테스트를 보름간 더 진행했다. 프로젝트 팀원이 모두 철수한 후까지 박 대리는 미진한 통합 테스트를 진행했고, 결국 프로젝트 전체 납기에 영향을 줘 고객과의 약속도 지키지 못했다. 개발자인 박 대리는 과연 무엇을 잘못한 것일까? 고객의 요청사항을 무조건 들어준 것이 잘못인가? PL에게 보고도 했는데 왜 비난은 박 대리가 들어야 할까? 참으로 난감하다. 테스트는 과연 누구의 책임일까? 개발자인 박 대리는 열심히 개발한 죄밖에 없었을 텐데 말이다.


문제 예방을 위한 최선은 무엇인가


김 과장은 머리가 터질 지경이다. 이제 곧 일주일간의 통합 테스트를 시작해야 하는 데 아직 환경이 구축되질 않았다. 분명 2주일 전에 계획을 세우고 R&R(Role & Responsibility)을 정하고 체크리스트(Checklist)를 만들어 점검까지 했는데도 말이다.


현업에게 뭐라고 이야기해야 할까? 통합 테스트 환경을 구축하기로 한 담당자는 개발자들이 개발 소스에 대해 제대로 단위 테스트를 하지 않아 에러가 발생한다고 한다. 개발자들은 현업의 요구사항이 단위 테스트할 때 변경되어 적용하다가 그랬다고 한다. ‘그래, 통합 테스트의 이틀 지연이다’라고 결심한 김 과장은 고객에게 양해를 구하고, 에러가 발생한 단위 테스트를 집중적으로 해서 기능에 대한 보완을 한다.


오늘부터 개발자들에게 밤샘야근을 지시한다. 어쩔 수 없다. 이틀 후에는 통합 테스트를 실시해야 한다. 고객이 최대의 관심사를 갖고 주시하고 있기 때문이다. 통합 테스트를 제대로 이행하지 못하면 오픈 지연으로 납기에 차질이 생긴다. 현업이 담당한 통합 테스트 시나리오를 점검한다. 엉망이다. 개발팀 담당자를 불러 시나리오에 대해 협의를 했느냐고 물어보았다. 현업이 물어보았지만 시나리오는 현업의 책임이라고만 이야기했단다. 현업은 가이드 없이 대충 작성하여 제출한 것이다. 큰일이다. 새로 작성하자니 시간이 없고 이대로 진행하자니 통합 테스트가 엉망일 것 같다.


현업과 사태를 해결하기 위한 회의를 했다. 현업은 자신 있게 말한다. “통합 테스트 시나리오가 없어도 현업들은 각자 생각한 대로 테스트 케이스를 만들어 테스트할 것이다. 굳이 문서로 작성할 필요가 없을 것 같다” 맞는 말이다. 하지만 이렇게 되면 현업이 생각하는 테스트의 범위, 비즈니스 로직, 데이터 등을 컨트롤할 수가 없다. 어떻게 할지 고민이다. PM과 상의를 한다. PM이 적정한 조정안을 제시한다. 그 안은 다음과 같다.


“상세한 통합 테스트 시나리오를 가지고 통합 테스트를 실시하지 않지만 현업이 직접 테스트한 결과에 대한 시나리오 및 테스트 결과는 문서로 작성하여 제출한다. 그리고 에러 발생시 결함 보고서를 제출한다”


현업은 잠깐 고민한 후 즉각 승낙한다. 이틀 후 통합 테스트는 실시되었다. 전쟁이다. 현업 담당자는 테스트를 실시하고 에러 발생한 즉시 개발자는 뛰어다닌다. 단위 테스트 시 해결됐던 에러도 다시 발생한다. 단위 테스트 시 발생하지 않았던 에러도 발생한다. 외부 인터페이스가 성공했다 실패했다 한다.


하루를 마치고 테스트 케이스와 결함보고서를 정리한다. 테스트 범위는 10%인데 결함은 무려 100개를 상회한다. 이제 개발자들과 회의를 진행한다. 우선, 에러를 단순결함과 중결함으로 구분한다. 단순결함에 대해 수정 조치를 먼저 하여 에러의 개수를 줄여나간다. 중결함은 이틀 정도 시간을 두고 개발자에게 해결을 지시한다. 벌써 12시가 넘어가고 있다. 내일 이틀째 통합 테스트가 기다리고 있다. 3일째가 되자 통합 테스트는 속도를 올려 진행된다. 테스트 범위가 벌써 70%를 상회한다. 에러는 점점 줄어든다. 이제 안정을 찾아가는 듯하다. 개발자들에게 에러 수정을 독려한다. 중결함이 아닌 단순결함들은 당일 수정 조치를 원칙으로 하고 개발자들을 독려한다. 현업들이 차츰 안정을 찾아간다. 오픈을 해도 된다는 낙관론이 생기기 시작한다. PM에게 보고한다. 통합 테스트가 오픈 수준에 맞추어 진행되고 있고 현업이 원하는 수준의 품질(quality)을 보장할 수 있을 것 같다. PM은 무뚝뚝하게 경고한다.


“김 과장, 자네 QA 역할이 뭔 줄 아나? QA는 에러가 발생하면 그때그때 신속하게 처리하도록 지시하는 게 아니라 에러의 발생을 애초부터 막는 것일세“


김 과장은 마음이 상했다. 그래도 최선을 다해 에러 발생시 신속하게 수정지시를 해서 고객의 마음을 조금은 돌려놓았는데 말이다. 김 과장은 고민한다. QA의 역할이 에러의 발생 방지라면 어떻게 에러 방지를 할 수 있을까? 그럼 개발 단계부터 QA의 주도가 필요할 것이다. 그리고 통합 테스트 시나리오는 누가 작성하는 게 맞을까? 분명 현업이 하는 것이 맞을 텐데 어떤 고객도 하겠다고 하질 않으니 그것이 문제이다. 어떻게 그들을 설득시켜야 할까? 현실과 이상의 커다란 간극, 이것이 딜레마이다.


등잔 밑이 어둡다, 모든 환경변수에 대해 고민하라


문제는 응답 속도이다. 고객은 응답속도의 기준치를 ‘3초 이내’로 제시했다. 개발해야 하는 모든 화면에 대한 응답속도를 3초 이내로 끌어내려야 한다는 것이다. 아키텍처 프레임워크는 검증된 것을 적용했으니 문제가 없는데 비즈니스 로직이 문제이다. 원하는 기능들이 복잡할수록 네트워크를 타고 전송되는 패킷의 양이 많아져 PC에서의 로딩 시간이 길어지면 3초 이내를 지키기는 거의 불가능에 가깝다. 하지만 어찌하랴 고객이 원하니 어쩔 수가 없다. 홍 과장에게 숙원 과제가 맡겨졌다.


우선, 성능 테스트를 실시해서 현재의 상황에 대한 문제점을 도출해야 한다. 그리고 도출된 문제점을 해결하기 위해 튜닝을 실시해서 고객의 기준치를 맞추어야 한다. 홍 과장은 시스템 엔지니어인 박 책임에게 성능 테스트 환경구성을 의뢰하고, 개발팀에게 만들어진 개발소스에 대한 테스트 빌드를 구성하기 위해 성능 테스트 계획을 세웠다. 성능 테스트 환경은 운영(production) 환경과 유사하게 구성이 되어야 한다. 운영체제와 소프트웨어 버전이 같아야 하고, 하드웨어 용량은 운영환경의 것을 이용하면 최고겠지만 그렇지 못할 경우는 성능 테스트계를 임시로 구성하여 2/3 정도의 크기로 갖추어 놓는 게 좋다.


시스템 엔지니어인 박 책임은 성능 테스트 환경구성에 대해 일정에 맞추어 설치를 완료하겠다고 약속했다. 다음은 성능 테스트 시나리오의 작성이다. 다행스럽게 통합 테스트에서 사용하던 통합 테스트 시나리오가 있어 이를 재활용하기로 한다. 다음은 목표 동시사용자 수의 설정이다. 성능 테스트를 통해 목표 동시사용자 수에 맞게 환경구성과 개발소스에 대한 튜닝이 이루어지면 된다. 구 시스템에 대한 월/주/일/시간대별 사용자 수를 추출하여 최번시(최고 피크시) 동시사용자 수를 설정했다. 다음은 성능 테스트 시나리오에 맞게 툴을 이용하여 스크립트 코딩을 한다.


드디어 1차 성능 테스트의 결과가 나왔다. 암담하다. 목표 동시사용자 수에 훨씬 미치지도 못하는 수치가 나왔고 응답속도는 10초를 상회한다. 하드웨어와 소프트웨어의 환경구성에 대한 파라미터를 재설정하고 개발팀에게는 소스 내 잘못된 SQL과 로직에 대하여 수정을 요청한다. 2차 성능 테스트를 실시한다. 2차에 비해 나아지기는 했지만 여전히 어이없는 수치이다.


개발팀과의 마라톤 회의를 통해 소스 내 모든 코드에 대한 점검을 실시한다. 개발자들은 스타일에 따라 코딩을 했다. 표준화를 강력히 요청했지만 표준화된 팁을 사용하지 않는 개발자가 대다수였다. PM에게 현상에 대한 보고를 하고 개발자들에게 표준화된 형태로 코드를 수정할 것을 지시했다.


3차 성능 테스트를 했다. 고객이 설정하고 요청한 목표 동시사용자 수와 응답속도를 만족하는 수치가 나왔다. 성공이다. 역시 성능에 대한 키는 개발자들이 쥐고 있었다. 기쁜 마음으로 성능 테스트에 대한 결과보고를 하고 오픈을 해도 좋다는 고객의 동의를 얻어냈다. 드디어 오픈하는 날이다. 시스템 가동과 함께 시스템에 대한 사용도가 올라간다. 그런데 이상하게도 응답속도가 제대로 나오지 않았다. 어떤 것은 10초를 넘는 것도 있었다. 큰일이었다. 분명 몇 차례에 걸친 성능 테스트를 통해 코드에 대한 튜닝, 파리미터에 대한 튜닝을 했고 고객의 목표치를 만족했는데 말이다.


본격적인 조사에 착수했다. 네트워크 환경과 PC의 성능차이가 원인인 듯 했다. 고객은 현장 응답속도 기준으로 3초를 요청했단다. 막막했다. 현장의 인프라를 고려하지 않고 성능 테스트를 한 것이다. 현재의 인프라를 마음대로 업그레이드할 수 없지만 환경변수에 대한 고려가 포함된 성능 테스트를 실시했어야 한다는 것이다. 사용자의 불만은 날마다 수십 개씩 접수되었다. 도저히 쓸 환경이 되지 않으니 이전 시스템을 사용하게 해달라는 요청도 있었다. 밤을 세워가며 고객과 현재의 문제점에 대한 대안을 논의했다.


사용자에게 PC의 업그레이드를 요청하고 네트워크 인프라 또한 네트워크 파트의 도움으로 취약 지역에 대한 증설을 하기로 했다. 홍 과장은 노력한 만큼 결과를 얻지 못했다고 풀이 죽어 있었다. PM은 그런 변수도 고려하지 않고 실험 환경 데이터에 대한 분석결과에 만족해 했다고 질책했다. 고객은 시스템 사용자를 기준으로 목표를 제시한다. 사용자에 대한 분석 없이 성능 테스트 시나리오를 작성하고 환경변수에 대한 고려 없이 성능 테스트를 실시했다고 불만을 토로했다. 성능 테스트는 왜 이리 복잡하고 어려운 것일까? 환경변수에 대한 고려와 함께 성능 테스트를 하는 것이 가능한가? 그런 것은 툴이 지원해 줄 수 있을까?


테스트의 미덕, 중용


그랜드 오픈이 한 달 앞으로 다가왔다. 이제 한 달만 지나면 프로젝트 팀원 50명이 7개월간 고생한 결과에 대해 평가를 받게 된다. 결코 팀원들의 노력이 헛되지 않도록 철저하게 오픈을 준비할 것이다. 지난 6개월 동안 시스템 구축을 위해 요구사항을 분석하고 컴포넌트를 추출, 설계를 하고 코딩을 해왔다. 그리고 500여 화면에 대한 단위기능의 개발과 병행하여 화면 중심의 단위 테스트와 모듈 중심의 단위 테스트를 실행해 왔다.


단위 테스트를 담당한 PL들이 테스트 프로세스를 잘 준수해줬고 현재, 통합 테스트와 함께 성능 테스트를 진행하고 있다. 통합 테스트와 성능 테스트를 마치면 대망의 오픈을 할 예정이다. 그런데 과연 통합 테스트와 성능 테스트만 잘 마치면 성공적인 오픈을 할 수 있는 것일까? 사용자에게 편리하게 화면 설계가 되었고, 응답속도도 3초 이내로 사용자 기대수준을 만족하고, 시스템 사용상의 불안정성도 제거한, 사용자가 만족하는, 성공적인 시스템을 오픈할 수 있는 것일까? PM으로써 리스크를 최소화하고 성공에 대한 확신을 줄 수 있는 테스트 결과에 대한 근거를 기반으로 고객이 인정하고, 우리 스스로가 인정할 수 있는 시스템을 제공해야 한다.


강 PM은 실로 오래간만에 소프트웨어 공학론을 펼쳤다. 테스트에 대한 부분을 세밀히 훑어봤지만 강 PM이 지금 필요로 하는 테스트와 검증방법은 찾아볼 수 없었다. 그저 통합 테스트와 성능 테스트를 열심히 하면 된다는 그런 내용들이었다. PL 회의를 소집했다. 현재 진행하고 있는 통합 테스트와 성능 테스트를 체계적이고 상세하게 진행하되 그 외 다른 테스트 방법론의 존재유무를 논의했다. 테스트 전문가인 박 대리가 부정 테스트와 회귀 테스트 그리고 현장 테스트에 대한 제안을 했다.


강 PM은 그 테스트들의 정의와 진행방법 그리고 효과에 대한 진지한 고민을 했고, 박 대리의 제안을 받아들이기로 결정했다. 더불어 고객들에게 다양한 테스트들을 실행함으로 얻을 수 있는 효과에 대해 자랑스럽게 이야기했다. ‘리스트 제거’, 다양한 테스트를 진행하는 궁극적인 목표인 것이다. 강 PM은 외부 테스트 요원들을 모집하고 그들에게 현재 진행하고 있는 테스트 시스템에 대해 테스트 시나리오를 무시한, 기발하고 스토리가 없는, 사용자 입장에서 할 수 있는 가능한 모든 부정적인 테스트를 요구했다.


어떤 이는 조회 화면을 수십 번 연속해서 눌렀고, 어떤 이는 조회 중간에 3초를 기다리지 않고 화면을 닫아 버리고, 어떤 이는 숫자를 넣어야 할 곳에 문자를 넣어 조회하고, 또는 날짜 조건 입력 시 백년의 기간을 조회해 보기도 하는 등 다양한 부정 시나리오가 쏟아져 나왔다.


조회화면을 동일한 조건에서 수십 번 연속해서 누르자 동일한 데이터가 아닌, 새로운 데이터가 계속 조회되었다. 조회조건은 동일한 데 수십 번 연속해서 누른다고 조회내용이 다르게 나오는 것이었다. 해당 개발자는 황당해 했다. 그렇게 사용하는 사용자는 없다는 것이다. 그래도 이런 결과가 나온 것은 코드상 로직의 문제가 있음을 제기했고 개발자도 검토를 해본 결과 자신이 그런 코딩을 했다는 것을 믿지 않는 눈치였다. 이런 부정 테스트에 대한 결과를 고객에게 설명하자 고객은 희색이 만연하여 시스템 품질에 대한 확신을 가지는 눈치였다.


다음 회귀 테스트는 단위 테스트에서 나온 결함을 기본 베이스라인(baseline)으로 설정하고, 통합 테스트, 성능 테스트까지 지속적으로 해당 결함에 대한 회귀 테스트를 실행하여 최종 테스트에 통과가 될 때까지 실행하도록 PL들에게 지시했고, PL들 또한 결함 발생에 대한 추적관리를 통해 ‘한 번 발생한 결함은 두 번 다시 발생하지 않는다’는 원칙을 고수하게 되었다.


마지막으로 현장 테스트를 위해 고객의 적극적인 협조로 업무별 종류, PC 사양의 종류, 네트워크 용량의 종류 등 다양한 케이스의 현장을 선정하고 동일한 시나리오를 통해 기능의 완전성과 응답속도의 차이를 측정하고 기준을 설정하여 해당 시스템에 대한 현장 사용자의 만족도를 예측할 수 있었다. 정말로 다양한 케이스에 따라 기능의 완전성에도 차이가 있었고, 응답속도의 차이 또한 천차만별이었다. 고객이 제시하는 ‘3초 이내’는 어떤 기준인지 고객의 기준을 명확히 하는 근거가 될 수 있었다.


이런 추가적인 비정형적인 테스트를 통해 고객은 시스템에 대한 신뢰를 가질 수 있었고, 프로젝트팀은 7개월의 고생이 헛되지 않는 성공적인 오픈을 할 수 있었다. 테스트 종류 몇 가지를 실행한 것뿐인데 고객은 결과에 대해 대만족스러워했고 시스템은 안정적인 운행을 하게 되었다. 그저 단위 테스트, 통합 테스트, 성능 테스트 등 정형적인 테스트만 수행했을 경우는 어떠했을까? 물론, 테스트의 종류가 많다고 고객이 신뢰를 하는 것은 아니다. 단지, 현재 진행하고 있는 방법론상의 테스트와 이를 보완할 수 있는 다양한 테스트를 함께 수행함으로써 완벽성을 기할 수 있는 크로스 체크 결과가 된 건 아닐까? 결함이 나오는 테스트가 올바른 테스트일까? 아니면 결함이 하나도 없는 테스트가 올바른 테스트일까? 테스트는 그 역할로 인해 항상 중용의 길을 걸어야 할 존재인 것이다.


모든 해답은 프로젝트 현장에 있다


테스트는 아무리 강조해도 지나치지 않는 활동이라고 했다. 대부분 프로젝트들은 필수적인 테스트(단위, 통합, 성능)만 선정하고 준비하고 실행하여 이를 통해 나온 결과만을 가지고 의사결정을 한다. 그리고 오픈 후 많은 문제에 직면하게 된다.


기능의 오류, 시스템의 불안정, 요구사항의 미반영, 사용자의 미숙 등 프로젝트 막바지에 테스트에 모든 인력과 정열을 집중했음에도 불구하고 예측하지 못한 결함들이 쏟아져 나온다. 이를 어떻게 해야 하는가? 어쩔 수 없는 것일까? 테스트에 아무리 집중해도 품질목표를 달성하는 것은 프로젝트에서는 불가능한 목표일까?


문제는 바로 프로젝트 현장에 있다. 필수적인 테스트들을 선택하고 집중하여 실행했지만 여기에는 많은 헛점이 있다는 것이다. 또한 좀 더 완벽한 품질을 달성하고자 한다면 시스템 특성에 맞는 테스트를 전략적으로 적용해야 하는 것이다. 다음은 테스트 종류별 잘못된 실행사례이다.


첫째, 단위 테스트를 개발자에게만 맡겨두고 그 결과를 인정하는 경우이다. 개발자는 본인이 코딩한 프로그램에 대해 해당 기능에 대한 소극적인 테스트에 임한다. 데이터는 알고 있는 데이터 1~2개 정도이고 다양한 조건에 대한 테스트는 개발자에게 기대하기 힘들다. 왜냐하면 그들은 방대한 개발물량이 있기 때문에 진척율에 쫓긴다. 이를 예방하기 위해 반드시 해당업무 PL이 개발자들이 실행한 단위테스트에 대한 확인테스트를 실행한 후 진척율에 반영하는 것이다.


둘째, 통합 테스트 수행 시 통합 테스트 시나리오를 고객이 미리 작성하지 않고 개발팀에서 형식적으로 간략하게 작성하는 경우이다. 이런 경우 고객은 자신의 머릿속 시나리오대로 테스트를 진행하고, 개발팀은 테스트 케이스에 대한 전체범위를 모르는 상태에서 테스트를 실행하는 고객의 수준과 태도에 따라 시스템 내 품질은 업무범위에 따라 고르지 못한 상태가 된다. 이런 경우, 프로젝트팀은 품질 목표를 달성할 수 없게 되고 고객에게 맡겨진 품질은 미궁 속으로 빠져들게 된다. 이를 예방하기 위하여 고객들에게 통합테스트가 시작되기 한 달 전에는 교육을 통해 통합 테스트 시나리오 작성의 당위성, 필요성에 대해 설득하고 합의를 이끌어 내어 반드시 통합 테스트 시나리오를 작성한 후 통합 테스트를 실행하는 것이다. 통합 테스트 시나리오는 초기 고객의 요구사항 정의서와 함께 고객의 요구사항이 반영된 최종 품질기대 문서이다. 셋째, 성능 테스트 수행 시 사용자 환경(PC, 네트워크 등)에 대한 고려 없이 성능 테스트 툴을 통해 나온 응답속도와 동시사용자 수에 대한 무비판적인 수용이다. 이런 경우 오픈 후 반드시 성능, 특히 응답속도에 대한 불편신고를 가장 많이 받는다. 성능 테스트는 시스템의 성능, 동시사용자 수 그리고 화면별 응답속도에 대한 객관적인 수치를 얻고자 한다.


이를 위해 TA(Technical Architect)는 운영환경과 유사하게 성능 테스트 환경을 구성하고 해당 프로그램들을 선정, 비율을 조정하여 테스트를 실행한다. 그리고 최번시 수용 가능한 동시사용자 수와 시스템 사용현황 그리고 응답속도를 데이터로 제시한다. 그리고 성능 테스트는 끝이다. 하지만 현장사용자의 IT 인프라 환경을 고려하지 않은 상태에서 제시한 데이터는 실험실 내에서의 테스트일 뿐이다. 그래서 반드시 현장 사용자의 IT 인프라 현황을 파악, 분석하여 다양한 조건의 테스트베드를 만들고 반드시 현장의 응답 속도를 측정한 후 튜닝을 실행하여 IT 인프라와 응답속도간 상관관계를 파악하여 오픈 후 응답속도에 대한 불편을 제거해야 한다.


넷째, 인터넷 시스템을 오픈하면서 현장 테스트를 실시하지 않는 경우이다. 물론 현장 테스트를 회사 내에서 실행하는 경우도 있지만 이는 요식행위이며 해당 인터넷 시스템을 사용하는 모든 고객의 장소를 분석하여 기능의 완전성, 응답속도의 적절성 등을 테스트해야 한다. 고객의 장소는 PC방, 고객의 집 PC 등이 있고 이 또한 오래된 PC방, 신장개업 PC방 그리고 여전히 윈도우 95/98 같은 운영체제를 사용하는 고객의 집 PC 등으로 세분화할 수 있다. 고객의 IT 인프라는 사용자의 특성에 따라 동일한 환경이 거의 없다. 그리고 인터넷에는 수많은 프로그램들이 쏟아져 나와 있어 해당 인터넷 시스템과 충돌이 나는 경우도 종종 발생한다.


이상과 같이 테스트는 그 종류가 많은 만큼 실행상의 허점이 곳곳에 널려 있다. 테스트 관리자는 전략 수립과 함께 실행계획 수립 시 예외조건을 빠트리지 않도록 주의를 기울이고 테스트는 결국 개발된 프로그램 전체를 대상으로 하기 때문에 테스트 범위는 이 시스템을 사용하는 모든 고객을 대상으로 한다고 생각하고 테스트 관리자는 예외가 없는 전수 테스트에 임해야 할 것이다.


개발 중심에서 테스트 중심으로


테스트가 시대를 만났다. 천대받던 시절을 이겨내고 테스트는 품질을 확인하고 검증하고 보증하는 중추적인 역할을 맡게 되었다. 이에 따라 많은 테스트 관련 툴들도 우후죽순처럼 시장에 쏟아져 나왔다. 이제 테스트는 프로젝트 라이프 사이클(PLC) 전 기간에 걸쳐 그 역할을 확대하고 있다. 테스트의 미래는 어떻게 될까? 가까운 미래를 예측해본다.


서기 2010년 7월, K은행 기간계 구축 프로젝트. 이 부장은 고객과의 요구사항 확정에 대한 협의가 끝나자 PL들에게 통합 프로젝트 관리 툴(이하 통관툴)에 요구사항을 직접 입력하도록 지시했다. 요구사항들은 연속적으로 번호가 붙여지며 관리를 위한 베이스라인으로 확정되었다. 분석/설계자 최 과장은 이에 대한 세부 협의를 통해 설계 스펙을 통관툴에서 확정한다. 그와 동시에 개발자가 지정되었다. 개발자인 김 대리는 통보된 스펙 대로 프로그램을 코딩하고 기능 테스트 시작 버튼을 누른다. 조회조건 입력을 요청한다. 테스트 데이터를 랜덤하게 선택하여 100개를 자동 입력한다.


통관툴은 만들어진 프로그램을 하나씩 하나씩 코드 레벨로 실행하며 에러와 권고 리포트를 생성한다. 코드에 대한 100% 커버리지로 테스트를 종료한다. 에러와 권고 리포트를 읽어보며 요청한 대로 코드를 수정한다. 재 테스트를 실시한다. 이젠 100% OK가 나왔다. 김 대리는 해당 프로그램을 통합 테스트로 이동하도록 선택한다. 통합 테스트 저장소(repository)는 테스트 관리자인 박 과장 관리 하에 통합 테스트가 가능한 시점을 알려준다. 박 과장은 1주일 전 통합 테스트 시나리오에 대한 고객과의 협의를 통해 미리 시나리오를 입력해 두었다. 박 과장은 통합 테스트 시작버튼을 누른다. 우선, 단일 기능은 완벽했다. 그리고 외부 인터페이스와의 테스트도 원활했다. 통합 테스트는 입력된 테스트 케이스 대로 자동으로 수행된다. 이에 따라 에러가 발생한 경우 에러 리포트와 해결방안이 자동으로 표시된다.


통합 테스트가 완료된 프로그램은 부정 테스트와 회귀 테스트하도록 선택한다. 통관툴은 정해진 방식대로 부정테스트를 실행하고 단위 테스트에서 발생했던 에러를 기준으로 회귀 테스트를 실행한다. 완벽하다. 이제 남은 건 성능 테스트이다. 해당 소스를 빌드하여 성능 테스트계에 이관하고 성능 테스트 버튼을 누른다. 10 유저, 100 유저 계속 유저수가 올라가며 성능 테스트가 실행된다. 150 유저가 되었을 때 응답속도가 2초가 되었다. 초기 세워둔 기준대로 성능 테스트는 대만족이다.


다음 현장 테스트 버튼을 누른다. 소스가 현장 테스트베드 시스템으로 이관된다. 조건이 다양하다. PC방, 고객집, 지방 격오지까지 선택이 가능하다. 필요한 조건을 선택하고 현장 테스트 버튼을 누른다. 시스템은 테스트가 실행되면서 다양한 결과를 보여준다. 결과를 분석하고 PC방에서의 응답속도가 저조함을 선택하고 충돌이 발생하는 프로그램을 찾아본다. 특정 회사의 메신저가 해당 시스템과 충돌이 나서 응답속도가 저조해졌다는 결과이다. 개발자인 김 대리에게 충돌이 나는 부분에 대해 수정을 요청한다. 김 대리는 소스분석을 통해 충돌지점에 대한 로직을 수정하고 다시 현장 테스트를 요청한다. 재 테스트를 실시한다. 이번엔 OK이다.


정해진 오픈은 앞으로도 한 달이 남았다. 만일에 발생할 수 있는 오류를 찾기 위해 박 과장은 퇴근하면서 통합 테스트, 부정 테스트, 회귀 테스트, 성능 테스트, 현장 테스트 등 모든 테스트에 대한 버튼을 실행한다. 통관툴은 해당 명령에 대해 수준을 올려가며 테스트를 진행한다. 앞으로 남은 한 달 동안 통관툴을 통한 테스트는 계속될 것이다.


미래의 테스트는 프로젝트 시작과 함께 시작될 것이다. 요구사항에 대한 정의가 설계에 반영되어 코딩이 되면 이에 대한 다양한 테스트가 자동으로 실행되어 에러 리포트를 쏟아 낼 것이다. 물론 요구사항을 입력하고 시나리오를 입력하는 수기의 과정은 필요할 것이다. 이에 대한 자동화는 가까운 미래가 아닌, 조금 먼 미래쯤이면 가능할 지 모르겠다. 테스트의 중요성은 이처럼 나날이 증가하고 있다. 프로젝트 초기단계부터 테스트를 위한 준비를 하는 것이다. 다시 말해 개발 중심의 방법론이 아닌, 테스트 중심의 방법론으로 대체가 될 것이다. 많은 솔루션 업체와 SI 업체를 중심으로 테스트를 통한 품질확보를 위한 최적의 프로젝트 방법론과 도구들을 쏟아낼 것이라고 기대해본다

다양한 테스트에 대한 이해는 필수


테스트는 정상에 있는 품질목표를 달성하기 위한 등산과 같다. 입구에서 시작해 산등성이를 지나 절벽을 오르면 정상에 도달할 수 있다. 하나하나의 과정을 반드시 이겨내야만 정상에 도달해서 환희, 기쁨, 만족감 등을 맛볼 수 있는 것이다


품질은 기능 품질과 비기능 품질로 나눈다. 기능 품질은 기능성, 작동성, 정합성 등 시스템의 기능을 테스트한다. 단위 테스트, 회귀 테스트, 부정 테스트, 통합 테스트, 크로스 테스트, 제품품질 검사, 인수 테스트, 현장 테스트 등을 기능 테스트로 분류한다. 비기능 품질은 주로 성능, 보안 등 인프라에 대한 품질을 말한다. 성능 테스트, 스트레스 테스트, 볼륨 테스트, 보안 테스트 등을 비기능 테스트로 분류한다.


단위 테스트


단위 테스트는 개발과 동시에 진행하여 개발 기간과 함께 종료한다. 개발자는 설계자가 설계한 대로 코딩을 하고 설계자와 함께 기능의 정확성을 확인한다. 소프트웨어가 작동하는 지 확인하기 위해 신규 또는 변경 코드만 따로 테스트하는 최초의 테스트 단계이며 이를 통해 내부 프로그램과 모듈 로직에 맞추어 프로그램 스펙을 검증하고 나아가 프로그램 로직을 검증한다.


단위 테스트의 검증 단계로 단위 모듈 테스트와 단위 화면 테스트를 수행하고, 모듈 테스트는 단위 모듈의 기본 처리를 검증하는 단계이며, 각 모듈에 구현된 기능의 정확성과 완전성을 검증한다. 화면 테스트의 범위는 단위 화면 내 버튼 기능이 모두 정상임을 확인한다.


회귀 테스트


회귀 테스트는 단위 테스트에서 시작해서 인수 테스트로 끝나는 테스트 전체기간 동안 결함의 추적성을 통제하여 한 번 발생한 결함은 다시 발생하지 않도록 점진적, 반복적으로 수행하는 것이다. 이를 위해 테스트 관리자는 형상관리 툴을 이용하여 단위 테스트, 통합 테스트, 인수 테스트 등 테스트 시 발생한 모든 결함들을 등록하고 반복적 테스트를 통해 기능의 완전성과 정확성을 높여 품질을 보증한다.


부정 테스트


부정 테스트는 사용자의 예기치 못한 조작방법에 대응하기 위해 일반적인 작동 프로세스를 무시하고 테스트 시나리오 없이 기능을 테스트를 하는 것이다. 조회 버튼을 백 번 연속해서 누른다든지 날짜가 들어가는 곳에 문자를 입력하거나 2월 30일과 같이 존재하지 않는 데이터를 입력하는 등 일반적인 사용자가 하지 않는 범위에 대해 테스트를 하는 것이다.



통합 테스트


통합 테스트는 기능 테스트 중 가장 중요하고 반드시 실시해야 하는 필수 테스트다. 어떤 프로젝트팀은 테스트 종류 중 오직 통합 테스트에만 집중하여 모든 결함과 오류를 수정하고 이 데이터를 근거로 오픈에 대한 의사결정을 한다. 통합 테스트 목적은 다음과 같다.


◆ 단위 테스트를 통과한 애플리케이션과 업무 기능의 인터페이스가 정상적으로 작동하는지를 검증한다.

◆ 이를 위해 통합 모듈의 기능, 화면과 연관된 업무 기능, 모듈 간의 인터페이스 검증 테스트 등에 대해 테스트와 평가를 한다.

◆ 고객이 제시한 테스트 시나리오를 바탕으로 하여 실행방법과 예상결과 등을 포함하는 테스트 케이스를 정의하고 그 기준에 의하여 통합 테스트를 진행한다.

◆ 통합 테스트를 위해 정의된 세부적 테스트 케이스가 고객의 테스트 시나리오의 요구조건을 모두 수용해야 하며 각 테스트 케이스의 실행이 예상결과와 일치해야 해당 케이스의 실행이 성공한 것으로 간주한다.

◆ 반드시 데이터 정합성에 대해 테스트를 진행해야 한다.


통합 테스트를 통해 많은 결함이 도출된다. 결함들은 난이도에 따라 분류되어 수정일정과 함께 개발자에게 넘겨진다. 분류는 다음과 같이 할 수 있다.


치명결함 : 애플리케이션 종료, 시스템 다운, PC 재부팅 등을 하여야 하는 결함

중결함 : 데이터의 정합성 불일치 또는 해당 업무(기능)을 정상적으로 진행할 수 없는 결함

경결함 : 일부 오류를 포함하고 있으나 처리가 가능한 결함

단순결함 : 해당 기능을 수행하는데 문제가 되지 않으나 사용자들의 에러를 유발시킬 수 있거나, 혼동할 수 있는 내용(예 : 불명확한 메시지 처리, 조회필드의 입력가능, 오타, 등)


크로스 테스트


크로스 테스트는 테스트 종류라기보다는 테스트 진행방법 중의 하나이다. 기능 테스트를 실행하는 데 고객에게만 테스트를 맡기지 말고 프로젝트 팀원 전원이 테스트를 함께 참여하여 서로의 것을 테스트하며 많은 결함과 오류를 발견하고자 하는 목적에서 만들어진 것이다. 크로스 테스트의 묘미는 본인이 개발한 것보다 타인이 개발한 프로그램에서 훨씬 많은 결함을 도출해낸다는 것이다.


제품품질 검사


제품품질 검사는 공인된 테스트 전문 업체를 통해 단기간에 개발된 시스템을 전수 검사를 하는 것이다. 품질 체크리스트를 기반으로 4~5명이 참여하여 기능에 대한 테스트를 수행한다. 이 때 투입된 전문가들은 부정 테스트에 대한 개인적 경험을 이용하기도 한다. 테스트 전문가들에 의해 실행되기 때문에 숨겨진 에러까지 발견하곤 한다.

OSGi

위키백과 ― 우리 모두의 백과사전.

Jump to: navigation, 찾기

OSGi(Open Service Gateway initiative) Alliance1999년썬 마이크로시스템즈, IBM, 에릭손 등에 의해 구성된 개방형 표준 단체이다. (OSGi Alliance는 처음에 Connected Alliance라고 불렸음) 그 후 몇 년 동안 OSGi Alliance는 원격 관리 될 수 있는 자바 기반의 서비스 플랫폼을 제정해왔다. 이 표준 사양의 핵심은 어플리케이션의 생명주기(Life cycle) 모델과 서비스 레지스트리(Service Registry)를 정의하는 프레임워크(Framework)이다. OSGi 표준 사양에는 이 프레임워크에 기반하여 매우 다양한 OSGi 서비스가 정의되어 있다.

OSGi 프레임워크는 독립적인 자바/VM 환경에서 제공하고 있지 못한 세련되고, 완전하며 동적인 컴포넌트 모델을 구현한다. 어플리케이션 또는 컴포넌트(번들, Bundle)은 재부팅 없이 원격지를 통해 설치(installed), 시작(started), 정지(stopped), 업데이트(updated) 그리고 제거(uninstalled)될 수 있다

OSGi는 Embeddable(어플리케이션 내부로 포함될수 있는) SOA를 구현하고 있다. 이를 통해 어플리케이션 개발에 있어 가장 복잡하고 관리하기가 어려운, 모듈간의 동적(Dynamic) 관계와 의존을 매우 효과적으로 관리할수 있게 한다. (Web service based SOA가 네트워크를 중심으로 하는 SOA라면 OSGi는 Java Object based SOA이다.)

출처: 네이버 지식in

편집: 오지훈, cache798@naver.com

 

소프트웨어 분야에서 프레임워크와 라이브러리, 플랫폼, 아키텍쳐를 비교해 보면, 다음과 같다.

 

프레임워크: 소프트웨어의 뼈대 구조

 

프레임워크란 특정형태의 소프트웨어 문제를 해결하기 위한 상호 협력하는 클래스들과 인터페이스들의 집합. 즉 소프트웨어 콤포넌트들의 집합을 의미한다. 이는 여러클래스와 컴포넌트로 구성되고 좀더 높은 수준에서 패턴들을 조직화하며 다양한 애플리케이션에서 이용 가능한 범용성(generic)을 가진다.

 

프레임워크는 다른 소프트웨어 프로젝트가 개발될 수 있는 뼈대 구조이다. 지원 프로그램, 라이브러리, 언어, 다른 소프트웨어 구성 요소들을 엮어 주는 소프트웨어 등을 포함하고 있다. 따라서, 플랫폼도 프레임워크의 일종이라고 볼 수 있으며, MS사에서 닷넷 플랫폼을 닷넷 프레임워크라고 지칭하는 것도 틀린 것이 아니다.

 

또한, UI 프로그램 개발을 위한 부분 만을 떼어내서 프레임워크라고 할 수도 있다. UI 프로그램 개발을 위한 부분 만으로는 완전한 소프트웨어 실행 환경이 되지 않으므로 플랫폼은 아니지만 프레임워크이다. 이러한 점에서 프레임워크와 플랫폼은 다른 경우가 많다.

프레임워크에 대한 내용의 이해를 돕기위해 라이브러리와 비교를 해보자. 라이브러리는 애플리케이션에서 호출할수 있는 함수와 루틴으로 구성되며, 필요한 클래스를 개발자가 불러오는 방식을 지닌다.

 
프레임워크와 라이브러리의 관계는 구성적인 측면에서 라이브러리는 함수와 루틴들로 볼 수 있고, 프레임워크는 콤포넌트들로 볼 수 있다. 실제 사용하는 측면에서 라이브러리는 내부에서 불러서 사용하고, 프레임워크는 내부에서 호출이아니라, 자체가 그대로 동작하거나,상속을 받아 재구성하여 동작한다. 이러한 콤포넌트들은 라이브러리를 불러서 사용할 수 있다.

 

플랫폼: 소프트웨어 실행 환경

 

가장 일반적이면서도 명료한 의미는 "소프트웨어가 실행되는 환경"이다. 개발 언어나 개발 환경을 플랫폼에 포함시키기도 하지만 이는 부수적 개념 혹은  확장된 개념에 불과하고, 핵심은 "소프트웨어가 실행되는 환경"이다.

 

각 프로그램은 아무 플랫폼에서나 실행되는 것이 아니고 특정 플랫폼에서만 실행된다. 일반적으로, O/S는 모두 플랫폼이다. Windows는 윈도우즈 프로그램만을 실행시킬 수 있는 플랫폼이고, 리눅스는 리눅스 프로그램만을 실행시킬 수 있는 플랫폼이다.

 

 

자바 런타임 환경도 플랫폼이다. 자바 프로그램은 O/S에 대한 종속성은 거의 없고 자바 런타임 환경없이는 실행되지 않으므로 자바 런타임 환경을 주요 플랫폼으로서 필요로 한다. 마찬가지로 닷넷 프로그램도 닷넷 런타임 환경없이는 실행되지 않으므로 닷넷 런타임 환경이 플랫폼이 된다.


아키텍처: 소프트웨어의 주요 설계 구조

 

소프트웨어의 주요 특징들을 결정짓는 주요 설계 구조이다. 즉, 소프트웨어의 주요 구성 요소 및 구성, 이들간의 주요 인터페이스, 중요 동작 방식 등 소프트웨어의 주요 특징들을 결정짓는 모든 설계 구조를 포함한다.

 

소프트웨어의 주요 특징을 결정짓고 소프트웨어 개발에 미치는 영향도 매우 커서 소프트웨어 개발에 있어서 가장 중요한 부분이라고 할 수 있다. 지원 프로그램, 라이브러리, 언어, 다른 소프트웨어 구성 요소 등과 같이 구체적인 구현을 포함하지 않는다는 점에서 프레임워크나 플랫폼과는 명확히 구분된다.

 

정리하자면, 이렇게 된다.

 

아키텍쳐 = 소프트웨어 설계 구조

프레임워크 = 소프트웨어 개발 구조  <-- 라이브러리 참조

플랫폼 = 소프트웨어 실행 환경

'It's IT' 카테고리의 다른 글

IT 프로젝트의 현실  (0) 2007.08.17
고공행진 노키아, 불량 베터리......  (0) 2007.08.16
블랙잭에서 Skype, MSN, 구글토크를...  (0) 2007.08.16
IT 프로젝트의 현실
 
출처: 불분명
 
출처는 분명하지 않지만 인터넷에서 한참 유행했던 IT 프로젝트가 수행되는 현실을 극명하게 보여주는 그림을 하나 소개한다. 나는 이 삽화가 우리가 처한 프로젝트의 현실을 함축적으로 잘 표현하고 있다고 생각한다. 삽화의 의미를 내 관심에서 되새겨 보았다.

 

사용자 삽입 이미지
       

(맨 위 왼쪽부터 설명해보면)

 

1 : 고객은 요구사항을 프로젝트 팀에게 간략하게만 설명한다. 자신의 요구사항을 다 이야기해주는 친절한 고객은 없다. 알아서 잘 해주기를 바라는 고객이 대부분이다.

 

2 : 프로젝트 리더(PL)는 고객이 말한 것을 자세히 파악하지 못하고 일부분만 어렴풋이 이해한다.(선반이 3개에서 1개로 줄었고 나무에 매다는 방식도 나뭇가지 양쪽에 각각 매다는 것으로 이해한다.)

 

3 : 업무를 분석하고 설계한 결과는 전혀 연관성이 없고 실제 구현되기 어렵게 디자인되어 있다. (나뭇가지가 땅에서 나오고 나무는 둘로 잘라져 있다.)

 

4 : 프로그래머가 짠 코드는 응집력이 떨어지고 나무에 매달 수 없을 정도로 축 늘어져 있다. 쓸데없는 코드로 가득하다.

 

5 : 영업은 고객에게 실현될 수 없는 장미빛 공약을 남발하여 프로젝트를 더 힘들게 한다. (세상에 대한민국에 안되는 게 어디 있냐마는 럭셔리한 의자를 가느다란 나뭇가지에 매달 수 있다고 허풍을 치다니.)

 

6 : 프로젝트 산출물은 납기준수라는 미명하에 거의 흔적을 찾아볼 수 없다.(흔적은 그림자만 남아 있어서 이해하기는 거의 불가능)

 

7 : 실제 구현되어 사용할 수 있는 프로그램은 거의 없고, 있어도 업무에는 별 도움이 안되는 프로그램들이다.(끈만 매달았으니 진척은 100%지만 실제 구현은 절반도 채 안된다.)

 

8 : 고객에게 청구하는 금액은 정확한 기준이 없이 들쭉날쭉하다. (마치 롤러코스트를 타는 것처럼 어쩔 때는 거의 공짜로 해주겠다고 하다가 만만한 고객을 만나면 과당청구하기도 한다.)

 

9 : 회사에서 지원받은 건 전혀 없다. 어떤 문제가 발생하더라도 프로젝트에서 알아서 잘 해결하라는 미션 임파서블이 프로젝트의 목표이다.(지원을 받으면 오히려 나무를 자르게 되는 역효과가 크다.)

 

10 : 고객이 정말 필요한 것은> 아뿔싸, 고무 타이어가 튼튼하게 매달린 그네였다. 그렇다면 프로젝트의 운명은? 재개발 아니면 클레임이다.

WINC와 Callback URL SMS 개념

휴대폰 이용자들이 이동통신 사업자들의 무선인터넷 포털을 거치지 않고 다른 컨텐츠 메뉴에 바로 접속할 수 있도록 무선인터넷 주소 서비스인 WINC(Wireless Internet Number of Contents)와 Callback URL SMS 서비스가 제공되고 있습니다.


Callback URL SMS가 무엇인지를 설명하겠습니다.

인터넷 기업들과 컨텐츠 업체들이 이동통신 사업자들에게 무선인터넷망 개방시 우선적으로 요구했었던 것이 Callback URL SMS를 허용해 달라는 것입니다.


“Callback URL SMS”는 단문메세지(SMS)에 특정 싸이트의 IP 주소(URL)를 링크해서 전송하면 휴대폰 이용자는 단문메세지를 읽어보고, 확인 버튼(또는 통화 및 무선인터넷 접속 버튼)만 누르면 해당 무선인터넷 싸이트로 이동할 수 있도록하는 것입니다.


현재 이런 Callback URL SMS 서비스가 사용되는 가장 대표적인 사례는 이동통신사들의 자체 마케팅용 SMS나 “오빠…나 한가해~~~~~”라는 문구가 눈에 확 띄는 성인 스팸 메일들에서 사용 중에 있습니다.


이처럼 Callback URL SMS를 사용하게 되면 사용자들은 특정 무선인터넷 싸이트에 접속하기 위해서 이동통신사의 무선인터넷 포털을 경유하거나, 아니면 특정 무선인터넷 싸이트의 URL 주소를 외울 필요없이 수신한 SMS를 이용하여 바로 무선인터넷 싸이트로 이동할 수 있는 것입니다.


그럼 두 번째 WINC(Wireless Internet Number of Contents) 서비스에 대해 설명하겠습니다. 이 글을 읽으시면 다음 숫자들을 휴대폰으로 누른 후에 무선인터넷 접속버튼을 눌러보세요.


'It's IT > It's mobile' 카테고리의 다른 글

Mobile Network Code  (0) 2007.12.07
구글 안드로이드 SDK  (0) 2007.11.14
이동통신 주요 시스템 개념  (0) 2007.08.17
HLR(Home Location Register)  (0) 2007.08.17
이동통신 관련 주요사항 요약  (0) 2007.08.17

이동통신 주요 시스템 개념

AuC (Authentication Center)  

이동통신 망에서 가입자에 대한 인증 및 무선 통화 구간에 대한 암호화 기능을 지원(인증 키 관리)한다. 인증 및 암호화를 위하여, 자체 데이터베이스에서 가입자에 대한 전화번호, 단말기 일련번호, 인증 키 등을 관리하여, 정의된 인증 알고리즘을 수행한다.  


BSC (Base Station Controller), 제어국

여러대의 기지국(BTS)들을 관리하면서 이동교환기(MSC)와 연동하며, 일부 제어국에서는 2.5 세대/3 세대 데이터서비스를 위하여 PDSN(라우터)과 연동 기능 제공


BTS (Base station Transceiver Subsystem), 기지국

이동전화와 무선 구간으로 연결되어 이동전화를 제어하고 통화 채널을 연결시켜주는 시스템


DSCP (Data SCP)

지능망 SCP와 연동하여, 선불형 지능망 가입자에 대한 세분화된 과금을 실시간 처리

 

EIR (Equipment Identification Register)  

이동통신망에서 단말에 대한 IMEI (International Mobile Station Equipment Identity)를 저장하고 관리한다. 부적절한 이동통신 단말기를 검출하고, 이들 단말에 대한 목록을 관리함으로써 부적절한 단말에 대한 사용을 제한하는 기능을 수행한다.


GMLC (General Mobile Location Center) 

GMLC는 W-CDMA 망에서 SMLC(Serving Mobile Location Center) 및 교환기, SGSN 등과의 연동을 통해서 가입자의 위치를 수집한다. 이는 이동 가입자(휴대폰)의 LBS 서비스 플랫폼의 가입자 위치정보 요청에 의하여 가입자의 위치 정보를 수집하여, LBS 서비스 플랫폼으로 전송 기능을 수행한다.


HLR (Home Location Register), 홈위치등록기
이 동전화가입자에 대한 정보 (이동성- 현재 위치- 정보, 인증 및 부가 서비스 정보 등)를 실시간으로 관리하는 시스템으로, 교환기는 HLR에게 가입자의 현재 위치 정보를 입수하여 이동통신 가입자에 대한 착신이 가능하게 된다. 내부 데이터베이스에는 가입자에 대한 전화번호, 단말기 일련번호, 호처리 루팅 정보, 권한 정보, 각종 부가서비스 정보 등을 관리한다. 


INBH (Intelligent Billing Host)  

선불형 지능망 가입자의 데이터 호(단문 메시지, 인터넷 컨텐츠, 장문 메시지 등)에 대한 실시간 과금을 수행한다. SMSC, VAS, LMSC 등 여러 종류의 Client와 연동하여 차감 금액을 실시간으로 계산하고, 이를 지능망 SCP에 전달한다.


IPAS (IP Accounting System)  

다양한 특성을 가진 개별 서비스(IP address, 컨텐츠 내용, URL 등)에 대한 차등 과금을 수행한다. (컨텐츠 가치 중시) 데이터 망에서 전송되는 raw packet data를 실시간으로 캡쳐하고, 실시간으로 분석하여, 실시간으로 과금 처리하는 기능을 제공한다.


LMSC( Long Message Service Center), 장문메세지센터
장문 메시지 저장/전송 기능 제공한다. 단문메시지와 장문메시지의 구분 기분은 전송할 메시지가 80바이트를 넘는지의 여부이다.


MMS (Multimedia Message System), 멀티미디어메세지센터
멀티미디어 메시지 저장/전송 기능 제공


MPC (Mobile Positioning Center)
MPC 는 CDMA 망에서 측위 서버인 PDE(Positioning Determination Entity) 및 교환기와의 연동을 통해서 가입자의 위치를 수집한다. 이는 이동 가입자(휴대폰)의 LBS 서비스 플랫폼의 가입자 위치정보 요청에 의하여 가입자의 위치 정보를 수집하여, LBS 서비스 플랫폼으로 전송 기능을 수행한다.


MSC (Mobile Switching Center), 이동교환기

이동통신망의 핵심 망요소로서, 음성통화 및 각종 부가서비스를 제어하고, 통화로를 설정하며, 여러 다른 장비들 및 외부망과의 연결기능을 제공한다. 즉, MSC는 이동통신 가입자에게 회선교환 서비스 및 통화채널 전환 기능을 제공하는 교환기이다.


SMSC (Short Message Service Center), 단문메세지센터
단문 메시지 저장/전송 기능 제공한다. 단문메시지와 장문메시지의 구분 기분은 전송할 메시지가 80바이트를 넘는지의 여부이다.


VLR (Visitor Location Register)

방문 가입자에 대한 호처리를 위한 위치레지스터 시스템



□ 지능망

지능망(Intelligent Network)이란 이동통신교환기(MSC)의 소프트웨어 변경 없이 새로운 서비스를 이동통신망에 적용할 수 있는 망 환경을 의미한다. 지능망이란 용어는 CDMA의 경우 WIN이란 규격, GSM의 경우 CAMEL이란 규격으로 발전되었다.

 
Dual Stack SCP (CDMA WIN & W-CDMA CAP)  
CDMA 지능망 서비스(WIN)와 W-CDMA 지능망 서비스(CAMEL)를 하나의 플랫폼에서 동시에 제공하는 SCP 시스템이다.  이 시스템은 CDMA 서비스와 W-CDMA 서비스를 동시에 제공하는 사업자가 망 투자비를 절약할 수 있는 솔루션이다.  


IP (Intelligent Peripheral)  

지능망 서비스에 필요한 각종 안내 멘트를 제공한다. 지능망 서비스 진행을 위한 비밀번호, 서비스 선택 등의 각종 정보를 가입자로부터 수집한다.  

Parlay GW & AS / Parlay X GW & AS  
외부 서비스개발업체(3rd Party CP)들에게 표준화된 연동 규격(Open API)을 제공하여 망 플랫폼과 서비스 플랫폼의 종류에 상관없이 다양한 신규 부가 서비스들을 제공할 수 있게 해주는 차세대 지능망 솔루션이다.  
 
SCP (Service Control Point)  
지능망의 핵심 장비로써, 각종 서비스에 대한 서비스 로직을 제공한다. 즉, 이동통신 사업자의 지능망 서비스 시나리오를 실제로 수행한다. 교환기(SSP)와의 연동을 통하여 서비스 수행에 필요한 호처리를 수행하며, IP를 제어하여 가입자에게 안내방송을 제공한다.  
 
Service Node  
한 두 개의 특정 지능망 서비스를 도맡아 수행하는 시스템으로써, 해당 서비스에 대해서는 지능망의 SCP/IP/SMP의 기능을 모두 수행한다.

SMP (Service Management Point)  
고객센터와의 연동을 통하여 가입자 정보를 저장 및 관리하고, 이를 다수의 SCP에 분배한다. 통합된 운영 및 유지보수 기능을 사용하여, 다수의 SCP 및 IP에 대한 관리가 가능하도록 한다.  


□ IMS망

IP Multimedia Subsystem(IMS)는 IP를 기반으로 다양한 멀티미디어 서비스를 제공할 수 있도록 하는 core network infra이다. 사용자는 저렴한 비용으로 다양하면서 풍부한 서비스를 사용할 수 있는 사업자를 선호하게 될 것이며, 이러한 변화에 대한 정확한 해답이 바로 IMS이다.


<3GPP의 IMS 망 구조>

 

BGCF (Breakout Gateway Control Function)

PSTN 착신호에 대한 라우팅 최적화를 고려하여 적당한 MGCF를 선택

 

IBCF 
IMS 망간 연동을 위한 보안 및 NAT traversal 기능


CSCF (Call Session Control Function)

 3G 네트워크 상에서 SIP 기반의 Call Control 및 Session Handling기능을 수행하는 시스템으로 다양한 멀티미디어 서비스를 제공 가능하게 한다.


IP-CAN(IP-Connectivity Access Network)

이동 단말이 IMS 망에 접속하기 위해서는 IP-CAN을 거쳐야 한다. IP-CAN은 단말에게 패킷데이터전송을 위한 엑세스망을 말한다. 예를 들어 GPRS나 WCDMA가 될 수 있다.

 

IMS-MGW / MGW (Media Gateway)

MGW는 PSTN이나 2G/2.5G 망과 연동하기 위해서 IMS 내의 IP 패킷 형태의 미디어 데이터(RTP)를 회선 교환망의 베어러 상에 전송될 수 있는 형태로 변환하는 기능을 한다. 이 과정에서 코덱의 변환이 필요하다.


I-CSCF (Interrogating-CSCF)
I-CSCF는 망 내의 가입자에게 연결하기 위해서 들어오는 모든 호에 대해서 접점 역할 및 망 내에 로밍한 타망 가입자와의 접점 역할을 수행한다. 이러한 역할로 인해서 일반적으로 I-CSCF는 방화벽(firewall) 역할을 수행하며 사업자 망의 구성, 토폴로지 및 용량 등을 외부에 노출되지 않게 하는 은닉기능을 가질 수 있다. I-CSCF는 HSS를 조회하여서 S-CSCF를 결정하고 등록과정에서 UE에게 S-CSCF를 할당하게 된다. 또한 SIP Request를 S-CSCF로 포워딩하는 역할 및 과금 정보의 생성을 수행한다. 그리고 여러 개의 HSS가 운용되는 망에서 SLF를 조회함으로써 HSS를 결정하는 역할을 한다.
 

MGCF (Media Gateway Control Function)

MGCF는 프로토콜 변환(SIP↔ISUP 시그널링 변환)을 처리하므로 PSTN과 PLMN 또는 SS7과 IP의 종단점으로 정의할 수 있다. 이는 PSTN에서 IMS으로 들어오는 호에 대한 시그널링의 변환 및 변환된 Request 메시지를 S-CSCF로 포워딩하는 기능을 수행하고, IMS와 PSTN 간의 호 제어 시그널링에 의해서 생성되는 호의 실질적인 베어러의 연결을 위해서 MGW를 제어한다.


MRF (Multimedia Resource Function)

MRF는 IM Subsystem 상에서 다자간 멀티미디어 회의를 제어하고 미디어 데이터를 처리하는 기능을 담당한다. 주요한 기능으로는 멀티미디어 메시지 재생, 음성메일 서비스, 미디어 변환/믹싱 서비스, Transcoding 서비스를 한다. 또한 기존의 MSC가 가지고 있던 Tone 생성 및 안내방송 기능도 담당한다.


P-CSCF (Proxy-CSCF)
P- CSCF는 단말이 GPRS 액세스를 통해서 IMS에 접속할 때 처음 만나는 지점이다. 3GPP에서는 단말이 P-CSCF를 찾는데 DHCP를 이용하거나 PDP Context를 통해서 주소를 얻는 방법을 제시하고 있다.  단말로부터의 SIP Register Request를 단말의 홈 도메인의 I-CSCF로 전달하고 이 등록절차에서 S-CSCF의 주소를 저장했다가 UE로부터 S-CSCF로 향하는 SIP 메시지가 있을때 이를 S-CSCF로 포워딩한다.


S-CSCF (Serving-CSCF)
S- CSCF는 호 처리를 위한 주요기능을 수행하고,  서비스를 제공하기 위해서 관련되는 모든 기능에 대한 책임을 갖고 있다. 실제 등록된 사용자의 세션 상태관리를 하면서 제어 서비스를 수행하며, 사용자에게 서비스 자원과 관련된 정보를 제공한다. 사용자의 다이얼된 번호나 SIP URL을 통하여 착신 사용자의 홈 도메인의 I-CSCF의 주소를 얻는다.

 
SGW (Signaling Gateway)
SGW는 시그널링 프로토콜의 전송계층을 변환하는 기능을 수행한다. 즉, ISUP나 MAP과 같은 프로토콜 자체는 변환하지 않고 IP 망과 PSTN, IP 망과 기존망(2G 및 2.5G)의 전송계층을 변환하는 기능을 한다.
 
SLF (Subscription Locator Function)
망내에 HSS가 두 개 이상 운영되고 각각 별도의 주소로 인식될 때 CSCF에게 적절한 HSS의 주소를 제공
 
 

□ 데이터망

이동통신 망에서 데이터 서비스를 제공하기 위한 이동통신 인프라를 의미한 다. 음성통화를 주된 목적으로 했던 초기 휴대폰은 진화에 진화를 거듭하여 현재는 데이터 서비스 분야에서 더욱 많은 활용가치를 창출해가고 있다. 인터넷 가입자의 폭발적인 성장에 힘입어 무선 인터넷이 차세대 산업 분야로서 예견되고 있으며, 이러한 무선 인터넷 서비스를 제공하기 위한 기반 인프라를 통틀어 데이터 망이라 한다.

<데이터망 구조>
 

AAA (Authentication, Authorization, and Accounting)
2G 및 1x 패킷 데이터 망에서 가입자 인증, 가입자 권한 확인, 과금 부여의 기능을 수행하는 무선 인터넷의 필수 망 요소의 하나이다. 즉, 가입자가 핸드폰을 사용하여 무선 인터넷에 접속할 경우, 1) 해당 가입자가 적법한지, 2) 해당 가입자에게 어떤 종류의 서비스가 제공 가능한지, 3) 얼마 만큼의 데이터 서비스를 받았는지를 결정하는 시스템이다.


DRN (Data Roaming Node)  

W-CDMA망에서 해외로 로밍한 경우에도 데이터 서비스를 받을 수 있도록 해주는 시스템으로서, IM-GSN (Intermediate GRPS Serving Node)의 기능을 수행한다. 다른 PLMN 가입자의 Roaming 시 패킷 착신이 가능하도록 visited SGSN 과 home SGSN 간에 GTP 메시지를 중계하는 기능을 제공하며, 방문한 PLMN에서 동작한다.


GGSN (Gateway GPRS Support Node)

SGSN과 PDN 사이의 무선 게이트웨이 역할을 하는 GPRS 망 실체. 이 GGSN을 이용하여 이동 가입자가 PDN을 접속할 수 있다. GPRS 망에서는 외부망과 게이트웨이 역할을 담당하는 GGSN을 통하여 인터넷과 접속한다. 다시말해 GGSN은 패킷 데이터를 인터넷망으로 보내기 위한 게이트웨이 장치이다.
 

HSS (Home Subscriber Server)

HSS는 사용자에 대한 마스터 데이터베이스 역할을 수행하는 시스템으로, 2G 망의 HLR과 AuC 기능이 통합된 형태의 시스템이다. HSS는 이동성 관리, 사용자 인증 정보 생성, 서비스 Provisioning, 서비스 인증, 접속 권한부여 및 Call/Session 설정 지원 기능 등을 수행한다.

HSS는 3G HLR 기능을 모두 포함함과 동시에 IMS 가입자에 대한 정보를 관리하는 HLR의 super set이라고 볼 수 있다.

 

IWF (InterWorking Function system)

2 세대 데이터 서비스를 제공을 위한 모뎀 및 라우팅 기능 제공한다. 구형 모델의 휴대폰(예 : 흑백폰) 상에서의 데이터 서비스는 IWF를 통해서 IP 망과 연동하여 제공


PDSN (Packet Data Serving Node)

동기식 (CDMA) 1x 망에서 데이터 서비스를 제공하기 위해 네트워크 자원의 할당과 단말의 이동성을 관리하고 과금 정보를 수집해서 AAA로 전달한다. H/W 측면에서 보면 PDSN은 2.5 세대 및 3 세대 데이터 서비스를 제공하기 위한 라우터이다. 현재 대다수 컬러폰들이 PDSN과 연동한다. 


SGSN (Support GPRS Serving Node)

SGSN은 비동기망(W-CDMA, UMTS, GPRS등)에서 패킷 데이터 처리를 수행하는 시스템으로, 음성 서비스 분야의 교환기에 해당하는 역할을 수행한다. 이는 GGSN과 함께 GPRS 네트워크에서 초고속 인터넷 서비스를 가능케 하는 시스템 요소이다.

 

+ Recent posts