软件测试基本介绍
一、什么是软件测试
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
二、测试原则
对计算机软件进行测试前,首先需遵循软件测试原则,即不完全原则的遵守。不完全原则即为若测试不完全、测试过程中涉及免疫性原则的部分较多,可对软件测试起到一定帮助。因软件测试因此类因素具有一定程度的免疫性,测试人员能够完成的测试内容与其免疫性成正比,若想使软件测试更为流畅、测试效果更为有效,首先需遵循此类原则,将此类原则贯穿整个开发流程,不断进行测试,而并非一次性全程测试。
三、测试方法
1、静态测试方法
静态测试方式指软件代码的静态分析测验,此类过程中应用数据较少,主要过程为通过软件的静态性测试(即人工推断或计算机辅助测试)测试程序中运算方式、算法的正确性,进而完成测试过程,此类测试的优点在于能够消耗较短时间、较少资源完成对软件、软件代码的测试,能够较为明显地发现此类代码中出现的错误。静态测试方法适用范围较大,尤其适用于较大型的软件测试。
2、动态测试
计算机动态测试的主要目的为检测软件运行中出现的问题,较静态测试方式相比,其被称为动态的原因即为其测试方式主要依赖程序的运用,主要为检测软件中动态行为是否缺失、软件运行效果是否良好。其最为明显的特征即为进行动态测试时软件为运转状态,只有如此才能于使用过程中发现软件缺陷,进而对此类缺陷进行修复。动态测试过程中可包括两类因素,即被测试软件与测试中所需数据,两类因素决定动态测试正确展开、有效展开。
3、黑盒测试
黑盒测试,顾名思义即为将软件测试环境模拟为不可见的“黑盒”。通过数据输入观察数据输出,检查软件内部功能是否正常。测试展开时,数据输入软件中,等待数据输出。数据输出时若与预计数据一致,则证明该软件通过测试,若数据与预计数据有出入,即便出入较小亦证明软件程序内部出现问题,需尽快解决。
4、白盒测试
白盒测试相对于黑盒测试而言具有一定透明性,原理为根据软件内部应用、源代码等对产品内部工作过程进行调试。测试过程中常将其与软件内部结构协同展开分析,最大优点即为其能够有效解决软件内部应用程序出现的问题,测试过程中常将其与黑盒测试方式结合,当测试软件功能较多时,白盒测试法亦可对此类情况展开有效调试。其中,判定测试作为白盒测试法中最为主要的测试程序结构之一,此类程序结构作为对程序逻辑结构的整体实现,对于程序测试而言具有较为重要的作用。此类测试方式针对程序中各类型的代码进行覆盖式检测,覆盖范围较广,适用于多类型程序。实际检测中,白盒测试法常与黑盒检测法并用,以动态检测方式中测试出的未知错误为例,首先使用黑盒检测法,若程序输入数据与输出数据相同,则证明内部数据未出现问题,应从代码方面进行分析,若出现问题则使用白盒测试法,针对软件内部结构进行分析,直至检测出问题所在,及时加以修改。
四、测试策略
1、单元测试
单元测试即为将整个软件分解为各个单元,随后对单元进行测试。此类测试策略的优点在于所需分析数据较少,且针对性较强,程序开发者于开发过程中可通过操作经验明确出现问题的大致区域,随后针对此类问题对相关单元展开分析,进行问题排查。但需注意的是,某些程序中无具体单元驱动程序,即单个单元无法有效驱动,易出现问题,若针对此类软件展开测试,需重点注意此类分解单元。
2、集成测试
集成测试与单元测试相反,原理为将部分需测试部分作为整体进行集成,随后针对此类集成部分进行测试。测试要求为此类被测试集成题应具有一定的结构,且属于非渐增方式集成。对于较大软件而言,集成测试方式较单元测试方式而言较为繁琐,多数大型软件的测试皆采取渐增方式进行测试。渐增测试方式为集成测试方式的衍生,其能够按照不同次序对软件进行测试,日常测试中,常将两类方式进行集成测试,随后按照次序展开选择。
五、软件测试模型
1、瀑布模型(传统观点)
需求分析-概要设计-详细设计-编码-测试-维护
2、快速原型模型
快速原型模型的开发过程如下:
- (1)确定用户的基本需求
- 由用户提出对新系统的基本要求,如功能、界面的基本形式、所需要的数据、应用范围、运行环境等,开发者根据这些信息估算开发该系统所需的费用,并建立简明的系统模型。
- (2)构造初始原型
- 系统开发人员在明确系统基本要求和功能的基础上,依据计算机模型,以尽可能快的速度和尽可能多的开发工具来建造一个结构仿真模型,即快速原型构架。之所以称为原型构架,是因为这样的模型是系统总体结构、子系统以上部分的高层模型。由于要求快速,这一步骤要尽可能使用一些软件工具和原型制造工具,以辅助进行系统开发。
- (3)运行、评价、修改原型
- 快速原型框架建造成后,就要交给用户立即投入试运行,各类人员对其进行试用、检查分析效果。由于构造原型中强调的是快速,省略了许多细节,一定存在许多不合理的部分。所以,在试用中要充分进行开发人员和用户之间的沟通,尤其是对用户提出的不满意的地方进行认真细致的反复迭代,并与用户交流、修改、完善,直到用户满意为止。
- (3)形成最终的软件系统
- 如果用户和开发者对原型比较满意,则将其作为正式原型。然后可以采用其他软件过程开发方法,如瀑布模型进行后续开发; (该模型要结合其它模型进行后续开发)或者经过双方继续进行细致的工作,在正式原型的基础上对细节问题逐个补充、完善、求精、设计、编码,最后形成一个完整的软件系统。
3、螺旋模型
- 一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式。
- 螺旋模型就是渐进式开发模型的代表之一。
- 螺旋模型尤其适用于那些规模庞大,复杂度高,风险大的项目。
- 这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。
- 优点
- 强调严格的全过程风险管理;
- 强调各开发阶段的质量;
- 提供机会检讨项目是否有价值继续下去。
- 缺点
- 引入非常严格的风险识别,风险分析,和风险控制,这对风险管理的技能水平提出了很高的要求,选举要人员,资金,时间的投入。
4、V模型
可以说是瀑布模型的升级版
- 优点
- 它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系。
- 缺点
- 仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段。
- 测试的对象仅仅是程序,忽略了测试对需求分析,系统设计的验证,一直到最后的验收测试才被发现。
5、W模型
- 优点
- 测试伴随着整个软件的开发周期。
- 测试的对象不仅仅是程序,还有需求、设计和功能同样要测试。
缺点(局限性)
- 在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。
6、H模型
特点
- 软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。H模型指出软件测试要尽早准备, 尽早执行。