软件工程软件工程软件工程软件工程第第1111章软件测试章软件测试复旦大学计算机科学与工程系软件工程课程2/161内容摘要内容摘要•软件测试基础•白盒测试•黑盒测试•测试策略•面向对象测试•测试完成标准•调试复旦大学计算机科学与工程系软件工程课程3/161内容摘要内容摘要•软件测试基础软件测试基础•白盒测试•黑盒测试•测试策略•面向对象测试•测试完成标准•调试复旦大学计算机科学与工程系软件工程课程4/161软件测试基础软件测试基础•软件测试的目的•软件测试的基本原则•白盒测试和黑盒测试复旦大学计算机科学与工程系软件工程课程5/161有关软件测试的错误观点有关软件测试的错误观点“软件测试是为了证明程序是正确的,即测试能发现程序中所有的错误”。事实上这是不可能的。要通过测试发现程序中的所有错误,就要穷举所有可能的输入数据。对于一个输入三个16位字长的整型数据的程序,输入数据的所有组合情况有2483*1014,如果测试一个数据需1ms,则即使一年365天一天24小时不停地测试,也需要约1万年。复旦大学计算机科学与工程系软件工程课程6/161对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。例如一个小程序的流程图,它包括了一个执行20次的循环,其循环体有五个分支。这个循环的不同执行路径数达520条,如果对每一条路径进行测试需要1毫秒,那么即使一年工作365×24小时,要想把所有路径测试完,大约需3170年。复旦大学计算机科学与工程系软件工程课程7/161复旦大学计算机科学与工程系软件工程课程8/161•“程序测试是证明程序正确地执行了预期的功能”。实际上,一个程序不仅要完成它所需完成的功能,而且不应完成它不该做的事。如不能把边长为0、0、0的三条边判断为等边三角形。复旦大学计算机科学与工程系软件工程课程9/161软件测试的目的软件测试的目的•GlenMyers给出的软件测试目的:测试是一个为了发现错误而执行程序的过程一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例一个成功的测试是指揭示了迄今为至尚未发现的错误的测试根据这个测试目的,我们应该排除对测试的错误观点,设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误。复旦大学计算机科学与工程系软件工程课程10/161软件测试的原则软件测试的原则Davis提出了一组指导软件测试的基本原则:1.所有的测试都应可追溯到客户需求2.应该在测试工作真正开始前的较长时间就进行测试计划3.Paret...