1、每当测试一个程序时,应当想到要为程序增加一些价值。通过测试来增加程序的价值,是指测试提高了程序的可靠性或质量。提高了程序的可靠性,是指找出并最终修改了程序的错误。 因此,不要只是为了证明程序能够正确运行而去测试程序;相反,应该一开始就假设程序中隐藏着错误(这种假设对于几乎所有的程序都成立),然后测试程序,发现尽可能多的错误。 那么,对于测试,更为合适的定义应该是: “测试是为发现错误而执行程序的过程”。
2、我们认为,如果在测试某段程序时发现了错误,而且这些错误是可以修复的,就将这次合理设计并得到有效执行的测试称做是“成功的”。如果本次测试可以最终确定再无其他可查出的错误,同样也被称做是“成功的”。所谓“不成功的”测试,仅指未能适当地对程序进行检查,在大多数情况下,未能找出错误的测试被认为是“不成功的”,这是因为认为软件中不包含错误的观点基本上是不切实际的。
3、穷举输入测试是无法实现的。这有两方面的含义,一是我们无法测试一个程序以确保它是无错的,二是软件测试中需要考虑的一个基本问题是软件测试的经济学。也就是说,由于穷举测试是不可能的,测试投入的目标在于通过有限的测试用例,最大限度地提高发现的问题的数量,以取得最好的测试效果。除了其他因素之外,要实现这个目标,还需要能够窥见软件的内部,对程序作些合理但非无懈可击的假设
4、逻辑覆盖测试。该测试要求程序中的所有判断都应至少覆盖一次,同时每一条语句或者入口点都被执行一次。 ·等价类划分。通过定义条件和错误类来帮助减少测试的工作量。这种划分假设某分类的一个代表值能够等价于属于该分类的所有值或者条件。 ·边界值分析。测试等价类中每一个分类取边界值时的情况,既要考虑输入等价类,也要考虑输出等价类。 ·因果图。通过生成布尔图来诠释测试用例的可能结果,使用该法旨在帮助选择那些有效地测试用例达到比较完整的测试用例设计效果。 ·错误猜测。依靠直觉和测试专家经验来定位程序可能出错的地方,并由此设计出更高效的测试用例。
|