개발 중의 드라이버 테스트를 위한 팁
테스트는 언제 시작해야 합니까? 드라이버에 대한 요구 사항이 충족되면 그 즉시 핵심 요구 사항이 구현되었는지 테스트하는 테스트 사례 설계를 시작할 수 있습니다. 연구 결과에 따르면 코드에 결함이 남아 있는 시간이 길어질수록 코드에서 결함을 찾아서 수정하는 비용이 증가합니다. 개발 주기 초기에 결함을 찾아서 수정하면 코드가 릴리스 및 배포된 후에 결함을 찾는 것보다 비용도 덜 들고 피해도 적습니다. 테스트 사례를 일찍 만들면 설계와 관련된 문제를 찾는 데도 도움이 됩니다.
개발 중의 테스트를 위한 제안
드라이버 코드 및 드라이버 패키지를 테스트할 때 다음 제안을 사용하세요.
컴파일 시간에 버그를 찾으려면
드라이버에서 제공하는 콜백 함수를 선언하고 함수 역할 형식을 사용하여 루틴을 디스패치합니다. 이렇게 하면 코드 분석 및 검증 도구의 정확도와 테스트 시간의 효율성이 향상됩니다. 드라이버에서 제공하는 함수를 선언하는 방법에 대한 자세한 내용은 함수 역할 형식 선언 사용을 참조하세요.
Level4 (/W4) 경고 옵션을 사용하여 코드를 컴파일합니다. 컴파일러에서 감지된 경고를 수정하면 드라이버 코드의 품질이 향상되고 개발 주기의 초기에 추가 결함이 줄어듭니다.
Microsoft SAL(소스 코드 주석 언어) 2.0을 사용하여 코드에 주석을 추가합니다. 주석은 함수가 매개 변수를 사용하는 방법 및 수행을 끝낼 때 목표를 달성하도록 보장하는 방법에 대해 설명합니다. 또한 코드 분석 도구의 정확도를 향상합니다. 드라이벼별 주석에 대한 자세한 내용은 드라이버에 대한 SAL 2.0 주석을 참조하세요.
드라이버를 개발하는 동안 드라이버 검증 도구를 사용합니다. 특정 검증 도구를 사용하는 시점에 대한 자세한 내용은 코드 분석 및 검증 도구를 사용하여 드라이버 분석 및 검증 도구 설문 조사를 참조하세요.
드라이버 패키지를 테스트하려면
개발 프로세스의 초기에 INF 파일과 드라이버 패키지를 만들고 테스트 전반에 이를 사용합니다.
ChkINF 도구를 사용하여 INF 파일의 구조와 구문을 확인하고 INF 파일 및 기타 설치 관련 문제를 진단합니다.
Inf2Cat 도구를 (/nocat 옵션과 함께) 사용하여 추가 INF 파일 검증을 수행합니다. Inf2Cat는 INF에서 참조하는 파일이 INF가 예상하는 패키지 디렉터리에 있는지 확인할 수 있습니다.
개발 및 테스트 중 드라이버 서명에 설명되어 있는 것처럼 드라이버에 서명하여 드라이버의 설치와 테스트를 용이하게 합니다.
WDK에서 제공하는 장치 기본 테스트의 일부로 포함된 DriverInstall 테스트를 실행합니다. Visual Studio를 사용하여 런타임에 드라이버를 테스트하는 방법 및 장치 기본 테스트를 선택하고 구성하는 방법을 참조하세요. DriverInstall 테스트는 드라이버가 테스트 컴퓨터에 배포된 후 실행할 수 있습니다. DriverInstall 테스트를 드라이버 테스트 그룹에 추가할 수 있습니다. DriverInstall 테스트는 All Tests\Basic\Device Fundamentals\DriverInstall 아래의 드라이버 테스트 범주에 표시됩니다. 또한 IWDTFDriverPackageAction2 인터페이스를 사용하여 테스트를 작성할 수 있습니다.
장치 관리자를 사용하여 드라이버 및 장치에 대한 시스템 정보를 보고 SetupAPI 로그를 참조하여 장치 설치 문제를 해결합니다. SetupAPI 로그에는 장치 또는 드라이버의 설치 중에 발생한 작업 시퀀스에 대한 정보가 포함되어 있습니다.
Visual Studio 및 WDK를 사용하여, 테스트 컴퓨터에 드라이버를 배포할 때 드라이버 패키지 설치를 테스트하고 문제를 해결할 수 있습니다. 테스트 컴퓨터에 드라이버 배포를 참조하세요. 드라이버 패키지 프로젝트에 대한 배포 속성에서 Install and Verify(설치 및 검증) 옵션을 선택합니다. 이 옵션을 선택하고 Default Driver Package Installation Task (possible reboot)(기본 드라이버 패키지 설치 작업(다시 부팅될 수 있음)) 또는 **Default Printer Driver Package Installation Task (possible reboot)(기본 프린터 드라이버 패키지 설치 작업(다시 부팅될 수 있음))**을 지정하면 테스트에서 드라이버의 INF 파일을 읽고 드라이버를 설치합니다. 테스트는 드라이버가 작동 및 실행 중인지 확인합니다. 확인이 완료되면 다음 설치 작업의 성공 또는 실패에 대한 세부 정보를 제공합니다. 결과는 Driver Test Groups > Driver Installation 아래의 드라이버 테스트 그룹 탐색기에 표시됩니다. 작업 이름은 기본 드라이버 패키지 설치 작업입니다.
런타임에 드라이버를 테스트하려면
WDK에 포함된 장치 기본 테스트를 실행합니다. Visual Studio를 사용하여 런타임에 드라이버를 테스트하는 방법 및 장치 기본 테스트를 선택하고 구성하는 방법을 참조하세요.
테스트 결과를 디버그하고 문제를 해결할 수 있도록 디버거를 설정합니다. 자세한 내용은 Visual Studio에서 커널 모드 디버깅 설정을 참조하세요.
배포에 사용할 테스트 컴퓨터에서 드라이버 검증 도구를 사용하려면 드라이버 프로젝트에 대한 드라이버 검증 도구 속성을 참조하세요. DDI 준수 확인 옵션을 선택합니다. 드라이버가 DDI 준서 확인을 통과하지 못하면 정적 드라이버 검증 도구를 실행하고 오류를 발생시킨 규칙을 지정합니다. 정적 드라이버 검증 도구를 사용하면 원본 파일에서 버그의 원인을 찾는 데 도움이 됩니다.
가능한 한 다양한 하드웨어 구성에서 드라이버와 장치를 테스트합니다. 하드웨어의 종류가 많으면 장치 간 충돌 및 장치 조작의 오류를 찾기가 쉽습니다. 예를 들면, 다양한 프로세서 아키텍처가 있는 컴퓨터와 Windows 32비트 및 64비트 버전을 실행하는 컴퓨터에서 드라이버 및 장치를 테스트해야 합니다.
Windows의 확인된 빌드를 사용하여 드라이버와 장치를 테스트합니다. Windows의 확인된 빌드(또는 확인된 운영 체제 및 HAL)에서 드라이버를 실행하면 다른 도구를 사용한 테스트에서 명확하지 않았던 오류를 감지할 수 있습니다. 확인된 빌드와 커널 디버거를 함께 실행하는 것은 드라이버 개발 및 테스트의 표준 과정이어야 합니다.
다중 프로세서 시스템에서 드라이버 및 장치 테스트 다른 방법으로는 볼 수 없는 경합 상태 및 다른 타이밍 문제가 다중 프로세서 시스템에 표시됩니다. See 장치 기본 테스트를 선택하고 구성하는 방법 및 다중 프로세서 그룹 지원을 위해 테스트 드라이버로 매개 변수 부팅을 참조하세요.
특정 시스템 및 하드웨어 조건, 특히 에지 조건에서 드라이버와 장치를 테스트합니다. 예를 들면, 이러한 조건에는 "D3 hot" 및 "D3 cold"가 포함될 수 있습니다. 드라이버 및 장치가 장치 전원 상태 "D3 hot"(전력 손실 없음) 및 "D3 cold"(장치에서 전원이 제거된 경우)에서 제대로 돌아올 수 있는지 확인합니다. 자세한 내용은 장치 기본 테스트를 선택하고 구성하는 방법을 참조하세요.