2007. 9. 27Practical Use of CppUnitTable of ContentsPart I. Introduction to CppUnit 1. What is CppUnit 2. How to download 3. How to start 4. How to use Part II. Practical Exercise 5. Making Test Cases using CppUnit 6. ReferencesPart I. Introduction to CppUnit0. Prologue (1/2)※ Test Levels based on IEEE-2004 SWEBOKTest target에 따른 분류Unit TestingIntegration TestingSystem TestingTesting 목적에 따른 분류Acceptance/ qualification testingInstallation testingAlpha beta testingPerformance testingStress testingConformance/ Functional/ Correctness testingReliability achievement evaluationRegression testingBack-to-back testingConfiguration testingUsability testingRecovery testingTest LevelsUnit testing verifies the functioning in isolation of software pieces which are separately testable. Integration testing is the process of verifying the interaction between software components. System testing is concerned with the behavior of a whole system.0. Prologue (2/2)권장(C)GPL (Free)Linux, Windows VxWorksCC unit wnload : http://sourceforge.net/projects/cppunit※ from http://sourceforge.net/projects/cppunitCppUnit is a open test framework2. How to download (1/2)http://sourceforge.net/projects/cppunitDownload from SourceforgeClick2. How to download (2/2)Unzip cppunit-1.12.0.tar.gz file into a location of your choiceUnzip cppunit-1.12.0.tar.gz file3. How to start (1/10)Open CppUnitLibraries.dsw file In the 'Build' menu, select 'Batch Build…'. And then, in the batch build dialog, select all projects and press the 'Rebuild All' button.Installation (1/5) with VC++ 63. How to start (2/10)Open examples.dsw file Make HostApp the active project, and then buildSet As Active Project※ Trouble Shooting : Check if there are 3 files : cppunitd_dll.lib, testrunnerd.lib, testrunnerd.dll in '/lib' folderInstallation (2/5) with VC++ 63. How to start (3/10)In VC++, click on [Tools]-[Customize…] and choose [Add-ins and macro files] tab. Press [Browser…] button. Select the file lib/TestRunnerDSPlugIn.dll and press 'Osame test suite as CppUnitTestMain, but run them using the MFC TestRunner. examples/msvc6/CppUnitTestApp/CppUnitTestApp.dswExplanation for CppUnit Examples (1/3)3. How to start (9/10)hierarchy (hierarchy.exe) : A sample demonstrating how to subclass test examples/hierarchy/hierarchy.dsw HostApp (HostApp.exe) : A sample using the MFC TestRunner demonstrating different test failure the MFC Unicode TestRunner. examples/msvc6/HostApp/HostApp.dswExplanation for CppUnit Examples (2/3)3. How to start (10/10)Money (moneyd.exe) : Probably what you want to look at if you are a newbie examples/money/money.dswExplanation for CppUnit Examples (3/3)4. How to use (1/10)Money (Win32 Debug : moneyd.exe) : There are three classes : IncompatibleMoneyError, Money, MoneyTest examples/money/money.dsw※ source : /examples/moneyTarget Classes (To be tested)Money.hMoneyTest.h MoneyTest.cppTest ClassCppUnit Usage (examples/money)4. How to use (2/10)※ source : /examples/money// Money.h #ifndef MONEY_H #define MON, inherited from TestFixture class, are called automatically, void tearDown(); // and are executed when each Test Case starts and ends, respectively. void testConstructor(); void testEqual(); void testAdd(); void testAddThrow(); }; #endif // MONEYTEST_HCppUnit Usage (examples/money)4. How to use (5/10)※ source : /examples/money// MoneyTest.cpp (1/2) #include StdAfx.h #include Money.h #include MoneyTest.h // Registers the fixture into the 'registry'. The registry is available by calling the static function // CppUnit::TestFactoryRegistry::getRegistry( ). CPPUNIT_TEST_SUITE_REGISTRATION( MoneyTest ); void MoneyTest::setUp() { } void MoneyTest::tearDown() { } void MoneyTest::testConstructor() { // Set up const std::string currencyFF( FF ); const double longNumber = 1234.5678; // Process Money money( longNumber, currencyFF ); // Check CPPUNIT_ASSERT_EQUAL( longNumber, money.getAmount() ); CPPUNIT_ASSERT_EQUAL( currencyFF, money.getCurrency() ); }※ CPPUNIT_ASSERT_EQUAL(expected, actual) CheCompilerOutputter.h #include cppunit/extensions/TestFactoryRegistry.h #include cppunit/ui/text/TestRunner.h int main(int argc, char* argv[]) { // Get the top level suite from the registry CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest(); // Adds the test to the list of test to run CPPUNIT_NS::TextUi::TestRunner runner; runner.addTest( suite ); // Change the default outputter to a compiler error format outputter runner.setOutputter( new CPPUNIT_NS::CompilerOutputter( runner.result(), CPPUNIT_NS::stdCOut() ) ); // Run the test. bool wasSucessful = runner.run(); // Return error code 1 if the one of test failed. return wasSucessful ? 0 : 1; }Base class for all test objectsOutputs a TestResultCollector in a compiler compatible format.4. How to use (8/10)Project SettingsProject Settings → [C/C++] → (Category:) Preprocessor → Additional include directories : Add '/include' directory.Project Settings → [Link] → (Category:) Input → Additional Library path : Ad}
Orthogonal Array의소프트웨어 테스팅 적용 방법정성원요 약수학 분야에서 정의되어진 Orthogonal Array(직교 배열)는 현재 산업 공학 분야의 실험 계획 및 분석 도구로서 널리 사용되고 있으며 6Sigma(6시그마) 실험계획법(DOE, Design Of Experiments)의 한 방법으로서 정의되어질 만큼 그 효과를 이미 인정 받고 있다. 이러한 Orthogonal Array의 원리를 소프트웨어 테스트 디자인에 적용함으로서 테스트 소요 비용과 시간을 상당부분 절약할 수 있다. 본 고에서는 Orthogonal Array의 사용 목적과 그 원리를 소프트웨어 테스트 디자인 측면에서 살펴보고, Orthogonal Array를 소프트웨어 테스트 디자인에 적용하는 방법에 대하여 예를 들어 자세히 설명한다.1. 서 론미국 플로리다 올랜도(Orlando)에서 개최된 “STAR EAST 2004” 컨퍼런스(2004년 5월 17일~21일)의 의장인 Lee Copeland의 “Key Test Design Techniques”라는 주제의 강의에서 설명되어진 테스트 디자인 기법 중의 하나가 바로 “Orthogonal Array를 이용한 테스트 기법” 이었는데, Lee Copeland의 말로는 이미 미국의 AT&T(社)에서 이 기법을 사용하여 비용 절감 및 놀라운 테스트 효과를 거두었다고 한다. 즉, Orthogonal Array(이하 OA)를 적용한 경우, 프로젝트 인력 및 일정 절감 효과와 더불어 테스트 결과 측면에서도 OA를 적용한 경우와 그렇지 않은 경우를 비교하였을 때 결함(defect) 검출 비율이 거의 동일하였다는 것이다. 이것은 수 많은 테스트 입력 데이터와 시나리오가 항상 존재하는 소프트웨어 테스트 분야에서 짧은 테스트 기간과 적은 테스트 인력으로도 소프트웨어 테스트 그 자체에 대한 신뢰성을 높일 수 있다는 의미였다.본 고에서는 OA의 사용 목적 및 그 원리를 소프트웨어 테스트 분야에 맞도록 설명하고 OA를 어떻게 소프트웨어 테스트 디자인 기법에 적18 Lines, 3 Choices(Level), 5 Columns즉, 그림 2의 OA에 대한 표기는 4행(Lines) 3열(Columns)의 구조를 가지는 행렬을 의미하는 것으로서 행렬의 각 성분이 취할 수 있는 값에 대한 선택(Choice)은 2가지(1 또는 2)라는 것을 의미한다(그림 1의 첫 번째 OA 참조). 이것을 테스트 디자인 측면에서 설명하면, “Choice”라는 것은 행렬의 성분이 가질 수 있는 최대 값, 또는 특정 테스트 입력 항목에 있어 입력 값에 대한 경우의 수의 최대 치(値)를 가리키고 있으며, 열의 개수는 테스트 입력 값이 들어갈 수 있는 항목의 개수를 의미한다. 따라서 OA를 테스트 디자인 분야에 적용하기 위해 필수적으로 고려되어야 할 사항은 “Choice(or Level)”와 “Column”의 값이며 “Lines”는 테스터(tester)가 고려하지 않아도 OA Table에 의하여 결정되어지는 값이다[1]. OA는 웹(web)이나 OA 계산 툴들을 이용하여 구할 수 있는데, 사용자가 직접 수학적 공식을 이용하여 OA를 만들 수도 있다[2, 3].여기에서 주의 깊게 살펴볼 사항은 OA 각 행들이 pairwise(서로 소)하며 각 열들이 pairwise하다는 것이다. 각 행들이 pairwise하다는 것은 그림 3과 같이 어느 행의 조합도 서로 다른 행의 조합과 서로 다르고, 어느 열의 조합도 서로 다른 열의 조합과 서로 다르다는 것을 의미한다. 또한 OA의 각 행 및 열에 선택 가능한 입력 값들이 반드시 한번 이상은 들어가게 되어있다는 것을 유념해야 한다.그림 SEQ 그림 * ARABIC 3. L4 (23) 각 행 및 열들의 pairwise한 구조3. OA 사용 목적 및 장점소프트웨어 테스트 분야에서 OA를 사용하는 목적을 살펴보면 다음과 같이 크게 두 가지로 나눌 수 있다.소프트웨어의 품질 및 생산성을 향상시키고 그 소프트웨어의 결함(defect) 감소를 위해서는 고려해야 할 테스트의 인자 수가 너무 많다. 특히, 함수(functio하여 valid input & invalid input을 그림 4와 같이 int a, int b에 대한 입력 값으로 선택했을 경우, 함수 fn의 입력 값의 총 경우의 수는 15 x 2(true & false) = 30 이 된다.그림 SEQ 그림 * ARABIC 4. 함수 fn에 대한 Input 1, Input 2의 선택또 다른 예로서 그림 5와 같은 “Netscape Preferences” 항목들에 대하여 테스트 한다고 가정하자.그림 SEQ 그림 * ARABIC 5. “Netscape Preferences” 다이얼로그“Netscape Preferences” 다이얼로그의 여러 항목들에 대한 사용자의 선택 가능한 메뉴(Menu)를 고려해 보면 다음과 같이 테스트 케이스들을 생각할 수 있다.3 툴 바 (pictures, text, or both)“launch on startup”에 대한 3가지 선택 (browser, mail or news)“startup” 페이지에 대한 3가지 선택 (blank home page, home page names a valid file, or home page name has a syntax error)“underlining of links”에 대한 2가지 선택 (don’t underline, or underline)“expiration of links”에 대한 2가지 선택 (never expire, expire after 30 days)위 메뉴들에 대한 사용자의 선택에 대한 총 경우의 수를 계산해 보면,3 x 3 x 3 x 2 x 2 = 108!이며, 이 경우에 테스터가 테스트 해야 할 총 시나리오의 개수는 108가지라는 결론을 얻을 수 있다.앞에서 설명한 두 개의 예에서 볼 수 있듯이 테스터가 고려해야 할 테스트의 인자 수는 너무도 많다. 이러한 테스트의 입력 데이터 조합이 너무 많은데 반하여 한정된 테스트 기간 및 테스트 인력으로 인한 테스트의 범위 제약은 어쩌면 당연하다고 할 수 있다.이와 같은 문제점들을 해결하기 위한 한 같이 (int a)와 (int b)의 입력 값을 선택한다고 가정 하면, 함수 fn을 테스트 할 때 사용되어질 각 파라미터의 입력 값은 다음과 같다.그림 SEQ 그림 * ARABIC 6. 함수 fn에 대한 int a, int b의 입력 값 선택int a : a’(invalid), 0(valid), a”(valid)int b : b’(valid), 0(valid), b”(invalid)bool c : true, falsebool d : true, false이와 같은 입력 값의 선택을 기준으로 적당한 OA를 찾기 위해 “Choice”와 “Column”의 값을 결정하면, 각각 Choice = 3, Column = 4를 얻을 수 있다. 이 값에 대응하는 OA를 OA Table에서 찾아 보면, 그림 1의 두 번째 OA인 L9 (34)를 쉽게 찾을 수 있다.이렇게 알맞은 OA를 찾았으면, 다음과 같은 순서에 의하여 OA의 각 성분들을 실제 입력 값으로 대응시킨다(그림 7 참조).OA 각 열의 제목에 함수 fn의 각 파라미터들을 대응 시킨다.OA 1열의 각 성분에 int a에 대한 입력 값을 대응 시킨다.(1= a’,2= 0,3= a”)OA 2열의 각 성분에 int b에 대한 입력 값을 대응 시킨다.(1=b’,2=0,3=b”)OA 3열의 각 성분에 bool c에 대한 입력 값을 대응 시킨다.(1=true,2=false)OA 4열의 각 성분에 bool d에 대한 입력 값을 대응 시킨다.(1=true,2=false)OA 3열 및 4열의 각 성분 값이 “3”인 곳은 열의 위에서부터 순서대로 “true”, “false”의 값을 반복하여 대응 시킨다.위의 규칙대로 대응시키는 절차를 그림으로 설명하면 그림 7과 같다.그림 SEQ 그림 * ARABIC 7. OA의 각 성분에 테스트 입력 값 대응 (fn)이렇게 생성된 그림 7의 세 번째 OA는 함수 fn을 테스트 할 때 입력 값에 대한 각각의 케이스(case)가 된다. 이와 같이 OA 적용 전은 테스트 입력 값의 조합에 대한 총 경입력 값으로 대응시킨다(그림 8 참조).OA 각 열의 제목에 “Netscape Preferences” 각 테스트 메뉴들을 대응 시킨다.OA 1열의 각 성분에 3 툴 바의 선택 가능한 입력 값을 대응 시킨다.(1= pictures,2= text,3= both)OA 2열의 각 성분에 “launch on startup”에 대한 3가지 선택 입력 값을 대응 시킨다. (1= browser,2= mail,3= news)OA 3열의 각 성분에 “startup” 페이지에 대한 3가지 선택 입력 값을 대응 시킨다.(1= blank,2= valid,3= error)OA 4열의 각 성분에 “underlining of links”에 대한 2가지 선택에 대한 입력 값을 대응 시킨다. (1= yes,2= no)OA 5열의 각 성분에 “expiration of links”에 대한 2가지 선택에 대한 입력 값을 대응 시킨다.(1= never,2= “>30”)OA 4열의 각 성분 값이 “3”인 곳은 열의 위에서부터 순서대로 “yes”, “no”의 값을 반복하여 대응 시킨다.그림 10과 같이 OA 5열의 각 성분 값이 “3”인 곳은 열의 위에서부터 순서대로 “never”, “>30”의 값을 반복하여 대응 시킨다.그림 SEQ 그림 * ARABIC 8. OA의 각 성분에 테스트 입력 값 대응 (GUI)이와 같이 GUI 테스트에 있어서, OA 적용 전에는 테스트 입력 값의 조합에 대한 총 경우의 수가 108가지였으나, OA 적용 후 테스트 입력 값의 조합에 대한 총 경우의 수는 그림 10과 같이 18가지가 되는 것을 알 수 있다. 다시 말해서, OA를 적용하지 않는 경우는 108개의 테스트 케이스를 만들어 “Netscape Preferences”의 기본 기능들을 검증할 수도 있겠지만, OA를 적용하는 경우는 18개의 테스트 케이스로만 “Netscape Preferences”의 기본 기능들을 검증 하겠다는 의미로 해석해도 무리는 없을 것이다.5. 결 론본 고에서는 수학에서 정의되어진 OA의 개념 ml
CNS(Car Navigation System)에서의 맵매칭 방법에 대한 고찰The Study of CNS(Car Navigation System)focusing on Map matching method요 약2001년 이후 Car Navigation System(이하 CNS)을 장착한 차량이 급증하는 가운데 많은 기업들이 차량의 위치 오차를 최소화 시키는 노력에 힘쓰고 있다. 본 논문은 CNS에서 발생되는 차량의 위치 오차를 최소화하기 위한 일환으로 GPS(Global Positioning System) 위성으로부터 계산되어진 차량의 위치 좌표와 차량의 실제(true) 좌표간의 오차를 보정하여 디스플레이(display) 상의 오류를 방지할 수 있는 맵매칭(map-matching) 방법을 제시한다.1. 서 론일반적으로 CNS란 GPS 위성을 이용하여 위성으로부터 수신된 위도와 경도 및 고도에 관한 위치 정보와 차량에 구비된 자립형 센서(sensor)의 출력 신호를 상호 비교 산출하여 차량의 현재 위치를 검출하고 차량의 현재 위치, 진행 방향 및 각종 운전상의 편의 정보를 차량에 구비된 AV(Audio/Visual) 시스템을 통해 운전자에게 제공하는 자동차 항법 시스템을 의미한다. 이러한 CNS에는 소정의 디지털 지도 데이터베이스가 구비되어 있어, 도로의 교차점이나 건축물, 차선의 개수, 도로 등급 등의 각종 주행 조건이 구비된 디지털 지도를 제공하면서 차량에 구비된 디스플레이 장치에 자차의 위치를 디지털 지도상에 실시간으로 디스플레이 한다.그러나 GPS 수신기로부터 받아들인 위치 정보와 실제 차량의 위치 사이에는 GPS 위성으로부터 수신된 데이터 자체의 오차나 디지털 지도의 부정확성, GPS 데이터의 좌표 변환 오차 등으로 인하여 오차가 발생될 수 있고[1,2], 이로 인하여 디스플레이상의 오류가 발생될 수 있다. 이에 본 연구에서는 GPS 위성으로부터 구해진 차량의 절대 좌표와 차량의 실제(올바른) 좌표간의 오차를 보정하는 방법을 제시하여 위치 오차로 인해 발다[1,2].제 주행 경로가 디지털 지도상에 도시된 도로를 벗어나지 않게 한다. 세부적으로는 차량의 위치 정보 및 주행 관련 정보에 응답해서 지도상에 표시될 차량의 현재 위치 좌표를 추출하는 위치 검출부(그림 1의 h) 및 위치 좌표의 오류를 보정하여 위치 좌표가 디지털 지도상의 주행 가능한 도로 상에 표시되도록 맵매칭하는 맵매칭부(그림 1의 i)를 포함한다. 이러한 데이터 처리부(그림 1의 g)는 차량의 현재 위치 좌표를 추출하고 맵매칭 보정을 수행하는 프로그램이 저장된 마이크로 프로세서로 구성된다.맵매칭부(그림 1의 i) : 차량의 위치 정보와 실제 위치 정보간에 발생된 오차로 인하여 차량이 마치 도로가 아닌 곳을 주행하고 있는 것처럼 지도상에 디스플레이 되는 오류를 보정한다.지도 데이터베이스(그림 1의 j) : 디지털 도로 지도 및 다양한 교통 관련 정보가 저장되며, 데이터 처리부(g)는 이 디지털 지도를 바탕으로 하여 맵매칭을 수행한다.입력부(그림 1의 k) : CNS 조작을 위한 명령을 입력시키는 명령 입력 장치로서 CNS에 구비된 다양한 종류의 명령 입력 버튼 또는 리모트 컨트롤러(remote controller)와 같은 원격 조정 장치를 포함한다. CNS는 자동차에 장착되어 동작하는 만큼, 주행 시 운전자의 편의 및 안전을 도모하기 위해 음성으로 차량의 오디오나 전자 제품을 제어하는 VRS(Voice Recognition System), 차량의 상태를 인간의 음성으로 알려주는 VAS(Voice Alarm System) 등이 포함되기도 한다.디스플레이(그림 1의 m) : LCD(Liquid Crystal Display) 등으로 구성되어 디지털 지도와 차량의 위치를 맵매칭하여 그 결과를 디스플레이 한다.네트워크 어댑터(그림 1의 n) : CNS를 LAN과 같은 통신망과 연결시켜주는 역할을 한다.2.2 CNS의 맵매칭 동작 원리본 연구의 CNS 맵매칭 동작 원리는 먼저 GPS 위성 및 적어도 하나 이상의 센서로부터 차량의 위치 정보 및 실제적인 주행 관상에 표시되도록 한다.그림 2. CNS Workflow3. 위치 오차와 그 원인본 장에서는 위치 오차로 인하여 발생될 수 있는 디스플레이상의 오류와 위치 오차의 원인을 설명한다.더 많은 연구가 필요로 되고 있다[3].GPS 위성으로부터 수신된 데이터 자체의 오차 : 위성의 궤도 이탈 오차나 전리층과 대류 층의 굴절, 잡음(noise) 등의 구조적 오차와 측위 시 위성들의 배치 상황에 따르는 기하학적 오차 등이 있다[4].디지털 지도의 부정확성으로 인한 오차GPS 데이터의 좌표 변환 오차4. 위치 오차를 최소화하기 위한 맵매칭 보정 방법그림 6은 본 연구의 맵매칭 보정 방법을 설명하는 맵매칭 Workflow로서, 먼저 차량의 현재 위치를 디지털 지도상에 맵매칭하고(그림 6의 b), 차량의 위치가 디지털 지도상의 주행 가능 도로상에 표시될지 여부를 판별한다(그림 6의 a). 이때 차량의 위치가 디지털 지도상의 주행 가능 도로상에 표시될 것으로 판별되면 해당 맵매칭 결과를 디스플레이하고(그림 6의 f), 만약 그렇지 않으면 차량과 가장 가까운 위치에 있는 주행 가능 도로의 좌표를 구하여(그림 6의 c) 차량의 위치 좌표를 그 주행 가능 도로의 좌표 값으로 대체하는 위치 보정을 수행한다(그림 6의 d). 이 단계가 끝나면 보정된 위치 좌표를 근거로 하여 차량의 현재 위치를 디지털 지도상에 맵매칭하고(그림 6의 e), 수행된 맵매칭 결과를 디스플레이 한다(그림 6의 f).그림 6. 본 연구의 맵매칭 Workflow그림 6에서 설명된 맵매칭 방법에서 사용되는 디지털 지도는 그림 7과 같은데, 디지털 지도상에 표시되는 주행 가능한 도로는 소정의 거리마다 임의의 좌표 값((x1, y1), (x2, y2),..,(x7, y7))을 가지는 복수 개의 노드들을 연결하여 구성된다. 이렇게 도로를 구성하는 각각의 노드들은 CNS용 디지털 지도의 정밀도에 따라 그 간격이 좁아질 수도 있고, 넓어질 수도 있다.그림 7. CNS 디지털 지도의 일례2.1 CNS의 전체적인 구조CNS의 전체의 e) 및 차량의 진행 방향을 측정하는 방위 센서(그림 1의 f)를 포함하며, 필요에 따라서 주행거리 센서, 지자기 센서 등 다양한 센서들이 구비되어 진다.데이터 처리부(그림 1의 g) : 차량의 위치 정보 및 주행 관련 정보에 응답해서 차량의 현재 주행 위치를 디지털 지도상에 맵매칭하며 GPS 수신부에서 받은 위치 정보와 실제 위치 정보간에 오차가 발생된 경우 해당 위치 정보를 보정하여 차량의 실 3.1 위치 오차로 인한 디스플레이상의 오류현재 위치와 진행 방향을 그림 3과 같이 차량에 구비된 디스플레이 상에 실시간으로 디스플레이 한다. 또한 그림 4와 같이 교차로 등과 같은 일부 영역을 확대하여 차량의 현재 진행 방향(그림 4의 a) 및 운전자에게 진입할 차선이나 회전 방향 등의 보다 상세한 운행 정보를 제공하기도 한다.그림 3. CNS에서의 디스플레이 예그림 4. 그림 3의 일부 확대된 예그러나 GPS 위성으로부터 산출된 차량의 위치 정보와 실제 차량의 위치 사이에는 오차가 존재하게 되고 이로 인한 디스플레이상의 오류가 발생될 수 있게 된다. 이때 발생되는 오차를 CNS안에 내재된 디지털 지도에 그대로 디스플레이를 하게 된다면 그림 5와 같은 디스플레이 오류가 발생하게 된다.그림 5. 오차로 인한 디스플레이 오류이러한 오류로 인하여 실제 차량은 도로 위를 주행하고 있지만, 두 위치 정보 사이에 발생된 오차로 인하여 디스플레이 상에서는 그림 4의 차량 a가 마치 도로를 벗어나 주행을 하고 있는 것처럼 표시된다. 이와 같은 디스플레이상의 오류는 특히, 초행길을 운전하는 운전자에게 큰 혼란을 가져올 수 있고, 부정확한 차량 경로의 표시로 인하여 운전자가 CNS의 기능을 신뢰하지 않게 되는 문제를 야기할 수 있다. 이에 본 논문은 이러한 위치 오차로 인하여 발생하는 디스플레이 상의 오류를 해결하기 위한 방법을 제시한다.3.2 위치 오차의 원인GPS 위성으로부터 계산된 차량의 위치 좌표와 자차의 실제 위치 좌표의 오차는 CNS안의 디지털 지도와 GPS 위성으로부 본 연구에 의한 CNS의 맵매칭 방법에서는 차량의 현재 위치(그림 8의 B)와 가장 가까운 주행 가능 도로의 노드 좌표(그림 8의 (x3, y3) 좌표)를 찾아내고, 현재 차량의 위치 좌표를 상기 노드의 (x3, y3) 좌표로 대체하는 보정을 수행한다. 그 결과, 디지털 지도의 도로에서 벗어나 주행하는 것처럼 디스플레이 될 수 있는 디스플레이상의 오류가 보정되어, 그림 8의 C와 같이 차량이 도로상에 올바로 표시될 수 있다.본 연구의 또 다른 예로서 차량이 두 노드 사이(그림 8의 (x3, y3) 좌표와 (x4, y4) 좌표)를 주행하고 있을 때 발생될 수 있는 디스플레이상의 오류 보정시, 디지털 지도의 정확도가 떨어지는 이유 때문에 두 노드 사이의 거리가 긴 경우, 차량의 현재 위치 좌표를 두 노드((x3, y3), (x4, y4))를 연결한 직선(그림 8의 c) 상에 차량의 현재 위치와 수직 거리로 가장 가까운 지점의 좌표로 대체할 수도 있다.그림 8. CNS 디지털 지도에서의 맵매칭 보정 과정위와 같은 본 연구의 맵매칭 방법은 컴퓨터로 읽을 수 있는 기록매체(ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광데이터 저장장치 등)에 코드로서 구현하는 것이 가능하며 무선 인터넷과 같은 통신을 통한 전송의 형태로 구현될 수 있다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드로 저장되고 실행될 수 있다.5. 결론본 논문에서는 본 연구에서 생각되어지는 CNS의 전체적인 구조와 CNS의 맵매칭 동작 원리에 대하여 살펴보았고, GPS 위성으로부터 계산되어진 차량의 위치 좌표와 차량의 실제 위치 좌표 사이의 위치 오차를 최소화하여 CNS 디스플레이상의 오류가 발생되지 않도록 하기 위한 맵매칭 방법에 대하여 설명하였다.이러한 맵매칭 방법을 사용하면 GPS 수신기로부터 계산되어진 위치 정보와 실제 차량의 위치 사이에 발생하는 오차를 최소화하고 CNS에서 발생될 수 있는 디스플레이p
UPnP 구조와 테스트 툴에 대한 고찰The Study on UPnP Architecture and Test Tool요 약본 논문은 홈 네트워크 상에서 존재 가능한 PC와 디지털 가전 기기(devices) 및 무선 기기들을 피어-투-피어(peer-to-peer) 방식으로 네트워크의 연결성을 배어들게(pervasive) 하는 역할을 수행할 수 있는 UPnP(Universal Plug and Play, 이하 UPnP)의 구조를 분석하고 UPnP의 정의된 기능을 테스트하는 툴에 대한 연구로서, UPnP Device Architecture v1.0 표준 스펙(specification)에 따라 구현된 UPnP 미들웨어를 자동으로 테스트할 수 있도록 하는 방법과 UPnP 테스트 툴의 구조를 제안한다.1. 서 론최근 네트워크 장비의 고속화를 바탕으로 각종 디지털 가전 기기들이 널리 사용되면서, 이들을 하나의 네트워크로 연결시켜 통제하는 홈 네트워크 환경에 대한 관심이 점차 높아져가고 있다. 홈 네트워크 환경에서는 홈 네트워크에 연결된 여러 가지 디지털 가전 기기들의 상태를 모니터링하고 사용자의 요청에 따라 제어 명령을 전달 할 수 있도록 하는 홈 네트워크 기술이 필요한데, 이러한 기술로는 UPnP, Jini(Java Intelligent Network Infra-structure), Havi(Home Audio Video Interoperability), LonWorks 등의 기술이 제안되고 있다[1].마이크로소프트사(MS)에서 제안한 UPnP Device Architecture v1.0 스펙(이하 UPnP 스펙)은 IP를 기반으로 제어 장치(Control Point)와 피제어 장치(Controlled Device)로 구분되어 둘 사이의 네트워킹을 정의하고 있다. 이러한 UPnP 스펙에 맞게 구현되어진 UPnP 미들웨어를 테스트할 수 있는 상용 테스트 툴은 현재 출시되고 있지 않으며 다만, UPnP 기구( HYPERLINK "http://www.upnp.org" www.u부분의 정보만을 가지게 되는데 피제어 장치와의 상호 작용을 위해서는 피제어 장치의 더 많은 정보를 습득해야 한다. 이를 위해 제어 장치는 XML로 표현된 피제어 장치의 자세한 정보(모델 번호, 장치 이름, 시리얼 번호, 제조사 등)를 수집하게 된다.Control Step : 제어 장치는 피제어 장치로부터 받은 장치 및 서비스에 대한 XML 정보(Device & Service Description)를 분석하여 SOAP를 이용한 제어 메시지를 송신하고, 피제어 장치는 XML로 표현된 제어 메시지에 대한 응답으로 서비스 기능 수행에 따른 특별한 값을 리턴(return)하거나 미리 정의되어진 error code를 리턴한다.Eventing Step : 피제어 장치의 서비스 정보(XML)에는 서비스 상태를 알리는 변수들이 존재하고 이러한 변수에 변화가 생겼을 경우에는 제어 장치가 피제어 장치의 서비스 상태 정보를 수신할 수 있어야 한다. 피제어 장치로부터 발생한 이벤트 메시지는 GENA를 이용한 XML 형식으로 상태 변수에 대한 이름과 현재의 값을 포함하고 있다.Presentation Step : 피제어 장치가 프리젠테이션(presentation)을 위한 URL을 가지고 있는 경우, 제어 장치는 이 URL로부터 페이지(page)를 가져와 피제어 장치의 상태를 보거나 홈 네트워크 사용자로 하여금 제어 장치를 제어할 수 있는 UI(User Interface)를 제공하는 기능을 가진다. 이 경우 페이지는 웹 브라우져(browser)를 사용하여 볼 수 있다.3. UPnP 테스트 방법 및 테스트 툴본 장에서는 UPnP 테스트 툴의 구조 및 동작 방법, 그리고 테스트 방법에 대하여 설명한다.3.1 UPnP 테스트 툴의 구조그림 2는 UPnP 테스트 툴의 구조를 나타낸 것으로 네트워크 통신 채널을 통한 데이터 송/수신을 처리하는 NCL(Network Connection Logic), 테스트 케이스들을 저장하고 있는 Test Suite DB와 테스트 결과 및 테스트에 대한 모든 기록을) 등을 테스트한다.Description, Control, Eventing Step의 테스트 케이스들을 구현하는 방법도 이와 유사하며 테스트 케이스들의 통과(Pass)/실패(Fail) 판정을 내리는 방법의 경우는 Discovery Step과 동일하다.3.3.2 Description StepUPnP 테스트 툴은 그림 5와 같이 Discovery Step에서 알게 된 피제어 장치의 IP 주소를 이용하여 피제어 장치에 대한 정보(Device Description, XML로 작성됨)를 HTTP GET 방식으로 요청한다. 이에 따라, 피제어 장치에서는 요청된 XML 파일 형태의 Root Device Description을 UPnP 테스트 툴에 전송한다. 또한, UPnP 테스트 툴에서는 피제어 장치에서 제공되는 서비스에 대한 정보(Service Description)를 정상적으로 제공하는지 여부를 파악하기 위해 피제어 장치의 Service Description을 요청하고, 피제어 장치에서는 XML 파일 형태의 Service Description을 UPnP 테스트 툴로 전송한다.그림 5. Description Step 네트워킹3.3.3 Control Step그림 6은 UPnP 테스트 툴과 피제어 장치간의 Control Step 네트워킹 과정을 나타내는 것으로서, UPnP 테스트 툴에서는 Description Step에서 얻은 Device & Service Description을 참조하여 피제어 장치에게 서비스 제어 메시지(Action Invoke)를 전송하면, 제어 메시지를 수신한 피제어 장치에서는 제어 메시지에 따라 요구되는 서비스 기능을 실행시키고 그 결과 메시지(Action Response)를 UPnP 테스트 툴로 전송한다. 또한, UPnP 테스트 툴에서는 제어 장치의 서비스 변수에 대한 값을 알아보기 위하여 쿼리 메시지(Query Invoke)를 피제어 장치에게 전송하고 피제어 장치는 요청 받은 서비스 변수 값을 UPnP 테스트 툴에게 알려주게(Query Respootocol) 클라이언트를 보유하고 있어 네트워크에 연결되었을 때 DHCP 서버를 검색하고 DHCP 서버로3.2 UPnP 테스트 툴의 동작 방법UPnP 테스트 툴의 동작 방법을 설명하기 위하여 그림 3과 같이 Host B에 UPnP CD(Controlled Device) 스택이 구현되어진 피제어 장치가 존재하고 UPnP 테스트 툴이 Host A에서 실행된다고 가정하면 먼저 테스트 툴의 UI에서 테스트 하고자 하는 테스트 케이스들을 선택하고 "test" 버튼을 클릭한다.그림 3. UPnP CD 테스트를 위한 네트워크 구성테스터의 테스트 실행 명령에 의하여 UPnP 테스트 툴은 그림 2의 UIL로부터 받아들인 명령을 DL에 전달하여 테스터가 선택한 테스트 항목들과 테스트 진행 사항들을 디스플레이 할 수 있도록 하며, 테스터의 명령 해석 및 실제 테스트가 이루어질 수 있도록 TMCL로 테스터의 명령을 전달하게 된다. TMCL은 테스터가 선택한 테스트 케이스 파일들을 읽어오기 위하여 FIOL로 선택 테스트 케이스들에 대한 이벤트를 보내게 되고 FIOL에서는 Test Suite DB를 통하여 테스터가 선택한 테스트 케이스 파일들 중 맨 처음의 테스트 케이스 파일을 다시 TMCL로 보내게 된다. 이 과정에서 받은 테스트 케이스 파일을 TMCL은 분석하고 UPnP 테스트에 필요한 환경 구축 작업으로 송신할 메시지를 만든 후 필요한 프로토콜을 설정하여 NCL에 메시지를 전달한다. TMCL로부터 받은 메시지를 UPnP 네트워킹 프로토콜에 맞게 타겟(to be tested) Host B에 송신하고 타겟 Host B의 응답 메시지를 기다리게 된다. UPnP 테스트 툴이 Host B의 응답 메시지를 수신하게 되면 NCL은 이를 TMCL로 전달하게 되고, TMCL은 이를 분석하여 Host B의 첫 번째 테스트 케이스의 "Pass/Fail" 판정을 내린 다음, 이에 대한 테스트 로그를 FIOL을 통하여 Test Log DB에 저장하며 테스트 결과와 로그를 DL에게 넘겨 테스터에게 디스네트워크에 새로 연결되는 UPnP 테스트 툴의 경우는 할당된 IP 주소를 이용하여 네트워크 상에서 동작하는 피제어 장치들을 확인하기 위해 SSDP와 HTTPMU를 통하여 검색UPnP 테스트 툴은 Control Step을 통해 수행되는 네트워킹 동작에 따라 피제어 장치의 서비스 정보 변경 상태를 확인하기 위해 그림 7과 같이 Subscription을 요청하는 메시지(SUBSCRIBE)를 피제어 장치로 전송한다. 그러면, 피제어 장치에서는 UPnP 테스트 툴의 Subscription 요청에 따라 유일한 Subscription ID를 할당하고 초기 이벤트 메시지를 전송하게 된다. 이 때 UPnP 테스트 툴과 피제어 장치의 관계를 subscriber와 publisher의 관계에 있다고 말한다.그림 7. Eventing Step 네트워킹UPnP 테스트 툴이 Subscription 상태에 있는 동안 피제어 장치의 서비스 상태 변수가 변경되면, 피제어 장치에서는 변경된 정보를 알리기 위하여 GENA를 통해 XML 형태의 이벤트 메시지를 UPnP 테스트 툴로 전송한다. UPnP 테스트 툴에서는 이벤트 메시지가 수신되면 이벤트 메시지에 기록된 서비스 변경 정보를 분석하여 피제어 장치에 대한 서비스 정보를 업데이트하고, 피제어 장치로 응답 메시지(Response)를 전송한다. 만일 Subscription TIMEOUT 시간 안에 Subscription 재갱신이 필요하면 UPnP 테스트 툴에서는 할당 받은 Subscription ID로 피제어 장치에 Subscription 연장을 요청하는 메시지(Renewal Subscription)를 전송한다. 피제어 장치는 UPnP 테스트 툴의 Renewal 요청에 초기 이벤트 메시지를 전송하여 응답한다. 또한, 더 이상 피제어 장치의 이벤트 메시지 전송이 요구되지 않으면, UPnP 테스트 툴은 Subscription을 취소하는 메시지(UNSUBSCRIBE)를 피제어 장치로 전송한다.4. 결론본 논문에서는 표준 기술로서 제안된 마이크로소프트사000