|
知识路径: > 电子商务系统程序设计基础 > 电子商务系统的测试 >
|
相关知识点:77个
|
|
|
|
软件测试是在软件投入运行之前,对软件需求分析、设计规格说明与编码的最终复审,是保证软件质量的关键步骤之一。软件测试是为了发现错误而审查和执行软件的过程。在软件生命周期中的编码阶段,通常每编写出一个模块之后就对它做必要的测试,即模块测试或称单元测试。编码与单元测试属于软件生命周期中的同一阶段。软件生存期中还有一个独立的测试阶段,对软件系统进行各种综合测试。软件测试总是试图以最少的代价发现软件分析、设计和编码等过程中存在的各种不同类型的错误,从而提高软件质量,降低软件系统的总成本。软件测试不是打消软件工程师积极性的过程,而是同软件分析与设计一样,是为了建成高质量的软件,只不过是从不同的侧面来进行。
|
|
|
软件测试(Software Test)是利用特定的技术和方法,运行、评价和验证软件的过程,其目的在于检验它是否满足规定的需求或搞清预期结果与实际结果之间的差别。
|
|
|
为了深入理解软件测试的定义,可以从如下几个方面来理解:
|
|
|
(1)软件测试的目的。软件测试的目的是发现软件中的错误,而不能证明软件无错,是在软件投入运行前,对软件需求分析、设计和编码各阶段产品的最终检查,是为了保证软件开发产品的正确性、完全性和一致性,从而检测并修正软件错误的过程。
|
|
|
(2)软件测试的性质。在软件开发过程中,分析、设计与编码等工作具有“建设性”,只有测试可能具有一定“破坏性”,如使用不合理用例测试。
|
|
|
(3)软件开发。软件测试以检查软件产品的内容和功能特性为核心,是软件质量保证的关键步骤,也是成功实现软件开发目标的重要保障。
|
|
|
(4)软件工程。软件测试是软件工程的一部分,是软件工程过程中的重要阶段。
|
|
|
(5)软件质量保证。软件质量保证是管理学范畴的概念,软件测试主要是技术实现范畴的概念,是软件质量保障的关键措施。
|
|
|
著名软件工程专家Grenford.J.Myers在其著作《软件测试技巧》中将软件测试的目的归纳为:
|
|
|
|
(2)一个好的测试用例在于能发现至今为止尚未发现的错误。
|
|
|
(3)一个成功的测试是发现了至今为止尚未发现的错误的测试。
|
|
|
E.W.Dijkstra指出:“程序测试能证明错误的存在,但不能证明错误不存在”。
|
|
|
|
(1)软件测试证明不了程序的正确性。程序的正确性必须通过穷尽式测试来证明,即将软件所有可能的执行情况都运行一遍。但是,就算是一个中等规模的程序,其执行路径的组合也非常庞大。受时间和费用的影响,也不可能穷尽测试。因此,测试只能帮助发现尽可能多的错误,而无法严格证明程序的正确性。
|
|
|
(2)测试用例需要精心准备。软件测试中需要数据,即为测试而设计的测试用例,利用测试用例去运行程序,能帮助发现程序错误。但是,并不是所有的数据都具有相同的发现错误的能力。找到有代表性的测试用例,不仅能发现更多的错误,而且有助于控制测试的成本。
|
|
|
(3)测试应该由独立的第三方人员完成。从心理学的角度看,由软件开发人员来测试自己编写的系统并不是一个好的选择,他们的潜意识里存在证明程序正确的想法。因而在综合测试阶段,由独立的第三方来执行测试工作是一个最佳的选择。
|
|
|
(4)软件测试应该分步骤进行。通常软件是一个庞大的系统。从一开始就将整个系统作为一个单独实体来测试很难实现。软件的测试应该从较小规模的实体开始,如单个模块。然后逐渐进行大规模测试,如多个模块组装起来的子系统。
|
|
|
|
(1)所有的测试都应追溯到用户需求。软件测试的目的在于暴露软件所存在的错误和缺陷。而从用户角度看,最严重的错误就是那些导致软件无法满足需求的错误。程序中问题的根源可能在开发前期的各阶段,因而这些问题的解决、错误的纠正也必须追溯到软件开发的前期工作。
|
|
|
(2)应该尽早制订测试计划,并严格执行测试计划。把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。由于原始问题的复杂性,软件系统本身的复杂性和抽象性,软件开发各个阶段工作的多样性,以及参加开发的各种层次人员之间工作的配合关系等因素,使得软件开发的各个环节都有可能产生错误。
|
|
|
测试计划应包括以下内容:测试目的、被测试软件的功能、输入和输出、测试内容、各项测试进度安排、资源要求、测试资料、测试工具、测试用例、测试控制方式和过程、系统组装方式、跟踪规程以及评价标准等。测试计划应和软件系统的其他文档资料一样长期保存,直到该软件系统被废弃为止。对于测试计划,要明确规定,不要随意解释。测试计划制订出来以后应排除测试的随意性。
|
|
|
(3)应该由第三方进行测试工作。严格地说,一个软件项目的开发人员不应该同时是该软件的测试人员。从心理学角度讲,让一个人否定自己所做的工作将是一件非常沮丧的事情。另外,如果程序中包含了由于程序员对程序功能需求的误解而产生的错误,当程序员测试自己的程序时,往往还会带着同样的误解而使错误难以发现。因此,基于人本身的弱点,要克服这种盲目的自信心及对功能要求误解的延续性,测试工作应避免由系统开发人员或开发机构本身来承担。为了得到最好的测试效果,应由第三方人员或者说另一个独立的机构(即不是设计系统或编写程序的机构和个人)对软件进行客观、严格的独立测试。更一般地,测试工作应由软件系统设计编程部门以外的另一个独立部门来进行,但查出错误之后的排错,则仍应由程序的原编写者自己进行。
|
|
|
(4)穷举测试是不可能的。在进行软件测试时,只要对每一种可能情况都进行测试(亦即穷举测试),就可以得到完全正确的程序。但是,能不能把所有隐藏的错误全都找出来呢?或者说能不能把所有可能做的测试无遗漏地做完呢?事实上这是不可能的,也是不现实的。应该有选择地进行测试,选取有代表性的、典型的数据作为测试用例。
|
|
|
(5)充分重视测试中的群集现象。有的测试人员经过测试发现错误后,就认为错误找的差不多了,不再继续进行测试。经验表明,测试后软件中仍存在错误的概率与已经发现的错误数成正比。根据这一规律,应该对出现错误多的程序段进行重点测试,以提高测试效率。
|
|
|
(6)设计测试用例应全面。在设计测试用例时,不仅要包括合理、有效的输入条件,也要包含不合理、失效的输入条件。人们往往习惯按照合理的、正常的情况进行测试,而忽略了对异常、不合理的、意想不到的情况进行测试,而这些隐患如果没有排除,在今后的正式运行中就有可能暴露出来。
|
|
|
在测试程序时,不仅要检测程序是否做了该做的事,还要检测程序是否做了不该做的事。多余的工作会带来相应的副作用,会影响程序的效率,有时甚至会带来潜在的危害或错误。
|
|
|