测试是软件工程中的一个重要部分。正如我们在工程设计过程的第4步中所讲到的,这项工作所花费的时间在整个开发过程中是最多的。
程序中的很多东西都有可能出错。程序员可以通过一些方法来减少程序中的问题,确保程序能够稳定运行。
防御性编程 是指你所设计的程序在出现异常情况时依然能够确保正确运行。要做到这一点,你可以故意让你的程序出错,然后分析如何解决它们。
例如,如果你编写了一个程序,用户应该输入电子邮件地址,那么你可以尝试输入一条不是电子邮件地址的信息,让程序出错。
然后你需要问自己:
如果用户在电子邮件地址栏中输入了电话号码或者姓名,程序还能正确运行吗?
你可以采取哪些手段防止用户输入错误的信息?
在防御性编程中,通常使用 用例 和 测试用例 来帮助你确定程序中需要调整的部分。
用例 是用户可以执行的 操作列表 。它用来描述用户将会如何使用你的程序。
这个列表可以是非常详细的流程图,也可以是你想到的一些要点。
用户在使用你的程序时不应该遇到错误,这一点非常重要。例如,当你编写完一个游戏,你应该先从头到尾玩一遍,确保整个游戏能够正常运行。
用例可用来检查用户是否能够在程序中完成指定的操作。每个用例会对应多个测试用例。 测试用例描述的是更具体、更详细的测试, 包括你的程序可能遇到的所有情况。用例被用来定义所需要实现的功能,而针对用例的测试就是测试这些功能是否正常。
测试用例则是针对某些特定的条件进行测试 ,确保程序在各种情况下均能正常运行。
例如,如果你编写了一个游戏,你可以创建一个测试用例来确保当你按下空格键时,角色确实能够跳起来。
如果这个测试用例通过,你还可以测试当一直按住空格键时会发生什么。
防御性编程意味着你需要确保无论用户按住空格键多长时间,角色都应该只跳一次。
如果你遵循了防御性编程的原则,那么角色应该只跳一次。
如果你没有遵循防御性编程的原则,或者忘记测试用户一直按住空格键的情况,那么角色可能会做出一些意料之外的动作。
再举一个例子:如果你编写了一个计算器应用,它可以将输入的数除以10,则测试用例应该确保用户输入任何类型的数字都可以正常运行。比如如果用户输入1或者0,你的程序会不会崩溃?
在测试用例中覆盖各种类型的输入是非常重要的。 例如,对于一个计算器应用软件,除了测试0—9这些数字,你还应该测试其他有理数数值。
正整数: 大于0的整数,
不包括分数和小数。
例如:2,5,9,50。
负整数: 小于0的整数,
不包括分数和小数。
例如:-1,-5,-150。
有理数: 正整数、负整数、正分数、负分数以及零的统称。
例如:-5可以表示成-
,
2.15可以表示成
。
1. 说出用例和测试用例之间的区别。
2. 宇航局正在测试一个程序,检查宇航员是否能够使用这个程序完成从发射火箭到环绕地球轨道的一系列步骤。这是一个用例的测试还是测试用例?
3. 宇航局正在测试火箭发射程序中用来控制火箭发动机的部分,检查程序在不同的输入数据下是否都能正常工作。这是一个用例的测试还是测试用例?
4. 下列哪一项遵循了防御性编程原则?
A. 认为测试是浪费时间
B. 在遇到意外情况时程序依然能够正常运行
C. 程序能够抵御计算机病毒
D. 以上都对
5. 假设有一个程序,要求用户输入发现有涂鸦的地点,然后志愿者可以去把涂鸦擦掉,那么下列哪些属于测试用例?(选出所有正确的答案)
A. 用户是否能够注册账号并提交一个涂鸦地点?
B. 如果用户将城市名称输入邮政编码栏会发生什么?
C. 如果用户在邮政编码栏中输入一个负数会发生什么?
D. 用户是否能够在发帖时拍摄并上传涂鸦照片?
6. 为什么在测试用例中测试各种类型的输入非常重要?
7. 用例和测试用例可以用来发现你的程序中的________。
8. 如果要设计计算器程序的测试用例,下列哪一组数字是最好的选项?
A. 1,2,3,4
B. -2,-4,-6,-8
C. 0.4,0.5,0.2,0.6
D. -2,0,0.4,16
答案见下面
1 .用例用来测试用户能否完成某个一般的操作,而测试用例是针对各种类型的输入进行具体的测试。
2 .用例。
3 .测试用例。
4 . B 。
5 . B , C 。
6 .因为你需要确保无论用户输入什么信息,你的程序都能够正常运行。例如,如果你的程序期望用户在某一栏中只输入文字,那么当用户输入数字或者符号时程序就可能会出错。你需要确保当用户输入错误的信息时,程序依然不会崩溃。
7 .错误(或bug)。
8 . D 。