1、软件测试(Software Testing)的定义

 

官方释义:

a.用来促进鉴定软件的正确性、完整性、安全性和质量的过程;

b.是一种实际输出与预期输出间的审核或者比较过程;

c.使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别;

 

经典定义:

在规定的条件下对程序进行操作,以发现错误;也是对软件质量进行评估的一个过程。

 

 2、软件质量的定义

 

软件质量:软件满足规定或潜在用户需求的能力。具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的和隐含特征相一致的程度。

 

 3、软件测试与软件质量的区别 

 

软件测试只是质量保证工作中的一个重要环节,软件质量保证与软件测试是软件质量工程的两个不同层面的工作;

 

(1)质量保证(QA):通过预防、检查与改进来保证软件质量。QA采用“全面质量管理”和“过程管理并改进”的原理来开展质量保证工作。在质量保证的工作中会掺入一些测试活动,主要关注的是软件质量的检查与测量。其主要着眼于软件开发活动中的过程、步骤及产物,并不是对软件进行剖析进而找出问题和评估。

 

(2)软件测试:测试虽然也与开发过程紧密相关,但关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。测试人员要“执行”软件,对过程中的产物——开发文档和源代码进行静态审核、运行软件、找出问题、报告质量、甚至评估,而不是为了验证软件的正确性。测试人员也必须假设软件存在问题,所以所做的操作都是为了找出更多的问题,而不仅仅验证每一件事是正确的。

 

 

(3)很少有人从非技术角度去分析这两者的区别,但我总结后认为,从公司业务出发,QA的工作是相对前置的,并可能含有某种公关性质的;而软件测试相对后置,是内部层面的工作。这也同样验证了两者的本质区别,即:“ 软件测试和软件质量保证是软件质量工程的两个不同层面的工作。软件测试只是软件质量保证工作的一个重要环节。”

 

(4)质量保证的主要工作范围为:

 

指导并监督项目按照过程实施。

 

对项目进行度量、分析,增加项目的可视性。

 

审核工作产品,评价工作产品和过程质量目标的符合度。

 

进行缺陷分析,缺陷预防活动,发现过程的缺陷,提供决策参考,促进过程改进。

 

(5)质量保证和测试的关系:

 

SQA从流程方面保证软件的质量;

 

测试从技术方面保证软件的质量。

 

 

 4、软件测试的目的

 

测试是程序的执行过程,目的在于发现错误;

 

Glenford J.Myers曾对软件测试的目的提出过以下观点:

 

(1)测试是为了发现程序中的错误而执行程序的过程。

 

(2)好的测试用例在于发现了至今未发现的错误;

 

(3)成功的测试是发现了至今为止尚未发现的错误的测试。

 

(4)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进。

 

(5)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性。

 

(6)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。

 

(7)另外,根据测试目的的不同,还有回归测试、压力测试、性能测试等,分别为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等。

 

 5、软件测试原则

 

(1)所有的软件测试都应追溯到用户需求,应当把“尽早地和不断地进行软件测试”作为测试者的座右铭。

 

(2)程序员应该避免检查自己的程序,软件测试应该由第三方来负责,尽量避免测试的随意性。

 

(3)设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。

 

(4)应该充分注意测试中的群集现象。

 

(5)对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。

 

(6)制定严格的测试计划。一定要制定测试计划,并且要有指导性。测试时间安排尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

 

(7)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。

 

 6、软件测试对象

 

程序开发过程中的各个文档、源程序

 

 7、软件测试内容

 

软件测试内容:根据测试定义,测试贯穿于整个软件生命周期中。在开发的不同阶段,需要测试不同的内容。包括文档,源代码,数据等。

 

 8、软件测试目标

 

(1)发现一些可以通过测试避免的开发风险。

 

(2) 实施测试来降低所发现的风险。

 

(3)确定测试何时可以结束。

 

(4))在开发项目的过程中将测试看作是一个标准项目。

 

 9、软件测试模型

测试是开发之后的一个阶段,测试的对象就是程序本身。

实际应用中容易导致需求阶段的错误一直到最后系统测试阶段才被发现。

 

整个软件产品的过程质量保证完全依赖于开发人员的能力和对工作的责任心,而且上一步的结果必须是充分和正确的,如果任何一个环节出了问题,则必将严重的影响整个工程的质量和预期进度。

 

-V模型:

是软件开发瀑布模型的变种,主要反映测试活动与分析和设计的关系;

 

局限性:仍把开发活动看成是从需求开始到编码结束的串行活动,只有上一阶段完成后,才可以开始下一阶段的活动,不能支持迭代,自发性以及变更调整

 

优点:强调了在整个软件项目开发中需要经历的若干个测试级别,并与每一个开发级别对应;忽略了测试的对象不应该仅仅包括程序,没有明确指出对需求、设计的测试

 

-W模型 :

在V模型的基础上,增加千开发阶段的同步测试,形成W模型;测试与开发同步进行,有利用尽早的发现问题

 

局限性:仍把开发活动看成是从需求开始到编码结束的串行活动,只有上一阶段完成后,才可以开始下一阶段的活动,不能支持迭代,自发性以及变更调整

 

优点:相对于V模型,W模型更科学。W模型是V模型的发展,强调的是测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。测试与开发是同步进行的,从而有利于尽早地发现问题。

 

缺点:W模型和V模型都把软件的开发视为需求、设计、编码等一系列串行的活动,无法支持迭代、自发性以及变更调整。

 

-H模型:

在H模型中,软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行,某个测试点准备就绪时,就可以从测试准备阶段进行到测试执行阶段;软件测试可以进行尽早的进行;软件测试可以根据被测物的不同而分层次进行

 

优点:强调测试是独立的,只要测试准备完成,就可以执行测试

 

 10、软件测试生命周期的几个阶段

 

大致上软件测试生命周期,包括了以下几个阶段:计划分析阶段、设计构建阶段、测试周期阶段、最后测试、实施阶段、测试后阶段,下面我们就来详细介绍这些阶段。

 

(1)计划分析阶段

根据平常软件使用的特点,以及出现错误的频率及严重程度来做一个衡量的标准。大致分析出问题出现时间的范围,根据软件测试用例进行采用手工干涉或自动化检测干涉的措施。

 

(2)设计构建阶段

依据已分析出的问题来进行设计方法,并建立出文档。比如说产品的规格,产品的内部文档,产品的业务需求文档,产品的说明书等,构建出具体步骤。

 

(3)测试周期阶段

依据用例的估计时间和优先权来确定每个周期所需要的测试用例,从而来估计单元测试所需要的资源。

 

(4)测试和实施阶段

就是依据测试报告和测试周期阶段所确定的用例和资源,来进行干预和实施来解决问题,保证质量的标准。

 

(5)测试后阶段

实施后开展评估会议并回顾整个过程,依据这些经验所得出的一系列数据并准备最终的相关确定的缺陷报告以及相关的度量单位,并由此来制定出相应的解决策略用来防止这些问题的重复发生。

软件测试生命周期我们归类的这五个阶段,都是相互联系,相互依辅,紧密关联的,每一步骤都缺一不可,我们大家认识了生命周期也就方便了我们的工作。