CS415 数据结构与算法

Chapter 2 Programming Tutorials

| 关于   «  12. 测试(Testing)   ::   目录   ::   14. 保龄球测试覆盖率示例(Bowling Test Coverage Example)  »

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

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

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

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

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

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

关闭窗口