软件测试基础知识是行业入门的基石。在面试过程中,面试官会经常考察我们的理论知识是否熟练掌握;在工作中,也需要我们采用一定的测试策略来进行测试工作。熟练使用这些策略,可以帮助我们更高效的进行工作,有助于我们发现更多的bug,提高我们的个人价值。
本篇从软件测试的基础理论知识开始,带领大家开始软件测试的学习之旅,并通过一些示例和图形来了解软件测试的基本流程。
在学完本篇后将会了解到软件测试的基础知识、测试的分类、测试的阶段、软件的架构以及常用的测试方法等,为后面的学习打好基础,也为将来的面试和工作做好理论知识储备。
1什么是软件测试
目前,业界对软件测试看法不尽相同,甚至对软件测试的定义也不完全一致。其中比较公认的以下三个
广义的软件测试定义是:贯穿在整个开发各阶段的复查、评估与检验活动,这远远超出了程序范围,可以统称为确认、验证与测试活动(V,V&T一一Validation,Verification and Testing)。
而狭义的测试定义为:软件测试是为了发现错误而执行程序的过程。软件测试是根据软件开发的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现误的过程。
EEE在1983年定义是:使用人工或自动手段来进行或测定某个系统的过程,其目的在于检验它足规定的需求或是弄清预期结果与实际结果之间的差别。“软件测试以检验是否满足需求为目标的”
我们不必追究到底哪个定义更正确、更科学,但我们至少可以得出以下结论:
软件测试要发现软件的错误;
软件测试最终要以软件满足用户需求为目标。
软件测试是软件开发的一部分。在各种软件开发生命周期中,都定义了软件测试阶段。在瀑布模型软件测试是在编码结束之后的重要阶段;在螺旋模型、快速原型等其他模型中,软件测试仍具有不可的位置。从广义来讲,软件测试人员也属于软件开发人员,只是我们会在实际工作中为了把测试人员计编码人员相区分,而把测试人员在称谓上从开发人员中分离开来,本书亦是如此。
1.1.1
软件测试的背景
随着计算机技术的迅速发展,软件系统的规模与复杂性与日俱增,软件的成本、软件中存在的缺陷故障造成的各类损失也大大增加,甚至带来灾难性的后果。软件质量问题已成为所有使用软件和开发软的人们的关注的焦点。
由于软件是人脑的高度智力化的体现,不同于其他科技和生产领域,因此软件与生俱来就是存在缺和故障的。如何防止和减少这些存在的缺陷和故障,答案是进行软件测试。测试是最有效的排除和防止件缺陷和故障的手段,并由此促使了软件测试理论与技术实践的快速发展,新的测试理论、测试方法、试工具不断涌现。与此同时,软件测试技术也同步完善和发展起来。
今天,在软件比较发达的国家,软件测试已经成为一个独立的产业,软件公司纷纷建立独立的测试伍研究测试技术并开展条件下运行测试工作。
中国的软件测试起步较晚,但随着我国软件产业的蓬勃发展以及人们对软件质量的重视,软件测试在成为一个新兴的产业。
1.1.2 软件测试的目的
该到软件测试的目的,很多人会认为是为了证明软件是没有问题的。最初的软件测试的确是为了证明程序的正确性,但这只能在有限情况下得以证明,对于我们今天的软件规模和开发环境来讲,证明程序的正确性实际上是不可能的。所以,测试人员不可能在测试 告中描述:“经过我的测试,该程序是没有问题的!其他人员也不要希望测试人员来担保程序或软件产品是完全正确的。
款件测试最直接的目的是一一发现软件中的缺陷,包括需求、设计方面的缺陷和程序中包含的BUG(缺),这缺陷是一种泛称,它可以指软件功能的错误,也可以指性能低下,易用性差以及其他软件工作产品中的缺陷等等,
测试人员总是先假设程序中存在缺陷,再通过执行测试活动来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而会下意识地选用一些不易暴露错误的测试示例一一这样的测试是虚假的,没有意义的。
软件测试最终的目的是:检查软件是否满足用户的需求,其中包括用户的隐含需求和潜在需求。只有满足用户需求的软件才能成为“好”的软件产品,才能得到用户一致的满意和认可。
Glen Myers曾提出关于测试目标的规则:
测试是一个为了寻找错误而运行程序的过程。
。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例。
●一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。
以上三条规则表明了两种涵义:其一是软件测试的直接目的,即发现软件中的错误:其二为测试工作发现软件中的错误和检查软件是否满足用户的需求这两点,都是我们做软件测试工作的目的,但是否的职责就是一定要发现软件中的错误。
测试工作要讲究工作效率,那么就需要我们尽早地和不断地进行测试。愈早发现缺陷,愈能降低软件就局限如此呢?当然不是。
质量风险,减少修复缺陷的花费;测试工作愈充分,则软件中的“虫子”会愈少,软件质量会愈高,软件维护费用也会愈少。所以,测试一定要尽早和充分。
测试工作也要讲究效果,那么就需要我们尽量要把较为严重的缺陷更早地提出,包括严重影响软件质量、改动工作量大或编码实现技术风险大的缺陷。这样既能降低软件质量风险,又能保证软件开发进度。
测试工作还不止如此,测试人员不仅仅是要找出软件中的缺陷,更重要的是要能对缺陷进行分析,尽量找出缺陷产生原因和引入阶段,并对软件产品质量进行评价。这一点具有非常重要的意义,也是容易被人忽略的软件测试目的:测试要帮助发现当前工作产品中的缺陷原因和引入阶段,并对软件产品质量进行定量评价,以便进行改进。
通过分析缺陷的原因,开发人员可以尽快对缺陷进行改正。同时,这种分析也能帮助我们推理出与所分析的缺陷有关联的潜在错误(表现为我们常说的测试矩阵),从而使测试的针对性更加有效。
通过分析缺陷引入的阶段,我们可以判断从缺陷的产生到缺陷的发现,跨越了多少个发展阶段。一个缺陷能够超越开发阶段而不被发现,就指明了该开发阶段的确认或验证工作(包括评审、同行评审或产品的检查)本身就有问题,从而也不难有针对性地制定出具体的加强措施与改进办法,这也是软件过程改进的一项重要内容。如果能做到在同一开发阶段发现并及时改正缺陷,那么我们就可以预期这是一个高质量的软件产品和一个低成本、高效率的软件开发过程。
有些项目经理在做项目定义和策划时,希望以尽快的速度把测试之前的所有开发工作完成,并早日开始测试,这样测试时间会很长,也就能达到快速和高质量的目的。可实际的效果呢?当然是“欲速不达”
道理很简单:开发时间越仓促,则开发阶段引入的缺陷就愈多,等测试阶段发现这些缺陷时,唯一的结果就是更大量的用于修复缺陷和工作产品变更的项目花费!
因此,正确分析与利用测试的结果,可以非常有效地帮助软件过程进行改进和软件质量的提高。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!