CSC201 数据结构

第 2 章 编程教程

| 关于   英文版   «  2.15. 测试(Testing)   ::   目录   ::   2.17. 保龄球测试覆盖率示例(Bowling Test Coverage Example)  »

2.16. 为代码覆盖率进行测试(Testing for Code Coverage)

2.16.1. 为代码覆盖率进行测试

对于上一节的练习,你可能发现想出一组能产生良好代码覆盖率的测试输入相当困难。这是因为你看不到代码。如果你能看到代码,为覆盖每个分支提出测试用例就相对容易。这次尝试在代码可见的情况下进行。通过提供能把你带到嵌套 if 语句序列中每个分支的输入,尝试达到 100% 的代码覆盖率。

那么,当代码就在你面前时,你是否发现获得代码覆盖率更容易了?可能是的,因为你可以看到代码中有哪些路径,并为每个分支"编写一个测试用例"。然而,虽然能够编写覆盖代码中每个分支的测试是一项有用的技能,但这与确定你的程序是否"正确工作"并不完全相同。也就是说,覆盖所有代码的测试 或许 能告诉你你编写的代码是否在做你想做的事情。但这不能告诉你代码是否按预期实现了问题的全部功能。

这个例子中的代码在检查各种糟糕的用户输入方面相当不错,比如在输入框中输入根本不是数字的内容。但如果代码没有检查糟糕的用户输入呢?如果用户确实在输入框中键入了 "aa" 而不是数字,而程序员从未想到要检查并正确处理这种情况,会发生什么?程序可能会以非预期的方式运行。如果程序员从未想到在程序中检查这一点,那么他们在为程序编写测试时可能也从未想到要检查这一点。这正是测试如此困难的部分原因。你需要善于预测和测试程序所有可能的输入类型,而不仅仅是用户在 "正确使用程序"时会提供的输入。只测试"正确"输入或使用方式被称为 顺利路径测试。仅靠顺利路径测试不足以编写可靠的程序。当输入不是"正确"的时候,程序也需要可靠地工作,因此测试过程也需要考虑这类输入。

   «  2.15. 测试(Testing)   ::   目录   ::   2.17. 保龄球测试覆盖率示例(Bowling Test Coverage Example)  »

关闭窗口