目录 |
软件测试指的是软件产品在投放市场前,对于软件产品所进行的需求的分析,设计的规格和编码等内容的复审,是确保软件产品质量的关键性步骤。
在实际的操作过程当中软件测试难度比较大,而且环节也比较复杂。同时它还具有比较可观的经济性。随着软件的大规模化会有不断增长的复杂的测试要求等待测试工程师去完成。
它是一个微妙的、高技术含量的测试工作。测试过程中出现差错就会考虑不周到产生不必要的误差。这种误差可能造成软件彻底的崩溃。常见的问题根源可以有以下两种分析。
1.完全测试是不现实的
测试软件的过程中。不可能完完全全的检测到所有的漏洞和不足,在实际工作中,往往不能做到全面而且彻底的检测。我们采取相应的手段和方法来完成尽可能多的测试数据和软件结构。
在人们考虑的所有情况下,为了保证其稳定性,就会让所有执行的代码全部进行测试,但是这种方式也存在一定的问题,比如大量的输入,大量的输出以及执行的路程比较复杂,都会引起最终的测试效果。
2.软件测试的风险性
软件测试的具体目的合理的软件测试可以节省大量的时间人员和资源,但是软件测试过程中存在着很大的困难和风险。尽人皆知,软件测试有很多种风险。可以分为环境不达标、人员技术不够和管理时间混乱。风险表现为测试环境不到位和测试时间和人员冗余太多。在控制软件测试的风险时候,开发人员采取以下方法:与用户相互协商,降低对优先级不高的特性和功能,将以后的冗余的功能去除,增加测试人员和测试工具;控制软件发布的时间,时间允许的情况下,推迟软件发布的时间,删除影响风险发生的不必要的功能和环境;增加测试资源,通过事先准备好的所有条目,设置好测试环境,按照列出的条目逐个逐个的进行检查和测试。要想真正的回避风险是不能的,必须制定一个合理的测试项目的管理方案,针对常见的风险进行分类汇总,建立防患于未然和预防为主的管理意识。
软件测试的具体目的决定着如何来组织进行测试工作。通常情况下软件测试工作的目的主要有:
一是为发现程序的错误从而进行测试,
二是测试用以证明软件的程序存在错误,并非证明该程序不存在错误;
三是好测试其功能在于可以发现以前没有发现的一些错误等等。因此,必须关注测试的具体目的,进行测试用例的选择时要遵循经济性原则。
软件测试通常可以分为黑盒式测试与白盒式测试两种类型。黑盒式测试就是将软件系统当作黑盒子而不去考虑相关程序内在的逻辑,按照需求规格的说明书要求对程序功能进行检查,看能否达到功能说明的要求。白盒式测试就是允许实施测试的人员根据程序内部的逻辑结构和相关信息进行测试用例的设计与选择,测试程序逻辑的路径。按照前后的过程分类,测试步骤可分成:单元测试,组装(集成)测试,确认测试及系统测试等。
1.客观性
对软件测试和软件中的错误必须持客观的态度,避免先入为主,尽量让第三方或者独立的部门进行测试,这样既能以揭露软件中错误的态度工作,也能不受发现的错误的影响。经济上的独立性使测试有更充分的条件按测试要求去完成。
2.专业性
软件测试是技术含量很高的工作,既要有软件相关知识,还要具备相关管理能力,这就需要有专业队伍,并经过大量的测试实践。专业化分工是提高测试水平、保证测试质量、充分发挥测试效应的必然途径。
3.权威性
由于专业优势,独立测试工作形成的测试结果更具信服力,而测试结果常常与软件的质量评价联系在一起,专业化的独立测试机构的评价更客观、公正和具有权威性。
4.资源保证
独立测试机构的主要任务是进行独立测试工作,这使得测试工作在经费、人力和时间等方面更有保证,不会因为开发的压力而减少对测试的投入,进而降低测试的有效性。可以避免开发单位侧重软件开发而对测试工作产生不利的影响。
软件测试主要工作内容是验证和确认。验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。验证确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;验证程序正确性的形式证明,即采用形式理论证明程序符号设计规约规定的过程;评市、审查、测试、检查、审计等各类活动,或对某些服务或文件等是否和规定的需求相一致进行判断和提出报告。
确认是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方式来做了这个事件:静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
软件测试,按照测试过程可分为单元测试、集成测试、确认测试及系统测试等;按照测试内容分可分为功能测试、性能测试、界面测试、链接测试等。
(1)测试计划。根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准;同时,适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
(2)测试设计。将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例。
(3)测试开发。建立可重复使用的自动测试过程。
(4)测试执行。执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试人员应本着科学负责的态度,一步一个脚印地进行测试。
(5)测试评估。结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。
软件的测试过程根据阶段的不同可以分为以下几种测试阶段:
(1)单元测试:这个测试过程是测试的最初阶段,测试的主要对象就是单元。通过单元的测试可以将每个模块的的性能摸查清楚。在实际的操作过程中为了提高测试的有效性,一般采用多种单元测试的方式,比如最常使用的就是选取白盒的测试方法。
(2)集成测试:也称组装测试。这一步测试是在单元测试过程之后来进行,属于测试的关键环节。各个测试结束的模块进行综合分析,组装成比较大的模块进行系统集成分析测试。各个系统之间的接口和连接代码可以被检测和分析,最常见的方式就是黑盒测试。
(3)确认测试:这个测试阶段是软件测试的比较核心的一个模块,这一测试过程是发生在集成测试之后的测试过程,这一测试过程被用来仿真软件的功能和参数以及某些特点能不能实现使用者的特殊要求通过确认测试可以确定用户的工作开展与否。
(4)系统测试:也称为产品测试。确认测试在满足用户的要求之后,系统测试要进行检测实际环境和软件能够很好的结合协调工作。这种测试过程,有必要进行相应的硬件平台搭建和模拟仿真实验。与此同时,相应的软件系统和客户应该参与进来进行测试和评估。综合可以说,如果软件测试通过以上几种测试最终达到了系统测试,那么这个产品基本就符合要求了。
(5)验收测试:测试过程的最后一个阶段。这一阶段主要检测软件安装之后,用户能否使用该软件以及软件的所有功能。软件和硬件能够使用户放心使用和持续运行是检验验收效果的关键。软件设计者也应该参与这一步的测试和分析。