何时应开始测试? 只要你对驱动程序有要求,就可以开始设计测试用例,以测试是否已实施关键要求。 研究表明,在代码中发现和修复缺陷变得更加昂贵,缺陷在代码中保留的时间越长。 在开发周期早期发现和修复缺陷的成本和破坏性要低于在代码发布和分发后发现缺陷。 尽早创建测试用例还可以帮助你在设计中发现问题。
开发期间测试的建议
使用以下建议测试驱动程序代码和驱动程序包。
为了帮助你在编译时发现 bug:
使用函数角色类型声明驱动程序提供的回调函数和调度例程。 这有助于提高代码分析和验证工具的准确性以及测试时间的有效性。 有关如何声明驱动程序提供的函数的详细信息,请参阅 “使用函数角色类型声明”。
使用 Level4 (/W4) 警告选项编译代码。 修复编译器检测到的警告将提高驱动程序代码的质量,并帮助消除开发周期前面的其他缺陷。
使用Microsoft源代码批注语言 (SAL) 2.0 批注代码。 批注描述了函数如何使用其参数-它对其做出的假设,以及它在完成时做出的保证。 这些注释还提高了代码分析工具的准确性。 有关驱动程序专用批注的更多信息,请参阅 SAL 2.0 驱动程序批注。
使用 工具在开发驱动程序时验证驱动程序 。 有关何时使用特定验证工具的指南,请参阅 使用代码分析和验证工具分析驱动程序。
测试你的驱动程序包:
在开发过程中尽早创建 INF 文件和驱动程序包,并在测试过程中使用它。
使用 InfVerif 工具验证 INF 文件的结构和语法,并帮助诊断 INF 文件和其他安装相关问题。
使用 Inf2Cat 工具(带有 /nocat 选项)执行其他 INF 文件验证。 Inf2Cat 可以验证 INF 引用的文件是否存在,并放置在包目录中,因为 INF 期望它们存在。
为驱动程序签名,以便安装和测试驱动程序,如 开发和测试期间签名驱动程序中所述。
运行作为 WDK 中提供的设备基础测试的一部分随附的 DriverInstall 测试。 请参阅 如何使用 Visual Studio 在运行时测试驱动程序 , 以及如何选择和配置设备基础测试。 将驱动程序部署到测试计算机后,可以运行 DriverInstall 测试。 可以将 DriverInstall 测试添加到驱动程序测试组。 DriverInstall 测试显示在“所有测试\Basic\Device Fundamentals\DriverInstall”下的驱动程序测试类别中。
使用 Device Manager 查看有关驱动程序和设备的系统信息以及咨询 SetupAPI 日志,排查设备安装问题。 SetupAPI 日志包含有关在安装设备或驱动程序期间发生的作序列的信息。
使用 Visual Studio 和 WDK,可以将驱动程序部署到测试计算机时测试和排查驱动程序包安装问题,请参阅 “将驱动程序部署到测试计算机”。 从驱动程序包项目的部署属性中选择“安装和验证”选项。 如果选择此选项并指定 默认驱动程序包安装任务(可能重新启动) 或 默认打印机驱动程序包安装任务(可能重新启动),测试将读取驱动程序的 INF 文件并安装驱动程序。 然后,测试将验证驱动程序是否已启动并运行。 完成后,测试提供有关安装任务成功或失败的详细信息。 结果显示在 驱动程序测试组资源管理器中的驱动程序测试组下的>驱动程序安装。 任务名称为 默认驱动程序包安装任务。
在运行时测试驱动程序:
运行 WDK 中包含的设备基础测试。 请参阅 如何使用 Visual Studio 在运行时测试驱动程序 , 以及如何选择和配置设备基础测试。
设置调试器,以便对测试结果进行故障排除和调试。 有关详细信息,请参阅 Windows 调试入门。
在用于部署的测试计算机上启用驱动程序验证程序,请参阅 驱动程序项目的驱动程序验证程序属性。 选择 DDI 符合性检查 选项。 如果驱动程序失败 DDI 符合性检查,请运行 静态驱动程序验证程序 并指定导致失败的规则或规则。 静态驱动程序验证程序可以帮助你在源文件中找到 bug 的原因。
尽可能多地在许多不同的硬件配置上测试驱动程序和设备。 改变硬件有助于查找设备之间的冲突,以及设备交互中的其他错误。 例如,应在具有不同处理器体系结构的计算机以及运行 32 位和 64 位版本的 Windows 的计算机上测试驱动程序和设备。
在多处理器系统上测试驱动程序和设备。 竞争条件和其他计时问题会在多处理器系统上出现,而这些问题在其他情况下不会出现。 请参阅如何选择和配置设备基础测试和启动参数,以测试多个处理器组支持的驱动程序。
测试驱动程序和设备,了解特定的系统和硬件条件,尤其是边缘条件。 例如,这些条件可能包括“D3 热”和“D3 冷”。确保驱动程序和设备可以从设备电源状态“D3 热”(无需断电)和“D3 冷”(从设备中删除电源时)正确返回。 有关详细信息,请参阅 “如何选择和配置设备基础测试”。